■はじめに
Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。 基本的にはAtCoderというプログラミングコンテスト(競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)
■問題
●出典
AtCoder Beginner Contest 020のB問題 https://atcoder.jp/contests/abc020/tasks/abc020_b
●問題文
2 つの正整数 A, B が与えられます。 A の十進表記の右に B の十進表記(先頭に 0 を付けない)を連結して得られる整数を 2 倍したものを出力してください。
●入力
入力は以下の形式で標準入力から与えられる。
A B
1 行目に、 2 個の整数 A, B (1 ≦ A, B ≦ 999) がスペース区切りで与えられる。
●出力
標準出力に指示された値を出力せよ。 末尾の改行を忘れないこと。
■回答
●愚直に書く
配列で取ってきて要素を繋げて2倍するという感じで良さそうかな?
n = gets.split.map(&:to_i)
puts n.join*2
上記だとダメだった。配列内が文字列として認識されていて*2
をすると要素が2個横並びになってしまった。
to_i
すれば行けそう。
n = gets.split.map(&:to_i)
puts n.join.to_i*2
通った!
●リファクタリング/別アプローチ
思いつかないのでスキップ。
●他の方の回答例
下記回答が自分の回答をリファクタリングしたような内容だった。
p gets.split.join.to_i*2
後半でto_i
するので、僕の1行目の.map(&:to_i)
は不要だった、ということか。なるほど。
●出てきたメソッド等
公式リファレンスを見る訓練。
-
String#split https://docs.ruby-lang.org/ja/latest/method/String/i/split.html
-
Array#join https://docs.ruby-lang.org/ja/latest/method/Array/i/join.html
■別解
最後に思いついた別解を1つ。
split
の直後にjoin
というのが、別に全然ダメじゃないんだけどなんか気になってそうじゃない方法を考えていたところ、gsub
を使って半角スペースを取ってしまえば良いことに気づいた。
n = gets.gsub(/ /, '')
puts n.to_i*2
■振り返りなど
別解を模索して1つ書くことができて良かった。