Ruby」カテゴリーアーカイブ

TIPS(7以上7777777以下の7の倍数を全て書き出したとき、数字7は何回現れるか)Ruby

問題

7以上7777777以下の7の倍数を全て書き出したとき、数字「7」は何回現れるか出力してください

解答と解説

#7以上7777777以下の配列を範囲で作ってから
#7の倍数の数字と文字列に変換してから文字列の7が含まれる配列を作成する
seventh_array = [*7..7777777].select{ |i| i % 7 == 0 && i.to_s.include?('7')}

#↓以下のような配列になっていれば成功している
#[7, 70, 77, 147, 175, 217, 273, 287, 357, 371, 378, 427, 476,・・・7777777 ]

#カウンターを作り0で初期化
counter = 0

#繰り返し処理をする
seventh_array.each do |number|

#文字列の7がいくつあるか.countで数えてカウンターに加算する
  counter += (number.to_s).count("7")

end
# カウンターの数を出力
puts counter

短くすると

#7以上7777777以下の配列を範囲で作ってから、7の倍数の数字のみの配列にする
#文字列に変換してから文字列の7が含まれるものに抽出する
seventh_array = [*7..7777777].select{ |i| i % 7 == 0 && i.to_s.include?('7')}

#カウンターを作り0で初期化
counter = 0

#文字列の7がいくつあるか.countで数えてカウンターに加算する
seventh_array.each { |number| counter += (number.to_s).count("7")  }

# カウンターの数を出力
puts counter

TIPS(Ruby:1から1000の数字に任意の数字が何個含まれるか?)

目標:なにがしたいか?

1から1000の数字に任意の数字が含まれるのは何個あるか?

問題

1から1000の数字に任意の数字がいくつ含まれているか、調べたくなりました。
例えば13の数字が入るのは 13, 113, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 213, 313
413,513,613,713,813,913であるので、合計 20となります。

与えられる入力値

13

期待する出力

20

コードと解説

#1行目の入力値を受け取る
n = gets.chomp

#1~1000まで配列を作成して配列内の数字を全て文字列に変換する
days = [*1..1000].map(&:to_s)

#include?で任意の数字を選択して長さを出力する
puts days.select { |i| i.include?(n) }.size

https://paiza.io/ja/projects/new

↑こちらにコピペして「実行」で確認できます。

↓このような出力結果になっていればOKです。

TIPS(Ruby:特定の数字や1の位10の位の値で条件分岐する)

目標:なにがしたいか?

特定の数字や1の位10の位の値で条件分岐する方法

問題

あなたはマンションに引っ越しを考えています。
しかし、嫌な数字があり、その数字が含まれる部屋番号の入居を避けることにしました。
そこで、今空いている部屋のうち、部屋番号のどの桁にも嫌な数字が含まれていない部屋番号をリストアップして伝えることにしました。

条件

1:一の位に4が含まれる部屋番号 例:104,204,304
2:13が含まれる部屋番号 例:113,213,313
3:部屋番号666

・1行目に部屋の総数 n
・2行目以降に各部屋番号を表す整数 room_i (1 <= i <= m)

が改行区切りで与えられるので、希望するマンションの部屋番号をすべて改行区切りで出力して下さい。

入力される値

入力は以下のように与えられます。

n #部屋の総数
room_1 #1個目の部屋番号
room_2 #2個目の部屋番号
...
room_n #n個目の部屋番号

それぞれの値は文字列で標準入力から渡されます。

与えられる入力値

9
101
130 
304 
401 
501
666
704
813
902

期待する出力

101
130
401
501
902

コードと解説

#1行目の入力値を受け取る
n = gets.to_i

#n回繰り返す
n.times do |i|

#2行名以降の入力値を受け取りバラバラにする 例:["1", "0", "1"]
  numbers = gets.chomp.chars
#1の位が4の場合か666の場合に対応
  if numbers[-1] == "4" || numbers.join == "666"
#1の位が3で10の位が1の場合に対応して13があるかどうか対応する
  elsif numbers[-1] == "3" && numbers[-2] == "1"
