■はじめに
Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。 基本的にはAtCoderというプログラミングコンテスト(競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)
■問題
●出典
AtCoder Beginner Contest 012のA問題 https://atcoder.jp/contests/abc012/tasks/abc012_1
●問題文
A, B の 2 つの整数が与えられます。 A と B の数値を入れ替えた後、A, B を出力しなさい。
●入力
入力は以下の形式で標準入力から与えられる。
A B
1 行目には、2 つの整数 A,B(1≦A,B≦100) が与えられる。
●出力
数字の入れ替えた後の A と B を、スペース区切りで 1 行で出力せよ。出力の末尾には改行をいれること。
■回答
●愚直に書く
標準入力で受け取ったaとbを入れ替えてスペース付きで出せばそれで良いのかな…?
a, b = gets.split.map(&:to_i)
print b, ' ', a
通った!
●リファクタリング/別アプローチ
上記のがコード長とかは短そうだけど、標準入力を配列で受け取って逆順に表示、みたいな方法をやってみたいのでトライする。 配列を逆順にするメソッドはあるだろうと思ったらあった。
array = gets.split(' ')
puts array.reverse.join(' ')
通った!しかも、実行時間は初めに書いたものより若干だけど早くなった。配列にして入れ替えてまた文字列にしてるから時間増えると思ったけど。
●他の方の回答例
上記の2解法が結構多かった印象。
配列の要素をずらすrotate
メソッドを使っている人もいた、なるほど〜。
●出てきたメソッド等
公式リファレンスを見る訓練。
-
reverse https://docs.ruby-lang.org/ja/latest/method/Array/i/reverse.html
-
join https://docs.ruby-lang.org/ja/latest/method/Array/i/join.html joinとsplit、いつもどっちがどっちかわからなくなる。
-
rotate https://docs.ruby-lang.org/ja/latest/method/Array/i/rotate.html
■振り返りなど
別解を思いついて書くことができて良かった。