概要
本書は,プログラマによる,プログラマのための『コードの短さを競う「コードゴルフ」や,「アルゴリズム」の思考トレーニング集』。
設問を解いていくことで,プログラミングの考え方やおもしろさを実感できる一冊です。
好評を博しているリクルート運営のエンジニア向けWebサイト「CodeIQ」における著者作成問題を中心に,新規書き下ろしの設問も収録。「ミノタウロスもびっくり 迷路の自動生成」「自己相似な世界 フラクタルな図形を描く」等々挑戦したくなるような問題の数々&解説付きで,スキルアップ,トレーニングにも役立ちます。
こんな方におすすめ
- 力試しをしたいプログラマ,エンジニアの方
- パズルや頭の体操が好きな方
目次
- はじめに
- introduction 「コードゴルフ」と「アルゴリズム」
- コードゴルフとは
- アルゴリズムとは
- プレイグラウンドとは
- Web ブラウザ+ JavaScript のプレイグラウンドで遊ぶ/ JavaScript の特徴/プレイグラウンドの仕様とコード/コードゴルフの文字数/コードゴルフ問題の基本コード/アルゴリズム問題の基本コード/共通コード
第1 部 まずは雰囲気を知ろう
1.1 コードゴルフ 問題1 アスキーアートで円を描こう①
- ヒント 言語使用面から文字を削る
- 解答例
- 成績をみよう
1.2 コードゴルフ 問題2 アスキーアートで円を描こう②
第2 部 シンプルな手順をコードに変換
2.1 アルゴリズム 問題1 素数をみつける不思議な“ ふるい”
- ヒント 図説エラトステネスの篩
- ヒント ループ処理と配列
- 解答例
- プレイグラウンド
2.2 アルゴリズム 問題2 山あり谷あり最短経路を探せ
- ヒント 図説地形コスト付きマップの最短経路
- ヒント 再帰(的)処理の実装
- 解答例
- ヒント 別解答・スタック処理の実装
- 解答例
- プレイグラウンド
第3 部 短く書くテクニックを知ろう
3.1 コードゴルフ コードを削減するテクニック
- JavaScript の言語仕様に沿ったテクニック
3.2 コードゴルフ 短縮化ツール
3.3 コードゴルフ 問題3 ミノタウロスもびっくり 迷路の自動生成
- ヒント ボトルネックを探す
- ヒント 迷路を作るアルゴリズム
- ヒント コードゴルフ問題とランダム
- ヒント ランダムのアルゴリズム
- 解答例
- 番外編・迷路全体を文字列で持つというアプローチ
- 成績をみよう
- プレイグラウンド
第4 部 同じ目的を実現する様々な手法
4.1 アルゴリズム 問題3 計算式をコンピュータに理解させよ
- ヒント 計算式を整理する
- 解答例
- プレイグラウンド
4.2 アルゴリズム 問題4 画像を“ びよ~ん” と拡大しよう
- ヒント 画像の拡大縮小アルゴリズム
- 解答例
- プレイグラウンド
第5 部 短いコードで複雑な世界を出力
5.1 コードゴルフ 問題4 自己相似な世界 フラクタルな図形を描く
- ヒント 「for」文に注目
- ヒント フラクタルな図形
- 成績をみよう
- プレイグラウンド
5.2 コードゴルフ 問題5 山・平地・海 ワールドマップを生成する
- ヒント 変数と「for」文
- ヒント ワールドマップ生成
- 成績をみよう
- プレイグラウンド
第6 部 限られた情報から全体を想像する
6.1 アルゴリズム 問題5 燃料を節約して未知の地形を踏破せよ
- ヒント マップを言語化する
- ヒント マップ生成のアルゴリズムを読み解く
- プレイグラウンド
6.2 アルゴリズム 問題6 暗黒惑星での戦い 敵を索敵して撃滅せよ
- ヒント 砲撃の場所を考える
- ヒント マップ生成のアルゴリズムを確認する
- ヒント 計算量を削減する
- プレイグラウンド
第7 部 問題を作ってみよう
7.1 コードゴルフ問題を作成する
7.2 アルゴリズム問題を作成する
サポート
ダウンロード
ダウンロードを行う前に
次の点についてご確認のうえ,ダウンロードを行ってください。
- 本データの利用につきましては,通常の使用状態では何の問題も発生しないことを確認しておりますが,万が一障害が発生し,その結果いかなる損害が発生したとしても弊社および著者は何ら責任を負うものではありません。そのため,一切の保証をいたしかねます。予めご承知おきください。
- 本データは著作権法上の保護を受けています。収録されているファイルの一部あるいは,全部において,無断で複写,複製,再配布することは禁じられています。以上のことをご確認,ご了承の上,データをご利用ください。
本データのダウンロード
サンプルコードは,プログラムごとに1つにまとめられ,ZIP形式で圧縮してあります。ダウンロード後は解凍してお使いください。解凍すると,そのフォルダ内には,各プログラムのソースコードが格納されています。
- ダウンロード
- サンプルコード
正誤表
本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。
(2014年12月11日更新)
P.50 3行目
誤 |
4. 細かな整理をする 88文字、18% |
正 |
4. 細かな整理をする 85文字、17% |
P.50 コード部分
掲載内容 |
function yourCode() {
r=""
s=256
for(x=y=h=48;y+h;r+=x--+h?((d<s*4)+(d<s)):(x=h,y-=2,"\n"))d=x*x+y*y
return r;
}
|
改良後 |
function yourCode() {
r=""
s=256
for(x=y=h=48;y+h;r+=x--+h?(d<s*4)+(d<s):(x=h,y-=2,"\n"))d=x*x+y*y
return r
}
|
書籍に記載のコードは間違いではありません。さらに短いコードに改良したものです。
P.50 コード下部
誤 |
もっと短く書けるかもしれませんが、88文字でストップです。 |
正 |
もっと短く書けるかもしれませんが、85文字でストップです。 |
P.58 1.最初の状態 探索リスト
誤 |
2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 10 20
|
正 |
2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
|
P.237 図7 移動コスト
以下の位置が正しいものです。