🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.postscript
Article #764

Re: pentomino in Postscript

#764
From: Yuji Hatakeyama
Date: Fri, 12 Jan 1996 00:00
414 lines
10183 bytes
$BH+;3!w#O#T#S#L$G$9!#(J

$B0JA0!$;{ED$5$s(J<terada@sanpo.t.u-tokyo.ac.jp (Minoru TERADA)>$B$N(J
$B:n$i$l$?%Z%s%H%_(J$B%N%W%m%0%i%`$r8+$F46F0$7$F$7$^$$$^$7$?!#(J
$B$G$b0u:~$9$k$K$O!$(J

> $B<j85$N=iBe(J LaserWriter $B$G>/$7;n$_$?$H$3(J$B$m(J, $BA4It$r(J
> $B=PNO$9$k$K$O(J 20$BF|DxEY$+$+$k8+9~$_$K$J$j$^$7$?(J.
> SS5 $B$N(J gs $B$G$O(J, $B?t;~4V$/$i$$$@$C$?$C$1(J?

> $B$3$l$O$$$o$f$k>iCL%W%m%0%i%`$G$9$+$i(J, $B$^$A$,$C$F$b(J
> $B8x6&$N%W%j%s%?$KAw$C$?$j$J$5$i$J$$$h$&$K(J...

$B$H$$$&$3$H$GFq$7$$!JIT2DG=$J!K$N$G!$=PNO7k2L$@$1$r(J
$B%U%!%$%k$KMn$7$F$7$^$*$&$H$$$&$N$,0J2<$N%W%m%0%i%`(J$B$G$9!#(J

$B:n<T$K7I0U$rI=$7$F%3%a%s%H$4$H(J PostScript $B%U%!%$%k$K$7$F$"$j$^$9!#(J
$B0J2<$N%W%m%0%i%`$r(J pent.ps $B$H$$$&L>A0$G%;!<%V$7$F!$(J

    % gs -q -dNODISPLAY -dNOPAUSE pent.ps

$B$r<B9T$9$k$H!$?t;~4V!J==?t;~4V!)(J$B!K$9$k$H%+%l%s%H%G%#%l%/%H%j$K(J
$B#1#5#M%P%$%HDx$N(J pent.output $B%U%!%$%k$,@8@.$5$l$^$9!#(J
$B$3$N%U%!%$%k<+?H(J$B$,(J PostScript $B%U%!%$%k$K$J$C$F$$$k$N$GM&5$$N(J
$B$"$kJ}$O0u:~$9$k$3$H$b$G$-$k$G$7$g$&!#(J

$B$J$*!$$3$l$r<B9T(J$B$9$k$3$H$K$h$C$F(JCPU$B$KIi2Y$,$+$+$j;E;v$K;Y>c$r(J
$B$-$?$9$3$H$K$J$C$F$b!$EvJ}$O0l:]4XCN$7$^$;$s!#(J
----
($B3t(J) $B2-%F%/%N%7%9%F%`%:%i%\%i%H%j(J    $BH+;3(J $BM5<!(J(Hatakeyama Yuji)
       $B!z(JNON SANZ DROICT$B!z(J           hatakeya@otsl.oki.co.jp

--- pent.ps $B%U%!%$%k(J $B$N;O$^$j(J -----
%!PS-Adobe-2.0
% From: terada@sanpo.t.u-tokyo.ac.jp (Minoru TERADA)
% Newsgroups: fj.org.ptt,fj.lang.postscript
% Subject: pentomino in Postscript
% Date: 1 May 1995 08:42:36 GMT
% Organization: Dpt. of Mechano-Informatics, Univ. of Tokyo
% Lines: 331
% Distribution: fj
% Message-ID: <TERADA.95May1174215@tora.sanpo.t.u-tokyo.ac.jp>
% NNTP-Posting-Host: tora.sanpo.t.u-tokyo.ac.jp

% $B;{ED$H$b$&$7$^$9(J.

% $B0JA0$I$3$+$N%K%e!<%9%0%k!<%W$G(J, Postscript printer $B$K(J
% $B7W;;$r$5$;$k(J, $B$H$$$&OC$,$"$j$^$7$?(J.

% $B0J2<$K<($9$N$O(J, $B@hF|$N(J PTT $B$N$"$H$N:)?F2q$N@J>e(J$B$GOCBj$K$J$C$?(J,
% Postscript $B$G5-=R$7$?%Z%s%H%_%N$N%W%m%0%i%`$G$9(J.
% ($B$H$$$&M}M3$G(J fj.org.ptt $B$K$b%]%9(J$B%H$7$F$$$^$9(J. $B8OLZ$b;3$N(J..)

% $B2>$K$3$l$r(J postscript printer $B$K$*$/$k$H(J, $B!V0u:~Cf!W$H$+(J
% $B$$$C$?$^$^L[(J$B$C$F%Z%s%H%_%N$N2r(J(2339$BDL$j$G$7$?$C$1(J)$B$r(J
% $B7W;;$7$F(J, $B$D$$$G$K%W%j%s%H$7$F$/$l$^$9(J.

% $B<j85$N=iBe(J LaserWriter $B$G>/$7;n$_$?$H$3$m(J, $BA4It$r(J
% $B=PNO$9$k$K$O(J 20$BF|DxEY$+$+$k8+9~$_$K$J$j$^$7$?(J.
% SS5 $B$N(J gs $B$G$O(J, $B?t;~4V$/$i$$$@$C$?$C$1(J?

% $B$3$l$O$$$o$f$k>iCL%W%m%0%i%`$G$9$+$i(J, $B$^$A$,$C$F$b(J
% $B8x6&$N%W%j%s%?$KAw$C(J$B$?$j$J$5$i$J$$$h$&$K(J...

/OUT (pent.output) (w) file def
/Z { OUT exch writestring OUT 10 write } def
/pagenum 1 def
% ---------------------------------------------------
%!PS-Adobe-2.0

/W	6 def

/A	{
	exch W 1 add mul add
} def

/koma
[

	0 1 A 	0 2 A 	0 3 A 	0 4 A 
	1 0 A 	2 0 A 	3 0 A 	4 0 A 
	0 

	0 1 A 	0 2 A 	0 3 A 	1 0 A 
	%0 1 A 	0 2 A 	0 3 A 	1 3 A 
	0 1 A 	1 0 A 	2 0 A 	3 0 A 
	%0 1 A 	1 1 A 	2 1 A 	3 1 A 
	%1 -3 A 	1 -2 A 	1 -1 A 	1 0 A 
	%1 0 A 	1 1 A 	1 2 A 	1 3 A 
	%1 0 A 	2 0 A 	3 -1 A 	3 0 A 
	%1 0 A 	2 0 A 	3 0 A 	3 1 A 
	0 

	0 1 A 	0 2 A 	0 3 A 	1 1 A 
	0 1 A 	0 2 A 	0 3 A 	1 2 A 
	1 -2 A 	1 -1 A 	1 0 A 	1 1 A 
	1 -1 A 	1 0 A 	1 1 A 	1 2 A 
	1 -1 A 	1 0 A 	2 0 A 	3 0 A 
	1 0 A 	1 1 A 	2 0 A 	3 0 A 
	1 0 A 	2 -1 A 	2 0 A 	3 0 A 
	1 0 A 	2 0 A 	2 1 A 	3 0 A 
	0 

	0 1 A 	0 2 A 	1 -1 A 	1 0 A 
	0 1 A 	0 2 A 	1 2 A 	1 3 A 
	0 1 A 	1 -2 A 	1 -1 A 	1 0 A 
	0 1 A 	1 1 A 	1 2 A 	1 3 A 
	1 -1 A 	1 0 A 	2 -1 A 	3 -1 A 
	1 0 A 	1 1 A 	2 1 A 	3 1 A 
	1 0 A 	2 -1 A 	2 0 A 	3 -1 A 
	1 0 A 	2 0 A 	2 1 A 	3 1 A 
	0 

	0 1 A 	0 2 A 	1 0 A 	1 1 A 
	0 1 A 	0 2 A 	1 1 A 	1 2 A 
	0 1 A 	1 -1 A 	1 0 A 	1 1 A 
	0 1 A 	1 0 A 	1 1 A 	1 2 A 
	0 1 A 	1 0 A 	1 1 A 	2 0 A 
	0 1 A 	1 0 A 	1 1 A 	2 1 A 
	1 -1 A 	1 0 A 	2 -1 A 	2 0 A 
	1 0 A 	1 1 A 	2 0 A 	2 1 A 
	0 

	0 1 A 	0 2 A 	1 0 A 	1 2 A 
	0 1 A 	1 0 A 	2 0 A 	2 1 A 
	0 1 A 	1 1 A 	2 0 A 	2 1 A 
	0 2 A 	1 0 A 	1 1 A 	1 2 A 
	0 

	0 1 A 	0 2 A 	1 0 A 	2 0 A 
	0 1 A 	0 2 A 	1 2 A 	2 2 A 
	1 0 A 	2 -2 A 	2 -1 A 	2 0 A 
	1 0 A 	2 0 A 	2 1 A 	2 2 A 
	0 

	0 1 A 	0 2 A 	1 1 A 	2 1 A 
	1 -2 A 	1 -1 A 	1 0 A 	2 0 A 
	1 0 A 	1 1 A 	1 2 A 	2 0 A 
	1 0 A 	2 -1 A 	2 0 A 	2 1 A 
	0 

	0 1 A 	1 -1 A 	1 0 A 	2 -1 A 
	0 1 A 	1 1 A 	1 2 A 	2 2 A 
	1 -1 A 	1 0 A 	2 -2 A 	2 -1 A 
	1 0 A 	1 1 A 	2 1 A 	2 2 A 
	0 

	0 1 A 	1 -1 A 	1 0 A 	2 0 A 
	0 1 A 	1 1 A 	1 2 A 	2 1 A 
	1 -2 A 	1 -1 A 	1 0 A 	2 -1 A 
	1 -1 A 	1 0 A 	1 1 A 	2 -1 A 
	1 -1 A 	1 0 A 	1 1 A 	2 1 A 
	1 -1 A 	1 0 A 	2 0 A 	2 1 A 
	1 0 A 	1 1 A 	1 2 A 	2 1 A 
	1 0 A 	1 1 A 	2 -1 A 	2 0 A 
	0 

	0 1 A 	1 0 A 	2 -1 A 	2 0 A 
	0 1 A 	1 1 A 	2 1 A 	2 2 A 
	1 -2 A 	1 -1 A 	1 0 A 	2 -2 A 
	1 0 A 	1 1 A 	1 2 A 	2 2 A 
	0 

	1 -1 A 	1 0 A 	1 1 A 	2 0 A 
	0
] def

/kstart
[
	0
	0
	dup 2 4 mul 1 add add
	dup 2 4 mul 1 add add
	dup 8 4 mul 1 add add
	dup 8 4 mul 1 add add
	dup 8 4 mul 1 add add
	dup 4 4 mul 1 add add
	dup 4 4 mul 1 add add
	dup 4 4 mul 1 add add
	dup 4 4 mul 1 add add
	dup 8 4 mul 1 add add
	dup 4 4 mul 1 add add
] def

/used
[
	false false false false
	false false false false
	false false false false
	false
] def

/board
[
	0  0  0  0  0  0  0  0  0  0 
	0  0  0  0  0  0  0  0  0  0 
	0  0  0  0  0  0  0  0  0  0 
	0  0  0  0  0  0  0  0  0  0 
	0  0  0  0  0  0  0  0  0  0 
	0  0  0  0  0  0  0  0  0  0 
	0  0  0  0  0  0  0  0  0  0 
	0  0  0  0  0  0  0  0  0  0
	0  0  0  0  0  0  0  0  0  0 
	0  0  0  0  0  0  0  0  0  0
] def

/p_ok		% pos kindex p_ok bool
{
	board
	2 index		% pos
	koma
	3 index		% kindex
	get		% koma[kindex]
	add
	get		% board[pos + koma[kindex]]
	0
	eq

	board 3 index koma 4 index 1 add get add get 0 eq and
	board 3 index koma 4 index 2 add get add get 0 eq
	board 4 index koma 5 index 3 add get add get 0 eq and and
	exch pop exch pop
} def

/p_place	% pos kindex k p_place -
{
	board 3 index 2 index put	% board[pos] = k

	board
	3 index		% pos
	koma
	4 index		% kindex
	get		% koma[kindex]
	add
	2 index		% k
	put

	board 3 index koma 4 index 1 add get add 2 index put
	board 3 index koma 4 index 2 add get add 2 index put
	board 3 index koma 4 index 3 add get add 2 index put
	pop pop pop
} def

/p_advance	% pos p_advance newpos
{
	{
		1 add
		dup board exch get 0 eq { exit } if
	} loop
	dup 70 gt { pop 0 } if
} def

/unit 20 def
/xorg 20 def
/yorg 30 def
/xlim 570 unit W mul sub def
/ylim 810 unit 60 W div mul sub def
/curx 	xorg def
/cury 	yorg def
0.5 setlinewidth

/p_vline
{
	unit mul cury add exch 1 add unit mul curx add exch moveto
	0 unit rlineto
( unit mul cury add exch 1 add unit mul curx add exch moveto 0 unit rlineto)Z
} def

/p_hline
{
	1 add unit mul cury add exch unit mul curx add exch moveto
	unit 0 rlineto
( 1 add unit mul cury add exch unit mul curx add exch moveto unit 0 rlineto)Z
} def

/p_print
{
	% board ==
	% countexecstack =
	(curx cury moveto unit W mul 0 rlineto)Z
	(curx cury moveto 0 unit 60 W div mul rlineto)Z
	curx cury moveto unit W mul 0 rlineto
	curx cury moveto 0 unit 60 W div mul rlineto
	0 {
		0 {
			dup 2 index W 1 add mul add

			board 1 index get
			board 2 index 1 add get
			ne
			{ 1 index dup 8 string cvs OUT exch writestring
			OUT ( ) writestring
			3 index dup 8 string cvs OUT exch writestring
			p_vline
			}
			if

			board 1 index get
			board 2 index W 1 add add get
			ne
			{ 1 index dup 8 string cvs OUT exch writestring
			OUT ( ) writestring
			3 index dup 8 string cvs OUT exch writestring
			p_hline  }
			if
			pop
			1 add
			dup W ge { pop exit } if
			} loop
		1 add
		dup 60 W div ge { pop exit } if
		} loop
	stroke
	(stroke)Z

	/curx unit W 1 add mul curx add def
	(/curx unit W 1 add mul curx add def)Z
	curx xlim ge {
		/curx xorg def
		(/curx xorg def)Z
		/cury unit 60 W div 1 add mul cury add def
		(/cury unit 60 W div 1 add mul cury add def)Z
		cury ylim ge {
			showpage
			(showpage)Z
			/pagenum pagenum 1 add def
			OUT (%%Page: ) writestring
			pagenum 8 string cvs dup OUT exch writestring
			OUT ( ) writestring
			OUT exch writestring
			OUT 10 write
			/curx xorg def
			(/curx xorg def)Z
			/cury yorg def
			(/cury yorg def)Z
			} if
		} if

	OUT flushfile
	% showpage
} def

/p_answer
{
	/nans nans 1 add def
	% nans = flush
	p_print
} def

/p_try		% freepos p_try -
{
	% countexecstack =
	1 0 {
		used 2 index get not {
			2 index 1 index p_ok {
				2 index 1 index 3 index p_place
				used 2 index true put
				% countexecstack =
				% p_print
				2 index p_advance
				dup 0 eq
					{ pop p_answer }
					{ p_try }
					ifelse
				2 index 1 index 0 p_place
				used 2 index false put
				} if
			4 add
			dup koma exch get 0 eq {
				pop 1 add
				dup 12 gt { exit } if
				dup kstart exch get
				} if
			} {
			pop 1 add
			dup 12 gt { exit } if
			dup kstart exch get
			} ifelse
		dup koma exch get 0 eq { exit } if
		} loop
	pop pop
} def

/p_init
{
	W W 1 add 75 { board exch EDGE put } for
	75 -1 75 W sub { board exch EDGE put } for
} def

/p_main
{
	p_init
	0 p_try
	showpage
	(showpage) Z
	(%%Trailer)Z
} def

/nans	0 def
/EDGE	13 def

(%!PS-Adobe-2.0)Z
(/W 6 def)Z
(/unit 20 def)Z
(/xorg 20 def)Z
(/yorg 30 def)Z
(0.5 setlinewidth)Z
(%%Page: 1 1)Z
(/curx xorg def)Z
(/cury yorg def)Z
p_main

OUT closefile
quit
Technical Details
Message-ID: <HATAKEYA.96Jan12163644@shizuka.otsl.oki.co.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: fa2ca,2e3f10baccd366f1,start
X-Google-Attributes: gidfa2ca,public
From: hatakeya@otsl.oki.co.jp (Yuji Hatakeyama)
Subject: Re: pentomino in Postscript
Date: 1996/01/12
Message-ID: <HATAKEYA.96Jan12163644@shizuka.otsl.oki.co.jp>
X-Deja-AN: 134931670
distribution: fj
sender: news@lion.otsl.oki.co.jp
organization: Oki Technosystems Laboratory, Inc., Nagoya, Japan.
newsgroups: fj.lang.postscript