# 上記の条件以外のとき部屋番号を出力する
  else puts numbers.join
  end
end

https://paiza.io/ja/projects/new

↑こちらにコピペして「実行」で確認できます。

↓このような出力結果になっていればOKです。

※ポイント

入力値が301のときgets.chomp.charsで[“1”, “0”, “1”]とひとつずつバラバラにすることができる。

今回は3桁の数字だったが4桁以上の場合を考えて、

配列の[-1]を使うことで1の位、[-2]で10の位で条件分岐してやることができる。

TIPS(Ruby:ポイントカード機能その2 特定の日のポイント数をn倍する)

ポイントカード機能その2

問題

とあるお肉屋さんではポイントカードが導入されていて、買い物をするたびに購入金額に応じたポイントがたまります。 加算されるポイントは次の 3 つのルールに従って決定されます。

1. 通常は購入金額の1%(小数点以下切り捨て)とする
2. 4のつく日は購入金額の4%(小数点以下切り捨て)とする
3. 29のつく日は購入金額の29%(小数点以下切り捨て)とする

最終的にポイントカードに何ポイントあるか出力してください。(小数点以下切り捨て)

入力値について

入力は以下のように与えられます。

N    #各買い物の数
day_1 plice_1 #1回目の買い物の日付 day_1 日, 購入金額 plice_1 円
day_2 plice_2 #2回めの買い物の日付 day_2 日, 購入金額 plice_2 円
day_N plice_N #N枚目のレシートの日付 day_N 日, 購入金額 plice_N 円
1行目には今月分の買い物の回数を表す整数 N が入力されます。
続く N 行には各買い物の情報が入力されます。

与えられる入力値

5
2 1000
14 2000
15 4000
24 3000
29 29000

期待する出力

8660

コードと解説

#1行目の入力値を受け取る
n = gets.to_i

#ポイントは最初は0なので0で初期化する
point = 0

#n回繰り返す
n.times do |i|
  #2行名以降の入力値を受け取る
  day,plice = gets.split.map(&:to_i)
  
  #4のつく日の処理を書く
  if day == 4 || day == 14 || day == 24 
     
  #4%なので先に計算してから.floorで小数点以下を切り捨てる
     point += (plice.to_f / 100) * 4.floor
  #29日の処理を書く
  elsif day == 29
  
  #29%なので先に計算してから.floorで小数点以下を切り捨てる
  point += (plice.to_f / 100) * 29.floor
  
  #普通の日は1%なので先に計算してから.floorで小数点以下を切り捨てる
  else point += (plice.to_f / 100).floor
  end
end
#ポイントを出力する
puts point.to_i

https://paiza.io/ja/projects/new

↑こちらにコピペして「実行」で確認できます。

↓このような出力結果になっていればOKです。

※ポイント

.floorで小数点以下を切り捨てることができる

TIPS(Ruby:文字列+数値を数値の昇順にソートする)

目標:なにがしたいか?

文字列+数値を数値の昇順にソートする

問題

とあるWebサービスのユーザー ID は「ユーザーネーム + シリアルナンバー」となります。
例えば、satouさんが1番目に登録した場合、ユーザー ID は「satou1」、
suzukiさんが 1081 番目に登録した場合、ユーザー ID は「suzuki1081」になります。
いま、この Webサービスに登録しているユーザーのうち N 人のユーザー ID が与えられるので、それらを番号の若い(小さい)順に並べて出力してください。

条件
・1 行目にユーザー ID の個数を表す整数 N が与えられます。(1 ≦ N ≦ 200)
・名前は全て英小文字のみからなります
・シリアルナンバーは全て 1 以上 100 以下の整数で、先頭に不要な 0 を含みません。
・シリアルナンバーはユニークなので同じ番号はないです。

与えられる入力値

5
satou1
suzuki1081
tanaka990
yamada100
kawase1001

期待する出力

satou1
yamada100
tanaka990
kawase1001
suzuki1081

コードと解説

