paizaラーニング(初心者〜中級者向けのプログラミング学習サービス)で、ハッシュを使いそうな問題を見つけたのでやってみる。
Ruby paizaレベルアップ問題集(ハッシュ1) - No Solution for Life の続き。
共通ルール
入力
- 入力値最終行の末尾に改行が1つ入ります。
- 文字列は標準入力から渡されます。
出力
- 最後は改行し、余計な文字、空行を含んではいけません。
3. 1人の血液型 (paizaランク C 相当)
1行目でユーザーが1つ与えられます。
n 行のユーザーと血液型の組が与えられるので、ユーザーをキー、血液型を値として、連想配列(辞書)に保存してください。
その連想配列(辞書)の中で1行目で与えられたユーザー名と、ユーザー名に対応する血液型を表示してください。入力される値
s
n
A_1 B_1
A_2 B_2
...
A_i B_i
...
A_n B_n期待する出力
A_i をキー、B_i を値として保存し、A_i と s が同じ場合、A_i と B_i を表示してください
最後は改行し、余計な文字、空行を含んではいけません。条件
・1 ≦ n ≦ 100
・1 ≦ (s の長さ) ≦ 50
・1 ≦ (A_i の長さ) ≦ 50
・B_i の値は "A", "B", "AB", "O"のいずれか
・i ≠kのとき、A_i と A_k は異なる文字列
入力例1
Kyoko 5 Kyoko B Rio O Tsubame AB KurodaSensei A NekoSensei A
出力例1
Kyoko B
自分の解答
s = gets.chomp n = gets.to_i users = {} n.times do name, b_type = gets.split users.store(name, b_type) end users.each do |k, v| if k == s puts "#{k} #{v}" end end
4. 1つの血液型を占う (paizaランク C 相当)
1行目で血液型が1つ与えられます。 m 行の血液型と占い結果の組が与えられるので、血液型をキー、占い結果を値として、連想配列(辞書)に保存してください。 その後、1行目で与えられた血液型に対応する占い結果を表示してください。
入力される値
T
A_1 B_1
A_2 B_2
...
A_i B_i
...
A_m B_m期待する出力
A_i をキー、B_i を値として保存し、A_i と T が同じ場合、B_i を表示してください。
最後は改行し、余計な文字、空行を含んではいけません。条件
・1 ≦ m ≦ 4
・A_i の値は、"A", "B", "AB", "O"のいずれかであり、同じ血液型が複数入力されることはない
・1 ≦ (文字列 B_i の長さ) ≦ 100
・T の値は、"A", "B", "AB", "O"のいずれか
入力例1
A A Good B VeryGood O Yavai AB VeryYavai
出力例1
Good
自分の解答
s = gets.chomp bloods = {} ary = readlines ary.each do | ele | b_type, rank = ele.split bloods.store(b_type, rank) end bloods.each do |k, v| if k == s puts v end end
一応正解はできたが、前回の2問も含めメソッドにしていなかったので全部書き直したくなってきた。