diff --git a/1993/ant.md b/1993/ant.md new file mode 100644 index 0000000..2f6b2c1 --- /dev/null +++ b/1993/ant.md @@ -0,0 +1,31 @@ +--- +id: 1993/ant +year: 1993 +order: 1 +authors: "Anthony_C._Howe" +orig_url: "https://www.ioccc.org/1993/ant.c" +hint_url: "https://github.com/ioccc-src/winner/blob/main/1993/ant.hint" +title: "IOCCC 1993: Best Utility" +award_ja: "最高のユーティリティ" +--- + +## 動作 + +egrep風コマンド。 + +``` +$ gcc -o ant ant.c + +$ ./ant a.*t$ ant.hint +ant.hint: make ant +ant.hint: See the author's Posix P1003.2-like documentation file ant.txt +``` + +## 解説 + +作り込み系の作品。 +POSIX.2の拡張正規表現の小さくないサブセットに対応しているとのこと。 + +難読化は識別子が1文字である程度で、見逃していない限り特別なテクニックは見られない。 +man風のドキュメントが添付されている([ant.txt](https://www.ioccc.org/1993/ant.txt))。 +同作者の[[[1992/ant]]]({{ site.baseurl }}{% link 1992/ant.md %})と同系統の作品。 diff --git a/1993/cmills.md b/1993/cmills.md new file mode 100644 index 0000000..097aa79 --- /dev/null +++ b/1993/cmills.md @@ -0,0 +1,35 @@ +--- +id: 1993/cmills +year: 1993 +order: 2 +patch: true +authors: "Christopher_Mills" +orig_url: "https://www.ioccc.org/1993/cmills.c" +hint_url: "https://github.com/ioccc-src/winner/blob/main/1993/cmills.hint" +title: "IOCCC 1993: \"Bill Gates\" Award" +award_ja: "『ビル・ゲイツ』賞" +linewrap: true +--- + +## 動作 + +X Window Systemの中で窓が飛び回り、粉砕していくデモアプリ。 +[[[1991/davidguy]]]({{ site.baseurl }}{% link 1991/davidguy.md %})と同じようにVcXsrvを準備した上で、次のように実行する。 + +``` +$ gcc -o cmills cmills.c -lX11 + +$ ./cmills +``` + +{% include img.html src="1993-cmills.png" desc="X Window Systemの画面の中を窓が飛び回って粉砕していく" %} + +## 解説 + +作者の意図はよくわからないが、賞名から考えてWindowsに対する皮肉として採択されていると思う。 +当時のUnix文化圏におけるWindowsの空気感をよく知らないので、あまりわからない。 + +難読化は、短い識別子を使い、インデントをなくした程度に見える。 +窓が割れる確率は運動エネルギー(つまり面積と速さ)に基づくとのこと。 + +現代では処理速度が速すぎるので`usleep`で少しウェイトを置いた。 diff --git a/1993/dgibson.md b/1993/dgibson.md new file mode 100644 index 0000000..b7db115 --- /dev/null +++ b/1993/dgibson.md @@ -0,0 +1,122 @@ +--- +id: 1993/dgibson +year: 1993 +order: 3 +authors: "David_Gibson" +orig_url: "https://www.ioccc.org/1993/dgibson.c" +hint_url: "https://github.com/ioccc-src/winner/blob/main/1993/dgibson.hint" +title: "IOCCC 1993: Best Abuse of the C Preprocessor" +award_ja: "Cプリプロセッサの最高の悪用" +--- + +## 動作 + +ライフゲーム。life.dに初期盤面を入れておく。 + +``` +$ cat life.d +LIFE + +L _ _ _ _ _ +L _ _ _ O _ +L _ O _ O _ +L _ _ O O _ +L _ _ _ _ _ + +GEN 0 +END +``` + +1世代すすめる。 + +``` +$ gcc -ansi dgibson.c -o dgibson + +$ ./dgibson +LIFE + +L _ _ _ _ _ +L _ _ O _ _ +L _ _ _ O O +L _ _ O O _ +L _ _ _ _ _ + +GEN 1 STAT 329040 +END +``` + +見ての通りこの出力は初期盤面と同じフォーマットになっているので、life.dを更新して再コンパイルするとさらに次の世代が求められる。 + +``` +$ ./dgibson > life.d + +$ gcc -ansi dgibson.c -o dgibson + +$ ./dgibson +LIFE + +L _ _ _ _ _ +L _ _ O _ _ +L _ _ _ O _ +L _ O O O _ +L _ _ _ _ _ + +GEN 2 STAT 328960 +END +``` + +## 解説 + +dgibson.cの最後で`#include "life.d"`としているとおり、この盤面のフォーマットはdgibson.cで定義されたマクロで展開することで有効なCコードとなる。C言語での組み込みDSLと言える。 + +こんな大きいのも動くので良い。ビルドにちょっと時間がかかるが、実行は一瞬。 + +``` +$ time gcc -ansi dgibson.c -o dgibson + +real 0m2.400s +user 0m2.179s +sys 0m0.211s + +$ ./dgibson +LIFE + +L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ O _ _ _ _ _ _ _ _ _ _ +L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ O _ _ _ _ _ _ _ _ _ +L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O _ _ _ _ _ _ _ _ +L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O O _ _ _ O O O _ _ _ _ _ O _ _ _ _ O _ _ _ _ _ _ _ +L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ O _ _ _ O _ _ O _ _ _ _ O _ O O O O O _ _ _ _ _ _ +L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O _ _ _ +L _ _ _ _ _ _ _ _ _ _ O O _ _ _ _ _ _ _ _ _ _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ _ O O O _ _ _ O _ _ +L _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ O _ +L _ _ _ _ _ _ _ _ O O _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ O _ +L _ _ _ _ _ _ _ O _ _ _ _ O _ _ _ _ _ _ _ O O O _ _ _ O O O _ _ _ _ _ _ _ _ _ _ O _ _ O _ _ O _ +L _ _ _ _ _ _ O O O O O _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ O _ _ _ _ _ _ _ _ O _ O O _ _ O _ O _ _ +L _ _ _ O O _ _ _ _ _ O O _ _ _ _ O _ _ _ _ O O O O O O O _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ +L _ _ O _ _ _ O O O _ _ O _ _ O O O _ _ _ O _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O O _ +L _ O _ _ _ O _ _ _ _ _ O O _ O O _ _ _ O O O O O O O O O O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O _ +L _ O _ _ _ _ _ O _ _ _ O _ _ _ O _ _ O _ _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ O O O _ +L _ O _ _ O _ _ O _ _ _ _ _ O O O _ O O O O O O O O O O O O O O _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ +L _ _ O _ O _ _ O O _ O _ _ O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O _ _ O _ O O _ _ O _ O _ _ +L _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ O O O O O O O O O O O O O O _ O O O _ _ _ _ _ O _ _ O _ _ O _ +L _ O O O _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ _ O _ _ O _ _ _ O _ _ _ O _ _ _ _ _ O _ +L _ O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O O O O O O O O O O _ _ _ O O _ O O _ _ _ _ _ O _ _ _ O _ +L _ O O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ O _ _ _ O O O _ _ O _ _ O O O _ _ _ O _ _ +L _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ O O O O O O O _ _ _ _ O _ _ _ _ O O _ _ _ _ _ O O _ _ _ +L _ _ O _ O _ _ O O _ O _ _ _ _ _ _ _ _ O _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ O O O O O _ _ _ _ _ _ +L _ O _ _ O _ _ O _ _ _ _ _ _ _ _ _ _ O O O _ _ _ O O O _ _ _ _ _ _ _ O _ _ _ _ O _ _ _ _ _ _ _ +L _ O _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ O O _ _ _ _ _ _ _ _ +L _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ +L _ _ O _ _ _ O O O _ _ _ _ _ _ _ _ _ _ _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ O O _ _ _ _ _ _ _ _ _ _ +L _ _ _ O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +L _ _ _ _ _ _ O O O O O _ O _ _ _ _ O _ _ O _ _ _ O _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +L _ _ _ _ _ _ _ O _ _ _ _ O _ _ _ _ _ O O O _ _ _ O O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +L _ _ _ _ _ _ _ _ O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +L _ _ _ _ _ _ _ _ _ O _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +L _ _ _ _ _ _ _ _ _ _ O _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + +GEN 2 STAT 3089152 +END +``` diff --git a/1993/ejb.md b/1993/ejb.md new file mode 100644 index 0000000..ab71b66 --- /dev/null +++ b/1993/ejb.md @@ -0,0 +1,50 @@ +--- +id: 1993/ejb +year: 1993 +order: 4 +authors: "E._Jay_Berkenbilt" +orig_url: "https://www.ioccc.org/1993/ejb.c" +hint_url: "https://github.com/ioccc-src/winner/blob/main/1993/ejb.hint" +title: "IOCCC 1993: Best Obfuscated Algorithm" +award_ja: "最高の難読化アルゴリズム" +--- + +## 動作 + +2つのアルゴリズムが搭載されている。 +1つはハノイの塔。コマンドライン引数に正の値を与えると、その高さのハノイの塔の解答を表示する。 + +``` +$ gcc -o ejb ejb.c + +$ ./ejb 3 +move ring 1 from stack 1 to stack 2 +move ring 2 from stack 1 to stack 3 +move ring 1 from stack 2 to stack 3 +move ring 3 from stack 1 to stack 2 +move ring 1 from stack 3 to stack 1 +move ring 2 from stack 3 to stack 2 +move ring 1 from stack 1 to stack 2 +``` + +もう1つ。負の値をあたえると、patience puzzleを外すまでの状態の列を表示する。 +patience puzzleはたぶん[連環・チャイニーズリング](https://ja.wikipedia.org/wiki/%E3%83%81%E3%83%A3%E3%82%A4%E3%83%8B%E3%83%BC%E3%82%BA%E3%83%AA%E3%83%B3%E3%82%B0)のこと。 +右端の数字が最初のリングを表し、1はU字金具に入った状態、0は外れた状態を表すらしい。 + +``` +$ ./ejb -3 +111 +110 +010 +011 +001 +000 +``` + +## 解説 + +コードはセミコロンをかたどっている。 +このプログラムには、セミコロンが2つしかない(変数宣言で1つ、`return`文の終わり)。 +プログラムの規模(lines of code)を測るためにセミコロンを数えるとすると、このプログラムのセミコロンは2つか、それとも3つか曖昧にするため、というネタらしい。 + +型名などを除けば、キーワードは`return`しか使っていない。必然的に、`main`関数の再帰を伴う巨大な式1つからなる`return`文となっている。 diff --git a/1993/index.md b/1993/index.md new file mode 100644 index 0000000..24a5004 --- /dev/null +++ b/1993/index.md @@ -0,0 +1,21 @@ +--- +year: 1993 +title: "IOCCC 1993の解説" +layout: contest +--- +## 全体の印象 + +前年の反動か、アスキーアート化された作品やメタな作品は少し減り、挙動の作り込みを追求した作品が増えた。 +[[[1993/dgibson]]]({{ site.baseurl }}{% link 1993/dgibson.md %})はC言語でのライフゲームDSLという新境地を開拓している。 +[[[1993/schnitzi]]]({{ site.baseurl }}{% link 1993/schnitzi.md %})は挙動のインパクトがあって良い。 +[[[1993/rince]]]({{ site.baseurl }}{% link 1993/rince.md %})はオリジナリティのある題材を扱っていて良い。 + +IOCCCの最優秀賞には通例"Best of Show"という賞名が与えられるが、この年は"Most Well Rounded"が最優秀賞と思われる。 +ときどき気分で変わるようだ。IOCCC 1995からまた"Best of Show"に戻る。 + +この年から、ANSI Cコンパイラでコンパイルできることが必須となった。 +おかげで、現代でもそのまま動く確率が非常に高くなった。 + +細かい話だが、これまで`PATH`にカレントディレクトリが含まれているという前提があったのが、この年からついに消えた。 +hintファイルやスクリプトで`./exe`という形式が使われるようになっている(これより前は`exe`だけで実行できるという前提があった)。 +ただし、1994年からまたもとに戻っている。移行期だったのだろうか。 diff --git a/1993/jonth.md b/1993/jonth.md new file mode 100644 index 0000000..fe48dd8 --- /dev/null +++ b/1993/jonth.md @@ -0,0 +1,46 @@ +--- +id: 1993/jonth +year: 1993 +order: 5 +patch: true +authors: "Jon_Thingvold" +orig_url: "https://www.ioccc.org/1993/jonth.c" +hint_url: "https://github.com/ioccc-src/winner/blob/main/1993/jonth.hint" +title: "IOCCC 1993: Most Obfuscated X Program" +award_ja: "もっとも難読化されたXプログラム" +--- + +## 動作 + +X Window Systemでのテトリス。 + +{: .wrap } +``` +$ sed -e s/\^\ /#define/ -e 's/@/Window(D,/g' jonth.c > jonth.tmp.c + +$ gcc -DXX1='H 19;}M(J,4)}N H 20;}M(T,4)}q(m,w,' -DXX='XKeycodeToKeysym(D,((XKeyEvent*)o)->keycode,0);K 12:Y();}R;}d XX1' jonth.tmp.c -o jonth -lX11 + +$ ./jonth +``` + +{% include img.html src="1993-jonth.png" desc="X Window Systemでテトリス" %} + +jで左、lで右、kで回転、スペースで落とす。 + +## 解説 + +X11の関数名は長いので、sedコマンドで`@`を`Window(D,`に置き換えるなどをした上でコンパイルすることになっている。 +それ以外、コードに特筆することはないと思う。 + +現代で動かすことにとても苦労した。 +なぜか(難読化のため?)、`#include `をせず、定数は即値で、構造体は配列インデックスで無理やりアクセスしている。 +関数宣言もないので、返り値は暗黙的に`int`が仮定されてしまう。 +jonth.hintに「`int`とポインタが同じサイズでないと動かない」と書いてあるとおり(`-m32`をつけるとX11とリンクできないので使えなかった)。 +よって、`#include `をして`int`を`long`に書き換えれば、とりあえず動いた。 +しかしこれだけではキー入力が効かない。 +構造体のフィールドを`int`の配列インデックスで読みだそうとしているが、`long`に変えたためにずれる模様。 +このコード断片はMakefileの中にある(サイズ制限回避のため?)。 +ややこしいので、直接展開した上で修正した。 +さらに、`XSelectInput`を指定した。 +これによってキー操作もできるようになった。 +ただし、途中でキーボード操作が効かなくなることがある(未調査)。 diff --git a/1993/leo.md b/1993/leo.md new file mode 100644 index 0000000..fa486b2 --- /dev/null +++ b/1993/leo.md @@ -0,0 +1,72 @@ +--- +id: 1993/leo +year: 1993 +order: 6 +authors: "Leonid_A._Broukhis" +orig_url: "https://www.ioccc.org/1993/leo.c" +hint_url: "https://github.com/ioccc-src/winner/blob/main/1993/leo.hint" +title: "IOCCC 1993: Best Game" +award_ja: "最高のゲーム" +--- + +## 動作 + +[マスターマインド](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%9E%E3%82%A4%E3%83%B3%E3%83%89)のゲームマスターとソルバ。 +実行ファイル名の最後が`d`だとゲームマスターになる。 + +``` +$ gcc -o leo leo.c + +$ mv leo mind + +$ ./mind +(1296): ??? +``` + +`????`の部分に予想を書くと、その成否を2桁で返す(上の桁は位置も数字も正しい数、下の桁は数字は正しいが位置が違う数)。 +最後まで動かした例を示す。 + +``` +$ ./mind +(1296): 5565 +12 +(240): 5232 +12 +(28): 2225 +04 +(6): 4542 +20 +(2): 1552 +40 +``` + +実行ファイルの最後が`d`以外だとソルバになる。 + +``` +$ mv mind leo + +$ ./leo +(1296): 2435 +?? +``` + +`??`のところに成否を2桁で埋めていく。最後まで進めた例を示す + +``` +$ ./leo +(1296): 2435 +01 +(152): 1262 +22 +(7): 1226 +40 +``` + +## 解説 + +カッコの中にある数字は、残る可能性の数を表している。 + +コードはジグザグ形状。特に意味はないと思う。 +ソルバのguessは、特に最短解答を目指すものではなく、乱数生成していると思う。 +実質6行程度であり、わりと短くまとまっていて良い。 +ゲームマスターモードとソルバモードでコードが共有されているのはエレガント。 diff --git a/1993/lmfjyh.md b/1993/lmfjyh.md new file mode 100644 index 0000000..329875a --- /dev/null +++ b/1993/lmfjyh.md @@ -0,0 +1,34 @@ +--- +id: 1993/lmfjyh +year: 1993 +order: 7 +authors: "Jyrki_Holopainen" +orig_url: "https://www.ioccc.org/1993/lmfjyh.c" +hint_url: "https://github.com/ioccc-src/winner/blob/main/1993/lmfjyh.hint" +title: "IOCCC 1993: Most Versatile Source" +award_ja: "もっとも多用途なソース" +--- + +## 動作 + +ファイル名にコードを仕込むことで任意のコードを実行させられるプログラム。 + +当時のCコンパイラのバグに依存しているので、現代では動かせない。 + +## 解説 + +ひさびさの一発ネタ。 + +当時のCコンパイラ(gcc 2.3.2やHP-UXやVAXのccなど)は`__FILE__`のエスケープが漏れていたそうで、ソースファイル名を`";main(){...};char*C=".c`などしてこのコードをコンパイルすると + +``` +char*_="";main(){...};char*C=""; +``` + +となっていたらしい。 +ただ、これは明らかにコンパイラのバグなので、gcc 2.3.3で即座に直された模様。 +今では適切にエスケープが行われて次のように解釈されるので、残念ながら動かしようがない。 + +``` +char*_="\";main(){...};char*C=\""; +``` diff --git a/1993/plummer.md b/1993/plummer.md new file mode 100644 index 0000000..e38cac7 --- /dev/null +++ b/1993/plummer.md @@ -0,0 +1,36 @@ +--- +id: 1993/plummer +year: 1993 +order: 8 +authors: "Mark_Plummer" +orig_url: "https://www.ioccc.org/1993/plummer.c" +hint_url: "https://github.com/ioccc-src/winner/blob/main/1993/plummer.hint" +title: "IOCCC 1993: Best One Liner" +award_ja: "最高のワンライナー" +--- + +## 動作 + +第1引数の値をインクリメントしていき、桁が増えるときは0に戻って、またインクリメントを続けるというループ。第2引数にダミーに値を与える必要がある。 + +``` +$ gcc -o plummer plummer.c + +$ ./plummer 50 dummy +``` + +とすると、50→51→52→...→98→99→00→01→...→98→99→00→01→...という表示を繰り返す。 + +``` +$ ./plummer 500 dummy +``` + +ならば、500→501→502→...→998→999→000→001→...となる。 + + +## 解説 + +`atoi`などを使わず多倍長整数的に計算する125バイトのワンライナー。 +形が数字っぽい`O`や`l`や`S`などを変数名に使っている。 + +`argv[2]`が`argv[1]`の`'\0'`を挟んだ直後に置かれているという構造を期待している。 diff --git a/1993/rince.md b/1993/rince.md new file mode 100644 index 0000000..8927b2d --- /dev/null +++ b/1993/rince.md @@ -0,0 +1,118 @@ +--- +id: 1993/rince +year: 1993 +order: 11 +patch: true +authors: "James_Bonfield" +orig_url: "https://www.ioccc.org/1993/rince.c" +hint_url: "https://github.com/ioccc-src/winner/blob/main/1993/rince.hint" +title: "IOCCC 1993: Most Well Rounded" +award_ja: "もっともよく練り上げられている" +--- + +## 動作 + +セルオートマトンに基づいたゲーム詰め合わせ。次のようにコンパイル・実行する。 + +``` +$ gcc -o rince rince.c -lncurses + +$ ./rince +``` + +デフォルトではシューティング。`j`で左、`l`で右、`k`でミサイル発射。連射できないよう、1回撃ったら1度動かないと次が発射できない。 + +``` +######################################## +# # +# > > > >< > > > > # +# < < < < < < < # +# > > > v> > > > # +# < < < < < < < # +# > > > v> > > # +# < < < < < < >入賞作品一覧
@@ -18,10 +22,6 @@