#入力値(数値)を受け取る
n = gets.to_i

#空の配列を作成する
ary,answer = [],[]

#n回繰り返す
n.times do |i|
  #2行名以降の入力値を文字列として受け取る
  user_id = gets.chomp 

  #数字の手前で2つに分割する
  user_id = user_id.split(/(?=\d)/,2)
  
  #分割したものの数字が文字列のままなので数値に変換する
  user_id[1] = user_id[1].to_i
  
  #空の配列aryにuser_idを格納していく
  ary << user_id
end
#配列を数字の昇順に並び替える
ary = ary.sort_by{ |_, number| number }

#文字列と数字を繋げて1行ずつ出力
n.times { |i| puts ary[i].join }

https://paiza.io/ja/projects/new

↑こちらにコピペして「実行」で確認できます。

↓このような出力結果になっていればOKです。

※ ary = ary.sort_by{ |_, number| number }がポイント

[["satou", 1], ["suzuki", 1081], ["tanaka", 990], ["yamada", 100], ["kawase", 1001]]

配列の0番目の文字列で並び替えずに

配列の1番目の数値を基準にして昇順に並び替えている。

 

TIPS(Ruby:配列の奇数番目と偶数番目を変数に仕分けする)

目標

半角スペース刻みで与えられる入力値のうち
配列の奇数番目と偶数番目をそれぞれ分けたい。

与えられる入力値

6 10 14 15 26 27 28

※配列は0からはじまる。0番目は偶数なので注意すること!

期待する出力

["10", "15", "27"]
["6", "14", "26", "28"]

コード

#入力値を受け取る
d = gets.split

#変数を作成し[]でそれぞれを初期化する。
odd,even = [],[] 

#配列の奇数番目をodd、配列の偶数番目をevenにいれる
d.select.with_index { |n, i| i.odd? ? odd << n : even << n }

#出力して確認する
p odd,even

https://paiza.io/ja/projects/new

↑こちらにコピペして「実行」で確認できます。

↓このような出力結果になっていればOKです。

TIPS(Ruby:配列に任意の文字列が含まれているか?2)

目標:なにがしたいか?

配列の要素がすべてユニークな(同じ要素がない)ときの

ある配列の全要素の中に指定された配列の全要素がいくつ含まれているか?

問題

くじ引きゲームを作成しています。このゲームでは1 から50 までの好きな数字を 6 つ選びます。
抽選では同様に 6 つの当選番号が発表され、
購入したくじの数字と一致していた数字の数に応じて賞品が当たります。
N 枚くじを購入したときに、N 枚の宝くじそれぞれについて、
当選番号と一致した数字の数について調べるプログラムを書くことにしました。

与えられる入力値

22 2 10 24 35 25
3
36 7 10 24 34 42
26 2 42 12 35 38
35 11 40 47 45 49

期待する出力

2
2
1

コードと解説

#1行目の入力値を配列にして受け取る
lucky_number = gets.split.map(&:to_i)

#2行目の入力値を受け取る
n = gets.to_i

#N枚くじがあるのでN回繰り返す
n.times do |i|

  #半角スペース刻みの入力値を受け取る
  lottery = gets.split.map(&:to_i)

  #くじのあたり番号と購入したくじの重複した部分の長さを出力する
  puts (lucky_number & lottery).size
end

https://paiza.io/ja/projects/new
↑こちらにコピペして「実行」で確認できます。
↓このような出力結果になっていればOKです。

※配列と配列の重複している部分は積集合&を使うことで検出できる。

積集合

paizaLvアップ問題と解答(標準入力20)Ruby

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

問題3 3 行 M 列の整数の入力 (paizaランク D 相当)

1 行目で整数 M が与えられます。
2 行目以降で 3 行 M 列の行列が与えられます。上から i 番目、左から j 番目の整数は a_{i,j} です。
3 行 M 列の行列をそのまま出力してください。

入力される値
1 行目で整数 M が与えられます。
2 行目以降で 3 行 M 列の行列が与えられます。
以下の形式で標準入力によって与えられます。

