2005-06-01 [長年日記]
λ. Monadius - a scientist's toy box
メモ。
グラディウスを知らないので何とも言えないけど、普通に難しいね。あと、コンティニューしても最弱装備で再開なのですぐやられてしまうし、コンティニューの意味があんまし無い気がした。
λ. 投票による結果報告
投票COが有りならば、能力の判定結果を投票で報告するというのも有りだと思うのだけど、使われているのを見たことは無い。これは何故だろう?
(追記) C410村では靈能結果の報告を投票で行う案を提案してみました。
λ. お昼ごはん
2005-06-03 [長年日記]
λ. 人狼審問: (538)バイオ村-ハイブ編-
を感染中、もとい観戦中。人狼審問は人狼BBSとはまた雰囲気が違っていて、いいですね。そして、バイオ村という設定に案外違和感がなくてビックリ。面白い。
λ. Type Theory and Functional Programming. Simon Thompson
田中君のところから。メモ。
2005-06-04 [長年日記]
λ. 村人にとっての最大の敵
D452村のレジーナがいいことを言っていたので引用。
この戦い、村人にとって最大の敵は『自分の理屈の通じない村人』なんです。
「占い師ならばこうするハズ」「村人ならばこうは言わないハズ」
そんな自分の理屈を簡単に蹴飛ばしてくれる味方こそが、推理を惑わす、人狼よりもはるかに手強い相手なんです。
その場合の対策は、まず態度と人となりを見ること。
この2つはなかなか嘘をつき難いので。
λ. Qualified Types for MLF by Daan Leijen and Andres Löh
Draft: Revision: 167 を読んだ。
以前に横山さんのところで、Haskellの rank-n polymorphism を使ってチャーチ数(Church numerals)の引き算が定義できないという話があったが、あれは Haskell の rank-n polymorphism は predicative rank-n polymorphism で、型変数を多相型でインスタンス化出来ないから。まあ、newtypeをかまして単相型にするという抜け道はあるけど、実用的ではないよね。提案している型システムMLFは impredicative rank-n polymorphism をサポートするのでそういった問題はない。
【追記】 GHCはこれとは別の形で impredicative rank-n polymorphism をサポートした。⇒ GHC and impredicativity
λ. 韓国海警と日本巡視船が15時間海上で対峙
底に哀はあるの。(2005-06-02) に書いてあった小熊さんの意見に激しく同意。
それにしても、こういうニュースを見るたびに徒労感を感じる。なんというか、韓国という国家の存在自体が壮大なネタなんじゃないかという気がしてきたよ。
2005-06-05 [長年日記]
λ. Haskell と OCaml
型システムに注目すると、HaskellになくてOCamlにあるのは、Object, Polymorphic Variant, Functor (parameterized module) かな。一方OCamlになくてHaskellにあるのは、Higher Order Polymorphism, Type Class (Ad-hoc Polymorphism), (Predicative) Rank-n Polymorphism, GADT(Generalized Algebraic Data Types) といったあたりだろうか。*1
Haskellで型関係の宣言に data, newtype, type の三つがあるのが分かりにくい というのは一理あるけど、これらはそれぞれ違った意味を持っているので、全部一緒にしてしまうのが良いかどうかは一概には言えないと思う。少なくとも私がOCamlを最初に触ったときには全部typeで済ませていることに少し混乱しました。
- 関連エントリ
*1 多分
2005-06-09 [長年日記]
λ. ブロックエクステンド
Import Module がそのものずばりかな。そういえば、class-in-state と scope-in-state はどうなったんだろう……
2005-06-16 [長年日記]
λ. C410 封印の村 (ネタばれ注意)
負けちゃった。村側に突然死5という時点で厳しかったけど、勝ち目が全くなかったという訳ではないのに狭義狼側完全勝利……悔しい。村側の能力者は共有者しかやったことなかったので、いっちょ占い師でもやってみるかと思って、占い師を希望してみたんだけど……信頼を得るのって難しいね。極端な事例ではあるけれど、この村は大変勉強になりました。
キャラクタはモーリッツを選択。最初は仙人(道士)のRPをしようかと思ってたのだけど、ネタを用意するのが面倒になって止める。かわりに、前から一度やってみたかった旧字・旧仮名遣いでのRPに挑戦。旧字・旧仮名遣いのためのIMEの辞書で気に入ったものが見つからなかったので、入力は 旧仮名・旧字変換支援 misima を使って変換しました。それから、野嵜さんの「正かなづかひ早分り」を参考にさせて貰いました。 素晴らしいサービスと素晴らしい文章をありがとうございます。
敗因は、エピローグでも指摘されてるけど、三日目に「ペーター霊能者・ヨアヒム人狼なら、ペーターに白白は変。よって、ヨアヒム霊能者・モーリッツ占い師」という推論に到達出来なかったというのが最大のものだろうな。こんな単純な推論に考えが至らなかったのが悔しい。もっとも、モーリッツの口から言っても効果は薄いのだけど。
それと、疑問が出てきた。二日目はモーリッツだけに占われて黒判定を受けていたカタリナを放置して、突然死しそうだったアルビン吊った。これには多くの人が賛成していたのだけど、これは果たして適切な選択だったのだろうか?
これもエピローグで指摘されているけど「モーリッツが占い師ならば、残り狼の数に関わらず、翌日には狼側の霊能者は狼が全員生きている判定を出す可能性が高い」。よって、翌日になればカタリナを安全に吊れるということはなくて、2日目よりも3日目の方が「失敗したら負け」という点で、カタリナ吊りのリスクは大きくなる。また、翌日黒確定が出るのもまず期待できない。ならば、モーリッツが庇っていたアルビンと、モーリッツが黒判定を出したカタリナは別陣営と考え、アルビンの突然死と同時にカタリナを吊るというのが最大のリスクヘッジだったのではないか?
- 関連URL
-
- 人狼BBS:C C410 封印の村
- 人狼BBS まとめサイト - C410村
- 人狼BBSの事をぐだるページ:C410村, yuragiさん(ペーター)のブログ
λ. 『余は如何にしてナショナリストとなりし乎』, 福田 和也
λ. C410村で提案した、靈能結果の報告を投票で行う案
以前に日記で投票による結果報告について書きましたが、この村では初日に突然死が大量にあったので、霊能者が投票COで同時に突然死者中の狼の人数を伝えることを二日目に提案してみました。
- 老人 モーリッツ 午後 6時 19分
- ■1. 靈能の結果報告を今日の投票で行ふといふ案を考へてみた。具體的には「突然死者に含まれる人狼數が0,1,2名ならそれぞれA,B,Cに投票」といつた感じ。檢討してみて慾しい。
- 羊飼い カタリナ 午後 8時 53分
- ■1.霊能者さんが発投票COする場合、お爺さまの案を考えてみましたわ。
今日の生存者リスト順に並べます。
羊屋老旅商年者神青妙木。狼残0なら自分の一つ後ろの人に投票。1なら1つ前、2なら2つ前。但し、今日の投票先がありますから、その方は抜きます。
ニコラスさんで説明させていただきます。0ならアルビンさんに、1ならお爺さまに、2ならオットーさんに。先頭の私と最後のトーマスさんはつなげます。私だと、0オットーさん、1トーマスさん、2リーザさん。これなら投票先誰々とした時、その人が霊能者さんだったら?という事を考えなくて済みますわ。- 老人 モーリッツ 午後 10時 46分
- カタリナの投票CO案は興味深いのう。カタリナとは何だか氣が合ひさうぢや。
ちなみに儂は以下のやうな別の案を考へてをつた。
「突然死者中に狼0ならジムゾン、1ならペーター、2ならモーリッツに投票。ただし、指定された投票先が自分自身の場合にはニコラスに投票」(人物名は仮のもの)
(ところで、「狼残0」ならゲームが既に終はつてゐなくちやいけないやうな……)
2005-06-19 [長年日記]
λ. 花映塚体験版をようやくプレイ
人狼BBSも決着がついたし、体験版(ver 0.02a)にようやく挑戦。今回は通常ショットを打ち続けるにはショットボタンを連射しなくちゃいけないので、最初は腕が疲れて仕方が無かったけど、途中で連射するのではなくコンボを狙っていくゲームだと気付く。
Hardは普通にクリアできるけど、Lunaticの3人目が手強すぎる。一度だけ勝てたけど、コンティニューしてしまっていたので、リプレイも残ってない。
λ. 『ジゴロ』, 中山 可穂
2005-06-23 [長年日記]
λ. Greasemonkeyで人狼BBSの発言数カウント他
というわけで、Greasemonkeyの習作として、「発言数カウント機能」「キャラごとの発言on/off機能」「発言種類ごとの発言on/off機能」を実装してみた。firefoxとGreasemonkey入れて、wolf.user.js をインストールして、試してみるべし。スクリーンショットはこんな感じ。
珍しくjavascriptなんて書いたら、javascriptのfor文にはまって、一時間くらい時間を無駄にしてしまった。「for (var x in array){ ... }」とか書いたときって、xに入るのは要素でなく添え字なのね……
(2005-10-12 追記) あとれどさんという方が「フィルタ切り替え部分のページ右上固定」と「個別の発言に対するフィルタの追加」という改造をしています。こちらもどうぞ。Not a Symbol (2005-09-25)
(2005-12-02 追記) cuctusさんという方から「FireFox 1.5 + GreaseMonkey 0.6.4 で動作しない」という報告を頂いたのでサクっと修正*1。ついでにコードをちょっといじった。
(2006-06-02 追記) 改良可能な点は多々あるが、最近は人狼審問の方に移ってしまったこともあり、やる気なし。とりあえず、改良可能と思われる点を幾つか挙げておく。これらはある程度のjavascriptの知識さえあれば誰でも出来ると思う。
- パネル位置を横に固定するか、人狼審問風にドラッグできるようにする
- GM_getValue/GM_setValueを使って設定を保存
- JBのように発言に対して「名言」「怪しい」「注意」を記録できるようにする。これもGM_getValue/GM_setValueを使う
- 発言ポップアップ。これはスクリプトを分けたほうが良いと思う。基本的には人狼審問用の発言ポップアップスクリプトのコードを流用すればよいが、色々ヒューリスティックが必要なのが面倒。あと、インターフェースはJE改造実験室のものに合わせるかどうか。これに合わせると再帰的なポップアップは出来なくした方が自然そうだが……
*1 原因はと言うと、GreaseMonkey 0.6.4 ではセキュリティのために XPCNativeWrapper を使うようになったため、onclick等のプロパティを使えなくなっていたこと。まあ、onclickなんてもとより非標準のAPIだし、標準のaddEventListenerに移行するいい機会だと思う。
2005-06-24 [長年日記]
λ. BiGram の実装
だいぶ前の話題だけど、この辺りから。
- http://tokuhirom.dnsalias.org/~tokuhirom/inamode2/lily.cgi/91.html
- http://d.hatena.ne.jp/squall_kt/20050223#1109094421
- http://d.hatena.ne.jp/squall_kt/20050224#1109226166
関数型言語ならやっぱりzip使うよな。Haskellだとこんな感じだけど、OCamlだとどんな風に書くのが普通なんだろうか?
import Data.Map biGram :: String -> Map (Char,Char) Integer biGram [] = empty biGram s = fromListWith (+) $ zip (zip s (tail s)) (repeat 1) main :: IO () main = do s <- getContents let g = unionsWith (+) [biGram l | l <- lines s] flip mapM_ (toList g) $ \((a,b),n) -> putStrLn $ [a,b,'\t'] ++ show n
……とか書いてたら、soutaroさんからOCaml版のコードが! 感謝なり。
さらに、向井さんからもOCamlの別のコードとsoutaroさんのコードに関するコメント。花谷さんからもHaskellでParsec を使ったコード。sumimさんからはSmalltalk版のコードが。これまた感謝なり。
λ. 587 安らぎの村
C304村のエピローグでmayunecoさんに「最後の決着がランダムで決まってしまっている村」として教えてもらった587 安らぎの村(まとめサイト)を読んだ。 後味がちと悪いのはランダムになったこと自体が原因ではなく、最終日に十分に議論できなかったのが原因だな。 勝負自体は白熱したいい勝負だったと思う。 あと、4日目のトーマスの以下の台詞が気に入った。
- 木こり トーマス 午前 0時 47分
- まぁ、偽者は自然に見える事しか言わないだろう。
けど、真の場合は真実しか言えないからな。たとえそれが自分が偽に見えるような判定であってもだ。
λ. 『社会保障を問いなおす—年金・医療・少子化対策』, 中垣 陽子
を読んだ。年金については大体知っている話だったし、著者の案は「税財源による基礎年金と、保険料に基づく所得比例型の二階部分」「年金一元化」という点では私の考えているものとほぼ同じだった。だけど、医療・少子化については色々と新鮮だった。これら全てについて一貫した視点から論じているのは貴重かもしれない。社会保障の考え方と、今何が問題になっているのかを手っ取り早く把握したい人には、お勧め出来る。私も「社会保障論」の授業で得た知識と併せてようやくちょっと分かってきた気がする。
不満点としては経済学的な視点がもう少し欲しかったかな。これらの議論への経済成長率の変化の影響とか、物価の変動の影響とか、高齢化に伴う貯蓄率の変化とか……
ところで、少子化について議論するとき、私はいつも「結婚・出産の機会費用が大きくなった」という考えを主張しているのだけど、具体的などれくらいの機会費用なのかは知らなかった。この本によると『内閣府「経済財政白書」(二〇〇三年)によれば、大卒の女性が出産・子育てのために一旦退職し、その後でフルタイムの仕事に復帰した場合に失う所得は八、五〇〇万円、出産・子育て後、パートで働いた場合には二億四、〇〇〇万円となっている』だそうだ。色々と考えなくちゃいけない部分はあるけど、「まあ、そんなものかな」と感じる。
2005-06-25 [長年日記]
λ. 海猿
λ. Greasemonkeyでリンク先のURLを書き換え
某サイトでかまされていたリダイレクトがうざかったので、以下のようなスクリプトで対処。簡単なスクリプトだけど案外便利。
const links = document.links for (var i in links) { const link = links[i] if (link.href) { if (link.href.match(/.+(http://[^&;]*)/)) link.href = RegExp.$1 else if (link.href.match(/.+(http%3a%2f%2f[^&;]*)/i)) link.href = unescape(RegExp.$1) } }
2005-06-28 [長年日記]
λ. ICPC過去問: Circle and Points
例によってHaskellで瞬殺(Circle_and_Points.hs)。本番じゃHaskell使えないけどな。
あるn(≧2)点を囲むような円があるとする。このとき、円をずらすことで、それらの点を全て囲んで、かつその内の2点が円周上にくるようにすることが出来る。つまり、2点が円周上にくるような円だけを調べても一般性は失われない。(2005-07-22 追記: このことについては sheepman さんによる説明 が分りやすい)
(追記: 誤差が少し心配だったので、円周上に持ってきた二点を無条件で円に囲まれているものとして扱うよう変更した。)
それと、sumimさんがSmalltalk版を書いてくれました。Smalltalkの勉強になります。
2005-06-29 [長年日記]
λ. 『11人いる! 』, 萩尾 望都
を読んだ。粗筋は知っていたけど、読んで鳥肌が立った。『銀の三角』を読んだときも思ったけど、萩尾望都は天才だと思う。
あと、11人目を探して疑心暗鬼になるのはちと人狼っぽいと思った。
λ. ICPC過去問: Water Tank
お題は面白いが、プログラミングは単に面倒なだけ。下らないバグを作ってしまい、デバッグに時間がかかってしまった。
同じ高さの区切り板がないことが保障されているのが重要。二分木を使って区間を管理する。区切り板で区切られた区間をLeaf、区切り板をBranchとして、任意の部分木についてその間にある最も高い区切り板が根となっているようにする。
λ. "Implementing Functional Language: a Tutorial" 読書会?
S. P. Jones and D. Lester, Implementing Functional Language: a Tutorial, Prentice Hall かぁ。都合があえば参加したいかも。
λ. 人狼審問: (638)短期ハリセン村22
短期村の記録を読むのは初めてなのだけど、ペースが速すぎてとても着いていけなさそう。あと、名前が長いというしょーもない理由で誤って吊られているコーネリアスにウケた。
2005-06-30 [長年日記]
λ. The 2005 GHC survey
出てますよ。
λ. 『道路の経済学』 松下 文洋
λ. CのプログラムからHaskellの関数を呼び出す
soutaroさんの「CのプログラムからOCamlの関数を呼び出す」というエントリに触発されて、Haskellの場合について書いて見た。OCamlの場合に比べると幾分面倒くさい。
- Foo.hs
-
module Foo where import Foreign.C f :: CInt -> CInt f x = x + 1 foreign export ccall "f" f :: CInt -> CInt
- main.c
-
#include <stdio.h> #include "HsFFI.h" #ifdef __GLASGOW_HASKELL__ #include "Foo_stub.h" extern void __stginit_Foo ( void ); #endif int main(int argc, char *argv[]) { hs_init(&argc, &argv); #ifdef __GLASGOW_HASKELL__ hs_add_root(__stginit_Foo); #endif printf("f(%d) = %d\n", 3, f(3)); hs_exit(); return 0; }
- コンパイル
-
% ghc --make -fglasgow-exts Foo.hs % ghc -c main.c % ghc --make -fglasgow-exts -no-hs-main Foo.hs main.o
一行目は Foo_stub.* を作るため。
ここでは書かなかったが、実行時にHaskellの関数をCの関数に変換することも一応出来る。
ψ yuragi@c365Joachim [○日に占った人が白なら×さん、黒なら△さんに投票っていうのだよね? 意見として出たのは見たことあるけど、実行されたの..]
ψ yuragi@c365Joachim [朗報。A250村の二日目で決行されてたよ。]
ψ さかい@c365Jacob [白黒だけでなく、誰を占ったかを投票で報告するとか幾つかバリエーションは考えてました。でも、どれも奇手の類かなぁ。 ..]