Dark Bit Factory & Gravity

PROGRAMMING => Other languages => Yabasic => Topic started by: rain_storm on August 17, 2011

Title: WireWorld in 13 lines of code
Post by: rain_storm on August 17, 2011
WireWorld (http://www.quinapalus.com/wires0.html) is a cellular automaton that can simulate electronic components such as Logic Gates (http://en.wikipedia.org/wiki/Logic_gate). And since Logic Gates are the building blocks of CPU's it's no wonder that some geeks have already built a CPU (http://www.quinapalus.com/wi-java.html) in WireWorld.

Here is a WireWorld simulator written in 13 lines of ps2yabasic source code. With the limitation that every single line of code should fit within the default size of the emulators editor display, colons are allowed to separate statements within a single line. The horizontal scroll bar remains inactive so I don't make use of that final column either. There isn't much wasted space at the end of the lines so you'd be hard pressed to shave off some lines of code.

controls:
up,down,left,right = move the cursor
cross = toggle state of the selected cell (from void to wire to tail to head)
triangle,circle,square = run the simulator

Code: [Select]
open window 1,1:data 64,51,10,16,32,64,128,4096,8192,16384,32768
data 255,255,0,0,0,127,127,127,255:dim C(641,513),R(3),G(3),B(3)
read W,H,S,U,R,D,L,T,O,C,Q:for i=1 to 3 read R(i),G(i),B(i) next
0:setdispbuf B:B=1-B:setdrawbuf B:for y=1 to H for x=1 to W     
c=C(x,y):setrgb 1,R(c),G(c),B(c):fill box x*S,y*S,x*S-S,y*S-S   
next next:setrgb 1,99,0,0:box X*S,Y*S,X*S-S,Y*S-S:P=peek("port1")
if(and(P,C)=C)C(X,Y)=and(C(X,Y)+1,3):X=X+and(P,R)/R-and(P,L)/L: 
X=min(max(X,1),W):Y=min(max(Y+and(P,D)/D-and(P,U)/U,1),H):F=Q+T+O
if(and(P,F)=0)goto 0:dim T(W,H):for y=1 to H for x=1 to W:N=0:   
for v=y-1 to y+1 for u=x-1 to x+1 if(C(u,v)=3)N=N+1 next next:   
T(x,y)=1:if(C(x,y)=0)then T(x,y)=0 elsif(C(x,y)=2)then T(x,y)=1 
elsif(C(x,y)=3)then T(x,y)=2 elsif(N=1 or N=2)then T(x,y)=3 fi   
next next:for y=0 to H for x=0 to W C(x,y)=T(x,y)next next:goto 0
Title: Re: WireWorld in 13 lines of code
Post by: Shockwave on August 17, 2011
That's excellent RainStorm :)
I've never seen cellular automation in Yabasic before, let alone in 10 lines!