C

告知:「超絶技巧プログラミング」の本を書いてます

突然ですが告知です。今までこの日記とかで公開してきた奇妙なプログラムを集めて、本を書くことになりました。今日はエイプリルフールではありません。コンセプトは、「実務に役立たないプログラミング本」です。誰得?という声が聞こえてきそうですが、手…

The 22nd IOCCC: Most solid のエントリ

http://www.ioccc.org/2013/endoh4/endoh4.c int **F,** V,M, N,i; #ifndef/**/S #define S 70,23 #endif/* 000-2E5*/ #define/* 2E5-2E5,2E5 */_POSIX_C_SOURCE 199309 #include/* 2E5XXX*/<time.h> /* 2E5-2E5X*/#include<stdio.h> #include<stdlib.h>/* -2E5-2E5XX*/ struct timespec</stdlib.h></stdio.h></time.h>…

The 22nd IOCCC: Most tweetable 1-liner のエントリ

http://www.ioccc.org/2013/endoh3/endoh3.c char a;float b,c;main(d){for(;d>2e3*c?c=1,scanf(" %c%f",&a,&c),d=55-a%32*9/5,b=d>9,d=d%13-a/32*12:1;a=2)++d<24?b*=89/84.:putchar(a=b*d);} ツイート可能 (137B) なワンライナー。 解説 ABC 記譜法 (のサ…

The 22nd IOCCC: Most recyclable のエントリ

/*@@@sssss8]][[[[a#@@sss0['w}8|v}a<{av}a@{av}j>~{v}j8|c[sa?|{8[|#~} [j#@ra>~}sa!{>}|#r0l}sao8}[a'f8|r'8[j?x[?@<[j?@[j?@[s?>|;[[[j!>b'8'a@<cb@>? c$kg_@<b#0pf<#keab{_b0|c0#d#0#|'o{i<!8dr,f_{#rg{baiderh{er0}|'{0{ic.df?'o|j{lim 0'{i?#c0b|c#kg!}r!8lp1g!|i_ar<[#0g|h_}ieg>|_ah|sr<|i[[[}s#f@}[{@u~~~r@[|#|{s…</b#0pf<#keab{_b0|c0#d#0#|'o{i<!8dr,f_{#rg{baiderh{er0}|'{0{ic.df?'o|j{lim></cb@>

The 22nd IOCCC: Most lazy SKIer のエントリ

ref: http://ioccc.org/2013/endoh1.c #ifndef SKI #define A(x)B(x##0)B(x##1)B(x##2)B(x##3)B(x##4)B(x##5) #define B(x)C(x##0)C(x##1)C(x##2)C(x##3)C(x##4)C(x##5) #define C(x)D(x##0)D(x##1)D(x##2)D(x##3)D(x##4)D(x##5) #define D(x)Z(x##0)Z(x##1)…

The 22nd IOCCC の結果が公開されました

C 言語のプログラムの汚さで競い合うプログラミングコンテスト、The 22nd International Obfuscated C Code Contest の今年の結果が公開されました。http://www.ioccc.org/years.html#2013相変わらずの変態ぞろいですのでぜひご覧ください。既報の通り、ぼく…

IOCCC2012 endoh1.c のデモ動画

昨年の IOCCC に入賞した流体シミュレータの動画を作って公開しときました。今年の IOCCC のやつもソースコードが公開されたら動画にしたい。

The 22nd IOCCC に入賞したよ

今年も IOCCC に入賞しました。史上初の 4 冠 *1 です。嬉しい。昨年は 2 作品投稿して 2 冠だったので、今年は 4 作品で 4 冠 *2 を目指したところ、なんと狙い通りになりました。一応もう 1 つ akari.c 的なネタがあったんですが、著作権を気にして自重し…

The 21st IOCCC: Most complex ASCII fluid のエントリ

ref: http://www.ioccc.org/2012/endoh1/endoh1.c ref: http://www.ioccc.org/2012/endoh1/hint.html # include<stdio.h>// .IOCCC Fluid- # # include <unistd.h> //2012 _Sim!_ # # include<complex.h> //|||| ,____. IOCCC- # # define h for( x=011; 2012/* # # */-1>x ++;)b[ x]//-' w</complex.h></unistd.h></stdio.h>…

The 21st IOCCC: PiE in the sky award のエントリ

ref: http://www.ioccc.org/2012/endoh2/endoh2.c ref: http://www.ioccc.org/2012/endoh2/hint.html #include<stdio.h> /******** SpigotQuine -- usage: ./spigot [pi or e] ********/ char*s="G1%%xJ{;Q7wunmuGuu%%uu#include<stdio.h>/*Spigot_Quine*/#include<stdli" "b.h>/*_IOCCC2012</stdli"></stdio.h></stdio.h>…

The 21st IOCCC の結果が公開されました

C 言語のプログラムの汚さで競い合う有名なプログラミングコンテスト IOCCC の今年の結果が公開されました。ref: http://www.ioccc.org/years.html#2012目を見張る変態ぞろいですので、ぜひご覧ください。個人的には、deckmyn 、hamano 、hou 、kang 、tromp…

