【Ruby】Paiza Dランク必要な知識
はじめに
Rubyの復習をしようと思って、Paizaを初めてみたもののDランクに全く歯が立たない。値の取り方も分からなくて苦戦していました。自分はこんなにレベル低かったんだなと痛感、、、
それで1日ちょっと改めて勉強してみると、低レートのCランクまで解けるようになっていました。
そのまとめ的なものを残しておきます。
値取得・出力サンプルコード解説
まずは値取得・出力サンプルコードを解説します。
これが分からないと、Paizaには挑めません。
前提知識
サンプルコードを理解するために必要な知識です。
この知識はPaizaをするにあたって、必須の知識なのでまだ知らない方はぜひ覚えてください。
to_iメソッド
to_iで値をIntegerクラスに変換できます。
a = '10'
# 文字列「"10"」として出力される
p a
=> "10"
# 整数「10」として出力される
p a.to_i
=> 10
to_sメソッド
to_sで値をStringクラスに変換できます。
a = 10
# 整数「10」として出力される
p a
=> 10
# 文字列「"10"」として出力される
p a.to_s
=> "10"
timesメソッド
指定回数だけ繰り返し処理を行います。
3.times do
puts 'Hello'
end
=> Hello
=> Hello
=> Hello
chompメソッド
文字列の末尾から改行コードを取り除いた文字列を返します。
Paizaでは入力された値の末尾によく改行コードが入っているので、このメソッドは頻繁に使います。
a = "こんにちは\n"
p a.chomp
=> こんにちは
splitメソッド
文字列を指定した区切り文字で分割し、配列で返すメソッドです。
a = '東京,大阪,名古屋'
p a.split(',')
=> ["東京", "大阪", "名古屋"]
この辺は必須の知識になるので覚えておいて損はないと思います。
それでは値取得・出力サンプルコードしていきます。リンクから実際のコードを確認するとよりわかりやすくなると思います。
入力される値について
1行目の値は、その後入力される行数を示しています。
この例では2個の値を出力しますよってこと。
2行目は問題となる値。
この例では「2と5」「3と4」が入力されています。
この値を基準に出力のサンプルコードも見ていきます。
2
2 5
3 4
出力のサンプルコード
input_line = gets.to_i
input_line.times do
s = gets.chomp.split(" ")
print "hello = #{ s[0] } , world = #{ s[1] }\n"
end
1行目から解説していきます。
input_line = gets.to_i
Paizaでは「gets」で値を取得できます。
なので以下のようにすると値を出力できます。
# 文字列「2」が取得できる
p gets
=> "2"
このままだと、Stringクラス(文字列)として取得しています。
なので「to_i」メソッドを使って、integerクラス(整数)に変換します。
それを変数の「input_line」に入れているのが、1行目のコードです。
input_line = gets.to_i
# 整数「2」を取得できる
puts input_line
=> 2
2行目以降について
input_line.times do
s = gets.chomp.split(" ")
print "hello = #{ s[0] } , world = #{ s[1] }\n"
end
1行目では先ほどの変数「input_line」に対して「time」メソッドを使ってます。
この例だと2回繰り返し処理が行われます。
処理の内容
変数「s」では、
①「gets」で値を取得
②「chomp」メソッドで改行文字を取り除いてから、
③「split」メソッドで空白区切りで配列にしています。
最後にprintメソッドで出力。
splitメソッドで配列にしたそれぞれの値を展開していますね。
末尾には改行が入っています。
つまり
# 整数「2」を取得(入力1行目)
input_line = gets.to_i
# 2回処理を繰り返す
input_line.times do
# 1回目の処理で[2, 5]が取得できる
# 2回目の処理で[3, 4]が取得できる
s = gets.chomp.split(" ")
# 「s」の0番目、1番目を展開してprintメソッドで出力
print "hello = #{ s[0] } , world = #{ s[1] }\n"
end
=> "hello = 2 , world = 5"
=> "hello = 3 , world = 4"
よく使うメソッド
Paiza Dランクは上のサンプルコードの知識とこれらのメソッドを使えばほとんど解くことができると思います。
to_fメソッド
to_fで文字列を10進数と解釈し、Floatクラス(浮動小数点数)に変換します。
puts 10.to_f
=> 10.0
charsメソッド
文字列の各文字を配列で返します
a = 'Hello'
p a.chars
=> ["H", "e", "l", "l", "o"]
absメソッド
絶対値を取得します。
a = -120
p a.abs
=> 120
joinメソッド
配列を連結して一つの文字列にします。
引数に区切り文字を指定することもできます。
a = ['AB', 'CD', 'EF']
p a.join
=> "ABCDEF"
p a.join(',')
=> "AB,CD,EF"
おわりに
ざっとまとめましたが、これらの知識でPaiza Dランクはほとんど解けるんじゃないかなと思います。
Discussion