ぷよぷよ19連鎖JavaScript版

ゲーム「ぷよぷよ」で、フィールドの状態がテキストで与えられたとき、消える「ぷよ」を消して次のフィールドの状態を出力するプログラムを書け。 http://okajima.air-nifty.com/b/2011/01/2011-ffac.html 前回書いたHaskell版のアルゴリズムのままJavaScrip…

ぷよぷよ19連鎖

ゲーム「ぷよぷよ」で、フィールドの状態がテキストで与えられたとき、消える「ぷよ」を消して次のフィールドの状態を出力するプログラムを書け。 http://okajima.air-nifty.com/b/2011/01/2011-ffac.html この問題を見たときに、Haskellで解いてみたいと思…

ポイントフリーコンバータ

Haskell風に書かれた関数定義やラムダ式を、(.)やflipを使ったポイントフリースタイルに変換するプログラムを作ってみた。 http://kar.s206.xrea.com/js/pointfree.html 使用例1 例えばここにある問題を解かせてみる。 ポイントフリースタイル入門 - melpon…

タイピング測定

タイピング速度を測定するプログラムをつくってみた。 http://jsdo.it/katona/typing上段のtextareaの課題文を下段のtextareaに入力する。 1文字目の打ち始めから計測を開始するやや有利(?)な仕様。 <html> <head> <title>Typing</title> <script> function key(f){ while(f.src.value.indexO</head></html>…

高階関数クイズ

# let twice f x = f (f x)これは f という関数と値 x をもらって、f を二回 x に適用する関数です。 さて、では、 # twice twice twice twice add1 0 は何が帰って来ると思いますか? http://d.hatena.ne.jp/camlspotter/20100710/1278752186 ・twiceはチャ…

コンビネータ版チャーチ数の加減乗除

たった1つの関数から出発して昨日やったチャーチ数の加減乗除 - MEMO:はてな支店を再現する。 最初に生成している各種コンビネータはコメントをつけているが、m=のところからは基本的に昨日と同じなので省略。 最初の関数x(Fokker版の一点基底コンビネータ)…

チャーチ数の加減乗除

型推論を無効にする方法を発見。 型推論をごまかす Y コンビネータ L の定義は、本当は L x y = x (y y) です。(y y)の部分が自己言及になって、GHC ではこの部分の型をうまく処理できません。そこで、unsafeCoerce で型推論をごまかしています。 http://d.h…

PostScript版色相環

