Programming note」カテゴリーアーカイブ

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:文字列Aと文字列Bはほぼ同じか?)

目標:なにがしたいか?

全要素がユニークな文字列Aと全要素がユニークな文字列Bはほぼ同じかどうか

問題

ある文字列”xyz”があります。これを用いてパスワードを作成することにしました。
条件を満たしたとき、”OK”を出力し、満たさないときは”NG”を出力します。

条件1:完全に一致した場合NGとする。(ほぼ同じではないので)例: “xyz”
条件2:文字列の長さが同じでない場合もNG   例: “xy”
条件3:文字列を入れ替えたとき同じならOK 例:”zyx”
条件4:文字列の要素はユニークである例:”abcd” ◎   例:”aabc”×

与えられる入力値1

xyz
xy

期待する出力

"NG"

与えられる入力値2

xyz
zyx

期待する出力2

"OK"

コードと解説

a = gets.chomp.chars
b = gets.chomp.chars
  if a == b || a.size != b.size
    puts "NG"
  elsif a - b == [] 
    puts "OK"
  else puts "NG"
end

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

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

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

※配列と配列の重複している部分は差集合-を使うことで
順番が違う場合でも適用される

差集合

※更に詳しく

実際に

["x", "y", "z"] - ["z", "y", "x"]

の時[]になるので、[]になったときに”OK”を出力している

ただし↓の場合

["a", "a", "a", "b", "c"] - ["a", "b", "b", "b", "c"]

結果が同じく[]になってしまうので配列の要素がユニークでない場合は使えないので注意です!

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です。

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

積集合

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

目標(何がしたいか?)

重要な文字列が含まれている文字列を抽出して出力するプログラムを作成する。

問題

1行目に重要な文字列がある(eu)
2行目からのn行目までに1行目の文字列が含まれていたら出力して
含まれていないときは出力しない。
ただしaiueoのように1行目の文字を含んでいるが、順番が違う場合や
eluのように連続していない場合はNGとする。
条件を一つも満たしていない場合は”None”を出力すること。

与えられる入力値

eu
euro
e
aiueo
eleven
elu
neu

期待する出力

euro
neu

コードと解説

#1行目の文字列を受け取る(chompで改行コード\nを打ち消す)
string = gets.chomp

#条件を満たしたものを格納したいので[]で初期化して作成
ary = []

#2行目からn行目までの入力を受け取る
strings = readlines.map(&:chomp)

#配列の要素を一つずつ1行目の文字列を含んでいるか調べて、Trueの場合aryに格納する
strings.each { |i| ary << i if i.include?(string) }

#条件を満たしていたときにはaryを出力して、一つも条件を満たさなかったときは"None"を出力
puts ary.size >= 1 ? ary : "None"

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

TIPS(Ruby:基本的なポイントカード機能の作り方)

目標

ポイントカードの基本的な部分を作成する。
ポイントの獲得機能
条件を満たしたときにポイント消費する機能

問題

買い物の支払いに現金ではなくsuzucaにチャージして利用しています。
買い物の支払いにsuzucaのカード残額を使うと、
買物金額の 10 % が suzucaポイントとしてたまります。
買い物をする時に、支払う運賃以上のsuzuca ポイントがある場合は、
suzucaポイントが優先的に買い物の支払いに使われます。
ただし、1 ポイントは 1 円になります。
ポイントで買い物を支払った場合、新たなポイントは発生しません。

最初にチャージする現金と、買い物時にかかった料金のリストが与えられるので、
毎回の買い物時に残っているお金とポイントを出力してください。

ただし、途中でカード残高とポイントの両方が買い物の金額を下回ることはありません。

与えられる入力値

5000 5
200
300
500
100
100

期待する出力

4800 20
4500 50
4000 100
4000 0
3900 10

コードと解説

#1行目の入力値を受け取る
n,m = gets.split.map(&:to_i)

#ポイントは最初は0なので0
point = 0

#2行目から6行目までを先に配列として受け取る
plice = readlines.map(&:to_i)

plice.each do |i|
#持っているポイントより値段が低いときにポイントを消費する
  if i <= point
     point = point - i
#チャージ金額から値段を差し引きする
  else n = n - i
#値段の金額の10分の1のポイントを得る
     point += i / 10
  end
買い物ごとのsuzucaのチャージ金額とポイント数を出力する
  puts n.to_s + " " + point.to_s
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

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

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

詳しくはコチラ

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

問題1 1 つの整数の組の入力 (paizaランク D 相当)

1 行目で 1 組の整数 a, b が与えられます。
a と b をそのまま出力してください。

入力される値
以下の形式で標準入力によって与えられます。
1 行目に 1 組の整数 a, bが与えられます。

a b

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

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

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

・a, b は 1 以上 10,000 以下の整数
入力例1
8 13
出力例1
8 13

解答  入力値を受け取ったあと.join(‘ ‘)で半角スペースで刻みで出力する

puts gets.split.join(' ')

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

1 行目に整数 N が与えられます。
2 行目以降に、N 組の整数 a_i と b_i が N 行で与えられます。(1 ≦ i ≦ N)
N 組の 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つ入ります。
文字列は標準入力から渡されます。

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

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

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

解答

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