ペアプロ・TDDの『お題』をまとめてみた #tddbc #coderetreat #pp_con

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

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

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


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

うるう年問題 from TDDBC

LRU Cache from TDDBC

ワードフィルタ from TDDBC

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

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

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

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

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

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

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

野球の打率計算 from TDDBC横浜
TheBowlingGameKata


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

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

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

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

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


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

テスト駆動開発入門

テスト駆動開発入門

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

マイヤーズの三角形

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

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

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

上記版だと入手不可のようなので別版のリンクを追加。
ソフトウェア・テストの技法 第2版

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

  • 作者: J.マイヤーズ,M.トーマス,T.バジェット,C.サンドラー,Glenford J. Myers,Todd M. Thomas,Tom Badgett,Corey Sandler,長尾真,松尾正信
  • 出版社/メーカー: 近代科学社
  • 発売日: 2006/08/01
  • メディア: 単行本
  • 購入: 7人 クリック: 267回
  • この商品を含むブログ (47件) を見る

codebreaker

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

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

仕様
 ・当たりの数は一つ
 ・横線がランダムに配置されること
 ・横線の数>0
 ・横線が複数繋がってはいけない
 ・人数の指定ができるようにする
数字を英語表記に変換(English Numerals) from みなとRuby会議01
オフラインリアルタイムどう書く

お題を元に会場でリアルタイムにチャレンジする、という勉強会のようです。
プログラマの技術情報共有サービス『Qiita(キータ)』とも連動している模様。

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

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

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


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まとめです。テーマとしては以下のものを扱っております。

  • Myersの三角形
  • CSVParser
  • プログラマにやさしいNEET判定
  • ボウリングのスコア計算

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

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"

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