sethsbcolorというそのものずばりのオペレータがあったので確認用にPostScript版も書いてみた。 やっぱり黄色や紫のところにはうっすらと線が見える気がする。 %!PS-Adobe-3.0 1 1 256 { /r exch def 0 1 360 { /th exch def th 360 div r 256 div 1 sethsbc…

canvasで色相環

canvasを使って色相環を描いてみた http://kar.s206.xrea.com/js/colors.html 色の変化のさせかたを自分で考えるのが目的だったのでグラデーションの技は使わず1ピクセルずつ処理してる。 なのでかなり重い処理になってるので注意。 RGB各色が0〜255の256階…

ポイントフリー

一つの値を名前に束縛せずに複数箇所で使うってどうやるんだ。Sコンビネータ的なものが用意されてる? cube = (((*).((*)<*>id))<*>id) -- \x -> x * x * x fib = (flip(if'.(< 2))1)<*>((+).fib.(-1 +)<*>fib.(-2 +)) http://d.hatena.ne.jp/nishiohirokazu…

コンビネータ一覧表

この間Gaucheで作ったラムダ式からの変換プログラム(とその後の調査)からわかったことを表にまとめてみた。 name in out memo I x x S K _ , W K , C K _ , R _ K M x x x O I , W I , W T Y x x (Y x) M2 L , U U , M2 (B M2 B) i x x S K V S K , S (O (K …

ラムダ式からの変換

Schemeのラムダ式に対応するコンビネータ表記を求めるプログラムを作った。 使い方 lambdaをlambdaccにして、通常のlambdaと同じように引数と本体を与える。 gosh> (lambdacc (x y z) (x (y z))) B gosh> (lambdacc (x y) (x (y y))) (C B M) ソースコード (…

ポリモルフィズムのレベル

ポリモルフィズムなし →普通の関数 例:C言語等 1つの引数(self)の型に応じてポリモルフィズム →普通のオブジェクト指向のメソッド 例:Smalltalk等 全ての引数の型に応じてポリモルフィズム →ジェネリックファンクション 例:CLOS等 さらに戻り値の型にも…

各コンビネータに対応する関数

type Combinator Prelude Monad Applicative a -> a I x = x id ask a -> b -> a K x y = x const return pure (a -> b) -> (c -> a) -> c -> b B x y z = x (y z) (.) liftM (a -> b -> c) -> b -> a -> c C x y z = x z y flip (a -> a) -> a Y x = x (Y x…

同じパターン変数による同値判定

各言語で試した結果は以下のとおり Erlangの場合 できる > case [1,1,1] of [X,X,X] -> "same"; _ -> "different" end. "same" > case [1,1,2] of [X,X,X] -> "same"; _ -> "different" end. "different" Pureの場合 できる > case [1,1,1] of [x,x,x] = "sa…

再帰定義でないYコンビネータ

Haskellで出来なかったことをPureでリベンジその2 再帰を使わずにYコンビネータを定義する 404 Blog Not Found:Y combinator is forbidden in Haskell!? ところがぎっちょんぎっちょんちょん。これが出来ないのです。 ch_y = \ f -> (\ x -> f (x x)) (\ x -…

チャーチ数の引き算

Haskell風の文法だけど動的型なPureという言語を発見。 The Pure Programming Language Pure has a modern syntax featuring curried function applications, lexical closures and equational definitions with pattern matching, and thus is somewhat sim…

Prologとリスト内包表記の対応関係

昨日の麻雀の待ちの問題、Prologのコードがほぼ1対1でリスト内包表記に書き換えられるような気がしたのでやってみた。 例えば、Prologでの順子の処理部(1行目)は、Haskellでは2行目のように記述できるはず。 (Prolog) tenpai(Xs, [[X,Y,Z]|Ys]) :- selec…

あなたのスキルで飯は食えるか2

麻雀の手牌が入力として与えられたとき、「待ち」を出力するプログラムを書いてください。 1122335556799 : “99”をアタマの両面か“55”“99”のシャボであるので、(123)(123)(555)(99)[67]、(123)(123)(55)(567)[99]、(123)(123)(99)(567)[55]が正解です。 http…

あなたのスキルで飯は食えるか?

http://d.hatena.ne.jp/katona/20100422/p1 こっちに修正版を書きました 麻雀の手牌が入力として与えられたとき、「待ち」を出力するプログラムを書いてください。 1122335556799 : “99”をアタマの両面か“55”“99”のシャボであるので、(123)(123)(555)(99)[67…

演繹定理とコンビネータ

演繹定理(英: Deduction theorem)とは、数理論理学において、論理式 E から 論理式 F が演繹可能ならば、含意 E → F が証明可能である(すなわち、空集合から演繹可能)、というもの。 公理的命題論理では、公理図式として次のものを使うのが一般的である…

SchemeとActor理論

「最初のSchemeインタプリタは関数とアクターの双方を実装していた」 http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/p/frag/frag_f.html 例えば「1と2と3からなるメッセージをアクターaに送る」という事を [a 1 2 3]と書く 新しくアクターを作る事もで…

Haskellで書かれたOS

House - Haskell User's Operating System and Environment House is a demo of software written in Haskell, running in a standalone environment. http://programatica.cs.pdx.edu/House/ HaskellでスタンドアローンのOSが書けるとは。 どうでもいいけど…

qemuでgPXE

PXE

実機でROMを焼くのは面倒なのでqemuで試してみた。 OSが起動する前なのにDNSで名前解決してHTTPでファイルをとってこられるのがすごい。 ROMイメージの取得 http://rom-o-matic.net/gpxe/gpxe-git/gpxe.git/contrib/rom-o-matic/ にアクセスして, 1. output…

SUMPRODUCT

SUMPRODUCTって各要素をかけ算して最後に足し算するだけの関数だと思ってたけど、 SUMPRODUCT関数にはなぜかヘルプには載っていないけれど良く使われる使い方がこれ以 外にあるのです。 「複数の条件を満たすものの足し算」の場合にその方法は用いられるよう…

タートルグラフィックでの近似円

半径1の円に内接する正n角形の1辺の長さは2sin(180°/n) 円の中心Oから正n角形の1辺ABに下ろした垂線OHが作る△OHBにおいて ∠BOH=∠AOB/2=(360°/n)/2=180°/n (中心角360°をn等分すれば∠AOBになる) なので BH=AB/2=OBsin∠BOH=sin(180°/n) 一辺ABの長さは AB=2*…

ntpd

psで見るとntpdが動いてるのになぜか接続できなかった。 ntpdは通常ntp.confファイルを編集することで編集します。OS Xのntpdの場合は少し変わっていて、設定ファイルが2つ(ntp.confとntp-restrict.conf)あります。しかしながら通常の ntpdの設定項目が2つ…

1から10までの自然数の合計

弊社の入社試験に、「1から10までの自然数の合計を出すプログラムを書きなさい」というのがあるのですが、ゾウリムシ1匹をコップに入れておくと1時間後には2匹、2時間後には4匹、3時間後には8匹となり、72時間後にコップ一杯になります。では最初に2匹入れて…

PならばQ(含意)

C言語で書くと、!P||Qと同じ ifで書くと、if P then Q の後ろに else 1 がついている、という感じか。 なぜ、Pが偽ならば、Qの真偽にかかわらず「PならばQ」が真なのか P Q PならばQ 例「この仕事が成功しなければ辞表を出す」 0 0 1 仕事が成功してかつ辞表…

ThinkPad USB トラックポイントキーボード(英語)

いつの間にかトラベルキーボードの後継が出てた。 値段が下がって、しかも前のよりもキータッチがよさそう。 スライドパッドと一緒にパームレストもなくしてくれれば更によかったが。 製品番号 55Y9003 商品名 ThinkPad USB トラックポイントキーボード(英語…