コンテンツへスキップ

【Ruby基礎】AtCoder Beginner Contest 077 A – Rotation

  • by

INDEX

■はじめに

Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。
基本的にはAtCoderというプログラミングコンテスト(競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)

(5/23時点の方針)
メソッドの切り分け方や値の受け渡しを練習するために、コード長の短さについては気にせずに書くことにする。

(2022/10/17時点の方針)
しばらくはB問題を小さい番号の方からやっていく。たまにA問題もやるかも。

■問題

●出典

AtCoder Beginner Contest 077のA問題
https://atcoder.jp/contests/abc077/tasks/abc077_a

●問題文

縦 2 マス、横 3 マスのマス目が与えられます。上から i 行目、左から j 行目のマスの色は、Cij で表されます。
このマス目を180度回転させたとき、元のマス目と一致するなら YES を、そうでないなら NO を出力するプログラムを作成してください。

●制約

  • Cij (1≤i≤2,1≤j≤3) は英小文字である。

●入力

入力は以下の形式で標準入力から与えられる。

C11 C12 C13
C21 C22 C23

●出力

マス目を180度回転させたとき、元のマス目と一致するなら YES を、そうでないなら NO を出力せよ。

■回答

●愚直に書く

2行目をreverse して1行目と一致すればYESってことかな。

a = gets.chomp
b = gets.chomp
puts a.reverse == b ? 'YES' : 'NO'

通った!

●メソッド化して書く

メソッドを作る練習のために、あえてそういう書き方をする。

久しぶりに書くか。
2行の標準入力取得をメソッド内で書くのはどうやるんだっけ、、、

def main
  a, b = read_lines
  puts rorate?(a, b)
end

def rorate?(a, b)
  a.reverse == b ? 'YES' : 'NO'
end

def read_lines
  2.times.map do |line|
    line = gets.chomp
  end
end

main

通った!

●リファクタリング/別アプローチ

リファクタリングは今日は無し。

●他の方の回答例

基本的に皆さん同じアプローチのようだった。

●出てきたメソッド等

公式リファレンスを見る訓練。

■振り返りなど

メソッド化をサボっていたのでかなり忘れていたが、久しぶりに書けてよかった。