Shinya’s Daily Report このページをアンテナに追加 RSSフィード

2012/07/21(土)

[][]ペアプロTDDの『お題』をまとめてみた #tddbc #coderetreat #pp_con 23:20 ペアプロ・TDDの『お題』をまとめてみた #tddbc #coderetreat #pp_conを含むブックマーク ペアプロ・TDDの『お題』をまとめてみた #tddbc #coderetreat #pp_conのブックマークコメント

TDD及びペアプロを通じてプログラミングスキルを上げるべく、ネットで公開されている『お題』について色々情報収集してみました。

お題やテーマについては、見つけ次第随時追加していきます。

Stackユーティリティ from 『車窓からのTDD

f:id:absj31:20120721220551p:image:w800

こちらについては自分でも試しに写経してみました。以下エントリ。


FizzBuzz問題 from TDDBC

f:id:absj31:20120721212942p:image:w800


うるう年問題 from TDDBC

f:id:absj31:20120721213210p:image:w800


LRU Cache from TDDBC

f:id:absj31:20120721213328p:image:w800


ワードフィルタ from TDDBC

f:id:absj31:20120721213448p:image:w800

以上、ここまでの4つのお題は和田卓人さんのスライドから拝借しました。

MotsunabeZombieProject(mzp)/もつ鍋(つぶやきの種類を判別するためのアプリケーション) from TDDBC福岡

f:id:absj31:20120721213937p:image:w800


key/valueオブジェクト from TDDBC東京1.6

f:id:absj31:20110801214759j:image:w800


Wiki Engine from TDDBC札幌1.5→TDDBC東京1.7

資料はこちら。全14ページ、作業手順まで詳細にまとめ上げられている素晴らしい資料になっております。作者&情報提供を頂いたShuji Watanabe (TwitterID:@shuji_w6e)さん、ありがとうございました!

f:id:absj31:20120723000455p:image:w800

これを受けて、TDDBC東京1.7でも同じテーマで実演が行われてました。

f:id:absj31:20120721214631p:image:w800


ショッピングカート from TDDBC東京1.7

f:id:absj31:20120721214840p:image:w800


野球打率計算 from TDDBC横浜

経路探索 from TDDBC 東京 for C++

飲み物自動販売機 from TDDBC 大阪 1.0/2.0

f:id:absj31:20120721215616p:image:w800


ライフゲーム from Coderetreat

D


TheBowlingGameKata

f:id:absj31:20120721220942p:image:w800

ルール等(日本語訳)に関しては、以下の角谷さんのスライドが詳しいです。


ボーリングのスコア計算 from TDDBC 札幌 2.3

これは上記『TheBowlingGameKata』の日本語版と言ったところか。


ボーリングのスコア計算 from TDDBC Tokyo 2013-03

こちらも上記同様ボーリングスコア計算について。YASUI Tsutomu (TwitterID:@yattom)さんによる発表資料となっており、『ペアプロ』を練習・実践するに当たっての心構えや準備についても言及がなされています。



Money オブジェクトの実装 from 『テスト駆動開発入門』

下記ブログエントリに、書籍の写経内容がまとめられております。



マイヤーズの三角形

原典はここから。こちらについては神速(@sinsoku_listy)さんから教えて頂きました。

ソフトウェア・テストの技法

ソフトウェア・テストの技法

上記版だと入手不可のようなので別版のリンクを追加。


codebreaker

こちらについても情報を神速(@sinsoku_listy)さんから教えて頂きました。


郵便番号のバリデーション from TDD 道場 第2回 @わんくま名古屋勉強会#12

和暦年月の文字列を検証 from TDD.NET

あみだくじ from みなとRuby会議01
お題
 あみだくじを作ってください

仕様
 ・当たりの数は一つ
 ・横線がランダムに配置されること
 ・横線の数>0
 ・横線が複数繋がってはいけない
 ・人数の指定ができるようにする

数字を英語表記に変換(English Numerals) from みなとRuby会議01

オフラインリアルタイムどう書く

お題を元に会場でリアルタイムにチャレンジする、という勉強会のようです。

プログラマの技術情報共有サービス『Qiita(キータ)』とも連動している模様。




マイクロブログの作成 from ペアプロ合コン 第1回

レポート見る限りだとお題のみ決められていて、作成方法(フレームワーク等)はペアに委ねられてたのかな?何かあれば追記します。


古きよきWebページを、現代風につくり直してみよう from ペアプロ合コン 第2回

こちらも進め方はペアにお任せなお題。

f:id:absj31:20120725153602p:image:w800


どう書く?org

f:id:absj31:20120721224923p:image:w550

こちらはお題の一覧。


