Elementary cellular automaton: Difference between revisions

add FreeBASIC
m (→‎{{header|Perl}}: Fix link: Perl 6 --> Raku)
(add FreeBASIC)
Line 1,035:
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#
</pre>
 
=={{header|FreeBASIC}}==
<lang freebasic>
#define NCELLS 400
#define border 16
dim as ubyte rule = 110
 
sub evolve( row as uinteger, rule as ubyte, pattern() as ubyte )
dim as ubyte newp(NCELLS)
dim as uinteger i
dim as ubyte lookup
for i = 0 to NCELLS-1
pset (i + border, row + border ), pattern(i)*15
lookup = 4*pattern((i-1) mod NCELLS) + 2*pattern(i) + pattern( (i+1) mod NCELLS )
newp(i)=0
if ( 2^lookup and rule )<>0 then newp(i) = 1
next i
for i = 0 to NCELLS-1
pattern(i) = newp(i)
next i
end sub
 
sub perform_simulation( rule as ubyte, pattern() as ubyte )
dim as integer i
for i = 1 to NCELLS
evolve(i, rule, pattern())
next i
end sub
 
sub reseed( pattern() as ubyte )
dim as integer i
for i = 0 to NCELLS-1
pattern(i) = int(rnd+0.5)
next i
end sub
 
sub display_text( rule as ubyte )
locate 4,58 : print using "Rule ###";rule
locate 6,53 : print " R: reshuffle seed "
locate 8,53 : print " <,>: change rule "
locate 10,53 : print " Q: quit "
end sub
 
screen 12
randomize timer
dim as boolean pattern(0 to NCELLS-1)
dim as string key="R"
 
do
if key = "R" then
cls
reseed(pattern())
perform_simulation(rule,pattern())
display_text(rule)
end if
if key="<" then
cls
rule = (rule-1) mod 256
reseed(pattern())
perform_simulation(rule,pattern())
display_text(rule)
end if
if key=">" then
cls
rule = (rule+1) mod 256
reseed(pattern())
perform_simulation(rule,pattern())
display_text(rule)
end if
key = ucase(inkey)
loop until ucase(key) = "Q"</lang>
 
=={{header|Fōrmulæ}}==
781

edits