入賞作品一覧

{% endfor %}
-{{ content }} - -{% include ad.html %} - {% assign contests = site.pages | where: "layout", "contest" | sort: "year" %} {% assign prev_page = contests | reverse | where_exp: "item", "item.year < page.year" | first %} {% assign next_page = contests | where_exp: "item", "item.year > page.year" | first %} diff --git a/_src/1993/ant.c b/_src/1993/ant.c new file mode 100644 index 0000000..35df31c --- /dev/null +++ b/_src/1993/ant.c @@ -0,0 +1,307 @@ +#define D ++*p +#define B **p +#define W while +#define R return +#define E else +#define Q if +#define G fprintf(stderr, + + +#include + +#ifndef A +#define A 512 +#endif + +typedef int I; +typedef char C; +typedef void V; + +I z; +I f; +I x; +I a[A], b; + + +I d[A][A]; +I m[A], n, o; + +I N(); +I M(); +I P(); +I U(); +V X(); +V T(); +V F(); +V L(); +V O(); + +I +main(c, p) +I c; +C B; +{ + I i; + FILE *j; + C *k, l[BUFSIZ+1]; + + Q (--c < 1) { + G "usage: ag [js...]\n"); + R 2; + } + + + N(-3); + N(-6-b); + N(0); + N(-3-b); + + X(&(*++p)); + + *l = '\n'; + o = 1; + i = 1; + do { + k = "-"; + j = stdin; + Q (1 < c && **++p != '-') { + Q (!(j = fopen(k = *p, "r"))) { + G + "ag: Failed to open '%s'.\n", k); + i = 3; + continue; + } + } + W (fgets(l+1, BUFSIZ, j)) { + Q (M(l)) { + printf("%s:%s", k, l+1); + i = 0; + } + } + fclose(j); + } W (1 < --c); + R i; +} + + +V +X(p) +C B; +{ + I i, j; + i = N(-3); + T(p); + W (B == '|') { + D; + j = N(-3); + N('\n'); + a[i] = -4-b; + i = N(-3); + T(p); + a[j] = -4-b; + } +} + + +V +T(p) +C B; +{ + W (B != '|' && (!x || B != ')') && B) + F(p); +} + + +V +F(p) +C B; +{ + I i = N(-3); + Q (B == '^') { + D; + N('\n'); + } E Q (B == '$') { + D; + N('\n'); + } E Q (B == '(') { + D; + ++x; + X(p); + Q (B != ')') { + G "ag: Missing ')'.\n"); + exit(3); + } + --x; + D; + } E { + L(p); + } + Q (B == '*') { + D; + a[i] = -4-b; + N(-5-i); + } E Q (B == '?') { + D; + a[i] = -4-b; + } +} + + +V +L(p) +C B; +{ + I i, j; + Q (B == '.') { + N(0); + } E Q (B == '[') { + D; + i = N(-2); + Q (B == '^') { + D; + a[i] = -1; + } + Q (B == ']') { + D; + N(']'); + } + W ((i = B) != ']') { + Q ((*p)[1] == '-' && i < (j = (*p)[2])) { + W (i <= j) + N(i++); + *p += 3; + } E { + N(i); + D; + } + } + N('\n'); + } E { + Q (B == '\\') + D; + N(B); + } + D; +} + + +I +N(c) +I c; +{ + Q (A <= b) { + G "ag: Pattern too long.\n"); + exit(3); + } + a[b] = c; + R b++; +} + + +V +O(p) +I p; +{ + I i = n; + Q (b <= p) + R; + Q (a[p] < -2) { + Q (a[p] != -3) + O(-4-a[p]); + O(p+1); + } E Q (!a[p] || a[p] == z || P(&p)) { + + W (i < o) + Q (m[i++] == p) + R; + + f = U(p+1); + + Q (A <= o) { + G "ag: Out of space.\n"); + exit(3); + } + + m[o++] = p; + } +} + + +I +P(p) +I *p; +{ + I i = 0, j = 0; + Q (a[*p] == -2 || (j = a[*p] == -1)) { + W (a[D] != '\n') + Q (a[*p] == z) + i = 1; + } + R i ^ j; +} + + +I +U(p) +I p; +{ + R ( + f || p == b || ( + a[p] < -2 && ( + (a[p] != -3 && U(-4-a[p])) + || U(p+1) + ) + ) + ); +} + + +I +M(p) +C *p; +{ + I c, i, j, k; + f = c = 0; + W (*p && 0 <= c) { + Q (0 < (i = d[c][*p])) { + + c = i; + } E { + + z = *p; + i = d[c][0]; + j = n = o; + do + O(m[i++]+1); + W (m[i] != 2); + + + i = k = 0; + W (i < n) { + Q (m[i] == 2) { + j = n; + ++k; + } + Q (m[i++] == m[j]) { + Q (o <= ++j) { + j = n; + Q (m[i] == 2) { + + o = n; + break; + } + } + } E { + j = n; + } + } + Q (n < o) + + d[++k][0] = n; + c = d[c][*p] = f ? -1 : k; + } + ++p; + } + R c < 0; +} + diff --git a/_src/1993/cmills.c b/_src/1993/cmills.c new file mode 100644 index 0000000..84a7268 --- /dev/null +++ b/_src/1993/cmills.c @@ -0,0 +1,54 @@ +long +z[7992],W,H,*t=z,j,k,*T=z,n,b; +#include +Window*E,D,s,w[999],*e=w; +Display*d; +Pixmap +p; +m(w,h,x,y,u,v){ +#define C XCreateSimpleWindow(d, +XSetWindowBackgroundPixmap(d,s=C*e=C +#define l(n)t[n]=T[n]+ +D,l(0)x,l(1)y,t[2]=w,t[3]=h,1,b,0),l(6)-x,l(7)-y,W,H,0,0,0),p); +l(4)u; +l(5)v; +#define M XMapRaised(d, +M +s); +M*e++); +t+=8; +} +main(c,g)char**g; +{ +XSetWindowAttributes +a; +XGCValues +v; +n=DefaultScreen(d=XOpenDisplay(0)); +p=XCreatePixmap(d,D=RootWindow(d,n),W=DisplayWidth(d,n),H=DisplayHeight(d,n),DefaultDepth(d,n)); +v.subwindow_mode=IncludeInferiors; +XCopyArea(d,D,p,XCreateGC(d,D,GCSubwindowMode,&v),0,0,W,H,0,0); +a.override_redirect=True; +XChangeWindowAttributes(d,D=C +D,0,0,W,H,0,0,b=BlackPixel(d,n)),CWOverrideRedirect,&a); +M +D); +m(W,H,0,0,3,3); +for(c=c^1?atoi(g[1]):9; +; +)for(T=z,n=e-(E=w); +n--; +T+=8,++E){ +XMoveWindow(d,*E,*T+=T[4]*c,T[1]+=T[5]*c); +j=0; +#define F(n,o,s)o+T[n-4]s-0&&++j&&T[n]s!1&&(T[n]=0-T[n])|| +if((F(4,0,<)F(4,T[2]-W,>)F(5,0,<)F(5,T[3]-H,>)1)&&j&&(j=T[2]/2)&&(k=T[3]/2)&&e-w<997&&rand()%32768<=T[2]*T[3]*(T[4]*T[4]+T[5]*T[5])/999){ +m(T[2]-j,T[3]-k,j,k,2,2); +m(j,T[3]-k,0,k,-2,-2); +m(T[2]-j,k,j,0,2,-2); +T[7]-=2; +XResizeWindow(d,*E,T[2]=j,T[3]=k); +T[6]-=2; +} +} +} diff --git a/_src/1993/cmills.new.c b/_src/1993/cmills.new.c new file mode 100644 index 0000000..e266ef7 --- /dev/null +++ b/_src/1993/cmills.new.c @@ -0,0 +1,55 @@ +long +z[7992],W,H,*t=z,j,k,*T=z,n,b; +#include +Window*E,D,s,w[999],*e=w; +Display*d; +Pixmap +p; +m(w,h,x,y,u,v){ +#define C XCreateSimpleWindow(d, +XSetWindowBackgroundPixmap(d,s=C*e=C +#define l(n)t[n]=T[n]+ +D,l(0)x,l(1)y,t[2]=w,t[3]=h,1,b,0),l(6)-x,l(7)-y,W,H,0,0,0),p); +l(4)u; +l(5)v; +#define M XMapRaised(d, +M +s); +M*e++); +t+=8; +} +main(c,g)char**g; +{ +XSetWindowAttributes +a; +XGCValues +v; +n=DefaultScreen(d=XOpenDisplay(0)); +p=XCreatePixmap(d,D=RootWindow(d,n),W=DisplayWidth(d,n),H=DisplayHeight(d,n),DefaultDepth(d,n)); +v.subwindow_mode=IncludeInferiors; +XCopyArea(d,D,p,XCreateGC(d,D,GCSubwindowMode,&v),0,0,W,H,0,0); +a.override_redirect=True; +XChangeWindowAttributes(d,D=C +D,0,0,W,H,0,0,b=BlackPixel(d,n)),CWOverrideRedirect,&a); +M +D); +m(W,H,0,0,3,3); +for(c=c^1?atoi(g[1]):9; +; +)for(T=z,n=e-(E=w); +n--; +T+=8,++E){ +XMoveWindow(d,*E,*T+=T[4]*c,T[1]+=T[5]*c); +j=0; +#define F(n,o,s)o+T[n-4]s-0&&++j&&T[n]s!1&&(T[n]=0-T[n])|| +if((F(4,0,<)F(4,T[2]-W,>)F(5,0,<)F(5,T[3]-H,>)1)&&j&&(j=T[2]/2)&&(k=T[3]/2)&&e-w<997&&rand()%32768<=T[2]*T[3]*(T[4]*T[4]+T[5]*T[5])/999){ +m(T[2]-j,T[3]-k,j,k,2,2); +m(j,T[3]-k,0,k,-2,-2); +m(T[2]-j,k,j,0,2,-2); +T[7]-=2; +XResizeWindow(d,*E,T[2]=j,T[3]=k); +T[6]-=2; +} +usleep(100); +} +} diff --git a/_src/1993/dgibson.c b/_src/1993/dgibson.c new file mode 100644 index 0000000..fac1067 --- /dev/null +++ b/_src/1993/dgibson.c @@ -0,0 +1,41 @@ +#include + +#define maxc (prs >> 16) +#define maxr (prs & 0xff00) >> 8 +#define find (col > 1) +#define endb || (prs & 16) && X(0) || chpa || (eols, 0) +#define lnst doln ? 0 : (init, 0) || (prs & 128) && X(0) +#define L endb) || 0 || (find ? 0 : (rrr++, rrc = 0)) || (lnst +#define X(p) (dfc++ && ((prs & 48) != 32 || rrc < maxc) && ++ccl && \ + (find ? (bat = bit, bit = but, but = p, ccl == col && \ + (ret = bat + bit + but) + 1) : (las = las * 2 + \ + (((main(ccl + 1, cro - 1) + main(ccl + 1, cro) + \ + main(ccl + 1, cro + 1) - p) | p) == 3), occ |= las & 1, \ + printf(" %c", "_O"[las & 1]), ccl == 2 && (sta |= (las & 3) << 6),\ + 0))) +#define _ || (find || rrc++, 0) || X(0) +#define O || (find || rrc++, 0) || X(1) +#define chpa (find && col > ccl && ((ret = bit + but) + 1)) +#define eols (!find && (cro == 1 ? (sta |= occ << 3) : cro == 2 && \ + (sta |= occ << 2), sta |= (las & 3) << 4)) +#define init (find ? (ret = bit = but = 0) : (ocp = occ, las = occ = 0, \ + printf("\nL")), dfc = (prs & 192) != 64, ccl = 0) +#define doln !(dfl++ && (((prs & 3) != 2) || rrr < maxr) && \ + (++cro == row || !find)) +#define recu (col =- col, (ccl = find ? rcf : rcl), cro = rro, 0 _ || \ + (rrc >= maxc ? 0 : (find ? rcf = ccl : (rcl = ccl), \ + main(-col, row)))) +#define addl (lnst || (rro = cro, find ? rcf = ccl : (rrc = 0, rcl = ccl), \ + 0) || main(-col, row) || (ccl = rcl + 1, 0) endb) +#define outp (find || printf("\n\nGEN %d STAT %ld\nEND\n", ++gen, \ + (long)ccl << 16 | cro << 8 | (sta | occ | ocp << 1) ^ 0x66)) +#define GEN endb) || (prs & 1) && addl || (outp, 0)), ret)); } int gen = +#define STAT ;long prs = +#define END ; +#define LIFE int bat, bit, but, las, gen, ret, rcl, rcf, rro, rrc, rrr, \ + occ, ocp, sta, dfc; long prs; main(int col, int row) { \ + int dfl = ((prs & 12) != 4), ccl = 0, cro = 0; return \ + col == 1 && printf("LIFE\n"), (col < 0 ? recu : \ + (((ret = 0) || (prs & 8) && addl || 0 && (0 + +#include "life.d" diff --git a/_src/1993/ejb.c b/_src/1993/ejb.c new file mode 100644 index 0000000..46bdd96 --- /dev/null +++ b/_src/1993/ejb.c @@ -0,0 +1,53 @@ + + + static signed char a[] = {0x69, + 110, 118, 97, 108, 105, 0x64, 1-1, + 0x6d, 111, 118, 101, 1<<1<<1<<1<<1<<1, + 114, 105, 0x6e, 103, 32, 'o'/3, 100, + 32, 102, 114, 111, 0x6d, 32, 115, 116, + 97, 100-001, 107, 32,37, 2*'2', '@'>>1, + 116, '%' + '%' + '%','w'-'W',115, 0x74, + 97, 3*'!', 107, 'q' - 'Q', 37, 10*'\n', + 10, 0}, * b = a + (1<<1<<1<<1), * w, x, + *q, c, r; int main(int d, char *e []) { + return q = (signed char *)(e+1+1), (r = + e[0] && e[1] ? 0 : 0 * puts (a) + 1) || + (r = e[1<<1] && d != 1 <<1 && 0 * puts( + a) + 1) || e[1- -1] || (r = atoi(e[1]) + < -0200 || atoi (e [1]) > 0x7f || ( x = + atoi( e[1] ) ) == 0 ? 0 * puts(a) + 1 : + 0) || e [1- -1] || (x- -x > 1-1 ? (q[0] + = x, q[1] = q[3] = 1, q[2] = 2) : ( + memset ( w = ( signed char * ) + + + + + + + + malloc(-x), '1', -x), puts (w), + q[0] = x, q[1] = '0', q[2] = q[3] = + 0)), r || (q[3] ? (c = 6 - q[1] - q[2], + (q[0] != 1) ? q[0]-- , d = q[2], q[2] = + c, main(2, e), c = q[2], q[2] = d, q[0] + ++ : 0, printf(b, q[0], q[1], q[2]), (q + [0] != 1) ? q[0]--, d = q[1],q[1] = c , + main(2, e), c = q[1], q[1] = d, q[0] ++ + : 0) : - 1 - q[0] - 1 == 0 ? (w[- x - 1 + - (q[1] & 1 ^ 1)] = q[1], puts (w), w [ + - x - 1 - (q[1] & 1)] = q[1], puts(w) ) + : - 1 - q[0] == 0 ? (w[- x - 1] = q[ 1 + ], puts(w)) : (q[0] += 1 + ( q[1] & 1 + ^ 1), main(2, e), q[0] -= 1 + ( q + [1] & 1 ^ 1), q[1] & 1 ? (q + [0]+=1+1, q[1]^=1, main + (2, e), q[1]^=1, q[0]-=1 + +1) : 0, w[q[0] - x] = q + [1], puts(w), q[1] & 1 ? + 0 : (q[0]+=1+1, q[1]^=1, + main (2, e), q[1]^=1, q + [0]-=1+1), q[0] += 1 + + (q[1] & 1),main(2,e) + , q[0] -= 1 + (q[1] + & 1) ) ), r; } diff --git a/_src/1993/jonth.c b/_src/1993/jonth.c new file mode 100644 index 0000000..654becc --- /dev/null +++ b/_src/1993/jonth.c @@ -0,0 +1,125 @@ + G int i,j + K case + R return 0 + S( x,y) for(x=0; x=0&&t<10&&!B[t][u ]; + if(!j){ + F]=1; + R; + } + N(w); + v(0)K 32:for(; + q(m,m,2); + )n=r++; + R+1; + K 3:l=0; + g=3; + I-6&&j)j=!B[t][u+l ]; + if(!j)R; + v(l)K 2:z Q(u+1)<22 A(t][u+1,l++)} + R; +} +X9(_){ + G; + for(j=_; j; j--)I)s]=s-1]; +} +U(){ + void*a=&C; + C.w=200; + C.h=30; + M(T,1); + sprintf(L,"Score%9d Level%9d",r,h); + XDrawString(D,p,J,7,15,L,29);} +P(){ + signal(14,f); +} + diff --git a/_src/1993/jonth.new.c b/_src/1993/jonth.new.c new file mode 100644 index 0000000..dc69e10 --- /dev/null +++ b/_src/1993/jonth.new.c @@ -0,0 +1,127 @@ +#include + G long i,j + K case + R return 0 + S( x,y) for(x=0; xkeycode,0);K 12:Y();}R;}d H 19;}M(J,4)}N H 20;}M(T,4)}q(m,w,k){ + G=1;switch(k){ + K 1:z+l]=1; + d(m);R+1; + K 'j':z Q t A(t-1][u,g--)K 'l':z Q t<9 + A(1+t][u,g++)K 4:F Q + u<22&&t>=0&&t<10&&!B[t][u ]; + if(!j){ + F]=1; + R; + } + N(w); + v(0)K 32:for(; + q(m,m,2); + )n=r++; + R+1; + K 3:l=0; + g=3; + I-6&&j)j=!B[t][u+l ]; + if(!j)R; + v(l)K 2:z Q(u+1)<22 A(t][u+1,l++)} + R; +} +X9(_){ + G; + for(j=_; j; j--)I)s]=s-1]; +} +U(){ + void*a=&C; + C.w=200; + C.h=30; + M(T,1); + sprintf(L,"Score%9d Level%9d",r,h); + XDrawString(D,p,J,7,15,L,29);} +P(){ + signal(14,f); +} + diff --git a/_src/1993/leo.c b/_src/1993/leo.c new file mode 100644 index 0000000..ed90d56 --- /dev/null +++ b/_src/1993/leo.c @@ -0,0 +1,128 @@ +#include +#include +#include + +#define A(x) (e^d)&i?e:(e+=i+i/15-d,d<<=4,i<<=4,x) +#define B b+=!((e^d)&i)&&(d|=i),i<<=4, +#define C i=15,B B B B d=d<<4|d>>12, +#define D=(d=g,b=0,C b<<=4, C C C b) +#define E if(**y)goto +#define F=a[rand()%c] +#define G unsigned short +#define H e^=a[z],a[z]^=e,e^=a[z], + +void + main + (int + z,char + **y) + {G*a + ,b,c + ,d,e + ,f,g + ,h,i + ;*(* + y+= + strlen + (*y) + -1)^= + 'd'; + srand + (time + (0)) + ;z== + 2&& + sscanf + (y[1 + ],"%d" + ,&z) + &&z? + 0:(z + =6); + if(! + (a=( + G*) + calloc( + z*z* + z*z, + sizeof + (G)) + )){ + printf +("No\ + memory\ + \n"); + exit + (1); + }for + (c=1 + ;i=15 + ,d=z + ,c0&& + ((g F + ),1) + );printf + ("\n" +);} diff --git a/_src/1993/lmfjyh.c b/_src/1993/lmfjyh.c new file mode 100644 index 0000000..56da589 --- /dev/null +++ b/_src/1993/lmfjyh.c @@ -0,0 +1 @@ +char*_=__FILE__; diff --git a/_src/1993/plummer.c b/_src/1993/plummer.c new file mode 100644 index 0000000..d0c61da --- /dev/null +++ b/_src/1993/plummer.c @@ -0,0 +1 @@ +char*_,*O;main(S,l)char**l;{*(O=*(l+++S-1)-1)=13,*l[1]=0;for(;;)for(printf(*l),_=O-1;_>=*l&&++*_>(S+*O+S)*S;*_--=(S+*O)*S);} diff --git a/_src/1993/rince.c b/_src/1993/rince.c new file mode 100644 index 0000000..33e8bd2 --- /dev/null +++ b/_src/1993/rince.c @@ -0,0 +1,123 @@ +/** J.K.Bonfield ** +^ < +^ > +< # > v +< < +< > > < v +X X j +x X j +X x ^ k +^ ^ +^ # +X X X X + +^ v +v v +v # +v X +v x +> # < v +> > +X X l +x X l + +41 20 +######################################## +# # +# < < < < <> < < < # +# > > > <> > > > > # +# < < < < <> < < < # +# > > > <> > > > > # +# < < < < <> < < < # +# > > > <> > > > > # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# X # +########################################*/ +#include +#include +#include +#include +#include +int _tty_ch; +bool _echoit; +bool _rawmode; +SGTTY _tty; +#define U char +#define G for( +#define I )malloc(sizeof( + +typedef struct z {U x[20]; struct z*y; } j; j*J[2][256]; +struct timeval v= {0,1<<17} ; +U**X,c,*P="noopoqqnr",d; + +j*a(int Q, int i) { + G + clear(),noecho(),cbreak(); ; +) + +{ + int x=0,y=0,W=Q,Q=i-1,k; + G; + y<=Q; + (mvaddch(y,x,X[y][x]),++x^W-1)||(x=0,y++)); + k=y=- --x; + G + refresh(),c=select(k,&y,0,0,&v)?getch():0; + k?++x-W||(x=1,++y-Q||(--k,x=W-1,y=Q-1)):--x||(y--,x=W-1),k|y; +) + +{ + j *t; + G + t=J[1-k][X[y][x]]; t; t=t->y) { + U*f=t->x; + if (d==f[17]|f[17]==c) { + int i=k&2,u=9,k=1,w=x,_=y,T; + G; + --u||(d-f[8]&&(X[y][x]=f[8]),w---_--,i=0,u=8,k--);) { + _+=P[T=i>u?u:i]-'o'; + w+=P[4+T]-'p'; + if(k) { + if (d-f[i]&&f[i]-X[_][w]) break; + i++; + } else + f[++i+8]-d && (X[_][w]=f[i+8]); +} } } } } } + +jmp_buf E; + +int main(int open, U**exit) { + FILE*C=fopen ( + open-2?__FILE__:*++exit,P+8); + j*t; + volatile int Q,Y=0; + int i,q; d=open-2?'\t':'*'; L: + + Q=0; G; setjmp(E)<256; Q-- + ) + longjmp(E,(J[Y][Q]=0,Q++)); + G; ; ) { + if(!C)return 1; + if('\n'==(c=getc(C))) + if(!Y++)goto L; else + { fscanf(C,"%d %d\n",&i,&q); + X=(U**I P++)*q*(i+1)); + Q=0; G; Qy=J[Y][c]; J[Y][c]=t; + fgets(t->x,20,C); } +} diff --git a/_src/1993/rince.new.c b/_src/1993/rince.new.c new file mode 100644 index 0000000..fbf443a --- /dev/null +++ b/_src/1993/rince.new.c @@ -0,0 +1,123 @@ +/** J.K.Bonfield ** +^ < +^ > +< # > v +< < +< > > < v +X X j +x X j +X x ^ k +^ ^ +^ # +X X X X + +^ v +v v +v # +v X +v x +> # < v +> > +X X l +x X l + +41 20 +######################################## +# # +# < < < < <> < < < # +# > > > <> > > > > # +# < < < < <> < < < # +# > > > <> > > > > # +# < < < < <> < < < # +# > > > <> > > > > # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# X # +########################################*/ +#include +#include +#include +#include +#include +int _tty_ch; +bool _echoit; +bool _rawmode; +int _tty; +#define U char +#define G for( +#define I )malloc(sizeof( + +typedef struct z {U x[20]; struct z*y; } j; j*J[2][256]; +struct timeval v= {0,1<<17} ; +U**X,c,*P="noopoqqnr",d; + +j*a(int Q, int i) { + G + clear(),noecho(),cbreak(); ; +) + +{ + int x=0,y=0,W=Q,Q=i-1,k; + G; + y<=Q; + (mvaddch(y,x,X[y][x]),++x^W-1)||(x=0,y++)); + k=y=- --x; + G + refresh(),c=select(k,&y,0,0,(v.tv_usec=1<<17,&v))?getch():0; + k?++x-W||(x=1,++y-Q||(--k,x=W-1,y=Q-1)):--x||(y--,x=W-1),k|y; +) + +{ + j *t; + G + t=J[1-k][X[y][x]]; t; t=t->y) { + U*f=t->x; + if (d==f[17]|f[17]==c) { + int i=k&2,u=9,k=1,w=x,_=y,T; + G; + --u||(d-f[8]&&(X[y][x]=f[8]),w---_--,i=0,u=8,k--);) { + _+=P[T=i>u?u:i]-'o'; + w+=P[4+T]-'p'; + if(k) { + if (d-f[i]&&f[i]-X[_][w]) break; + i++; + } else + f[++i+8]-d && (X[_][w]=f[i+8]); +} } } } } } + +jmp_buf E; + +int main(int open, U**exit) { + FILE*C=fopen ( + open-2?__FILE__:*++exit,P+8); + j*t; + volatile int Q,Y=0; + int i,q; d=open-2?'\t':'*'; L: + + Q=0; G; setjmp(E)<256; Q-- + ) + longjmp(E,(J[Y][Q]=0,Q++)); + G; ; ) { + if(!C)return 1; + if('\n'==(c=getc(C))) + if(!Y++)goto L; else + { fscanf(C,"%d %d\n",&i,&q); + X=(U**I P++)*q*(i+1)); + Q=0; G; Qy=J[Y][c]; J[Y][c]=t; + fgets(t->x,20,C); } +} diff --git a/_src/1993/schnitzi.c b/_src/1993/schnitzi.c new file mode 100644 index 0000000..24f9bf2 --- /dev/null +++ b/_src/1993/schnitzi.c @@ -0,0 +1,31 @@ +#include +#define iii\ +( I ) if ( ii(I,6\ + ) )I [ strlen(I ) -1]=!1 + int ii(ll,lll ) char*ll; { + + char *l="\"; !l ? 1.1 : l; l,printf(";int l1=1-/*+&|"); &+|-*/1,li=!1;while + +( lll>l1 ) li|=! ( l[3*l1+++3 + ] -ll[strlen ( ll)-1] ) ;return +( li ) ;}main ( ll,lll + ) char*lll[];{char l1 [ 111][21],li1[111][21 ] ,il1[111],i1l +[ 111 ] ;int lli,l11,l1l,li/* ( */,ll1,il,l;FILE*f;if(ll-2 + ) {f=fopen ( lll[1],"r" ) ;lli=l=ll1=il=!1;while +( fscanf(f,"%s",l1[lli] ) +1){li=ii ( l1[lli],3 + ) ;iii ( l1[lli] ) ;l1l=l11=!1;while +( l1l>-ll ) {iii ( lll[-l1l] + ) ;strcasecmp ( lll[-l1l--],l1[lli] ) || +( l11=++il ) ;}l11||lli++;if ( li + ) {if ( ll1l1l + ) printf ( " %s",li1[l1l++] ) ;puts +( "." ) ;}}else{sprintf ( il1,"cat %s;echo",lll[1] + ) ;system ( il1 ) ;}printf +( "\n? " ) ;gets ( il1 + ) ;sprintf ( i1l,"%s %s %s",lll[!1 ] ,lll[1],il1);system +( i1l); } diff --git a/_src/1993/vanb.c b/_src/1993/vanb.c new file mode 100644 index 0000000..98800e1 --- /dev/null +++ b/_src/1993/vanb.c @@ -0,0 +1,26 @@ +O5(O2,O7,O3)char**O7;{return!(O2+=~01+01)?00:!(O2-=02>01)?printf("\045\157\012" +,O5(012,O7+01,00)):!(O2-=02>>01)?(**O7<=067&&**O7>057?O5(03,O7,*(*O7)++-060+010 + *O3):O3 ):!(O2 -=-O3- ~O3)? (072>** + O7&&060 <=**O7 ?O5(04 ,O7,012 *O3-060 + +*(*O7 )++):O3 ):!(O2 -=!O3+ !!O3)?( + **O7>057 &&**O7 <=071? O5(05, O7,*(* + O7)+++ O3*020 -060): **O7<= 0106&& + 00101<= **O7?O5 (05,O7 ,020*O3 +*(*O7) + ++-067) :0140<** O7&&** O7<0147 ?O5(05, + O7,-0127 +*(*O7 )+++020 *O3):O3 ):!( + O2-=02- 01)?(** O7==050 ?050** ++*O7, + O5(013, O7,O5( 012,O7 ,00)):* *O7<056 + &&054<* *O7?055 **++* O7,-O5( 06,O7, + 00):054 >**O7&& 052<** O7?050* *(*O7) + ++,O5(06 ,O7,00 ):!(** O7^0170 )||!( + 0130^** O7)?*++ *O7,O5 (05,O7 ,00):* + *O7==0144 ||**O7 ==0104 ?++*O7 ,O5(04, + O7,00): O5(03 ,O7,00 )):!-- O2?(* + *O7==052 ?O5(07 ,O7,O3* (*++*O7 ,O5(06 + ,O7,00) )):!( 045-** O7)?O5( 07,O7, + O3%(03+( *O7)++, O5(06, O7,00) )):!(** + O7^057)?O5(07, O7,O3/( 03-*++ *O7,O5( + 06,O7,00))):O3 ):!(O2 +=01-02 )?O5(07 + ,O7,O5(06,O7, 00)):!( O2+=-02/ 02)?(!(* +*O7-053)?O5(011,O7,O3+(++*O7,O5(010,O7,00))):!(055^**O7)?O5(011,O7,O3-(03+*(*O7 +)++,O5(0010,O7,00))):O3):!(O2-=0563&0215)?O5(011,O7,O5(010,O7,00)):(++*O7,O3);} diff --git a/imgs/1993-cmills.png b/imgs/1993-cmills.png new file mode 100644 index 0000000..5c5a57d Binary files /dev/null and b/imgs/1993-cmills.png differ diff --git a/imgs/1993-jonth.png b/imgs/1993-jonth.png new file mode 100644 index 0000000..6ea9869 Binary files /dev/null and b/imgs/1993-jonth.png differ diff --git a/index.md b/index.md index c3585cb..8943101 100644 --- a/index.md +++ b/index.md @@ -15,6 +15,7 @@ IOCCCをよく知らない人は、まず[このサイトについて]({{ site.b 更新履歴: +* 2021/02/20: [IOCCC 1993]({{ site.baseurl }}{% link 1993/index.md %})の解説を公開しました。 * 2021/02/14: [IOCCC 1992]({{ site.baseurl }}{% link 1992/index.md %})の解説を公開しました。 * 2021/02/07: [IOCCC 1991]({{ site.baseurl }}{% link 1991/index.md %})の解説を公開しました。 * 2021/01/30: [IOCCC 1990]({{ site.baseurl }}{% link 1990/index.md %})の解説を公開しました。 diff --git a/patches/1993-cmills.patch b/patches/1993-cmills.patch new file mode 100644 index 0000000..804c38b --- /dev/null +++ b/patches/1993-cmills.patch @@ -0,0 +1,9 @@ +--- cmills.c ++++ cmills.c +@@ -50,5 +50,6 @@ + XResizeWindow(d,*E,T[2]=j,T[3]=k); + T[6]-=2; + } ++usleep(100); + } + } diff --git a/patches/1993-jonth.patch b/patches/1993-jonth.patch new file mode 100644 index 0000000..ed8f3ca --- /dev/null +++ b/patches/1993-jonth.patch @@ -0,0 +1,35 @@ +--- jonth.c ++++ jonth.c +@@ -1,4 +1,5 @@ +- G int i,j ++#include ++ G long i,j + K case + R return 0 + S( x,y) for(x=0; xkeycode,0);K 12:Y();}R;}d H 19;}M(J,4)}N H 20;}M(T,4)}q(m,w,k){ + G=1;switch(k){ + K 1:z+l]=1; + d(m);R+1; diff --git a/patches/1993-rince.patch b/patches/1993-rince.patch new file mode 100644 index 0000000..1caa9ee --- /dev/null +++ b/patches/1993-rince.patch @@ -0,0 +1,20 @@ +--- rince.c ++++ rince.c +@@ -50,7 +50,7 @@ + int _tty_ch; + bool _echoit; + bool _rawmode; +-SGTTY _tty; ++int _tty; + #define U char + #define G for( + #define I )malloc(sizeof( +@@ -71,7 +71,7 @@ + (mvaddch(y,x,X[y][x]),++x^W-1)||(x=0,y++)); + k=y=- --x; + G +- refresh(),c=select(k,&y,0,0,&v)?getch():0; ++ refresh(),c=select(k,&y,0,0,(v.tv_usec=1<<17,&v))?getch():0; + k?++x-W||(x=1,++y-Q||(--k,x=W-1,y=Q-1)):--x||(y--,x=W-1),k|y; + ) +