asya81 / ruby-practices Goto Github PK
View Code? Open in Web Editor NEWThis project forked from fjordllc/ruby-practices
フィヨルドブートキャンプのRubyプラクティスの提出物をまとめるリポジトリ
This project forked from fjordllc/ruby-practices
フィヨルドブートキャンプのRubyプラクティスの提出物をまとめるリポジトリ
コマンドラインオプションで年、月が指定されなかった場合は、現在の年月を表示する
コマンドラインオプションで不正なオプションが指定された場合の考慮を追加
y
(年) または m
(月) 以外のオプションが指定された場合はエラーメッセージを表示する。y
(年) に正の整数以外が指定された場合はエラーメッセージを表示する。m
(月) に1~12
の整数以外が指定された場合はエラーメッセージを表示する。lsコマンドを作る3 | FBC に沿って、-r
オプションが使えるlsコマンドを作る。
-r
オプション:逆順に表示する
lsコマンドの使い方と覚えたい15のオプション【Linuxコマンド集】| -rオプション
仕様を満たすために必要な機能の洗い出しとRubyでの実現方法(どのクラス、モジュール、メソッドを使うか?)を調査する。
今月の最初の日の曜日を取得して、日付の開始位置を曜日に合わせる
calコマンドに合わせて、曜日1つを半角スペース3つ分で埋める。
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
ls コマンドを作る5 | FBCに沿って、今まで実装してきた-a
-r
-l
オプションを全て備えたlsコマンドを作る。
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
: ストライク
基本的には一般的なボウリングのルールをベースにします。新ルール(カレントフレームシステム)ではなく、旧ルールで計算します。
表示したい月の最初の日から最後の日までを表示する
まずはlsコマンドを作る1
のプラクティスで作成するものの仕様を確認する。
lsコマンドを作る | FBC
lsコマンド2
の仕様および実現方法を確認する。
ls
コマンドで-a
オプションを使えるようにする。
-a
オプションでできること
.
始まりのファイル含めて、全てのファイルが表示される。.
(カレントディレクトリ)や..
(1つ上のディレクトリ)も表示される。
..
は出力されなくても問題ないとのこと。ls
コマンドで-a
オプションを受け取れるようにする。-a
オプションが渡された場合で処理を分ける。-a
オプションが渡された場合は、一覧表示で.
始まりのオブジェクトも表示できるようにする。optparse
ライブラリを使う。.
始まりのオブジェクトを表示するためには、Dir.glob
の引数flags
にFile::FNM_DOTMATCH
を渡すと良さそう。
.
始まりのものも含まれるようになる。lsコマンドを作る1 | FBC に沿って、lsコマンド(オプションなし)を作る。
土曜日の後を改行して表示する
仕様のイメージを掴むため、今月の表示結果を文字列でそのまま表示する処理を作成する。
今日の日付部分の色を反転させる
背景色が黒、文字色が白のターミナルを利用しているという前提で、
反転した場合は、背景色が白、文字色を黒で表示する。
カレンダーのプログラム(ruby) | FJORD BOOT CAMP(フィヨルドブートキャンプ)
今月のカレンダーを表示するプログラムを書いてみよう。(コマンドラインのプログラムとして作ろう)
-m
で月を、-y
で年を指定できる
-y
のみ指定して一年分のカレンダーを表示する機能の実装は不要$ ./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
これができたら最高!
(追加の対応)
プラクティス wc コマンドを作る | FBC に沿って、wcコマンドを作る。
日付が1桁の場合は、左に半角スペースが1つ多く入るようにする
標準添付ライブラリoptparseを使用して、コマンドラインオプション-mで表示したい月を取得し、カレンダーに表示する。
コマンドラインから-y
オプションとして受け取った年をカレンダーに表示する。
lsコマンドを作る2 | FBC に沿って、-a
オプションが使える lsコマンドを作る。
ls コマンド2の処理の流れは以下の通り
*
: lsコマンド1から追加や更新が必要な部分
flowchart TD
START-->*コマンドラインのオプションを取得する-->*渡されたオプションに応じてファイル名の一覧を取得する-->ファイルの数を取得する-->ファイル名を格納するための二次元配列を用意する-->ファイル名の横並び表示用の配列を作成する-->縦横を変換して縦並び表示用の配列を作成する-->配列の要素を連結して文字列を作成する-->標準出力に文字列を出力する-->END
どうテストするか?どんなテストをするかを検討する。
表示したい月の最後の日を取得する
lsコマンドを作る4 | FBC に沿って、-l
オプションが使えるlsコマンドを作る。
-l
オプション:ファイルの詳細も表示する
lsコマンドの使い方と覚えたい15のオプション【Linuxコマンド集】| -l オプション
標準添付ライブラリoptparse
を使用して、コマンドラインオプション-y
で表示したい年を取得できるようにする。
プログラムを書き始める前に、処理の流れをフローチャートのような図で簡単に書いてみる。
lsコマンド2のテストパターンについて検討する。
-a
オプションを渡して実行した時に、.
(カレントディレクトリ)が表示されること-a
オプションを渡して実行した時に、.
始まりのファイルが表示されることあわせて、オプションなしで実行した時に、これまで通りテストがパスすることも確認しておく。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.