M
a_{1,1} ... a_{1,M}
a_{2,1} ... a_{2,M}
a_{3,1} ... a_{3,M}

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
3 行 M 列の行列をそのまま出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a_{1,1} ... a_{1,M}
a_{2,1} ... a_{2,M}
a_{3,1} ... a_{3,M}
条件
すべてのテストケースにおいて、以下の条件をみたします。

・M は 1 以上 100 以下の整数
・a_{i,j} は 1 以上 100 以下の整数 (1 ≦ i ≦ 3, 1 ≦ j ≦ M)
入力例1
5
1 2 3 4 5
8 1 3 8 1
813 138 381 183 831
出力例1
1 2 3 4 5
8 1 3 8 1
813 138 381 183 831

解答

#1行目の入力値(数値)を受け取る
n = gets.to_i
#半角スペース刻みの入力値を受け取り、半角スペース刻みで数値として出力する
readlines.map{ |i| puts i.split.map(&:to_i).join(' ')}

または

#1行目の入力値(数値)を受け取る
n = gets.to_i
#半角スペース刻みの入力値を受け取り、半角スペース刻みで文字列として出力する
puts readlines.map(&:chomp)

問題4 N 行 M 列の整数の入力 (paizaランク D 相当)

1 行目で整数 N と整数 M が与えられます。
2 行目以降で N 行 M 列の行列が与えられます。上から i 番目、左から j 番目の整数は a_{i,j} です。
N 行 M 列の行列をそのまま出力してください。

入力される値
1 行目で整数 N と整数 M が与えられます。
2 行目以降で N 行 M 列の行列が与えられます。
以下の形式で標準入力によって与えられます。

N M
a_{1,1} ... a_{1,M}
...      ...
a_{N,1} ... a_{N,M}

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
N 行 M 列の行列をそのまま出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a_{1,1} ... a_{1,M}
...      ...
a_{N,1} ... a_{N,M}
条件
すべてのテストケースにおいて、以下の条件をみたします。

・N, M は 1 以上 100 以下の整数
・a_{i,j} は 1 以上 100 以下の整数 (1 ≦ i ≦ N, 1 ≦ j ≦ M)
入力例1
2 3
1 2 3
8 1 3
出力例1
1 2 3
8 1 3

解答

#1行目の半角スペース刻みの入力値を受け取る
n, m = gets.split.map(&:to_i)
#半角スペース刻みの入力値を受け取り、半角スペース刻みで数値として出力する
readlines.map{ |i| puts i.split.map(&:to_i).join(' ')}

または

#1行目の半角スペース刻みの入力値を受け取る
n, m = gets.split.map(&:to_i)
#半角スペース刻みの入力値を受け取り、半角スペース刻みで数値として出力する
puts readlines.map(&:chomp)

FINAL問題【N 行 M 列のデータの入力】行ごとに要素数の異なる整数列の入力 (paizaランク D 相当)

1 行目に整数 N が与えられます。
2 行目から (N + 1) 行目までの先頭に整数 M_i (1 ≦ i ≦ N) が与えられます。それに続いて M_i 個の整数 a_1, …, a_{M_i} が与えられます。
上から i 番目、左から j 番目の整数は a_{i,j} です。
N 行の a_1, …, a_M をそのまま出力してください。

入力される値
1 行目で整数 N が与えられます。
2 行目以降で N 行 M_i + 1 列の行列が与えられます。
以下の形式で標準入力によって与えられます。

N
M_1 a_{1,1} ... a_{1,M_1}
...         ...
M_N a_{N,1} ... a_{N,M_N}

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
N 行 M_i 列の行列をそのまま出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a_{1,1} ... a_{1,M_1}
...          ...
a_{N,1} ... a_{N,M_N}
条件
すべてのテストケースにおいて、以下の条件をみたします。

・N, M_i は 1 以上 100 以下の整数
・a_{i,j} は 1 以上 100 以下の整数 (1 ≦ i ≦ N, 1 ≦ j ≦ M)
入力例1
3
1 8
2 8 1
3 8 1 3
出力例1
8
8 1
8 1 3

