この記事は、Aizu Online Judgeに取り組む中で勉強したこと等を忘れないようにするため、備忘録として作成するもの。
gets(文字列の入力を受け付ける)
gets = get string
name = gets
# Taroと入力し、エンター
# =>"Taro\n"
name = gets.chomp
# Taroと入力し、エンター
# =>"Taro"
number = gets.to_i
# 1と入力
# =>1
複数のデータセット入力
gets.split(" ")
# 1 2 と入力
# => ["1", "2"]
gets.split(" ").map(&:to_i)
# 1 2 と入力
# => [1, 2]
x,y = [1,2]
# 変数x、yに配列の要素を代入
# x =>1
# y =>2
x,y = gets.split(" ").map(&:to_i)
# 1 2 と入力
# x => 1
# y => 2
chomp(改行文字の削除)
gets
# aと入力
=> "a\n"
gets.chomp
# aと入力
=> "a"
hash(ハッシュ)
to_a
h = {1 => 2}
h.to_a #=> [[1,2]]
join (配列の連結)
配列を連結して1つの文字列
として返す
[1,2,3].join
# "abc"
[1,2,3].join(" ")
# "a b c"
[1,2,3].join("+")
# "1+2+3"
繰り返し
times
1000.times do
puts "Hello World"
end
while
while 繰り返し続ける条件 do
繰り返す処理
end
# 例
i = 1
while i <= 10
puts i
i = i +1
end
文字列の繰り返し
"abc" * 2 #=>"abcabc"
範囲(Range)(../...)
(1..5).to_a #=>[1,2,3,4,5]
(1...5).to_a #=>[1,2,3,4]
比較演算子
a != b #aとbが等しくない
sendメソッド
レシーバに対して指定した文字列(またはシンボル)のメソッドを実行する。
1.send("+",2) #=>3
"a".send("upcase") #=> "A"
配列
Array.new
arr = Array.new(3)
# => [nil,nil.nil]
arr = Array.new(3,0)
# => [0,0,0]
a = Array.new(3){"abc".upcase}
=> ["ABC", "ABC", "ABC"]
配列の合計
Enumerableモジュールのinjectメソッドを使う。A
組み合わせ
[1,2,3].combination(2)
# =>#<Enumerator: [1, 2, 3]:combination(2)>
[1,2,3].combination(2).to_a
# =>[[1, 2], [1, 3], [2, 3]]
each_with_index
["a","b","c"].each_with_index do |str,i|
puts "要素:#{str},インデックス番号:#{i}"
end
# =>要素:a,インデックス番号:0
# =>要素:b,インデックス番号:1
# =>要素:c,インデックス番号:2
uniq(重複の排除)
[1,2,2,3,4,4].uniq
=> [1, 2, 3, 4]
並べ替え
reverse
逆順に並べ替える。(*降順ではない!)
[1,5,3].reverse
=> [3, 5, 1]
降順にする場合は、sortで昇順にしたのち、reverse
[1,5,3,4,2].sort.reverse
=> [5, 4, 3, 2, 1]
find_all
配列の各要素にブロックを実行し、結果が真になる要素を返す。
[0,1,1,0].find_all{|n|n == 1}
# => [1, 1]
all?
すべての要素が真である場合に true を返す。偽である要素があれば、ただちに false を返す。
ブロックを伴う場合は、各要素に対してブロックを評価し、すべての結果が真である場合に true を返す。ブロックが偽を返した時点で、ただちに false を返す。
[2,4,6,8].all?(&:even?)
=> true
[1,2,4,6].all?(&:even?)
=> false
正規表現
gsub
マッチする部分全てを置き換える。
"123456".gsub(/2345/,"0")
=> "106"