AtCoder Beginner ContestのA問題を1分で解くためにRubyを書いているのですが、そのときのTipsが溜まってきたので書いておきます。
入力編
まず入力を受け取るところです。ここを高速で書けるとだいぶ強いです。
a,b,c=gets.split.map &:to_i
1行で与えられた数値A B C
を受け取ります。
単に文字列を受け取りたいなら
s=gets
で構いません。
また、単にgetsとして1行読み込むと、その行を$_
という変数で参照できるようになります。こうすると変数に代入する手間が省けます。
gets; p $_.count(1)
出力編
A問題で多いのはYes/Noを出力させる問題、数値を答えさせる問題です。
Yes/Noを答えるときは三項演算子を使うとカンタンです。ただし、他の言語と異なり、?
と:
の前後にスペースを入れる必要があります(入れなくていいケースもありますが、考える時間がムダなのでとりあえず入れるといいです)。
puts true ? "Yes" : "No" puts true ?"Yes":"No"
Rubyでは文字列リテラルのほかにシンボルというものがあり、こちらでも同様に出力できます。ここでは:
の前のスペースは不要です
puts true ? :Yes: :No puts true ?:Yes: :No
数値の出力にはp
というメソッドを使えます。puts
より文字数が削減できます。ただしp
で文字列を表示しようとすると、クォーテーションごと表示されてしまうので使えません。
p 42
便利なメソッド・Tips
"文字列".split
文字列を空白で分割する[配列].map
マップ関数。非常によく使う"文字列"[/正規表現/]
文字列中で正規表現にマッチする部分を返す"文字列" =~ /正規表現/
文字列が正規表現にマッチするか判定する"文字列1".count("文字列2")
文字列1のなかで文字列2が出てくる数をカウントする[Enumerable].min
数値の配列などで最小値を返す
このあたりはよく使います。