解答 .shiftを使うと配列の先頭部分を取り除くことができる

# 1行目の半角スペース刻みの入力値を受け取る
n = gets.to_i
# n回繰り返す
n.times do 

# 半角スペース刻みの入力値を受け取る
  numbers = gets.split

# 配列の最初の部分を取り出す(破壊的)
  numbers.shift

# 配列を半角スペース刻みで出力する
  puts numbers.join(' ')
end

paizaLvアップ問題と解答(標準入力19)Ruby

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

問題1 3 行 3 列の整数の入力 (paizaランク D 相当)

3 行 3 列の行列が与えられます。上から i 番目、左から j 番目の整数は a_{i,j} です。
3 行 3 列の行列をそのまま出力してください。

入力される値

3 行 3 列の行列が以下の形式で標準入力によって与えられます。

a_{1,1} a_{1,2} a_{1,3}
a_{2,1} a_{2,2} a_{2,3}
a_{3,1} a_{3,2} a_{3,3}

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
3 行 3 列の行列をそのまま出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a_{1,1} a_{1,2} a_{1,3}
a_{2,1} a_{2,2} a_{2,3}
a_{3,1} a_{3,2} a_{3,3}
条件
すべてのテストケースにおいて、以下の条件をみたします。

・a_{i,j} は 1 以上 100 以下の整数 (1 ≦ i ≦ 3, 1 ≦ j ≦ 3)
入力例1
8 1 3
1 2 3
3 1 8
出力例1
8 1 3
1 2 3
3 1 8

解答

# ↓一行ずつ半角スペース刻みの入力値を受け取り変数に配列として代入していく
#[[8, 1, 3], [1, 2, 3], [3, 1, 8]]
numbers = readlines.map{ |i| i.split.map(&:to_i)} # 配列の長さ分(3)繰り返し半角スペース刻みで出力する。 numbers.size.times { |i| puts numbers[i].join(' ') }

または

# 一行ずつ半角スペース刻みの入力値を受け取り,出力する。
puts numbers = readlines

または

# 一行ずつ半角スペース刻みの入力値を受け取り、半角スペース刻みで出力する。
numbers = readlines.map{ |i| i.split.map(&:to_i).join(' ') }

または

# 3列と決まっているので3回繰り返す
# 半角スペース刻みの入力値を受け取り半角スペース刻みで出力する
3.times { puts gets.split.map(&:to_i).join(' ') }

問題2 N 行 3 列の整数の入力 (paizaランク D 相当)

1 行目で整数 N が与えられます。
2 行目以降で N 行 3 列の行列が与えられます。上から i 番目、左から j 番目の整数は a_{i,j} です。
N 行 3 列の行列をそのまま出力してください。

入力される値
1 行目に整数 N が与えられます。
2 行目以降に N 行 3 列の行列が与えられます。
以下の形式で標準入力によって与えられます。

N
a_{1,1} a_{1,2} a_{1,3}
...
a_{N,1} a_{N,2} a_{N,3}

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
N 行 3 列の行列をそのまま出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a_{1,1} a_{1,2} a_{1,3}
...
a_{N,1} a_{N,2} a_{N,3}
条件
すべてのテストケースにおいて、以下の条件をみたします。

・N は 1 以上 100 以下の整数
・a_{i,j} は 1 以上 100 以下の整数 (1 ≦ i ≦ N, 1 ≦ j ≦ 3)
入力例1
2
1 2 3
8 1 3
出力例1
1 2 3
8 1 3

解答

#1行目の入力値(数値)を受け取る
n = gets.to_i
#半角スペース刻みの入力値を受け取り、半角スペース刻みで出力することをn回繰り返す
n.times { puts gets.split.map(&:to_i).join(' ') }

または

#1行目の入力値(数値)を受け取る
n = gets.to_i
#半角スペース刻みの入力値を受け取り、半角スペース刻みで出力する
readlines.map{ |i| puts i.split(' ').map(&:to_i).join(' ')}

