過去問http://atcoder-scores.herokuapp.com/を解きます。
ABC060A_Shiritori
問題
文字列 A, B, Cが与えられます。これがしりとりになっているか判定してください。
つまり、
- Aの最後の文字とBの最初の文字が同じ
- Bの最後の文字とCの最初の文字が同じ
この2つが正しいか判定してください。
両方とも正しいならば YES
、そうでないならば NO
を出力してください。
自分の回答
def shiritori(a, b, c)
puts a[a.length-1] == b[0] && b[b.length-1] == c[0] ? "YES" : "NO"
end
a, b, c= gets.chomp.split(" ")
shiritori(a, b, c)
aの最後の文字とbの最初の文字が等しい、かつ、bの最後の文字とcの最初の文字が等しい時は”YES”を出力します。最後のもじはlengthで文字列の大きさから-1をすれば、求めることができます。
ABC061A_Between Two Integers
問題
3つの整数 A,B,Cが与えられます。
整数 CがA以上 かつ B以下であるかを判定してください。
自分の回答
def between(a, b, c)
puts a <= c && c <= b ? "Yes" : "No"
end
a, b, c= gets.chomp.split(" ").map(&:to_i)
between(a, b, c)
そのままですね。rubyだと、a <= c <= b と一つの式で書けないところが不便ですね。
ABC062A_Grouping
問題
すぬけ君は、1から12までの整数を下図のようにグループ分けしました。 整数x, y(1≤x<y≤12) が与えられるので、x,yが同一のグループに属しているか判定してください。
自分の回答
def grouping(a, b)
group_a = [1, 3, 5, 7, 8, 10, 12]
group_b = [4, 6, 9, 11]
if (group_a.include?(a) && group_a.include?(b)) || (group_b.include?(a) && group_b.include?(b)) || (a == b)
puts "Yes"
else
puts "No"
end
end
a, b= gets.chomp.split(" ").map(&:to_i)
grouping(a, b)
配列を用意してあげて、include?で同じグループに属しているかを確かめれば良いですね。
ワンライナーで書けばもう少し短くなりますが、あんまり横長になると見づらいのでこのままにしました。
ABC063A_Restricted
問題
二つの整数A,Bが入力されます。A+Bの値を出力してください。
ただし、A+B が10以上の場合は、代わりに error
と出力してください。
自分の回答
def restricted(a, b)
puts a + b < 10 ? a + b : "error"
end
a, b= gets.chomp.split(" ").map(&:to_i)
restricted(a, b)
与えられた二つの値を足して、10未満、その数字を、10以上なら”error”を出力しましょう。
ABC064A_RGB Cards
問題
AtCoDeer君は、赤、緑、青色のカードを持っています。
それぞれのカードには 1以上 9以下の整数が書かれており、赤色のカードには r、緑色のカードにg、青色のカードにはbが書かれています。
3つのカードを左から順に赤、緑、青色の順に並べ、左から整数を読んだときにこれが4の倍数であるか判定しなさい。
自分の回答
def rgb(r, g, b)
number = r * 100 + g * 10 + b
puts number % 4 == 0 ? "YES" : "NO"
end
r, g, b = gets.chomp.split(" ").map(&:to_i)
rgb(r, g, b)
rが100の位、gが10の位、bが一の位となるので、r * 100 + g * 10 + bとして、三桁の数字を求めましょう。そしてその三桁の数字が4の倍数かどうかを確かめます。4の倍数か確かめるには、4で割って余りが0であれば、その数字は4の倍数になります。