🦔

【Ruby】Paiza Dランク必要な知識

2021/06/15に公開

はじめに

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