ライフゲーム
Posted feedbacks - PostScript
PostScript で書いてみました。
このままプリンタに流すと1世代1枚の紙を浪費しますのでご注意下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | !PS
%---------------- Initialize -----------
/TestMap [ % 10x10
0 1 0 0 0 0 1 1 1 0
0 0 0 0 1 0 0 1 1 0
0 0 0 1 0 0 1 0 1 0
1 0 1 1 0 0 1 0 0 0
0 1 0 0 0 0 0 0 1 0
1 0 0 0 1 0 1 1 0 1
0 1 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 1 0 0 1
0 0 0 0 1 1 0 0 1 0
] def
/RandomMap {
realtime srand
[1 1 MapSize2 { pop rand 1000 mod 300 gt {0} {1} ifelse } for]
} def
/OrgMap { TestMap } def
/MapSizeX 10 def
/MapSizeY 10 def
/Loop 150 def
% 0 1 2 3 4 5 6 7 8
/RuleBorn [ false false false true false false false false false ] def
/RuleKeep [ false false true true false false false false false ] def
% ----Printout Size-------------------
/MapWidth 500 def
/MapHeight 500 def
/MapOffsetX 20 def
/MapOffsetY 70 def
% -------------------------------------
/Times-Roman findfont 16 scalefont setfont
/MapSizeX2 MapSizeX 2 add def
/MapSize2 MapSizeX MapSizeY mul def
/MapSize3 MapSizeX2 MapSizeY mul def
/Vect [-1 MapSizeX2 sub 0 MapSizeX2 sub 1 MapSizeX2 sub -1 1 MapSizeX2 1 sub M\
apSizeX2 MapSizeX2 1 add] def
/DispMap {
20 20 moveto (Life Game: Stage=) show
10 string cvs show
/Map exch def
/VX MapWidth MapSizeX idiv def
/VY MapHeight MapSizeY idiv def
0 1 MapSizeY 1 sub {
/y exch def
0 1 MapSizeX 1 sub {
/x exch def
x VX mul MapOffsetX add
y VY mul -1 mul MapHeight add MapOffsetY add moveto
VX 0 rlineto 0 VY rlineto 0 VX sub 0 rlineto closepath
Map x y MapSizeX2 mul add 1 add get 1 eq { fill } { stroke } ifels\
e
} for
} for
} def
/ExpandMap {
/Offset exch def
/Width MapSizeX Offset 2 mul add def
/Map exch def
[
0 1 MapSizeY 1 sub {
Width mul Offset add /v exch def
Map v MapSizeX add 1 sub get
0 1 MapSizeX 1 sub {
v add Map exch get
} for
Map v get
} for
]
} def
/NewStage {
1 ExpandMap
/Map exch def
[
0 1 MapSize3 1 sub {
/v exch def
/count 0 def
0 1 7 {
Vect exch get
v add MapSize3 add MapSize3 mod /vx exch def
/count count Map vx get add def
} for
0
Map v get 0 eq {RuleBorn count get { pop 1 } if }
{RuleKeep count get { pop 1 } if } ifelse
} for
]
} def
/OrgMap OrgMap 0 ExpandMap def
0 1 Loop {
OrgMap exch DispMap showpage
/OrgMap OrgMap NewStage def
} for
|


saws
#5330()
Rating6/12=0.50
see: Wikipedia:ライフゲーム
[ reply ]