今回は表題のコーディングテストをrubyで解きます。そこまで難しい問題ではなかったのですが、採点後に復習をした結果、7行で作成した回答を1行に集約できた喜びから、ここに記しておこうと思います。
復讐の際には、以下の記事を参考にさせて頂きました。(参考になりました、ありがとうございました!)
問題
問題文
ハンドルネームを作成するプログラムを設計する
その際のハンドルネームは、名前の文字列から母音を取り除いて子音のみを連結して生成します。
ただし、ここで母音とは "a", "e", "i", "o", "u" の
5つのアルファベットの小文字( "a", "e", "i", "o", "u" )を指し、
子音とはそれ以外のアルファベットを意味します。
入力例1
Torvalds
出力例1
Trvlds
入力例2
PAIZA
出力例2
PZ
初期の回答
input_line = gets.chomp.split("")
boin = ["a", "i", "u", "e", "o"]
array = []
boin.each do |bo|
array.push(bo) if input_line.include?(bo)
end
puts (input_line - array).join("")
これに関して、「selectをうまく使えればもっとスタイリッシュにかけそう」と考えた。
復習で覚えたselectとreject
復習する上で、結果的にはselectメソッドではなく、rejectメソッドが最適でした。以下の具体例は、参考記事の引用です。
select(find_all)メソッド
# 2で割り切れるものを抽出する
[1, 2, 3, 4, 5, 6].select { |n| n % 2 == 0 }
# => [2, 4, 6]
rejectメソッド
# 2で割り切れるものじゃないものを抽出する
[1, 2, 3, 4, 5, 6].reject { |n| n % 2 == 0 }
# => [1, 3, 5]
改善後の回答
puts gets.chomp.split("").reject { |i| ["a", "i", "u", "e", "o"].include?(i) }.join("")
1行になった!!(๑˃̵ᴗ˂̵)
まぁわかりやすさで言うと、どうなのかな、って思うところだけど、とりあえず嬉しかった!
以上です!最後まで読んで頂きありがとうございました。