Ruby paizaレベルアップ問題集(ハッシュ2)

paizaラーニング(初心者〜中級者向けのプログラミング学習サービス)で、ハッシュを使いそうな問題を見つけたのでやってみる。

Ruby paizaレベルアップ問題集(ハッシュ1) - No Solution for Life の続き。

paiza.jp

共通ルール

入力

  • 入力値最終行の末尾に改行が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問も含めメソッドにしていなかったので全部書き直したくなってきた。