UnlambdaでVMを実装する(後編)

Esolang Advent Calendar 2016 3日目の記事です。 今回は、前編で説明したデータ構造を使って、どうやってEsolang VMの実行をシミュレートするUnlambdaプログラムを構成するかを解説します。 実装方針 VMの状態 命令の実行 メインループ ELVMバックエンドの…

UnlambdaでVMを実装する(前編)

Esolang Advent Calendar 2016 2日目の記事です。 ELVMにUnlambdaバックエンドを実装して、C言語のプログラムをUnlambdaに変換できるようにした話です。ちょっと長くなったので2回に分けました。 Unlambdaとは ELVMとは Unlambdaでデータ構造を表現する ペア…

EsoLang vi

https://github.com/irori/elvi BrainfuckやUnlambdaで動くvi風エディタができました。 Jody Bruchon氏のviクローンを元にELVMでコンパイルできるようにしたものです。 標準入出力しか使えないのでファイルの読み込み・保存はできません。コマンドも最小限し…

8cc.unl

Unlambdaで動くCコンパイラができました。 https://github.com/irori/8cc.unl id:shinichiro_hさんのbflispで使われている改造版8ccのアセンブリ出力からUnlambdaへのトランスレータです。 これで同一のCプログラムをBrainfuckとUnlambdaの両方で動かせます…

BfLazyK

Lazy K のオリジナルの配布物には bf2lazy.c というファイルが含まれていて Brainfuck プログラムを Lazy K にコンパイルできるのですが、逆に Brainfuck で Lazy K のプログラムを動かす方法はこれまで存在しませんでした。Lazy K で Brainfuck の配列のよ…

BlokusFS

ブロックスデュオのゲーム木をマウントできる FUSE ファイルシステムを作りました。 https://github.com/irori/BlokusFS 使い方 チェックアウトして src ディレクトリ内のソースをコンパイルします。 FUSE の開発用ライブラリが必要です。 $ sudo apt-get in…

はてなブログに移行しました

今後もよろしくお願いいたします。

ICFP Programming Contest 2014

http://icfpcontest.org/うーん今年はあまりうまくいきませんでした。今年の題材はパックマンで、プレイヤー側の AI を SECD マシン風のコードで、敵側を普通の 8 ビット CPU 風のコードで書けというもの。金曜の夜は問題文(やたら長い)を読んでコードは書…

Lazy K で Lisp インタプリタ

https://github.com/irori/lazyk-lisp http://lazy-k.appspot.com/p/ptHm_GwfAYLazy K でも Lisp インタプリタを作ってみました。機能は Unlambda 版とだいたい同じですが call/cc が無くなり、代わりに set でグローバル変数に代入できるようになりました。…

Unlambda で Lisp インタプリタ

https://github.com/irori/unlambda-lisp3 連休だったので Unlambda で Lisp インタプリタを作ってみました。Adventure を作ったときのコードジェネレータを流用して、今回新たに書いたコードは 400 行ちょっとでした。生成された Unlambda プログラムは 35k…

Unlambda で限定継続

