Ruby paizaレベルアップ問題集(sort)

paizaラーニング(初心者〜中級者向けのプログラミング学習サービス)のプログラミングスキルチェックというのをときどきやっています。Dランク(超初級)からSランク(超上級)まであり現在Cランク。

Bランク目指して、今日もレベルアップ問題集から2問やっていきます。

共通ルール

入力

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

出力

  • 最後は改行し、余計な文字、空行を含んではいけません。

1. 昇順ソート出力 (paizaランク D 相当)

1行目で整数 n が与えられ、2行目で n 個の整数が与えられます。
n 個の整数を昇順に出力してください。

入力される値
入力は以下のフォーマットで与えられます。
n
a_1 a_2 ... a_n

期待する出力
a_1 から a_n の整数を昇順に並び替えて、出力してください。

条件
すべてのテストケースにおいて、以下の条件をみたします。
1 ≦ n ≦ 100
-3,000,000 ≦ a_i ≦ 3,000,000 (ただし、1 ≦ i ≦ n)

自分の解答

n = gets.to_i
numbers = gets.split.map(&:to_i)
puts numbers.sort  # 正解!

解答コードも見ましたが、こっちの方がいいような気がしました。1行目のnは特に使ってないですね。

2. 文字と整数の組のソート (paizaランク C 相当)

1行目に行数を表す整数 n、続く n 行の各行で「文字」と「整数」の組が空白区切りで入力されます。 n 個の組を、「整数」の値で昇順に並べ変え、「文字」を出力してください。

入力される値
入力は以下のフォーマットで与えられます。
n
S_1 D_1
S_2 D_2
...
S_i D_i
...
S_n D_n
S_i は「文字」で、D_i は「整数」です。
入力される文字 S_i は、同じ文字が複数入力されることはなく、整数 D_i も同様です。

期待する出力
n 個の組を、「整数」の値で昇順に並べ変え、「文字列」を1行ずつ出力してください。

条件
すべてのテストケースにおいて、以下の条件をみたします。
・1 ≦ n ≦ 100
・-10,000 ≦ D_i ≦ 10,000
・S_iは半角英文字1文字
・iとjが異なるなら、D_iとD_jは異なる
・iとjが異なるなら、S_iとS_jは異なる

入力例

3
G 0
S 3
E -2

出力例

E
G
S

自分の解答

n = gets.to_i
array = []
(1..n).each do |x|
  inputs = gets.split
  inputs[1] = inputs[1].to_i
  array << inputs
end
array = array.sort { |a, b| a[1] <=> b[1] }
array.each { |inputs| puts inputs[0] }

Cランク難しい…

配列の配列(二次元配列)のソートはやったことがなかったのでググりました。

sortにブロックを渡せることを知りました。二次元配列のソートに関してはもう少し調べてみたいです。

Rubyで二次元配列をsortしたい - Qiita

Rubyで2次元配列のソートいろいろ - Qiita

Array#sort (Ruby 2.7.0 リファレンスマニュアル)

感想

Bランクは遠そうです…