コンテンツへスキップ

【Ruby基礎】AtCoder Beginner Contest 002 B – 罠

  • by

■はじめに

Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。
基本的にはAtCoderというプログラミングコンテスト(競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)

(5/23時点の方針)
メソッドの切り分け方や値の受け渡しを練習するために、コード長の短さについては気にせずに書くことにする。

(2022/10/17時点の方針)
しばらくはB問題を小さい番号の方からやっていく。たまにA問題もやるかも。

■問題

●出典

AtCoder Beginner Contest 002のB問題
https://atcoder.jp/contests/abc002/tasks/abc002_2

●問題文

神の恵みで財産を築いた高橋くんですが、なんとそこには罠がありました。
神は、高橋くんの発した言葉から母音 aiueo を全て盗んでいったのです。
高橋くんが発した言葉を表す文字列 W が与えられるので、周囲の人が聞く言葉を表す文字列を出力するプログラムを書いてください。

●入力

入力は以下の形式で標準入力から与えられる。

W
  • 1 行目には、高橋くんの発した言葉を表す文字列 W が与えられる。
    • W の長さ ∣W∣ は 1≦∣W∣≦30 を満たす。
    • W は半角英小文字(a から zまで)のみで構成される。
    • W には母音以外の文字が少なくとも 1 文字含まれることが保証されている。

●出力

W から母音を全て除いた文字列を 1 行で出力してください。
また、出力の末尾には改行を入れること。

■回答

●愚直に書く

標準入力を文字列で取得して、gusbaiueoを取り除くようにすれば良いのでは?

w = gets.chomp
puts w.gsub(/a|i|u|e|o/, '')

通った!B問題にしてはサッと行けた。

●メソッド化して書く

メソッドを作る練習のために、あえてそういう書き方をする。

う〜ん今回に関してはメソッドにしなくても良いかな。

●リファクタリング/別アプローチ

変数を使わず直接処理するくらいか?

puts gets.chomp.gsub(/a|i|u|e|o/, '')

通った!

●他の方の回答例

gsubの代わりにdeleteでも行ける。
というかこの2つのメソッド、つい最近ここでやったばかりじゃないか…!

puts gets.chomp.delete("aiueo")

なるほど、これのがシンプル。

●出てきたメソッド等

公式リファレンスを見る訓練。

■振り返りなど

B問題の割にはスンナリできて良かったけど、deleteにも気づきたかった。