λx. x K S K @はてな

このブログ内に記載された文章およびコードの著作権は,すべて Keisuke Nakano に帰属します.

OCaml

OCaml Golf 最速マスター

OCaml Meeting 2010 の 3 日前である本日 14:30 から,OCaml Golf Competition が開催されます. テクニックの紹介を連載すると言いながら,全然できていなくてすみません.昨年のスライドを修正した内容を掲載します. ユーザ定義関数・変数は1文字で これ…

今年もゴルフコンペします

来る8月30日の「OCaml Meeting 2010 in Nagoya」にて, 今年もゴルフコンペを開催することになりました.与えられた問題に対して OCaml で解いてもらい,最も少ないバイト数で記述できた方が優勝となります. ゴルフ場については,今年も shinhさんのご好意…

間違い探し

クイズ (?) です. 以下のOCamlで定義されている関数は 「数値を表す文字列を受け取って次の数値を表す文字列を返す」関数です.let string_succ str = try string_of_int (succ (int_of_string str)) with Failure "int_of_string" -> invalid_arg "string_…

Helloworld-less Helloworld

最近,仕事の方がバタバタしていましたが, ようやく一段落しました. 先日の OCaml Meeting で解けないとか言ってしまった Helloworld-less Helloworld でしたが, xsd さんによって解かれました.そのアイデアをもとに縮めると,Obj.magic(+)242(^^)"\072\…

コンペ終了

参加された方お疲れさまでした. 始まる前までは「ゴルフの参加者が 3 人くらいだったらどうしよう」とか思っていましたが, 予想以上に参加してくれてよかったです. 今後も OCaml Golf を続けてくれると,あなごるでの OCaml の順位が上がってなおうれしい…

コンペ途中経過

3人が100byteを切ったようです. ところで,出題時にexec deniedを忘れるというミスをしてしまいました*1.すみません. (POSTするときにdexecを"1"とすべきところを"deny"としてしまったという…. 素直にブラウザから出題すればよかった.) それから,exec…

出題しました

問題はこちらからどうぞ. 当日参加される方は名前の末尾に「(rakuda)」を忘れずに. 私の解答は 8/30 の 16:00 以降に投稿します. 準備段階では Hello, OCaml! のような OCaml 用の問題を考えていましたが, 結局,他言語でも対応できる問題にしてしまいま…

ゴルフコンペします

来る8月30日の「平成廿一年東都大駱駝会」(通称: OCaml Meeting 2009 in Tokyo) にて, ゴルフコンペを開催することになりました. 念のため説明しておくと「ゴルフ」というのは,いかに少ないストローク数 (バイト数) でカップに入れる (プログラムを書く) …

なんとかモルフィズム

PPL2009 に参加してくださった皆さん,本当にありがとうございました. バタバタしていて,あまり多くの方とはお話しできずにすみませんでした. OCaml Users Meeting を日本で開催する際にはぜひ参加したいですね. 参加希望ついでに,ずいぶん前に書いた O…

OCaml で Bag

google:OCaml で Bag で検索したら「もしかして: ocamldebug 」とか言われるかと思いましたが, Google はそこまで賢くありませんでした. というくだらない話はさておき, OCaml で Bag のようなデータ構造 (同一要素が区別される集合) が必要になったので…

Pretty printers for tuples, variants, records, Sets and Maps.

10/4まで北京泊・10/5 京都泊・10/6 東京泊・10/7 機内泊・10/8からシドニー泊…という激しいスケジュールを経て NICTA を訪問中です. 最近,再び OCaml のコードをたくさん書く機会ができたので, 久しぶりに OCaml プログラミングに関するメモを公開します…

Glid: Grass/Let interpreter and decompiler

草言語Grassが流行っているようなので,Grassプログラミング支援ツールGlidを公開します. Objective Camlで実装されているという点ではYTさんに先を越されてしまいましたが, より多くの機能を提供しています. といっても,実装の効率はあまりよくないので…

ICFP PC Final Round

3日間の途中結果が出ました. こちらも6回戦で脱落. うーん.あとで走らせてみよう. [追記 (8/15)] ようやくmapが公開されました.って,あれ? Lightningと全く同じmapのような….あまり進歩してないなぁ.

ICFP PC Lightning Division

