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
|
2012-07-17 17:57:04 +02:00
|
|
|
o = [ a with [0] = 3 ]
|
2011-05-02 14:58:15 +02:00
|
|
|
tel
|
|
|
|
|
|
|
|
fun g(a:int^n at r) returns (o:int^n at r)
|
|
|
|
let
|
2012-07-17 17:57:04 +02:00
|
|
|
o = [ a with [n-1] = 10 ]
|
2011-05-02 14:58:15 +02:00
|
|
|
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
|
2012-07-17 17:57:04 +02:00
|
|
|
o = g(a)
|
2011-05-02 14:58:15 +02:00
|
|
|
until true then S2
|
|
|
|
|
|
|
|
state S2
|
|
|
|
do
|
2012-07-17 17:57:04 +02:00
|
|
|
o = f(a)
|
2011-05-02 14:58:15 +02:00
|
|
|
until false then S1
|
2011-09-07 17:51:31 +02:00
|
|
|
end;
|
|
|
|
u = a[0]
|
|
|
|
tel
|
|
|
|
|
2012-07-17 17:57:04 +02:00
|
|
|
node autom_last() returns (u1,u2: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
|
2012-07-17 17:57:04 +02:00
|
|
|
var u:int;
|
2011-09-07 17:51:31 +02:00
|
|
|
do
|
2012-07-17 17:57:04 +02:00
|
|
|
(o,u) = autom(last o)
|
2011-09-07 17:51:31 +02:00
|
|
|
until false then S1
|
|
|
|
end;
|
2012-07-17 17:57:04 +02:00
|
|
|
u1 = o[0];
|
|
|
|
u2 = o[n-1];
|
|
|
|
tel
|
|
|
|
|
|
|
|
node main() returns (u1,u2:int)
|
|
|
|
let
|
|
|
|
(u1,u2) = autom_last()
|
2011-09-07 17:51:31 +02:00
|
|
|
tel
|