K-15
I
1.
2.
3.
4.
5.
6.
7.
8. ˳
9.
, Fort Knox.
Fort Knox . . xi yi zi ρi.
. ( ) :
1. ᒺ V 3
2. ( W ( Oy) U ( Oz)), de 㳿 dl . dm.
3. , :
P .
.
R Ox.
T Oy.
A .
D .
E 㳿, M0, 㳿, E0, M ( M , M - , M ).
xi, yi, zi Ox, Oy, Oz.
: Rn = Fibn mod K.
: V, W, U, K, dl, dm, de, M0, M, E0, E.
:
1. Գ.
́ Գ́, ́ Գ́ Fn,
Գ '
ϕ Fn n:
.
− 1 < 1 − ϕ < 0, , , n, Fn , . ,
2. ᒺ .
ᒺ x y z x*y*z.
ᒺ.
3. .
, . .
1946 . : n- n . , . ϳ .
|
|
. , 0, m. , [0,1), m.
4. C.
C (. C) , , , 1972 г Bell Telephone Laboratories UNIX.
, . .
, , , . . C , C++, , , Java C#, .
V = 50;
W = 11;
U = 7;
K = 13;
dl = 1;
dm = 8;
de = 40;
M0 = 100;
M = 140;
E0 = 400;
E = 220;
V = 11
M = 121
E = 240
x, y, z:
1. xyz
2. x zy
3. y z x
4. y xz
5. z x y
6. z yx
( x zy xyz 2 ).
, . (dl = const, , ).
R T .
3 ,
F1.c
1.1. fibb
1.2. get_rand
F2.c
2.1. P
2.2. C
2.3. R
2.4. T
2.5. A
2.6. D
F3.c
3.1. swap
3.2. min
3.3. get_x
3.4. main
fibb Գ 0 0.
get_rand .
P, C, R, T, A, D .
swap xx yy.
min .
x .
main .
. .
P() fibb(1); main(), P().
int P() // Put
{
Fibb(1);
|
|
x=get_rand();
y=get_rand();
z=get_rand();
ro=get_rand();
// cur_m = x*y*z*ro;
return 0;
}
x>0 x y z ro while (x*y*z*ro>0
int R() // Rotare Ox
{
xx=y;
yy=z;
y==yy;
z==xx;
}
y==yy;
z==xx;
y=yy;
z=xx;
˳
1. www.wikipedia.org
2. / . . , . . -- .: , 2005. 456-470 .
3. . , . . C++ : . . - : , 1992. 651.
1. C.
2. ˳ .
<P>::={<VD>|<FD>}
<VD>::=<IT><WS><IV>{,<IV>};
<FD>::=<IT><WS><IF>(<PD>){[<SS>]}
<FD>::=<IT><WS><IF>(<PL>)<PS><SS>
<PD>::=<IT><WS><IV>[{,<IT><WS><IV>}]
<IT>::=int|char|double|bool|string|short|unsigned
<IV>::=<L>|<IV><L>|<IV><NU>
<L>::=a|b||z|A|B||Y|Z|_
<NU>::=0|1|2|3|4|5|6|7|8|9
<SS>::={{<VD>}{<S>}}
<S>::=<SS>|return(<E>) ;|<E>;
<E>::=<D>{<+-><D>}
<D>::=<M>{<*/%><M>}
<M>::=<A><^><M>
<A>::=<const>|<IV>|IF([<E>{,<E>}])|(<E>)
:
<P>
<VD>
<FD>
<IT>
<WS> wide space (Space, Enter, Tab)
<IV>
<L>
<NU> ( )
<IF>
<PD>
<PL>
<PS>
<SS>
<S>
<E>
<D>
<M>
<A>
˳
F1.c
int fibb(int mode)
{
static int f1, f2, f3;
if (mode==0) {
f3=f1+f2;
f1=f2;
f2=f3;
} else {
f1=0;
f2=1;
}
return (f1);
}
extern K;
int get_rand()
{
return fibb(0)%K;
}
F2.c
extern x, y, z, ro, xx, yy;
extern V, W, U, K, dl, dm, de, M0, M, E0, E;
int P() // Put
{
x=get_rand();
y=get_rand();
z=get_rand();
ro=get_rand();
// cur_m = x*y*z*ro;
return 0;
}
int C() // Centre
{
return 0;
}
int R() // Rotare Ox
{
xx=y;
yy=z;
y=yy;
z=xx;
}
int T() // Rotare Oy
{
xx=x;
yy=z;
x=yy;
z=xx;
}
int A() // Accept
{
E0-=de;
M0=M0 + ro*min(dl,x)*y*z - dm;
V-=min(dl,x)*y*z;
x-=min(dl,x);
}
int D() // Drop
{
x=0;
return 0;
}
F3.c
int x, y, z, ro, xx, yy;
int V, W, U, K, dl, dm, de, M0, M, E0, E;
int swap()
{
int t;
t = xx;
xx = yy;
yy = t;
}
int min(int x, int y)
{
return x<y? x: y;
}
int get_x(int mode)
{
if (mode==-1) return 1000000000;
if (mode/3 == 0) return x;
if (mode/3 == 1) return y;
if (mode/3 == 2) return z;
}
int main()
{
// Initializing variables
V = 50;
W = 11;
U = 7;
K = 13;
dl = 1;
dm = 8;
de = 40;
M0 = 100;
M = 140;
E0 = 400;
E = 220;
// Workplace
fibb(1);
while (E0 > E && M0 < M && V!=0) {
P();
int minx;
|
|
minx = -1;
if (y<=W && z<=U && x<get_x(minx)) minx=0;
if (z<=W && y<=U && x<get_x(minx)) minx=1;
if (z<=W && x<=U && y<get_x(minx)) minx=2;
if (x<=W && z<=U && y<get_x(minx)) minx=3;
if (x<=W && y<=U && z<get_x(minx)) minx=4;
if (y<=W && x<=U && z<get_x(minx)) minx=5;
if (minx>0) {minx-=1; R();}
if (minx>1) {minx-=1; T();}
if (minx>2) {minx-=1; R();}
if (minx>3) {minx-=1; T();}
if (minx>4) {minx-=1; R();}
if (y<=W && z<=U) while (x*y*z*ro>0 && E0-de >= E && M0+(min(dl,x)*y*z*ro)-dm <= M && V-min(dl,x)*y*z>=0) A();
if (x>0) D();
}
// Returning
return 0;
}