Giter Site home page Giter Site logo

ruby-practices's People

Contributors

asya81 avatar betachelsea avatar cafedomancer avatar komagata avatar maedana avatar

ruby-practices's Issues

コマンドラインオプションで不正なオプションが指定された場合の考慮を追加

コマンドラインオプションで不正なオプションが指定された場合の考慮を追加

  1. y(年) または m(月) 以外のオプションが指定された場合はエラーメッセージを表示する。
  2. y(年) に正の整数以外が指定された場合はエラーメッセージを表示する。
  3. m(月) に1~12の整数以外が指定された場合はエラーメッセージを表示する。
  4. オプションに引数が指定されなかった場合はエラーメッセージを表示する。

01. FizzBuzz問題

FizzBuzz問題(ruby)

FizzBuzz問題(ruby) | FJORD BOOT CAMP(フィヨルドブートキャンプ)

FizzBuzz問題として有名な下記のプログラムを書いてみよう。(コマンドラインのプログラムとして書こう)

1から20までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

$ ./fizzbuzz.rb 
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz

やること

  • 1から20までの数をプリントする
  • 3の倍数の時に「Fizz」とプリントする
  • 5の倍数の時に「Buzz」とプリントする
  • 3と5両方の倍数の場合に「FizzBuzz」とプリントする
  • 処理を見直し
  • 直接プログラム実行できるよう修正

04. ボウリングのスコア計算プログラム

https://bootcamp.fjord.jp/practices/210

ボウリングのスコア計算

あるボウリングの結果からスコアの数値を出力しよう。

入力の例

6,3,9,0,0,3,8,2,7,3,X,9,1,8,0,X,6,4,5

出力の例

139

プログラム実行の例

% ./bowling.rb 6,3,9,0,0,3,8,2,7,3,X,9,1,8,0,X,6,4,5
139
% ./bowling.rb 6,3,9,0,0,3,8,2,7,3,X,9,1,8,0,X,X,X,X
164
% ./bowling.rb 0,10,1,5,0,0,0,0,X,X,X,5,1,8,1,0,4
107
% ./bowling.rb 6,3,9,0,0,3,8,2,7,3,X,9,1,8,0,X,X,0,0
134
% ./bowling.rb 6,3,9,0,0,3,8,2,7,3,X,9,1,8,0,X,X,1,8
144
% ./bowling.rb X,X,X,X,X,X,X,X,X,X,X,X 
300

表記の意味

,: 投球の区切り
0-10 : 何本倒したか
X: ストライク

ルール詳細(旧ルール)

基本的には一般的なボウリングのルールをベースにします。新ルール(カレントフレームシステム)ではなく、旧ルールで計算します。

  • 1ゲーム=10フレーム。
  • 1フレーム=2投。(例外あり)
  • ピンの数は10本。
  • 1投目で10本倒したらストライク。
  • ストライクの場合は2投目は表記しない。
  • 1投目で全て倒せなかった時、2投目で全て倒したらスペア。
  • スペアのフレームの得点は次の1投の点を加算する。
    • 例: 6 4 5 = 15
    • 例: 6 4 10 = 20
  • ストライクのフレームの得点は次の2投の点を加算する。
    • 例: 10 5 2 = 17
    • 例: 10 10 10 = 30
  • 10フレーム目は1投目がストライクもしくは2投目がスペアだった場合、3投目が投げられる。
  • ありえない投球数やありえない数字・記号がこない前提。

数値計算のルールの図示参考
image

仕様を確認する

まずはlsコマンドを作る1のプラクティスで作成するものの仕様を確認する。
lsコマンドを作る | FBC

  • 作成する対象とその範囲を確認する
  • 関連するQAを確認する
  • 参考URLやヒントを確認する

lsコマンド2|仕様と実現方法

lsコマンド2の仕様および実現方法を確認する。

lsコマンド2の仕様

lsコマンドで-aオプションを使えるようにする。

-aオプションでできること

  • .始まりのファイル含めて、全てのファイルが表示される。
  • .(カレントディレクトリ)や..(1つ上のディレクトリ)も表示される。
    • 今回の提出物では、..は出力されなくても問題ないとのこと。

lsコマンド1からの追加の対応

  • lsコマンドで-aオプションを受け取れるようにする。
  • オプションがない場合と-aオプションが渡された場合で処理を分ける。
  • -aオプションが渡された場合は、一覧表示で.始まりのオブジェクトも表示できるようにする。

追加の対応に使えそうなライブラリやメソッド

  • コマンドラインのオプションを扱うには optparseライブラリを使う。
  • .始まりのオブジェクトを表示するためには、Dir.globの引数flagsFile::FNM_DOTMATCHを渡すと良さそう。

今日の日付部分の色を反転させる

今日の日付部分の色を反転させる

背景色が黒、文字色が白のターミナルを利用しているという前提で、
反転した場合は、背景色が白、文字色を黒で表示する。

02. カレンダーのプログラム(ruby)

カレンダーのプログラム(ruby)

カレンダーのプログラム(ruby) | FJORD BOOT CAMP(フィヨルドブートキャンプ)

今月のカレンダーを表示するプログラムを書いてみよう。(コマンドラインのプログラムとして作ろう)

必須要件

  • -mで月を、-yで年を指定できる
    • ただし、-yのみ指定して一年分のカレンダーを表示する機能の実装は不要
  • 引数を指定しない場合は、今月・今年のカレンダーが表示される
  • macに入っているcalコマンドと同じ見た目になっている
  • 少なくとも1970年から2100年までは正しく表示される
$ ./cal.rb -m 11
      11月 2019        
日 月 火 水 木 金 土  
                1  2  
 3  4  5  6  7  8  9  
10 11 12 13 14 15 16  
17 18 19 20 21 22 23  
24 25 26 27 28 29 30
$ ./cal.rb -y 2020 -m 11 
      11月 2020        
日 月 火 水 木 金 土  
 1  2  3  4  5  6  7  
 8  9 10 11 12 13 14  
15 16 17 18 19 20 21  
22 23 24 25 26 27 28  
29 30

歓迎要件

これができたら最高!

  • 今日の日付の部分の色が反転する
  • どのような引数が与えられようが、cal コマンドと同じ表示結果になる

やること

(追加の対応)

lsコマンド2|フローチャート

ls コマンド2の処理の流れは以下の通り

*: lsコマンド1から追加や更新が必要な部分

flowchart TD
  START-->*コマンドラインのオプションを取得する-->*渡されたオプションに応じてファイル名の一覧を取得する-->ファイルの数を取得する-->ファイル名を格納するための二次元配列を用意する-->ファイル名の横並び表示用の配列を作成する-->縦横を変換して縦並び表示用の配列を作成する-->配列の要素を連結して文字列を作成する-->標準出力に文字列を出力する-->END

テストパターンや方式を検討する

どうテストするか?どんなテストをするかを検討する。

  • 手動または自動?(書くとしたらMinitest)
    • Minitestで書いてみて、難しかったら手動でテストする。
  • 求められている仕様をベースに、必要なテストパターンを検討する

lsコマンド2|テストパターンの検討

lsコマンド2のテストパターンについて検討する。

lsコマンド1から追加でテストが必要なもの

  • -aオプションを渡して実行した時に、.(カレントディレクトリ)が表示されること
  • -aオプションを渡して実行した時に、.始まりのファイルが表示されること

あわせて、オプションなしで実行した時に、これまで通りテストがパスすることも確認しておく。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.