0
0

More than 3 years have passed since last update.

Paiza スキルチェックで必要な基礎知識をまとめてみた

Posted at

記事内容

Rubyの基礎を学ぶため、以前から気になっていたPaizaでRuby入門を学習。
その後、学んだ知識を試すべくスキルチェック問題に挑戦したときに感じた最低限必要な知識をまとめてみました!

前提

言語:Ruby

標準入力・出力について

まず最初に立ちはだかる標準入力についてご説明します。

標準入力とは、シンプルに言うと値を受け取ることです。
標準出力とは、受け取った値を画面に出力することでです。

rubyではgetsメソッドを使用することで、入力された要素を受け取ることができます。

foo # 入力された要素

line = gets # 入力された要素を受け取り、line変数に格納
puts line

出力結果
foo 

上記のプログラムでは、入力された要素をgetsメソッドで受け取り、受け取った要素をputsメソッドで出力しています。

スキルチェックでは予め入力されている要素getsメソッドで受け取っていく形になり、その要素をもとに問題を解ていきます。

また、文字列以外にも「数値」「一行に複数の要素が存在する場合」「複数行にわたる要素が存在する場合」など、様々な条件があり、それぞれ受け取り方も異なります。

前置きが長くなりましたが、要素の受け取り方条件別に解説していきます。

文字列編

1行 && 複数要素の場合

foo bar # 入力された要素

line = gets.split # 入力された要素を受け取り、line変数に格納
p line

出力結果
["foo","bar"]

split・・・指定した区切り文字で対象となる文字列を分割して配列にするメソッド

splitメソッドを使用して、入力された文字列の空白部分で分割し、配列で返しています。
※引数に半角スペース(' ')を指定しても動作は一緒です。

複数行の場合

foo # 1行目の要素
bar # 2行目の要素

line = readlines # 入力された要素を受け取り、line変数に格納
count = line.length # 配列の要素数(2)を取得

count.times do |i|
  line[i] = line[i].chomp # 改行を取り除く
end

p line

出力結果
["foo","bar"] 

readlines・・・複数行の文字列を、1行の配列として返してくれるメソッド

length・・・「文字列の長さ」「配列の要素数」を返してくれるメソッド
※ 今回の場合、readlinesメソッドを使用して配列として取得したため、後者が適用されています。

chomp・・・文字列の末尾についた改行を取り除き、新しい文字列を返してくれるメソッド
chompメソッドを使用しないと文字列の末尾に改行\nが入ってしまいます。

["paiza\n", "paiza\n"]

上記のコードを簡略化した場合

line = readlines.map(&:chomp) # オブジェクト.map(&:メソッド名)

出力結果
["foo","bar"] # 出力結果は一緒

map・・・配列の要素の数だけ繰り返し処理を実行し、**戻り値を配列に返してくれるメソッド

今回の場合、各要素にchompメソッドを適用するため、省略記法を使用しております。

line = readlines.map{ |i| i.chomp } # 省略前

複数行 && 複数要素の場合

foo bar   # 1行目の要素
hoge hoge # 2行目の要素

array = [] # 空の配列を作成
while line = gets 
  array.push(line.chomp.split) # 配列に要素を追加
end

p array

出力結果
[["foo","bar"],["hoge", "hoge"]] # 出力結果

push・・・配列の末尾に引数を要素として追加するメソッド

まず、入力された要素を格納するため、空の配列を作成しています。

次に、while文で入力された要素をline変数に代入し、pushメソッドを使用して空の配列に要素を追加しています。
※ 条件式をline = getsとすることで入力された要素の数だけ繰り返し処理されます。

数値編

getsメソッドは「get string」の略で、名前からも分かるように入力された文字列を取得します。
そのため、数値が入力された場合は、to_iメソッドを使用して文字列から数値へと変換する必要があります。

それ以外は、先ほどの文字列とほぼ同じ方法で要素を受け取ることができます。

10 # 入力されている要素

line = gets.to_i # 数値に変換
puts line

出力結果
10

1行 && 複数要素の場合

10 20 # 入力されている要素

line = gets.split.map(&:to_i) 

p line

出力結果
[10, 20] # 出力結果

複数行の場合

10 # 1行目の要素
20 # 2行目の要素

line = readlines.map(&:to_i)
p line

出力結果
[10, 20] # 出力結果

複数行 && 複数要素の場合

10 20 # 1行目の要素
30 40 # 2行目の要素

array = []
while line = gets
  array.push(line.split.map(&:to_i))
end

p array

出力結果
[[10, 20],[30,40]] # 出力結果

最後に

恥ずかしながらpaizaで学習するまで標準入力という概念を知りませんでした、、笑

そのため、最初は戸惑いましたが、要素の受け取り方さえ分かればこっちのものです!
また、問題文がややこしく書かれているため、まず、入力例出力例を確認し、その後、問題文を確認してみると内容が理解しやすいと個人的には感じました。

それでは、自分はこれからBランクを目指す旅に出発します✨

間違っている箇所や分かりづらい箇所が多々あるかと思います。
その際は、気軽にコメントいただけれると幸いです。

最後までご覧いただき、ありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0