rubyでpaizaのスキルチェックのDランクをクリアするために最低限知っておくべきメソッドをまとめました。
こんな人が対象
- Rubyで簡単なif文、while文が書ける
- とりあえずprogateはやったよ
- 手軽にコードを書く練習がしたい
- paizaスキルチェックやってみたけど入力とか出力とかよく分からない
プログラムの手順
おおまかに以下の手順で説明します。Dランク問題であれば、Rubyの場合は一行で全てのコードを書けることもしばしばですが、分解して説明します。
- 入力を受け取る
- 処理を行う
- コンソールに出力
1. 入力を受け取る
getsメソッド
getsメソッドは一行の入力を受け取ります。
apple
banana
という入力の場合、一度のgetsメソッドで最初の行を受け取ることが出来ます。
input = gets
puts input #=> apple
2回目のgetsで2行目の入力を受け取ることができます。
input = gets
input2 = gets
puts input #=> apple
puts input2 #=> banana
ただしにgetsメソッドを用いるとき、以下の二つの注意点を頭に入れておく必要があります。
- 改行を含めて受け取る。
- 受け取るときのデータ型は全て文字列である。
chompメソッド
以下の入力があった時appleとbananaを一列で出力したいと思います。
apple
banana
input = gets
input2 = gets
puts input + input2
#=> apple
#=> banana
二行に分かれて出力されてしまいます。
これは、getsメソッドが1行の入力を受け取るときに、改行("\n")を含めて受け取ってしまっているからです。
そこで、chompメソッドの出番です。
chompメソッドは文字列の末尾の改行文字を取り除きます。
input = gets.chomp
input2 = gets.chomp
puts input + input2
#=> applebanana
appleとbananaが続けて出力されるようになります。
事情がない限りは、getsメソッドとchompメソッドは合わせて用いるようにするとよいでしょう。
to_iメソッド
1行目の入力「10」と2行目の入力「20」を足し合わせて30を出力したいとしましょう。
10
20
input = gets.chomp
input2 = gets.chomp
puts input + input2 #=> 1020
30ではなく1020が出力されてしまいます…。
そうです。おなじみのto_iメソッドの出番です。
input = gets.chomp.to_i
input2 = gets.chomp.to_i
puts input + input2 #=> 30
getsメソッドでは「文字列」を受け取っているため、変数に格納するときにto_iメソッドで「数」に変える必要があります。注意しましょう。
2. 処理を行う
splitメソッド
getsメソッドを使って、1行ごとの入力を受け取る方法が分かりました。ではこんな場合はどうでしょうか。
先ほどと同じく、入力「10」と入力「20」を足し合わせて30を出力したいとしましょう。
10 20
ここで必要となるのがsplitメソッドです。
splitメソッドは文字列を分割し、配列化してくれるメソッドです。
input = gets.chomp
inputs = input.split(" ")
print inputs #=> ["10", "20"]
上の場合ではsplitメソッドに(" ")という引数を与えることで、スペース(" ")毎に分割を行われ、それが変数inputsに配列として格納されます。
splitメソッドの引数を("")にすると、1文字単位で区切ることが出来ます。
apple
input = gets.chomp
inputs = input.split("")
print inputs #=> ["a", "p", "p", "l", "e"]
なお、chompメソッドを使わなければ改行も要素の一部として格納されます。
input = gets
inputs = input.split("")
print inputs #=> ["a", "p", "p", "l", "e", "\n"]
3. コンソールに出力
あとはputsメソッド、printメソッドで出力を行えば完成です。
コードを提出する前に、テストケースを変えて提出前動作確認を行い、想定通りの出力になることを確認しましょう。
まとめ
getsメソッド: 入力を一行ごとに「文字列」で受け取る。
chompメソッド: 文字列の改行を取り除く。
to_iメソッド: 「文字列」を「数」に変換する。
splitメソッド: 文字列を分割し、配列に格納する。
これらのメソッドを使えばCランク、Bランクまでは解けるようになると思います。