寿司以外のものを回せないのか

回転する外食というと寿司くらいしかないが、他のものは回せないのだろうか。例えばマクドナルドとか。

回転寿司の特徴というと、

  1. 一品目が小さい
  2. メニューが多い
  3. 次々食べる

といった、多品目・大量消費が中心で、個別の注文に答えると面倒だけど、適当なものつくっておくと注文が入ってくるようなところがある気がする。

低価格帯の飲み屋とか注文してもなかなか出ないし、おつまみをどんどん注文するものだし、特徴がマッチしている気がする。この辺とか回すとちょうどよかったりしないのだろうかね。

実用のための身も蓋もない shift/reset

まず、answer type modification のことは忘れてください。次に実行モデルを思い浮かべて monad を作りましょう。unitbind が必要です。(3/12追記: monad 則にも注意しましょう)最後に

reflect = λm. shift (λk. bind (m, k))
reify = reset . unit

という感じにしましょう。 reflect という get っとぽいものが裏でこっそり bind にしてくれています。 おしまい。

普通の monad は最初に unit して外から bind で繋いで大きくしていくけど、 shift/reset を使うと最初に全体を reify でくるんで中から reflect で切って(繋ぎ直して)いくイメージ。

なお、ScalaCPS plugin では型推論に失敗します。(ひどい…)

ちなみに answer type modification がある方は、普通の monad じゃなくて indexed monad とかいうのを元にするといいみたいです。(未検証)

TeX 文字数カウント

アブストとか書くと文字数を数えておいたほうがよくて、さらにいうと文書中に埋め込めれている方が嬉しい。ということでメモ。

文字数を数えるLaTeXマクロ | Sukarabe's Easy Livingを参考にした。

\makeatletter
\def\WordCount#1{%
  \@tempcnta\z@
  \@tfor \@tempa:=#1\do{\advance\@tempcnta\@ne}%
  \begin{quote}#1\end{quote}
  \the\@tempcnta 文字
}
\makeatother 

クリームシチュー

某所で作ったクリームシチューの作り方覚え書き

  1. えのき、ぶなしめじ、舞茸、ホワイトマッシュルームを適当に切って鍋に放り込む。サラダ油を注いでシャッフルして適当に加熱。
  2. 十分加熱すると鍋に隙間が空くので鶏もも肉と冷凍牛肉のぶつ切りを鍋に放り込んで一緒に加熱。
  3. 鍋の中身を1回外に出して、野菜 (にんじん・なす・たまねぎ) を適当に切って入れる。適当に加熱。
  4. 鍋の中身を1回外に出して、さっきのと合わせて半分ずつ鍋に入れる。 (4~5 人前しか鍋に入らないため)
  5. 煮込む。
  6. ルーを半分入れる。
  7. 煮込む。
  8. 牛乳を適当に注ぐ。
  9. 煮込む。
  10. 鍋の中身を外に出して、残りの半分を鍋に入れて 5-9 を行う。
  11. こっちはそのまま自分で食べる。うまい
  12. 食べ尽くした頃には 10 で外に出した分が十分寝かされたはず。できあがり

競プロでは特化したアルゴリズムを使わないんですか?

Q: 競プロでは汎用アルゴリズムで満足して問題特有の性質に基づいて平均性能を向上させたアルゴリズムは使わないのですか?

A: 使います。ただし、そういう問題があれば。

競プロでのアルゴリズムの選択基準は、主に実装量最悪計算量です。平均計算量を下げるだけアルゴリズムは実用上重要かもしれませんが、漸近的な最悪計算量が変わらなければ、大抵の場合、実装量を増やすばかりか、最悪計算コストも定数のオーバーヘッドが大きくなるだけになることが大半なので嫌われます。競プロでは広義の heuristics という扱いです。

なお、特化したアルゴリズムを普及させたいなら、そのアルゴリズムの計算量を決める implicit な parameter が自然に出てくるような問題設定を考え、出題してみるとよいでしょう。

行の移動の追跡

diff/patch ってリファクタリングとかで行を入れ替えたり、コピペしたりすると追跡できなくなりますよね。それに対応するツールってないのでしょうか。

Comparison of file comparison tools - Wikipedia, the free encyclopedia を見ると一応検出用ツールはあるっぽいですね。ただ、この表幾つか誤りがあるっぽいので、ちょっと怪しいですが。

CVS とかでは、必要な機能ではないかなあと思うのですが。…と思って調べてみたところ、 git blame -M では行の移動とかちゃんと検出するっぽいですね。