AtCoder の問題文をコピー & ペーストすると、下のようになる。
整数 a , b , c , d が与えられます。 a ≤ x ≤ b , c ≤ y ≤ d を満たす整数 x , y について、 x × y の最大値はいくつですか。
改行をいちいち削除するのが面倒なので、スクリプトを書いてみることにした。
delete_n.rb
#!/usr/bin/env ruby puts "=========================" p ARGV
まずは、入力がどうなっているのかを確認。
$ ./delete_n.rb '整数 > a > , > b > , > c > , > d > が与えられます。 > (中略) > y > について、 > x > × > y > の最大値はいくつですか。' ========================= ["整数 \na\n,\nb\n,\nc\n,\nd\n が与えられます。 \na\n≤\nx\n≤\nb\n,\nc\n≤\ny\n≤\nd\n を満たす整数 \nx\n,\ny\n について、\nx\n×\ny\n の最大値はいくつですか。"]
改行文字 \n
が入っていることがわかったので、gsub
で置き換えていく。
#!/usr/bin/env ruby # frozen_string_literal: true def delete_n(text) puts "=========================" puts text.join.gsub("\n", " ") end delete_n(ARGV)
$ ./delete_n.rb '整数 > a > , > b > (中略) > の最大値はいくつですか。' ========================= 整数 a , b , c , d が与えられます。 a ≤ x ≤ b , c ≤ y ≤ d を満たす整数 x , y について、 x × y の最大値はいくつですか。
スペースが2個連続しているところと、コンマ,
の前にスペースが入っているところが気になる。
def delete_n(text) puts "=========================" puts text.join.gsub("\n", " ").gsub(" ", " ").gsub(" ,", ",") end
単純にこうやれば消すことはできるけど、DRY じゃない…。
gsub
は正規表現が使えるから、なんかいい方法ありそう。
def delete_n(text) p text puts "=========================" puts text.join.gsub(/ ?\n ?/, " ").gsub(" ,", ",") end
?
は、直前の文字が 1 文字またはなしを表す。/ ?\n ?/
で、\n
と前後の 1 文字(またはなし)のスペースを、1 文字のスペース " "
に置き換えられた。コンマはこれ以上思いつかなかった。