プログラムのためのコードパズル


プログラマのためのコードパズル ~JavaScriptで挑むコードゴルフとアルゴリズム


技術評論社


著者:柳井政和


はじめに
introduction「コードゴルフ」と「アルゴリズム」
 コードゴルフとは
 アルゴリズムとは
 プレイグラウンドとは
  Webブラウザ+JavaScriptのプレイグラウンドで遊ぶ
  JavaScriptの特徴
  プレイグラウンドの仕様とコード
  コードゴルフの文字数
  コードゴルフ問題の基本コード
  アルゴリズム問題の基本コード
  共通コード

第1部 まずは雰囲気を知ろう
1.1 アスキーアートで円を描こう①
ヒント 言語使用面から文字を削る
解答例
 成績をみよう
1.2 アスキーアートで円を描こう②
解答例
プレイグラウンド

第2部 シンプルな手順をコードに変換
2.1 素数をみつける不思議な”ふるまい”
ヒント 図説エラトステネスの篩
ヒント ループ処理と配列
解答例
プレイグラウンド
2.2 山あり谷あり最短経路を探せ
ヒント 図説地形コスト付きマップの最短経路
ヒント 再帰(的)処理の実装
解答例
ヒント 別解答・スタック処理の実装
解答例
プレイグラウンド

第3部 短く書くテクニックを知ろう
3.1 コードを削減するテクニック
JavaScriptの言語仕様に沿ったテクニック
3.2 短縮化ツール
短縮化ツールを使ってみよう
3.3 ミノタウロスもびっくり 迷路の自動生成
ヒント ボトルネックを探す
ヒント 迷路を作るアルゴリズム
ヒント コードゴルフ問題とランダム
ヒント ランダムのアルゴリズム
解答例
番外編 迷路全体を文字列で持つというアプローチ
 成績をみよう
プレイグラウンド

第4部 同じ目的を実装する様々な手法
4.1 計算式をコンピュータに理解させよ
ヒント 計算式を整理する
解答例
プレイグラウンド
4.2 画像を”びょ〜ん”と拡大しよう
ヒント 画像の拡大縮小アルゴリズム
解答例
プレイグラウンド

第5部 短いコードで複雑な世界を出力
5.1 自己相似な世界 フラクタルな図形を描く
ヒント「for」文に注目
ヒント フラクタルな図形
 成績をみよう
プレイグラウンド
5.2 山・平地・海 ワールドマップを生成する
ヒント 変数と「for」文
ヒント ワールドマップ生成
 成績をみよう
プレイグラウンド

第6部 限られた情報から全体を創造する
6.1 燃料を節約して未知の地形を踏破せよ
ヒント マップを言語化する
ヒント マップ生成のアルゴリズムを読み解く
プレイグラウンド
6.2 暗黒惑星での戦い 敵を索敵して撃滅せよ
ヒント 砲撃の場所を考える
ヒント マップ生成のアルゴリズムを確認する
ヒント 計算量を削減する
プレイグラウンド

第7部 問題を作ってみよう
7.1 コードゴルフ問題を作成する
判定方法と短縮化回避への対策
問題に仕掛けを作る
問題自体に意味を持たせる
自分で解いてみる
7.2 アルゴリズム問題を作成する
アルゴリズム問題の分類
コメントを記述してもらう

おわりに
参考資料
index

書籍目次

Posted by shi-n