Ruby 2.7 でスターリンソートを書いてみた

元ネタ

と、いうことで Ruby でも書いてみました。
ただ書くだけじゃつまらないので Ruby 2.7 で追加予定のパターンマッチを使ってみるなど。

コード

def stalin_sort(xs)
  case xs
  in []
    []
  in [x]
    [x]
  in [x, y, *zs] if x < y
    [x] + stalin_sort([y, *zs])
  else
    stalin_sort [x, *zs]
  end
end

p stalin_sort [1, 2, 1, 1, 4, 3, 9]
# => [1, 2, 4, 9]
p stalin_sort ['a', 'c', 'b', 'a','c','d']
# => ["a", "c", "d"]

パターンマッチ便利。