PostScript

整数リストの短縮

Scheme どう書く?的 - higepon blog を PostScript で [1 3 4 5 6 12 13 15] [exch{ 1 index type /arraytype eq{ dup 1 sub 2 index 1 get eq{ 2 copy 1 exch put pop }if }{ 2 copy 1 sub eq{ 2 array astore }if }ifelse }forall] == % => [1 [3 6] [12 …

(%stdout)(w)file ゴルフ

PostScript では、普通、標準出力のファイルオブジェクトは (%stdout) (w) file などとして作ります。しかし、文字列はバイナリーエンコードの効果が薄いので、"%stdout" "w" の2個の文字列があるこの方法は、ゴルフ向きではありません。標準出力に何か書き…

Anarchy Golf - ASCII Stars - PostScript

Mark Byers さんのコードは '*' を出力するとき for ループで 0.5 ずつ増加させているのですが、 「0.5 ずつ増やす」という発想が自分に無かった。 スタックの使い方がピッタリはまっている。'*' を出力する for ループに必要な初期値、増分、終了値が ' ' …

てめえならどう書くよ、0.0.2α

ゆの in PostScript を書いていて思いついたのですが、Ghostscript では、% を付けてコメント化したコードを % を付けたまま実行してしまう命令を定義できる。(unread を使っているので、Ghostscript 限定) /uncomment{ 1 dict begin /member?{ false exch…

ゆの in PostScript その2

せっかくの PostScript なんだから、やっぱり画像で表示した方がいいかな、と思ったので、PostScript viewer などで見られるようにしてみた。あと、文字だけでは寂しいので、顔の絵もつけて華やかにしたり。 %!PS gsave 4 dict begin /GothicBBB-Medium-EUC-…

ゆの in PostScript

ゆの in Ruby - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。 - subtech を起点に、色々なプログラミング言語で「ひだまりスケッチ365 来週も見てくださいね!」を凝ったやりかたで表示させるのが流行っているみたいなので、元ネタをよく知らな…

ペンローズタイル

ペンローズタイルを並べる を参考にして PostScript でペンローズタイルを描いてみた。カイト 1 個からスタートして収縮させていった時の様子を表したのが上だか右だかにある図です。 以下はソース。

宝石の名前をつけたプログラミング言語っていくつあるのだろう

PostScript に似た文法のプログラミング言語を誰か作っていないかなと、前々から思っていたのですけど、ありました。Onyx というプログラミング言語です。マルチスレッド処理ができるとかオブジェクト指向できるとか PCRE がインストールされていれば正規表…

PostScript のバイナリ化スクリプトを改良

id:yshl:20070722:1185087141 の続き。 浮動小数点数にも対応してみたが、バイナリ化するべきかそのままにすべきかの判定がまだ甘い。あと、前の奴だと文字列が 256 文字以上でエラーになるのを 65535 文字まで OK にしたが、こちらもバイナリ化の判定が甘い…

PostScript でも

http://wiredvision.jp/blog/masui/200803/200803030100.html inforno :: 日本語プログラミング言語Scala Ruby もいいけど Smalltalk でも、おk。 - Smalltalkのtは小文字です Io でもおk - はてな使ったら負けだと思っている 日本語プログラミングといえば…

マクロ

AWK - odz buffer より PostScript の /hogehoge {...} def はマクロかどうかという話に参加したくなったけど、そもそもマクロって何なのかがよくわかっていない。C の #define だとか m4 だとか Lisp のだとか Emacs の キーボードマクロだとか色々なものが…

何これ

Ghostscript 8.15.4 で % gs -q GS>100 string{}forall GS<100>count = 100 GS<100>clear GS>2000 string{}forall GS<1997>count = 1997 GS<1997>clear GS>2000 string{()print}forall GS<2000>count = 2000 GS<2000>clear GS>quit長い文字列に対して空っぽ…

ローレンツアトラクタ

以下ソース

!

anarchy golf の Factorial が締切り。Mark Byers さんが、スタックにある数値が 1 未満だったら捨てる(ただし数値は 100 未満)時に "-99 1{}for" としていて目から鱗。

anarchy golf - packed UTF 9 で 1 byte 差で負けた件について

1 byte の差は、スタックトップにある数の下位 7 byte を出力する部分の ( )dup 0 3 index 127 and put print と ( )dup 0 127 4 index and put print の違い。 ( )dup 0 3 index put print というパターンに慣れすぎていたかな。0 と "n index" の間に 127 …

Whitespace を PostScript に変換するには

多倍長整数が面倒なのだけど、それは放置するとして、フロー制御の部分をどう置き換えればいいか考えてみた。全く確かめていないので正しさの保証は 0 である。 Whitespace プログラムの開始前 /heap 65535 array def /main{ Whitespace プログラムの終わり …

いろいろ

anarchy golf - ISBN2 ? を埋めて正しい ISBN にする問題。大分差をつけられてしまった。乗数を先に全部スタックに置いてしまうという発想ができなかったのが主な敗因。あと、スタックから 2 個捨てるのに def を使う技は早速いくつかの問題で使わせていただ…

Ghostscript のエラーメッセージが不親切なので

Ghostscript のエラーメッセージは、例えば f という命令の中の index という命令でエラーが起きた場合 GS>/f{10 index}def GS>f Error: /rangecheck in index Operand stack: 10 Execution stack: %interp_exit .runexec2 --nostringval-- --nostringval-- …

2〜36進数でカプレカ数

カプレカ数が何かについては カプレカ数 - Wikipediaの 2 番目の定義の方を見てください。 で、10 進法以外の場合でもカプレカ数の説明にある演算を行って、収束するかループするか調べる PostScript プログラムを作ってみた。 % ./kaprekar.ps -b 16 123と…

PostScript はなぜ code golf の一部の問題で弱いのか

高精度の計算が苦手 整数は 32 bit まで。多倍長整数無し。long long int 無し。 浮動小数点数が単精度。 正規表現が無い 入力がちょっと長い 1行読み込みは(%stdin)(r)file 99 string readline 入力が数値が並んでいるだけだったりすると、標準入力を .runs…

PostScript はなぜ code golf で割と強いのか

思いついたことを並べてみる。 ySas さんが参加しているから 動的な型無し言語だから 変数宣言がいらない バイナリー化 文字列を内部に持つ必要がある問題でなければ、6 割くらいに縮む。 225個の命令と true と false と -128 以上 127 以下の整数が 2byte…

PostScript で if を自分で定義したり、switch case 文を作ったり

できる、できるのだ。PostScript って柔軟な言語なんですよ。 まずは if と ifelse と unless /myifelse{ 2 dict dup false 4 3 roll put dup true 4 3 roll put exch get exec }def /myif{ {}myifelse }def /unless{ {}exch myifelse }def Ghostscript で実…

PostScript のコードが末尾再帰が最適化がされているか処理系で動くコードから判定できるか

末尾再帰最適化をC/C++上で検知してみたい - higepon blog はじめてのにき(2007-08-05) の PostScript 版 http://www.adobe.com/products/postscript/pdfs/PLRM.pdf の 3.5.5 章によると PostScript は末尾再帰を最適化して execution stack があふれないよ…

バイナリートークンエンコードされた PostScript を元に戻す PostScript

ソース中に filter で変換されたコードやデータがある場合に未対応 #!/bin/sh exec gs -q -dNODISPLAY -dBATCH -d#!='{2{currentfile 256 string readline{pop}if}repeat}' -- $0 "$@" ARGUMENTS length 0 eq{ (%stdin) }{ ARGUMENTS 0 get }ifelse (r)file …

バイナリートークンエンコード用 PostScript script

ZAKKI / ySas express - PSバイナリ化と id:yshl:20070329:1175170084 の続き。 餅は餅屋理論によると、PostScript の解釈は PostScript インタープリタに任せる方がいいと思われるので、PostScript で書いてみた。 浮動小数点数と名前の即時評価が不完全。 …

同じアルファベットを二度使わないで Hello, world を出力する PostScript プログラム

普通に書いたら (Hel\154o, w\157r\154d!)= なのでしょうけど、これではつまらないのでもう少し工夫してみました。 (! )54903217(, )29234652 6{{致}張{36( )cvrs}探}茶 Shift_JIS で保存してからお近くの Ghostscript に読ませると、標準出力に大文字で「HE…

C と PostScript と Ruby が混ざりません

2007-06-19の真似をして、C でも PostScript でも Ruby でもある Hello world プログラム を書いてみようかと思いたったが失敗。 C と PostScript を混ぜることはできる。 /*(*/ #include<stdio.h> int main(){puts("Hello, C world!");return 0;} /*)clear(Hello, Po</stdio.h>…

ページがついた PostScript

dvips が作った PostScript を見つつ、GV でページが表示されるように色々いじってみたら、こんなのができた。DSC に準拠していない自信ならたっぷりある。 %!PS-Adobe-1.0 %%BoundingBox: 100 100 200 200 /x 100 def %%Page: A 1 %%PageBoundingBox: 100 1…

Brainfuck インタープリタ書いた

Brainfuck のコードを PostScript に変換して実行するタイプです。 使い方は gs -q -dNODISPLAY -dBATCH -- このPSファイル Brainfuckプログラムです。 %!PS /in(%stdin)(r)file def /out(%stdout)(w)file def /source ARGUMENTS 0 get(r)file def /memory […

Sierpinski fractal を 81 byte で

anarchy golf で Sierpinski fractal を表示するというお題が出ているので、思い立ったが吉日とばかりに PostScript で Sierpinski fractal を描いてみる。(入力を読んでサイズを変えるとかはしてません) 100 0 /s{ gsave translate dup 1 gt{ 0 0 moveto …