Edited at

【Rubyプログラミング問題】値札分割メソッド(split_price)を作成してください

More than 3 years have passed since last update.


はじめに

なんとなく思いつきで簡単なプログラミング問題を作ってみました。

チャレンジしてみたい方は以下の内容をよく読んで解答してください。


問題

ユーザーが自由に入力できる値札データがある。

このデータ(文字列)を以下のようなルールで分割するメソッド、 split_price を作成せよ。

'110.0万円'     => ['110.0', '万円']

'2015円' => ['2015', '円']
'1,123,456円' => ['1,123,456', '円']
'110 - 120万円' => ['110 - 120', '万円']
'2015円' => ['2015', '円']
'価格未定' => ['価格未定', '']
nil => ['', '']


解答の手順


1. テンプレートファイルの作成

split_price_test.rb を作り、以下のコードをコピーしてください。

require 'minitest/autorun'

def split_price(price_text)
# ここに実装を書く
end

describe 'split_price' do
let(:manyen) { '110.0万円'}
let(:yen) { '2015円'}
let(:comma) { '1,123,456円'}
let(:hyphen) { '110 - 120万円'}
let(:zenkaku) { '2015円'}
let(:jponly) { '価格未定'}
let(:blank) { nil }

it { split_price(manyen).must_equal ['110.0', '万円'] }
it { split_price(yen).must_equal ['2015', '円'] }
it { split_price(comma).must_equal ['1,123,456', '円'] }
it { split_price(hyphen).must_equal ['110 - 120', '万円'] }
it { split_price(zenkaku).must_equal ['2015', '円'] }
it { split_price(jponly).must_equal ['価格未定', ''] }
it { split_price(blank).must_equal ['', ''] }
end


2. テストの実行(失敗)

split_price_test.rb を実行し、テストが失敗することを確認してください。

$ ruby split_price_test.rb

Run options: --seed 48947

# Running:

FFFFFFF

Finished in 0.001387s, 5047.4606 runs/s, 5047.4606 assertions/s.

1) Failure:
split_price#test_0004_anonymous [price_test.rb:20]:
Expected: ["110 - 120", "万円"]
Actual: nil

2) Failure:
split_price#test_0003_anonymous [price_test.rb:19]:
Expected: ["1,123,456", "円"]
Actual: nil

(省略)

7) Failure:
split_price#test_0007_anonymous [price_test.rb:23]:
Expected: ["", ""]
Actual: nil

7 runs, 7 assertions, 7 failures, 0 errors, 0 skips


3. split_price メソッドの実装

split_price メソッドの中身を実装してください。


【注意】コメント欄はまだ見ないで!!

この記事のコメント欄には他の人の解答が載っています。

なので自分の実装が終わるまで見ないようにしましょう。


4. テストの実行(成功)

実装が完了したらテストが全部パスすることを確認しましょう。

失敗するテストがあれば実装を修正してください。

$ ruby split_price_test.rb

Run options: --seed 54905

# Running:

.......

Finished in 0.001053s, 6645.2374 runs/s, 6645.2374 assertions/s.

7 runs, 7 assertions, 0 failures, 0 errors, 0 skips


5. この記事のコメント欄に自分の解答を載せる

テストが全部パスしたら、この記事のコメントにあなたの解答を貼り付けてください。

解答としてのせるのは split_price メソッドだけでOKです(テストコードを載せる必要はありません)。

こだわりポイントやアピールしたい点があればそれもコメントに書いてください。


実行環境について


  • 対象となるRubyのバージョンは2.0以上とします。(僕は2.2.2で動作確認しました)

  • 外部のgemは使わず、Rubyの標準ライブラリだけで実装してください。


その他、備考等


  • テストが全部パスすればそれでOKです。それ以外の入出力パターンは考慮不要です。


    • 例:「僕のコードは全角のカンマや全角のハイフンにも対応してます!!」みたいなオリジナル実装は不要です。



  • 解答に順位を付けたり、景品を贈ったりする予定は今のところありません。

  • 解答に対する僕からのコメントはあまり期待しないでください(気が向いたらするかもしれません)。

  • 締め切りは特に設けていません。いつでも誰でも参加可能です。


僕の解答例

数日後に別記事として載せようかなと思っています。

2015.7.17追記

解答例を書きました!解答の優秀賞も発表しています。

【Rubyプログラミング問題】値札分割メソッド(split_price)を作成してください:解答編 - Qiita


まとめ

冒頭にも書いたとおり、何となくの思いつきで始めたゆるーいプログラミングコンテスト(?)です。

上級者の方は5~10分ぐらいで、初心者の方も30分以内で解ける問題なんじゃないかな~と思います。

いろんな人からいろんな解答が出てくることを期待します。

さあ、あなたも Let's チャレンジ!!

・・・あ、コメント欄は実装が終わるまで見たらダメですからね!!