Conway's Game of Life: Difference between revisions
Content added Content deleted
imported>Chinhouse |
(Added Quackery.) |
||
Line 12,905: | Line 12,905: | ||
conway_life()</syntaxhighlight> |
conway_life()</syntaxhighlight> |
||
=={{header|Quackery}}== |
|||
Uses a Tortoise and Hare algorithm to detect when Life becomes static or repetitive. The tortoise version is displayed, along with five victory laps of the cyclic part once a cycle a detected before terminating. |
|||
<syntaxhighlight lang="Quackery"> |
|||
[ $ "turtleduck.qky" loadfile ] now! |
|||
[ $ \ |
|||
import time |
|||
now = time.time() |
|||
sleepy_time = 5/7-(now%(5/7)) |
|||
time.sleep(sleepy_time) |
|||
\ python ] is wait ( --> ) |
|||
[ dup 1 |
|||
[ 2dup > while + 1 >> 2dup / again ] |
|||
drop nip ] is sqrt ( n --> n ) |
|||
[ stack ] is width ( --> s ) |
|||
[ tuck witheach |
|||
[ over i^ peek + rot i^ poke swap ] |
|||
drop ] is add ( [ [ --> [ ) |
|||
[ 1 split swap join ] is left ( [ --> [ ) |
|||
[ -1 split swap join ] is right ( [ --> [ ) |
|||
[ width share split swap join ] is up ( [ --> [ ) |
|||
[ width share negate split swap join ] is down ( [ --> [ ) |
|||
[ left dup up tuck add |
|||
swap right tuck add |
|||
swap right tuck add |
|||
swap down tuck add |
|||
swap down tuck add |
|||
swap left tuck add |
|||
swap left add ] is neighbours ( [ --> [ ) |
|||
[ [] swap |
|||
width share times |
|||
[ width share split |
|||
dip [ 0 swap 0 join join join ] ] |
|||
drop |
|||
2 width tally |
|||
0 width share of tuck join join ] is makeborder ( [ --> [ ) |
|||
[ dup size times |
|||
[ 0 swap i^ poke |
|||
0 swap i^ width share + 1 - poke |
|||
width share step ] |
|||
width share times |
|||
[ 0 swap i^ poke |
|||
0 swap i^ 1 + negate poke ] ] is clearborder ( [ --> [ ) |
|||
[ dup neighbours |
|||
witheach |
|||
[ over i^ peek iff |
|||
[ 1 | 3 != if |
|||
[ 0 swap i^ poke ] ] |
|||
done |
|||
3 = if [ 1 swap i^ poke ] ] |
|||
clearborder ] is nextgen ( [ --> [ ) |
|||
[ 6 random |
|||
[ table |
|||
[ 200 200 255 ] [ 200 255 200 ] |
|||
[ 255 200 200 ] [ 200 255 255 ] |
|||
[ 255 200 255 ] [ 255 255 200 ] ] |
|||
fill |
|||
[ 4 times |
|||
[ 20 1 walk -1 4 turn ] ] ] is block ( --> ) |
|||
[ clear |
|||
width share 10 * |
|||
dup negate |
|||
4 - 1 fly |
|||
-1 4 turn |
|||
16 - 1 fly |
|||
1 4 turn |
|||
20 1 fly |
|||
' [ 200 200 200 ] colour |
|||
4 times |
|||
[ width share 2 - 20 * 1 walk |
|||
1 4 turn ] |
|||
-20 1 fly |
|||
' [ 63 63 63 ] colour |
|||
width share times |
|||
[ width share split |
|||
swap witheach |
|||
[ if block |
|||
20 1 fly ] |
|||
width share -20 * 1 fly |
|||
1 4 turn |
|||
20 1 fly |
|||
-1 4 turn ] |
|||
drop wait frame ] is draw ( [ --> ) |
|||
[ turtle 0 frames 2 wide |
|||
dup size sqrt width put |
|||
makeborder |
|||
dup |
|||
[ dup draw nextgen |
|||
dip [ nextgen nextgen ] |
|||
2dup = until ] |
|||
5 times |
|||
[ dup draw nextgen 2dup = until ] |
|||
2drop width release ] is life ( [ --> ) |
|||
' [ 0 0 0 |
|||
1 1 1 |
|||
0 0 0 ] life ( task requirement ) |
|||
' [ 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 0 0 0 0 0 |
|||
0 0 1 1 1 1 1 0 1 1 1 1 1 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 0 0 0 0 0 0 0 ] life ( more interesting ) |
|||
randomise |
|||
[ [] |
|||
1089 times |
|||
[ 2 random join ] |
|||
life |
|||
again ] ( ... runs forever )</syntaxhighlight> |
|||
{{out}} |
|||
<code>( task requirement )</code> |
|||
[[File:Quackery Life Task.png|thumb|center]] |
|||
<code>( more interesting )</code> |
|||
[[File:Quackery Life.gif|thumb|center]] |
|||
<code>( ... runs forever )</code> |
|||
https://youtu.be/U5owgEpxzwg |
|||
(The code runs forever, not the video. The accompanying music is also generative, and comes from the Kolakoski Sequence.) |
|||
=={{header|R}}== |
=={{header|R}}== |