急速な技術の進歩、システム開発競争の激化……。プログラマを取り巻く環境はやさしいものではありません。でも、思い出してみてください。自分の書いたソースコードでプログラムが動くのを初めて見たとき。思い描いた通りのプログラムができたとき。プログラミングの楽しさを感じたことでしょう。何もないところからソースコードだけで新たな価値を生むプログラマは、非常に魅力的な職業です。
本書で登場する数学パズルは、そのようなワクワクにあふれています。「両替したときの硬貨の組み合わせはいくつ?」のような問題から、「国名でしりとりしたときに、一番長く続く順番は?」「運命の出会いは何通り?」というものまで、70の問題を解くコードを、3人のキャラクターたちと一緒に考えていきます。
パズルを解くうちにアルゴリズムが身につき、シンプルで高速なコードが書けるようになります。楽しみながらスキルアップもできて一石二鳥。さっそく挑戦してみましょう!
【使用言語について】
本書の解説では、主にRubyとJavaScriptを使用していますが、解説内容は「考え方」が中心であるため、どんな言語にも応用できます。また、問題を解くために特定の言語が必要になることもありません。
【本書に収録されている問題(抜粋)】
Q01 10進数で回文
Q03 カードを裏返せ
Q08 優秀な掃除ロボット
Q09 つりあわない男女
Q21 排他的論理和で作る三角形
Q33 百人一首の達人
Q45 素数のマトリックス
Q48 グレイコードのループ
Q53 いたずらされたお菓子
Q64 迷路で待ち合わせ
第1章 入門編★プログラムを作って問題を解いてみよう
2進数と10進数
Q01 10進数で回文
Q02 数列の四則演算
Q03 カードを裏返せ
Q04 棒の切り分け
Q05 いまだに現金払い?
Q06 (改造版)コラッツの予想
Q07 日付の2進数変換
Q08 優秀な掃除ロボット
Q09 つりあわない男女
Q10 ルーレットの最大値
第2章 初級編★★簡単な問題を解いてアルゴリズムの効果を実感しよう
費用対効果を意識する
Q11 フィボナッチ数列
Q12 平方根の数字
Q13 覆面算を満たすのは何通り?
Q14 W杯出場国しりとり
Q15 階段で立ち話
Q16 3本のひもで作る四角形
Q17 30人31脚に挑戦!
Q18 ショートケーキの日
Q19 友達の友達は友達?
Q20 受難のファサードの魔方陣
Q21 排他的論理和で作る三角形
Q22 絡まない糸電話
Q23 ブラックジャックで大儲け!?
Q24 完璧に撃ち抜くストラックアウト
Q25 オシャレな靴ひもの結び方
Q26 効率のよい立体駐車場
Q27 右折を禁止されても大丈夫?
Q28 クラブ活動への最適な配分
Q29 合成抵抗で作る黄金比
Q30 テーブルタップで作るタコ足配線
第3章 中級編★★★アルゴリズムを工夫して高速な処理を実現しよう
オーダー記法と計算量
Q31 最短経路の計算
Q32 畳を敷きつめろ
Q33 百人一首の達人
Q34 飛車と角の利き
Q35 運命の出会いは何通り?
Q36 「0」と「7」の回文数
Q37 サイコロの反転
Q38 7セグメントコードの反転
Q39 「白」で埋めつくせ!
Q40 並べ替えの繰り返し
Q41 美しい?IPアドレス
Q42 1つの数字で作る1234
Q43 シャッフルで逆順
Q44 グラスの水を半分に
Q45 素数のマトリックス
Q46 ソートの交換回数の最少化
Q47 オンリーワンな○×
Q48 グレイコードのループ
Q49 反転で作る互い違い
Q50 急がば回れ
Q51 パーフェクトシャッフル
Q52 同時に終わる砂時計
Q53 いたずらされたお菓子
Q54 同じ数字で挟み撃ち
Q55 横着なそろばん
Q56 公平に分けられたケーキ
第4章 上級編★★★★視点を変えて高速化を目指してみよう!
ソースコードの個性
Q57 あみだくじの横線
Q58 最速の連絡網
Q59 ハンカチ落としの総走行距離
Q60 セルの結合パターン
Q61 同じ大きさに分割
Q62 交差せずに一筆書き
Q63 カレンダーの最大長方形
Q64 迷路で待ち合わせ
Q65 面倒なキャッチボール
Q66 図形の一筆書き
Q67 クロスワードパズルを作成せよ!
Q68 隣り合わないのがマナー?
Q69 男女平等な席替え
Q70 青白歌合戦
kaizen@名古屋de朝活読書会 さん
2017-01-06
増井敏克 #技術士 プログラム書くと簡単解けるものRuby JapaScript打つ プログラム書かずに解ける問題もどちらもあること知れば賢し
calicalikoume さん
2019-08-17
本書を通じて主に再帰を使ったパターン検索と便利な組み込み関数の使い方が自然と身についたと思います。高速化としてはメモ化やビット演算の活用が印象に残っています。数学的な解き方はなかなか気付けず、解答を見て頷く事が多かったです。問題を解く中で、自分のコードでは計算が終わらず解答のアルゴリズムだと一瞬で解けるケースがあったりして何度か衝撃を受けました。Rubyが読めるようになるまでは苦労しますが、解答はシンプルなものが多く説明も丁寧なので理解しやすいと思います。
しんしん さん
2015-10-30
今までに読んだプログラミングパズルの本の中で一番楽しかった。 問題を読んで、アルゴリズムが組み立てられたら次に進むということを1冊続けられたのは自信になった。 問題の題材も楽しくて、本のページ構成も解くことに集中させてくれた。