2011-05-02 14:58:15 +02:00
|
|
|
const n:int = 100
|
|
|
|
|
|
|
|
fun f(a:int^n at r) returns (o:int^n at r)
|
|
|
|
let
|
|
|
|
o = [ a with [0] = 0 ]
|
|
|
|
tel
|
|
|
|
|
|
|
|
fun g(a:int^n at r) returns (o:int^n at r)
|
|
|
|
let
|
|
|
|
o = [ a with [n-1] = 0 ]
|
|
|
|
tel
|
|
|
|
|
2011-09-07 17:51:31 +02:00
|
|
|
node autom(a:int^n at r) returns (o:int^n at r; u:int)
|
2011-05-02 14:58:15 +02:00
|
|
|
let
|
|
|
|
automaton
|
|
|
|
state S1
|
|
|
|
do
|
|
|
|
o = f(a)
|
|
|
|
until true then S2
|
|
|
|
|
|
|
|
state S2
|
|
|
|
do
|
|
|
|
o = g(a)
|
|
|
|
until false then S1
|
2011-09-07 17:51:31 +02:00
|
|
|
end;
|
|
|
|
u = a[0]
|
|
|
|
tel
|
|
|
|
|
|
|
|
node autom_last() returns (u:int)
|
2011-09-08 10:45:19 +02:00
|
|
|
var last o : int^n at r = 0^n;
|
2011-09-07 17:51:31 +02:00
|
|
|
let
|
|
|
|
automaton
|
|
|
|
state S1
|
|
|
|
do
|
|
|
|
until true then S2
|
|
|
|
|
|
|
|
state S2
|
|
|
|
do
|
2011-09-08 10:45:19 +02:00
|
|
|
o = g(last o)
|
2011-09-07 17:51:31 +02:00
|
|
|
until false then S1
|
|
|
|
end;
|
2011-09-08 10:45:19 +02:00
|
|
|
u = o[0]
|
2011-09-07 17:51:31 +02:00
|
|
|
tel
|