The 21st IOCCC に入賞したよ

ご無沙汰してます。Ruby のリリースマネジメントやらずに IOCCC に興じていたら、なんと入賞できたようです。嬉しい。IOCCC は自分の中で伝説的なものだったので、自分の名前が載る日が来るとは思ってませんでした。嬉しい。嬉しい。 肝心のプログラムは年内…

kernel-mode quine

C

そういえば C で quine 書いた覚えがないなー、あと Linux のカーネルモジュール書いてみたいなー、と思ったので、練習として Linux のカーネルモジュールで quine を書いてみました。ref: http://github.com/mame/kernel-mode-quineビルド方法。まず、環境…

quine リレー

Update (2013-07-15): I improved this program to 50-language version. 50 言語版にパワーアップさせました。 これはこのプログラム自身を出力する Unlambda プログラム、を出力する Whitespace プログラム、を出力する brainfuck プログラム、を出力する …

gcov の使い方

C

concov のドキュメントを書こうと思ったけれど、何から書くか困ったので、とりあえずその前に gcov の使い方とはまりどころを書いてみます。 gcov とは C 言語で書かれたプログラムのカバレッジを測定するツールです。gcc に付属しています。 基本的な使い方…

Re: "どちらでもいい"

C

ref: http://www.kmonos.net/wlog/96.html#_2319090427 C 言語ならすでに書けますよね。100 年後の C コンパイラならきっと最適化してくれる。 void toss(int x, int y) { } int head(int *p) { *p = 1; return 0; } int tail(int *p) { *p = 0; return 0; }…

スタックオーバーフローの仕様の続きの続き

C

ref: http://d.hatena.ne.jp/ku-ma-me/20081017/p1 ref: http://d.hatena.ne.jp/ku-ma-me/20081019/p2なんか知らないうちに 2ch で議論されてたので引用。 600 :デフォルトの名無しさん:2008/12/26(金) 19:39:16 http://d.hatena.ne.jp/ku-ma-me/20081017/…

スタックオーバーフローの仕様の続き

C

いろいろコメントをいただきました。ありがとうございます。問題点を整理すると、 1. 「無限に再帰呼び出しをする」という意味は、リソースが有限な現実のコンピュータでは実現不可能である (末尾再帰だけとか特殊な例はできるけど、一般的には無理だと思う)…

スタックオーバーフローの仕様

C

以下の C 言語のプログラムを実行すると、ほとんどの環境では異常終了すると思います。 int main(void) { main(); return 0; } この挙動は C の規格としてどのように説明されているんでしょうか。 たぶん未定義じゃないかと思うんですが、C99 の規格書の fun…

関数ポインタのキャストと gcc

C

C の関数呼び出しは、関数定義の型と互換性のない型として呼び出したら未定義動作です。例えば以下のコードの動作は未定義です。 #include <stdio.h> int main(void) { ((int (*)(char *, ...)) &printf)("Hello, world!\n"); } printf は int printf(const char *, .</stdio.h>…

exhaustive な switch

OCaml ではパターンマッチの抜けを警告してくれます。Haskell より OCaml の方が好きな点の 1 つです*1。 type t = Foo | Bar | Baz let f = function Foo -> "foo" | Bar -> "bar" $ ocamlc pat-test.ml File "pat-test.ml", line 2, characters 8-44: Warn…

pointer-free な C 言語はチューリング完全か

C

ポインタのない C 言語 *1 はチューリング完全でしょうか。昨日は酒井さんとの話で では pointer-free な C 言語はどうか、と聞いてみましたが、union でなんとかできそうとの返事。 と書きましたが、union は型変換ができるだけでポインタを取り出すことは…

malloc-free な C 言語はチューリング完全かの続き

C

酒井さんがbrainfuck を実装してくれました。ありがとうございます。では pointer-free な C 言語はどうか、と聞いてみましたが、union でなんとかできそうとの返事。そっかー。ちなみに元記事で再帰と書いた時は、「lambda 計算をエンコードできるかなー」…

malloc-free な C 言語はチューリング完全か

C

今日の疑問。C 言語から malloc や calloc など動的にメモリを確保する手段を省いても、チューリング完全性は保たれるのでしょうか。再帰をうまく使えばできるのかな。

brainfuck to 数学ゴルフ

数学ゴルフが終了したようです。僕の解答も niha さんのと同じです。それはともかく、数学ゴルフの言語の入出力拡張版*1を提案されていました。とりあえず turing 完全であることを確かめるため brainfuck インタプリタを書こうと思ったのですが、面倒だった…

core golf

C

最近はなんとなく Ruby 1.9 をもてあそんであそんでます。常識的に考えて書くとは思えないコード (4B) で落ちるけれど、対策すると全体的にパフォーマンスが落ちるような場合、対策すべきかどうか悩ましいですね。 さて、core dump するコードの短さで競う c…