paizaLvアップ問題と解答(標準入力18)Ruby

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

問題3 整数の組からの選択 (paizaランク D 相当)

1 行目に整数 N が与えられます。
2 行目以降に、N 組の整数 a_i と b_i が N 行で与えられます。(1 ≦ i ≦ N)
8 組目の a_i と b_i を出力してください。

入力される値
以下の形式で標準入力によって与えられます。
1 行目に 整数 N
2 行目から (N + 1) 行目に N 組の整数 a_i, b_i が N 行で与えられます。

N
a_1 b_1
...
a_N b_N

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
8 組目の a_i と b_i を出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a_8 b_8
条件
すべてのテストケースにおいて、以下の条件をみたします。

・N は 8 以上 100 以下の整数
・a_i, b_i は 1 以上 10,000 以下の整数 (1 ≦ i ≦ N)
入力例1
10
813 813
8 13
81 1
81 3
8 813
8 138
813 8
83 18
8 13
88 88
出力例1
83 18

解答

# 1行目の入力値(数値)を変数に代入する 
n = gets.to_i
# 入力を1行ずつ受け取り出力を5回繰り返す 
n.times.map do |i| 
# 半角スペース刻みの入力値を変数に代入する 
  numbers = gets.split.join(' ')
# 8番目を出力する(配列は0から始まるので8-1で7) 
  puts numbers if i == 7
end

問題4 文字列と整数の組の入力 (paizaランク D 相当)

1 行目に整数 N が与えられます。
2 行目以降に、N 組の文字列 s_i と整数 a_i が N 行で与えられます。(1 ≦ i ≦ N)
N 組の s_i と a_i を改行区切りで出力してください。

入力される値
以下の形式で標準入力によって与えられます。
1 行目に 整数 N
2 行目から (N + 1) 行目に N 組の文字列 s_i と整数 a_i が N 行で与えられます。

N
s_1 a_1
...
s_N a_N

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
N 組の s_i と a_i を改行区切りで出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

s_1 a_1
...
s_N a_N
条件
すべてのテストケースにおいて、以下の条件をみたします。

・N は 1 以上 100 以下の整数
・a_i は 1 以上 10,000 以下の整数
・s_i は数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列
入力例1
5
paiza 813
pa 81
8pa 13
iza 8
pa 13
出力例1
paiza 813
pa 81
8pa 13
iza 8
pa 13

解答

# 1行目の入力値(数値)を変数に代入する 
n = gets.to_i
# 入力を1行ずつ受け取り出力を5回繰り返す 
n.times.map { |i| puts gets.split.join(' ') }

FINAL問題【組になったデータの入力】文字列と整数の組からの選択 (paizaランク D 相当)

1 行目に整数 N が与えられます。
2 行目以降に、N 組の文字列 s_i と整数 a_i が N 行で与えられます。
8 組目の s_i と a_i を出力してください。

入力される値
以下の形式で標準入力によって与えられます。
1 行目に 整数 N
2 行目から (N + 1) 行目に N 組の文字列 s_i と整数 a_i が N 行で与えられます。

N
s_1 a_1
...
s_N a_N

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
8 組目の s_i と a_i を出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

s_8 a_8
条件
すべてのテストケースにおいて、以下の条件をみたします。

・N は 8 以上 100 以下の整数
・a_i は 1 以上 10,000 以下の整数
・s_i は数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列
入力例1
10
paiza 813
pa 81
8pa 13
iza 8
pa 13
pai 3
zi 8
pp 33
pa 8
pa 138
出力例1
pp 33

解答

# 1行目の入力値(数値)を変数に代入する 
n = gets.to_i
# 入力を1行ずつ受け取り出力を5回繰り返す 
n.times.map do |i| 
# 半角スペース刻みの入力値を変数に代入する 
  numbers = gets.split.join(' ')
# 8番目を出力する(配列は0から始まるので8-1で7) 
  puts numbers if i == 7
end