結果が出てますね. 残念ながら6回戦で脱落. というか,よくそこまで残ったなと見るのが正しいか. 角度の単位とか間違えてたりクレーターが近すぎるとむしろ突進したりするようなひどいプログラムだったし…, OCaml では (大抵の言語でもそうだけど) 度も…

6年がかりと7年ぶりなこと

2002年に提出した論文がようやく受理されました. 長かった….Editorのおかげで提出したときよりだいぶ進化しています. 一方,全く毛色の違う論文の方もとある会議に受理されたようです. そして,久しぶりにICFPのプログラミングコンテストに参加しました(…

caml-listにて

caml-listにてgolfの話題が….*1 といっても,segmation faultを起こす最短のコードを見つけようという問題だったので, 開発者の逆鱗に触れてあっという間に鎮火. 普通の(?)golfの話題ならどういう反応があるかなぁ. *1:ただし,golfという単語が直接出て…

Timeout.ml

無限ループでも重い処理でもよいので3秒間実行し続ければOKという問題. OCamlだとwhileを使うものが最短のようですが, 考えられる解をいくつか記録しておきます. まず,最短であると思われるwhile版 (17B).while 0=0do()done とかwhile-7<7do-7done とか…

Foundations of F#

という本が出たらしい. Foundations of F# (Expert's Voice in .NET)作者: Robert Pickering出版社/メーカー: Apress発売日: 2007/06/01メディア: ハードカバー クリック: 20回この商品を含むブログ (14件) を見る

回文 Hello, World!

行コメントの文法がある言語では,回文で Hello, world! を書くのはさほど難しくない. たとえば,こちらにもあるように Ruby ならputs"Hello, world!"#"!dlrow ,olleH"stup と書けるし,Haskell ならmain=putStrLn"Hello, world!"--"!dlrow ,olleH"nLrtStup…

半ネタばらし(Fizzbuzz.ml)

んー bool に対する C の | みたいなのは無いのかいな。 はじめてのにき(2007-05-31) 不等号を使うと必ず両辺が実行されて,true > false の時だけ真になるとか.

List.map

この件について更に無意味に List.map の実装を覗いてみる.let rec map f = function [] -> [] | a::l -> let r = f a in r :: map f l ついでに,実験. Objective Caml version 3.09.3 # let rec upto n l = if n < 0 then l else upto (n-1) (n::l);; va…

ネタばらし(e.ml)

e の 79B はあまりにインチキなので,公開してしまうことにします.

#010 オプショナル引数

suiginto さんの記事に関連して, OCaml でのオプショナル引数の利用に関する二つの制限についてメモ*1. OCaml のように多相型と関数型を許した型体系でのオプショナル引数には, 意味論を健全にするためなどの理由からいくつかの制限が設けられている. ま…

正統派 echo

Sys.command を使わない echo にまだ改善の余地がありました. ということで,29B. [追記] 実はほんの少し入力依存なところも….同様のプログラムで rotate lines も大幅短縮できました.

e の一部のネタバレ

jijixiさんのところで「誰かが100B切ったらヒントを公開」することを宣言してしまった矢先に, airoboさんが95Bを出してくれたので,一部のネタをバラします. と思ったら,jijixiさんも94B出しましたね.

謎のバイナリ

m.ukaiさんに追い抜かれまくりですが,とりあえず無関係なネイピア数を100(+1)桁出力する問題の記録を更新. ある(インチキな?)方法を使うと,jijixiさんの直接出力するプログラムよりは短くなります. 今のところ79Bですが,まだまだ縮むかもしれません…

ネタばらし(fibonacci.ml)

m.ukaiさんに追いつかれたのでバラします. statisticsが全く同じなので,たぶん名前以外は同じだと思います.

ネタばらし(csort.ml)

標準入力の文字列を昇順に並べ替える問題. m.ukaiさん曰く, トップはどうなってるのかさっぱり分かりません。 とのことでしたが,大したテクニックがあるわけではないので公開してしまいます.

ネタばらし(primes.ml)

m.ukaiさんやshinhさんがprime numbersのネタばらしをしているので,こちらも公開しておきます.

e 再び.

最近ゴルフネタが多くてすみません. ネイピア数を100桁求める問題がOCamlにとってあんまりに酷な(というか100桁埋め込んだ方が短くなってしまう)ので, Numモジュールを使うバージョンも名前を変えてエントリーしておきました. ついでに謎のバイナリもジ…