2005-12-05

PostScript... 更なる深淵へ

はてなリング「ChangeLog メモ」のロゴの PostScript ソースを公開したところ、/home/pochi/ChangeLog で記事が紹介されて少しアクセスが増えた。大したコードでもないのに、

PostScript は Forth と同じようなスタック型の言語。

面白いしわりと簡単なので読んだことがなければ、

ソースを読んでみてくださいませ。

ちょっとだけ視野が広がるです。

と書かれてしまっては、何か恥ずかしいです。ハイ ^^;

せっかく来て下すった方々に、もっと視野の広がるコードを二つほど紹介します。

アニメーション GIF のソース

手前味噌な自分の記事を紹介。

org.gif

PostScript は画像じゃない。ページ記述言語と呼ばれる言語。一つの PostScript ファイルの中に、1 ページ、2 ページという風にページがある。だから、(例えば) 10 枚の画像を、1 ページ 1 枚、10 ページの一つのファイルに含めることも可能。

PostScript で 10 ページ分の画像を書いておき、それを convert コマンドを使って gif に変換するとアニメーション GIF を作ることができる。そうやって作ったのが上の GIF アニメ。PostScript のソースは

にあります。30 行ぽっちの PostScript コード。

PostScript の藝術

邪悪な PostScript コード・コンテスト (The Obfuscated PostScript Contest) というのがある。解読不能なコードで最大の結果を生みだすことを競うソース・コードのコンテスト。その入選作に、たった 11 行でレイ・トレーシングを行ってしまうコードがある。

このコンテストは「プログラミング言語と文学 Programming language and literature というサイトで知った。残念なことに、このサイトから張られているコンテストのサイトへのリンクは切れている。とりあえず、

に、入選作 (らしき) ソースが置いてあるみたい。問題のコードは Tiny_RayTracing.ps というファイル。古いコンテストだし、いつソースが失われるとも分からないので、ここでソースを載せてしまいませう。

%!OPS-1.0 %%Creator: HAYAKAWA,Takashi<h-takasi@isea.is.titech.ac.jp>
/A/copy/p/floor/q/gt/S/add/n/exch/i/index/J/ifelse/r/roll/w/div/H{{loop}stopped
Y}def/t/and/C/neg/T/dup/h/exp/Y/pop/d/mul/s/cvi/e/sqrt/R/rlineto{load def}H 300
T translate(V2L&1i2A00053r45hNvQXz&vUX&UOvQXzFJ!FJ!J!O&Y43d9rE3IaN96r63rvx2dcaN
G&140N7!U&4C577d7!z&&93r6IQO2Z4o3AQYaNlxS2w!!f&nY9wn7wpSps1t1S!D&cjS5o32rS4oS3o
Z&blxC1SdC9n5dh!I&3STinTinTinY!B&V0R0VRVC0R!N&3A3Axe1nwc!l&993dC99Cc96raN!a&1CD
E&YYY!F&&vGYx4oGbxSd0nq&3IGbxSGY4Ixwca3AlvvUkbQkdbGYx4ofwnw!&vlx2w13wSb8Z4wS!J!
c&j1idj2id42rd!X&4I3Ax52r8Ia3A3Ax65rTdCS4iw5o5IxnwTTd32rCST0q&eCST0q&D1!&EYE0!J
&EYEY0!J0q!x&jd5o32rd4odSS!K&WCVW!Q&31C85d4!k&X&E9!&1!J!v&6A!b&7o!o&1r!j&43r!W)
{( )T 0 4 3 r put T(/)q{T(9)q{cvn}{s}J}{($)q{[}{]}J}J cvx}forall 270{def}H
K{K{L setgray moveto B fill}for Y}for showpage

たったこれだけのコードで得られる結果はどんなものか! それが下の絵。藝術とは、かういふものを云うんでせうなぁ。

Tiny RayTracing

No comments:

Post a Comment