This page looks best with JavaScript enabled

【Ruby】paizaスキルチェックの値取得・出力サンプルコードを読み解く

 ·   ·  ☕ 4 分で読めます
✏️

はじめに

初めてpaizaスキルチェックに挑戦したとき、サンプルコードを見てもさっぱりわかりませんでした。
というわけで、こちらのサンプルコードを読み解いていこうと思います。

1
2
3
4
5
input_line = gets.to_i
input_line.times do
  s = gets.chomp.split(" ")
  print "hello = #{ s[0] } , world = #{ s[1] }\n"
end

この記事の対象とする人

  • Progateの Ruby は一通りした上でスキルチェックにチャレンジしたけど意味がわからなかった。
  • 標準入力ってなんだよ……。

そもそも入力される値とか期待する出力って何?

入力される値

この値が与えられます。一行ずつ入力されるという風に考えればいいです。

2
2,5
3,4

このテストケースでは、最初の値は、その後入力される行数を示す(2行の入力がある)
2行目以降は、helloとworldの値が[,]区切りで書かれています。

期待する出力

「こんな風に表示するコードを書いてね」という見本です。

hello = 2 , world = 5
hello = 3 , world = 4

今回は、hello = ? , world = ?というように2行書かれるようです。

サンプルコードを読み解く

さて、ではサンプルコードの解説です。

1
input_lines = gets.to_i

input_linesは変数です。なんでもいいですが、わかりやすく書きましょう。
getsによって入力された値(ここでは、1行目の2)が取得できます。……が、そのままだと"2"という文字列なので、計算などには使えません。そこで、to_iメソッドで2という整数に変換します。

1
2
3
input_lines.times {
  # 省略
}

input_lines = 2なので、2.times {}と同じです。つまり、{}で囲まれた処理を2回繰り返すよ、という意味です。
処理が何度繰り返されるかは場合によって変わりますが、ちゃんと最初の行で示されるので、ここまでの流れはどんなスキルチェックでも変わらないと思います。

1
  s = gets.chomp.split(",")

sは変数です。
2回目のgetsでは"2,5\n"という文字列が取得できます。chompによって改行コード(\n)を取り除きます。さらにsplit(",")で、"2,5"という文字列を,で区切って["2", "5"]という2つの配列にします。
この配列を変数sに格納します。

ただし、この配列は数の配列ではなく文字列の配列です。
今回は文字列の一部として使うので問題ないですが、計算などで使う場合は注意が必要です。

1
  print "hello = ",s[0]," , world = ",s[1],"\n"

printputsとは違い、行末に改行がないので、最後に"\n"と書いています。
以下の書き方でも同じように出力できます。

1
  puts "hello = #{s[0]}, world = #{s[1]}"

その他

確認のためにpを使う

基本的に文字列などを表示するときはputsprintを使います。しかし、コードを書いていると文字列なのか数なのかわからなくなることがあります。
pを使うと、文字列は""に囲まれて表示されます。そのため、スキルチェックの途中段階ではpで出力するとよいです。

getsについて

getsで取得する値の単位は一行ずつです。例えば、

5
1 2 3
1 2 10

と入力される場合、

1
2
3
p gets
p gets
p gets

というコードを書くと、

1
2
3
"5\n"
"1 2 3\n"
"1 2 10\n"

という出力になります。
pで出力した場合は改行コードも表示されます。

また、上記で出てきたメソッドto_i, chomp, splitを使うと、以下のように表示されます。

1
2
3
p gets.to_i
p gets.chomp
p gets.chomp.split(" ")

↑ コード 出力 ↓

1
2
3
5
"1 2 3"
["1", "2", "10"]

スキルチェックに関するリンク

今回の内容に直接的に関係があるわけではありませんが、スキルチェックを解くにあたって以下のリンクが参考になると思います。

Share on

END
END
@aiandrox

目次