Ruby AtCoder(A,B問題用メモ)
普段Rubyを全然書かないので、少しAtCoderから離れると構文とか入出力とか全部忘れてしまう。 忘れたときに見返す為のメモとしてここに記録しておく。
文字列内の変数展開
ダブルクォート内で #{} 。シングルクォートだと展開できない。
name = "Ruby"
puts "Hello, #{name}!" # => "Hello, Ruby!"文字列はchompする
しないと改行文字が含まれる。
s = gets.chomp一時変数の省略にはthenを使う
puts gets.chomp.then{ |s| s == 'no_no' || s > '999' ? 'No' : 'Yes' }0パディングはrjust
num = 42
puts num.to_s.rjust(5, '0') # => "00042"substringは[x..y]
i = gets.chomp[3..].to_i連続した範囲(Range)
(x..y) もしくは (x...y) 。ドット3つは終端を含まない(半開範囲)
puts (1..349).reject{ |x| x == 316 }配列をQueue/Stackとして扱う
push: 末尾に追加shift: 先頭から削除pop: 末尾から削除
queue = [1, 2, 3, 4, 5]
puts queue.shift # => 1
queue.push(6)
puts queue.inspect # => [2, 3, 4, 6]stack = [1, 2, 3, 4]
element = stack.pop
puts element # => 4
puts stack.inspect # => [1, 2, 3]nilエラーを回避しながらメソッドを呼び出す
&. (セーブナビゲーション演算子) を使う
m = h.find_index{ |x| x > a }
puts m&.+(2) || -1スプラット演算子
a, *h = gets.split.map(&:to_i)- a, *h = … の形式で、多重代入を利用して最初の要素を a に、残りを配列 h に代入します。
- *h の * はスプラット演算子で、残りの全ての要素を配列として受け取ります。