技術書典7に、Haskellで競技プログラミングをやる本を出します

今週末の9月22日(日)に池袋で開催される技術書典7に、新刊「Haskellで戦う競技プログラミング」を出します。既刊「LaTeX処理自動化ツールClutTeX 使い方とその仕組み」も改訂して紙の本を頒布します。

技術書典7について、公式サイトより引用:

日時 2019/09/22 (日) 11:00〜17:00
場所 池袋サンシャインシティ 展示ホールC/D(文化会館ビル2/3F)
主催 TechBooster/達人出版会
一般入場は11:00~13:00のみ有料です。詳細はこちら

技術書典7

気になる方はサークル詳細からチェックリストに入れてください:

当サークルが配置されたのは「し03D」です。今回の技術書典は2Fの展示ホールDと3階の展示ホールCで行われますが、当サークルは2Fの展示ホールDです。会場が1箇所だった前回と同じ場所です。

新刊「Haskellで戦う競技プログラミング」について

タイトルの通り、Haskellで競技プログラミングをやる本です。競技プログラミング以外にも、正格評価の話や手続き型プログラミングのやり方等、Haskellでのプログラミングに役立つ内容が載っています。ByteStringやVector等の、準標準ライブラリーも扱っています。

「Haskellで戦う競技プログラミング」表紙

この本は、私と同じくHaskellでAtCoderに参戦しているgksatoさんとの共著です。

構成と大雑把な内容は、以下のようになります:

  • 第1章 入出力
    • 競プロ版Hello worldです。「標準入力から1行読み取って空白区切りで整数列として読み取る」みたいなこともやります。
    • 最初はStringでやりますが、競プロでの入力ではByteStringが必須なのでByteStringを使っていきます。
    • 出力に関しては大抵Stringでも問題ないのですが、最速を目指す人のためにByteString.Builderも軽く解説します。
  • 第2章 全探索
    • リスト内包表記やリストモナドで全探索をやるやつです。
    • ABC-Bの数え上げ問題のほか、より高度な例題としてナップサック問題を扱います。
  • 第3章 モジュラー計算
    • 「10^9+7で割ったあまりを計算する」みたいな話です。
    • newtypeを使ってIntMod型を定義する話や、モジュラー計算の高速化テクニックを扱います。
    • 合同計算の法が実行時に与えられる場合に使える技として、reflectionパッケージのreifyNatも紹介します。ただし現状のAtCoderのHaskell環境ではreflectionパッケージは使えません。早く言語アップデートが実施されるといいですね。
  • 第4章 正格評価
    • Haskellで高速なコードを書くなら避けて通れないのが正格評価とunbox化の話題です。
    • 正確性解析の話からBangPatterns, 正格適用 $!, そしてunbox化の話題まで一通り扱います。
  • 第5章 Vector
    • Vectorがなければ競プロはやってられません。
    • unboxed vectorを中心に解説していきます。
    • Stream Fusionにも触れます。
  • 第6章 手続き型プログラミング
    • すでにIOモナドやリストモナドを扱っていますが、改めてHaskellでの手続き型プログラミングのやり方を確認します。
    • Control.Monadの関数をいろいろ紹介します。
    • Intのような型に対してIORefが非効率的な話にも触れます。
    • 手続き型プログラミングの例として、エラトステネスの篩を実装します。配列の破壊的更新を使ったエラトステネスの篩と、リストのfilterを使った「エラトステネスの篩じゃないやつ」が計算量的にどのぐらい違うかも確認します。
  • 第7章 動的計画法
    • 動的計画法のいくつかの例題を解いてみます。
    • 取り上げる問題は、フィボナッチ数、ナップサック問題、最長共通部分列です。
    • 最長共通部分列の問題では、STUArrayでの2次元配列を使う方法と、Vectorを2段にして2段scanlで解く方法の2つを紹介します。

残念ながら締め切りの関係で書けなかったネタもいろいろあるので、適宜このブログ等で補足していきたいと思っています。

売れ行きが好調なら続編を出すかもしれないので、ガンガン買ってください!

既刊(ClutTeX本、代数的数)について

ClutTeX本「LaTeX処理自動化ツールClutTeX 使い方とその仕組み」は、8月にリリースしたClutTeX v0.4に対応させた改訂版を出します。すでに購入済みの方は、ダウンロードカードやBOOTHから再ダウンロードすることでv0.4対応の電子版を入手できるようにします。

「代数的数を作る」は前回と同じく、ダウンロードカードのみの販売となります。紙の見本は置いておきます。

既刊については、前回の告知記事も読んでください:

それでは当日、池袋でお会いしましょう。(当日来られない方向けには後日BOOTHで販売する予定です)