アルゴリズム

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

柳井政和
技術評論社

はじめに
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