課題リスト - hamamatsu-rb/hamamatsu-rb.github.com GitHub Wiki
課題候補
Coding dojoの課題をストックする。 記名。課題の形になっていなくてもアイデアだけで可能。 特に条件はないが、最初の問題は極力簡単にしたほうが、不慣れな方でも楽しみやすい。
採用したお題は、最後の「これまでのお題」に移動する。
テンプレート・タイトル
- その1
- そのつづきにやること
そのほか説明
@name
自由に追記する(記名で)
ライフゲームを作ってみよう。
入力と出力をテキストで
@suchi
日本語の分かち書きにチャレンジ
「日本語のかな漢字が混ざったこのような文章を、文節に分けて配列として返します。完璧でなくてもなるべくそれっぽい出力に近づけてみましょう」
「日本語の/かな漢字が/混ざった/このような/文章を/、/文節に/分けて/配列として/返します/。/完璧で/なくても/なるべく/それっぽい/出力に/近づけて/みましょう」
@suchi
モールス信号を解読してみよう
- ピリオドとマイナスとスペースで構成されたモールス信号を解読するルーチンを作ろう
- 英数字の文字列をモールス信号に変換するルーチンを作ろう
- モールス信号を解読してそれをプログラムとして解釈するコマンド mo-ruby を作ってみよう
- mo-ruby自体をモールス信号に変換してみよう
- mo-rubyスクリプトをtwitterに投稿できるようにしよう
- mo-rubyスクリプトをメンションされたら、実行結果を返信するtwitter-botを作ってみよう
@suchi
逆ポーランド記法
- 後置記法の数式文字列を計算できるようにしよう。
"3 4 +" => 7
,"3 4 + 2 *" => 14
"3 4 + 5 6 - * => -7
- 中置記法文字列から逆ポーランド記法文字列への変換
"3 + 4" => "3 4 +"
,"(3 + 4) * 2" => "3 4 + 2 *"
,"(3 + 4) * (5 - 6)" => "3 4 + 5 6 - *"
- 定数を使える逆ポーランド電卓を作ろう
- メモリを使える逆ポーランド電卓を作ろう
- 任意の変数が使える逆ポーランド電卓を作ろう
- 条件式を追加してみよう
@suchi
【CodeIQ】パスワードの強度測定機能
【概要】 入力されたパスワードの強度測定機能をRubyでつくってください。
【依頼】 あなたはあるプロジェクトに参画していて、いわゆるパスワードの強度チェックの機能をRubyで作成することになりました。
- あなた「新規ユーザーがパスワードを設定するとき、最低文字数の4文字で作ったり、数字だけで作ったりしている人が多いのではないかという話しを聞きました」
- 先輩社員「ユーザー層から考えると、そういう人が多そうだね」
- あなた「先輩、いわゆる強度チェック機能を実装するのはどうでしょうか」
- 先輩社員「ああ、何文字以下なら『弱』とか、複数の文字種が組み合わさっていたら『強』とか表示する機能のことね」
- あなた「はい。その機能があれば、弱めのパスワードを入力するユーザーは減っていくと思います」
- 先輩社員「いいね。じゃあ表示部分とかは他のメンバーに任せるとして、まずはロジックのみを作ってみてくれないか」
- あなた「checkメソッドを持つPasswordクラスを作ってみますので、完成したら確認してもらってよろしいでしょうか」
- 先輩社員「もちろん。単純にパスワード文字列を渡したら、『強中弱』のいずれかの一文字が返されるようにしようか」
- あなた「分かりました。判定についてはどうしましょうか」
- 先輩社員「君に任せるので、適切に判定されるように考えて実装してほしいな」
【仕様】 パスワードの強度測定機能
- パスワード文字列を引数にとり、『強中弱』のいずれかの一文字を返すPasswordクラスのcheckメソッド
@jacoyutorius
みんなハッピーな結婚ってなに
「安定な結婚問題」アルゴリズムをやってみる。
安定結婚問題の例題は N 人の男性と N 人の女性、および、各個人の希望リストからなる。希望リストとは各個人の好みに基づき異性全員を全順序で並べたリストである。安定結婚問題の解は安定なマッチングである。安定結婚問題の例題に対し、互いに現在組んでいる相手よりも好きであるペア(以下ブロッキングペアとする)が存在しないマッチングを安定なマッチングという。
[Wikipedia「安定結婚問題」より] (http://ja.wikipedia.org/wiki/%E5%AE%89%E5%AE%9A%E7%B5%90%E5%A9%9A%E5%95%8F%E9%A1%8C)
-
入力: N人の男性と N人の女性、および、各人の異性全員に対する希望リスト
-
出力:安定マッチング(つまり、男女 N組のペア)
- [初期設定] 全員の状態は独身とする(全ての男性はどの女性にもプロポーズを行っていない)。
- 独身の男性 h が存在する限り、以下の操作を繰り返す。 2-1. 男性 h はまだプロポーズしていない女性の中で、最も好きな(つまり、希望リストの最高位の)相手女性 d にプロポーズする 2-2 (a) d が独身ならば、d は h と婚約する (b) d がすでに h' と婚約している場合 (b-1) d にとって h' のほうが好ましい希望順位が上(h’ > h)ならば、h からのプロポーズを断る (b-2) d にとって h のほうが好ましい(h’ > h)ならば、h' との婚約を解消し h と婚約する 3. 現在婚約しているペアの集合を安定マッチングとして出力する。(終了)
@euledge
円周率を計算
- Math::PIを使わずに
- なるべく大きい桁数まで
- 計算手法はなんでもあり
- (まだ検証してない)
@yowasou
アルゴリズム練習問題
練習問題(アルゴリズム編) - プログラミングスレまとめ in VIP より、手頃な問題を抜粋してくる。
@jacoyutorius
【CodeIQ】以下に示す「お店」に該当するお店を「調査対象文字列」の候補から抽出するコードをRubyで書いてください。
汎用コードで導くのが目的ですので、個々の文字列に特化した処理は書かないでください。 (一般的に想定しうる文字列出現のパターン等にあわせるのは構いません) ここにないテストケースにおいても同じロジックで動作することを想定してコードを書いてください。
【ケース1】 お店: 「中目黒いぐち」
調査対象文字列:
- 焼鳥 中目黒 いぐち
- 串若丸 本店 くしわかまる
- 鳥よし 中目黒店 とりよし
正解: 焼鳥 中目黒 いぐち
【ケース2】 お店: 「まるかつ水産 東京ミッドタウン店」
調査対象文字列:
- まるかつ水産 東京ミッドタウン店
- まるかつ食堂 東京ミッドタウン店
- 東京ミッドタウン店 アンリ・ルルー
- 浅野屋 東京ミッドタウン店
正解: 東京ミッドタウン店 まるかつ水産
【ケース3】 お店: 「寿司寿」
調査対象文字列:
- 六本木 寿司寿
- 寿し処 寿々 すず - 溜池山王/寿司
- 松葉寿し まつばずし - 六本木一丁目/寿司
正解: 六本木 寿司寿
@jacoyutorius
カタ ボウリング
紹介元
http://codingdojo.org/cgi-bin/wiki.pl?KataBowling
この概要は www.xprogramming.com/xpmag/acsBowling.htm が元になっています。
概要
正しく与えられたボーリングの投球のシーケンスから、合計スコアを出すプログラムを書きます。
("X" がストライク、"/" がスペア、"-" がミスだったとして)
入力 | 点数 |
---|---|
"XXXXXXXXXXXX" |
300 |
"9-9-9-9-9-9-9-9-9-9-" |
90 |
"5/5/5/5/5/5/5/5/5/5/5" |
150 |
- "XXXXXXXXXXXX" (12投: 12ストライク) = 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 = 300
- "9-9-9-9-9-9-9-9-9-9-" (20投: 9本からのミスが10回) = 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 = 90
- "5/5/5/5/5/5/5/5/5/5/5" (21投: 5本からのスペアが10回, 最後のフレームで 5) = 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 = 150
やらないこと
ただし、以下のことはしません。
- 投球ごとの倒したピン数が正しいかはチェックしない。
- 投球数が正しいかはチェックしない。
- フレームごとのスコアは出さなくてよい。
アプリケーションによって、この実装は正しいストーリーではないかもしれんが、型を維持するために、とりあえずやってみましょう。
上の仕様で上手く書けるようになって、もっとリアリティがほしくなる頃には、コーディングがうまくなってると思います。
ボーリングのルール
簡単にボーリングのルールをおさらいするよ
- 1ゲームは10フレーム
- それぞれのフレームで、ボウラーは2回ピンを倒すチャンスがある
- フレームで全ピンを倒せなかったら、スコア=ピンを倒した数だよ
- 2回投げて10本倒れたら、スペアですよ。このフレームの得点は、10点 + 次の投球で倒したピン数ですよ
- フレーム最初の投球で全部倒したら、ストライクですよ。ストライクを出したら、順番(フレーム)は終わりで、点数は10点 + 次の投球のピン数 + 次の次の投球のピン数ですよ。
- 最後のフレームでスペアかストライクを出したら、ボーナスであと1回か2回投げることができます。これらのボーナスは、最後のフレーム自身に入ります。ボーナスですべてピンが倒れても、繰り返してまた投げることはありません。ボーナス投球は、最後のフレームのボーナス計算だけのためのものです。
- ゲームのスコアは全部のフレームの合計ですよ
ルールについてのさらなる情報はこちら
http://www.topendsports.com/sport/tenpin/scoring.htm
@misogi
スパゲティ(spagetti)に紛れているナポリタン(neapolitan)を取り出して下さい
https://codeiq.jp/challenge.php?challenge_id=390
`■ 課題
以下のようにスパゲティ(spagetti)という文字 50 個分をバラバラにしてランダムに配置した文字列があります。この中に前から順番に「n」「e」「a」「p」「o」「l」「i」「t」「a」「n」という順番でナポリタン(neapolitan)という文字が隠れています。その該当文字を抜き出し、前後に [ ] を付け加えてください。
gtgtsgipgttptinggipsppaigsesgpetgstpatetisiesagaeaigttetepitiatsegssieeeeatepaaiagtpieataatppiitgiapsteitatiiatpetetetttgpetpaasipttssstpeeeggtiagtttegtiipestsasgpsepaasapttgattgiatppegitiatpasgatgepttggapesaeetaeissttggieietgspagesiipestipggstttpateptitiaetottissgggtttaipappgstsptttgtpispattgegstltiappseisapgistaiagteeiptptpisaieisagstapeteietgteiisgtiptstgtstasspeatspptitttatteastsgtptgtasggpniaaeteaisett
例として、以下の様な状態に文字列を変換できれば正解です。
gtgtsgipgttpti[n]ggipsppaigs[e]sgpetgstpatetisiesagaeaigttetepitiatsegssieeeeatepaaiagtpieata[a]tppiitgia[p]steitatiiatpetetetttgpetpaasipttssstpeeeggtiagtttegtiipestsasgpsepaasapttgattgiatppegitiatpasgatgepttggapesaeetaeissttggieietgspagesiipestipggstttpateptitiaet[o]ttissgggtttaipappgstsptttgtpispattgegst[l]tiappse[i]sapgis[t]aiagteeiptptpisaieisagstapeteietgteiisgtiptstgtst[a]sspeatspptitttatteastsgtptgtasggp[n]iaaeteaisett
■ 注意事項
- 必ず文字の先頭から [n][e][a][p][o][l][i][t][a][n] という並びになるようにしてください
- 例えば「i」など複数回出現するような文字の場合は [l] と [t] の間にあれば、どの i に [] がついても問題ありません`
@jacoyutorius
これまでのお題
- Code rendezvous(1) Code kata -- Data Munging(1)
- Coding dojo(2) LTSV
- Coding dojo(3) grep
- Coding dojo(4) 逆ポーランド記法
- Coding dojo(5) パスワードの強度測定機能
- Coding dojo(6) みんなハッピーな結婚ってなに