#deg 2 var x: 0..3; { 1=počátek, 2=okraj, 3=střed intervalu } y: 0..1 = 0; { výstřel } a, aa, b, c, cc, d: 0..3 = 0; { jednotlivé signály } begin { Triviální vstup => vypálíme hned } if (x=1) and (S[1].x=1) then begin y:=1; stop; end; { Na počátku vyšleme signály C a D } if x=1 then begin x:=2; d:=3; end; if S[2].x=1 then c:=2; { Signál C putuje vpravo rychlostí 1, vpravo se odrazí jako C' } if c>0 then dec(c); if S[2].c=1 then c:=1; if (x=2) and (c>0) then begin c:=0; cc:=2; end; { Signál C' putuje vlevo rychlostí 1 } if cc>0 then dec(cc); if S[1].cc=1 then cc:=1; { Signál D putuje vpravo rychlostí 1/3 } if d>0 then dec(d); if S[2].d=1 then d:=3; { Když se C' a D potkají, máme střed. Vyšleme z něj A a B. } if (x=0) and (cc>0) and (d>0) then begin cc:=0; d:=0; x:=3; a:=2; b:=3; end; { Signál A putuje vlevo rychlostí 1, vlevo se odrazí a je z něj A' } if a>0 then dec(a); if S[1].a=1 then a:=1; if (x=2) and (a>0) then begin a:=0; aa:=2; end; { Signál A' putuje vpravo rychlostí 1 } if aa>0 then dec(aa); if S[2].aa=1 then aa:=1; { Signál B putuje vlevo rychlostí 1/2 } if b>0 then dec(b); if S[1].b=1 then b:=2; { Když A' doputuje zpět do středu a B doleva, spustíme se znovu v obou polovinách } if (x=2) and (b>0) then begin b:=0; x:=1; end; if (x=3) and (aa>0) then begin aa:=0; x:=1; end; { Není-li co dělat, končíme } if (a=0) and (aa=0) and (b=0) and (c=0) and (cc=0) and (d=0) and (x<>1) then stop; end.