TDD Problems(海外でまとめられていたプログラミング問題集)

f:id:absj31:20120725150720p:image:w600

TwitterTLでつぶやかれていたものを補足。見つけた時点(2012/07)で問題総数33問!以下に一覧ベースでどんなもんがあるか適当訳(by Google先生)してみました。興味を引くものがあれば(和訳とあわせて)チャレンジしてみてはいかがでしょうか。

-●Games【ゲーム】
--Bowling game(ボウリング)
--Game of life(ライフゲーム)
--Golf handicap(ゴルフのハンディキャップ)
--Reload countdown(リロードカウントダウン)
--Tic-Tac-Toe

-●Strings【文字列に関する問題】
--Postfix form(数式の中置式→後置式変換)
--Spell out check amount(数値→数値の文字列表現に変換)
--SQL string generator(SQL文字列生成)
--Template engine(テンプレートエンジン
--Text editor end-of-line trim(行末トリムを行うエディタ)
--URL splitting(URL分解)
--Word-wrapping(ワードラップ:所定のルールに基づいて文字列を処理)

-●Collections & sorting【コレクション&ソート】
--Integer stack(数値のスタック)
--Multi map(Mapに関する問題)
--Natural sort(人間が期待する順序で文字列ソートを行うアルゴリズム実装)
--Queue(キュー)
--String set(文字列Set)

-●User interaction【ユーザとの対話】
--Console interaction(コンソール)
--Magneto effect(マグネット効果)
--Undo-redo stack(UNDO&REDO スタック)

-●Maths【数学】
--Line segment intersection(線分の交点)
--Overlapping rectangles(重複長方形:所定の操作をサポートする四角形の抽象化設計)
--Range(範囲に関する問題)
--Roman number conversion(ローマ字→数字変換)

-●Uncategorized【その他未分類】
--Color gradient(色のグラデーション)
--Finding duplicate files(重複ファイルの検索)
--Recent file list(最近のファイル一覧)
--Refreshing cache(キャッシュ・リフレッシュ)
--Soundex(英語発音によってインデックスされた音声アルゴリズム)
--Spreadsheet(スプレッドシート)

-●Larger problems【より大きな問題】
--Blog(ブログ)
--Boyer-Moore string search(ボイヤー・ムーア文字列検索アルゴリズム)
--Evaluate arithmetic expression(算術式の評価)
--Digital circuit simulation(デジタル回路のシミュレーション)



やる夫で学ぶTDD(Myersの三角形/CSVParser/NEET判定/ボウリングスコア計算)

太田@ついったー(TwitterID:@oota_ken)さんの神業的芸術作品『やる夫で学ぶTDD』のTogetter及びAAまとめです。テーマとしては以下のものを扱っております。

テーマごとのリンクはこちら。



LTSV from TDDBC Tokyo 2013-03
  • 課題その1
class LTSV {
  set(String key, String val) : String
  get(String key) : String
  dump() : String
}

ltsv = new LTSV();
ltsv.set( "foo", "hoge" ) #=> null
ltsv.get( "foo" )         #=> "hoge"
ltsv.dump()               #=> "foo:hoge\n"

ltsv.set( "bar", "fuga")  #=> null
ltsv.dump()               #=> "foo:hoge\tbar:fuga\n"

ltsv.set( "foo", "piyo")  #=> "hoge"
                          #     ↑ 置き換えられた値

ltsv.dump()               #=> "bar:fuga\tfoo:piyo\n"
                          #     ↑ 格納順にダンプされる

  • 課題その2
// 例外条件を考えてみよう

ltsv.get( "toto" )      #=> 存在しないキーの値はnull
ltsv.set( nil  , "momo" ) # nullキーは例外発生
ltsv.set( ""   , "gogo" ) # 空文字キーは例外発生
ltsv.set( "key", null )   # null値は例外発生
ltsv.set( "key", "" )     # 空文字値はOK -> dumpは?

// データにコロンが入ってたら?
// データに改行が入っていたら?
// データにタブ文字が入っていたら?
     #=> 上記は全てバックスラッシュでエスケープ

  • 課題その3
「いやー和田くん、こないだのLTSV、だっけ?」
「はい」
「ステキなんだけど、もうちょっと便利にしたいなぁ」
「はい(なんだろう・・・)」
「dumpがあるなら読み込みも欲しいよね」
「えっ」

// 読み込んでみよう
LTSV.parse(String dumpStr) : LTSV

例:
ltsv = LTSV.parse( "foo:hoge\tbar:fuga\n" )
ltsv.get( "foo" ) #=> "hoge"
ltsv.get( "bar" ) #=> "fuga"

// さて例外系はどうしましょう?