Esolang Advent Calendar 2013 用の記事です。Unlambda という esoteric language がありまして、s, k, i といった少数の組み込み関数と関数適用演算子 ` のみでプログラムを書くという、Brainfuck の関数型版とでもいうような言語です。 The Unlambda Progr…

Hello, world!

http://d.hatena.ne.jp/rst76/20131109/1383953947399bytes の解説書くのをサボっていたら id:rst76 さんが解読して記事にしてくださいました。なんかすいません…そして 365bytes! ついに Grass より上に。 http://golf.shinh.org/p.rb?hello+world#ranking…

ICFP Programming Contest 2013

https://research.microsoft.com/en-us/events/icfpcontest2013/今年も楽しくソロ参加でした。ソースコードはこちら。http://irorin.org/icfpc2013_irori.tar.gz 問題 BV という単純な言語で書かれた 64bit 整数上の関数があります。入力となる数を好きに選…

Blokus Duo

asm.js 版も作ってみました。見た目なんにも変わらないですが…。http://irori.github.io/blokus/blokus.html

Lazy K Playground

Lazy K もブラウザ上で実行できるようにしたいなぁ、でも JavaScript でインタプリタ実装するの面倒だなぁ、と思っているうちに世の中が進歩して簡単になったので作ってみました。http://lazy-k.appspot.com/いくつか例を。http://lazy-k.appspot.com/p/kyYM…

JavaScript Unlambda interpreter

http://inazz.jp/unlambda/ inazz さんがブラウザ上で動く Unlambda インタプリタを作っておられます。 実行中の式を表示しながらステップ実行できます。しかも速いです。 Adventure がサクサク動いてびっくりしました。

ICFP Programming Contest 2012

http://icfpcontest2012.wordpress.com/今年は一人で参加してました。問題は Boulder Dash 風のゲームを解く AI を作れというもの。TopCoder のマラソン(Marathon Match)にありそうな問題だなーという印象でした。マラソンと違うのは、コンテストの途中でル…

Adventure in Unlambda 解説 その2

前回の続きです。今回は Adventure のゲーム部分の実装について解説します。

Adventure in Unlambda 解説 その1

Adventure in Unlambda のコード解説です。(ゲームのネタバレはありません。)

Adventure in Unlambda

世界最初のアドベンチャーゲームであり、「アドベンチャー」ゲームというジャンルの語源ともなった Colossal Cave Adventure を Unlambda に移植しました。advent-unlambda.tar.gz (github) (2011/12/15 ソースコードが一部抜けていたのを修正しました)コ…

ICFP Programming Contest 2011

http://www.icfpcontest.org/今年は会社の同僚と6人で、チーム名 widecat で参加しました。成績は…よくわかりません。けっこう相性で勝敗が決まるので。とりあえず上位30チームの決勝には残れてるんじゃないかと思います。 AIの戦略 開始直後はまず、復活用…

そんなことより

明日からICFPCですよ。今年はチームで参加しまーす。

Marathon Match 70

2年ぶりのマラソン。 問題 http://www.topcoder.com/longcontest/?module=ViewProblemStatement&compid=16072&rd=14525 (要ログイン) 一本のDNA(A,T,G,C からなる文字列)と酵素の集合が与えられる。 酵素は固有のパターンを持っていて、そのパターンが現…

ブロックスデュオ

今さらですが、ブロックスデュオ大会に参加したプログラムとブラウザ上で対戦できるものを作りました。http://irorin.org/blokus.htmlブロックスデュオのルールはこちらで紹介されています。 操作方法 難易度と Violet(先手)・Orange(後手) を選んでゲームを…

ICFP Programming Contest 2010

http://icfpcontest.org/ 今年も時系列でお送りします。問題については konnさんの翻訳 など。 18日21時 開始。 19日0時 回路の構文がなんとなくわかった。ゲートの入出力表作成に入る。 19日2時 入出力表できたー!と思って手元で17文字計算してみると結果…

ブロックスデュオ大会2009

結果出てました。9勝1敗で優勝でした。http://hp.vector.co.jp/authors/VA003988/gpcc/09g3b.htm今年は東京農工大の会場に行ってきました。他の予定があったので途中で抜けてしまいましたが…。運営の皆さんお疲れ様でした&ありがとうございました。提出した…

ICFP Programming Contest 2009

http://icfpcontest.org/ 年に一度のお祭りに参加してました。 27日1時 3時開始だがどうにも眠いので寝る。今にしてみればこれは正しい選択だった。 27日7時 起きて問題文を読み始める。 27日10時 VMを実装してみたが動かない。あれー? と思ったら仕様の訂…

ブロックスデュオ プログラム対戦

http://hp.vector.co.jp/authors/VA003988/gpcc/gpcc09.htm#g3 今年も開催されるそうなので興味のある方は参加すると良いです。私も何か考えないと…そういえば前回の大会後の交流会で行われたという、対人間戦のレポートが面白かったです。 http://hp.vector…

anarchy golf - numof 1 bits in 0 to 255

id:yshl さんにならって鑑賞会。関数型の esolang ばっかりです。 Lazy K 私 http://golf.shinh.org/reveal.rb?numof+1+bits+in+0+to+255/irori/1240716651&lazy "8" から始めて、文字列を倍々にしつつ前半部分から1を引いていきます。 church数から1を引く…

TCO09 Marathon Match Round 3

http://www.topcoder.com/longcontest/?module=ViewStandings&rd=13768Top10通過のところ暫定35位。残念。私の方針はこんな感じでした。特にかっこいいアイデアとかはなく。 一定時間ごとにいろんな方向に反射させてみて、結果がよいものを採用 がんばってシ…

Universal Lambda インタプリタを作ってみた

以前作った Lazy K インタプリタを改造して、Universal Lambda のインタプリタを作ってみました。 clamb.c (github) Universal Lambda のコードを一旦 SKI コンビネータ式に変換して、あとは Lazy K と同じように実行します。公式のインタプリタ: lamb sort+…

Marathon Match 46 KnightsMoveCipher

http://www.topcoder.com/longcontest/?module=ViewStandings&rd=13679久しぶりに参加。Coding phase が終わったところで暫定3位で、とりあえず賞金はもらえそう。図のように正方形の盤面に文字が並べられていて、盤上をチェスのナイトの駒のように移動しな…

ブロックスデュオ

今年も参加してました。結果は13勝1敗で優勝。http://hp.vector.co.jp/authors/VA003988/gpcc/08g2b.htm提出したプログラムはこちら。 hmmmm.zip 思考ルーチンは 去年 とほぼ同じもので、前向き枝刈りに Multi-ProbCut (リンク先pdf注意) を使うようにしたの…

Google Code Jam 2008 APAC Local Onsite

GCJ

36名通過のところ暫定41位。意外と健闘してた。 A-small 今回の鬼門。直しても直しても通らない! 1時間くらい粘ったけど埒があかないので後回し。 D-small さすがに0点ではかっこ悪いので解けそうな問題を探してみる。 問題 D は small だけなら力押しで楽…

Lazy K インタプリタ修正

この前作ったインタプリタ にバグを見つけてしまいました。特定の位置で GC が走ると、出力リストの cdr を辿る処理が動かなくて、ごく希に同じ文字を2度続けて出力してしまってました。修正したソースコードはこちら。 lazyk.c (github) ゴルフ場のインタ…

Google Code Jam 2008 Round 3

GCJ

25点で327位。 A-small, A-large Ruby らしく、地図の塗りつぶしに正規表現を使ってみたり。 40分くらいで最初のコードは書けたけど、バグ祭りで全然通らない。 泣きそうになりながらデバッグして、なんとか small と large 両方通した時点で残り30分を切っ…

Marathon Match 33

http://www.topcoder.com/longcontest/stats/?module=ViewOverview&rd=121994位でした。問題はエレベータのスケジューリング。基本は適当に動き回っていて、人が居たら乗せるというナメたアルゴリズムでした。ビジュアライザでトップの人のを見ると整然と動…

Marathon Match 34

http://www.topcoder.com/longcontest/stats/?module=ViewOverview&rd=122001位ゲット。名前赤くなっちゃいました。 GWだったせいか、上位に日本人が多数。http://d.hatena.ne.jp/wata_orz/20080507/1210178014 http://d.hatena.ne.jp/EmK/20080507/1210177…

Marathon Match 32

http://www.topcoder.com/longcontest/?module=ViewStandings&rd=12198 これに参加してました。 暫定で 3 位だったのが System test で一人抜いて 2 位。1 位の人にはあと一歩で追いつけませんでした。問題は工場の経営者になって、5000日の期間内にどれだけ…

Lazy K インタプリタを作ってみた

あなごるの sort characters を挿入ソートで書いたらタイムアウトになって悲しかったので、速度重視で作ってみました。 lazyk.c (github) 公式のインタプリタ: lazy sort+characters.lazy 作ったやつ: ./lazyk sort+characters.lazy 公式のはノードのメモリ…

Haskell → Lazy K トランスレータ

Haskell Hackathon が楽しそうだったので、昔作りかけて放置してあった Haskell コンパイラを引っ張り出してきました。せっかくなので、最もタメになる初心者用プログラミング言語であるところの Lazy K へのトランスレータにしてみました。 hs2lazy.tgz (…

Drop+first+line

言及されてたので解説。 ソースはこんな感じ。 (load "./lazier.scm") (load "./prelude.scm") (lazy-def '(main input) '(input (lambda (hd tl) (((hd (lambda (x) (x (k i))) (k i)) cdr) tl)))) (print-as-unlambda (laze 'main)) やりたいことは、 先頭…

Print numbers _Revised_

オンライン整数列大辞典が便利すぎる。

BlocksDuo との再戦

大会とは逆に BlocksDuo 先手、hmmm 後手での再戦。hmmm の勝ちだったそうです。実は BlocksDuo も hmmm も同じような評価方法で、深く読んだ方が勝ちみたいな感じだったらしい。hmmm は途中からさっぱり自分で勝てなくなったので、評価関数の改良を諦めて探…

DuOCaml の解説 (U-memo)

ソースも公開。OCaml で参戦の m.ukai さん。 私も関数型言語で挑戦とかちょっと考えたんですが、パフォーマンスをチューニングできる自信がなくて結局 C++ にしてしまったのでした。信心が足りませんね。考え方は hmmm と似てたらしい。DuOCaml のほうが陣…

ブロックスデュオ プログラム対戦 結果

http://hp.vector.co.jp/authors/VA003988/gpcc/07g1b.htmなんと一位をとってしまったらしい。 とりあえずソース置いときます。応募した版から微妙に修正してます。 hmmm.tgz hmmm 同士の対戦では勝率 7:3 くらいで先攻が有利だったので、2位との対戦で先攻…