typedef struct c {
int x, y, b, r
} c; //c will hold the information for each day
//determines if a number is a perfect square
s( d) {
return i* i== d;
}
c m( d) {
if ( ! d) {
c b= { 2 , 2 , 4 , 4 } ;
return b; //returns the initial information if the day is 0
}
int i, p, n;
for ( i= d, p= 1 , n= i;-- i; p= p* i* i% n) ; //tests if the number is prime
c l= m( d- 1 ) ; //gets the information for the previous day
if ( p&& d> 1 ) {
c q= m( d- 2 ) ;
l.x = q.x , l.y = q.y ; //changes the position to what it was at the end of the day 2 days ago if the day is prime
}
if ( d% 2 )
l.x -= l.x > 2 ? 1 : l.x < 2 ?- 1 : 0 , l.y -= l.y > 2 ? 1 : l.y < 2 ?- 1 : 0 ; //moves the position towards (2,2) if the day is odd
else
l.y += d/ 2 , l.y = l.y > l.b ? l.y - l.b - 1 : l.y ; //moves down if the day is even
if ( s( d) )
l.x = l.r ; //moves east if the day is a perfect square
if ( s( 5 * d* d+ 4 ) || s( 5 * d* d- 4 ) )
l.b ++; //expands world down if the day is a fibonacci number
if ( s( 8 * d+ 1 ) )
l.r ++; //expands world right if the day is a triangular number
return l;
}
main( ) {
for ( int i = 0 ; i < 24 ; i++ )
{
c ll= m( i) ;
printf ( "Day %d: %d %d\n " , i
, ll.
x , ll.
y ) ; }
}
dHlwZWRlZiBzdHJ1Y3QgYyB7CiAgICBpbnQgeCx5LGIscgp9IGM7IC8vYyB3aWxsIGhvbGQgdGhlIGluZm9ybWF0aW9uIGZvciBlYWNoIGRheQoKLy9kZXRlcm1pbmVzIGlmIGEgbnVtYmVyIGlzIGEgcGVyZmVjdCBzcXVhcmUKcyhkKSB7CiAgICBpbnQgaT1zcXJ0KGQpOwogICAgcmV0dXJuIGkqaT09ZDsKfQoKYyBtKGQpIHsKICAgIGlmKCFkKSB7CiAgICAgICAgYyBiPXsyLDIsNCw0fTsKICAgICAgICByZXR1cm4gYjsgLy9yZXR1cm5zIHRoZSBpbml0aWFsIGluZm9ybWF0aW9uIGlmIHRoZSBkYXkgaXMgMAogICAgfQogICAgaW50IGkscCxuOwogICAgZm9yIChpPWQscD0xLG49aTstLWk7cD1wKmkqaSVuKTsgLy90ZXN0cyBpZiB0aGUgbnVtYmVyIGlzIHByaW1lCgogICAgYyBsPW0oZC0xKTsgLy9nZXRzIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHByZXZpb3VzIGRheQoKICAgIGlmIChwJiZkPjEpIHsKICAgICAgICBjIHE9bShkLTIpOwogICAgICAgIGwueD1xLngsbC55PXEueTsgLy9jaGFuZ2VzIHRoZSBwb3NpdGlvbiB0byB3aGF0IGl0IHdhcyBhdCB0aGUgZW5kIG9mIHRoZSBkYXkgMiBkYXlzIGFnbyBpZiB0aGUgZGF5IGlzIHByaW1lCiAgICB9CiAgICBpZiAoZCUyKQogICAgICAgIGwueC09bC54PjI/MTpsLng8Mj8tMTowLGwueS09bC55PjI/MTpsLnk8Mj8tMTowOyAvL21vdmVzIHRoZSBwb3NpdGlvbiB0b3dhcmRzICgyLDIpIGlmIHRoZSBkYXkgaXMgb2RkCiAgICBlbHNlCiAgICAgICAgbC55Kz1kLzIsbC55PWwueT5sLmI/bC55LWwuYi0xOmwueTsgLy9tb3ZlcyBkb3duIGlmIHRoZSBkYXkgaXMgZXZlbgogICAgaWYgKHMoZCkpCiAgICAgICAgbC54PWwucjsgLy9tb3ZlcyBlYXN0IGlmIHRoZSBkYXkgaXMgYSBwZXJmZWN0IHNxdWFyZQogICAgaWYgKHMoNSpkKmQrNCl8fHMoNSpkKmQtNCkpCiAgICAgICAgbC5iKys7IC8vZXhwYW5kcyB3b3JsZCBkb3duIGlmIHRoZSBkYXkgaXMgYSBmaWJvbmFjY2kgbnVtYmVyCiAgICBpZiAocyg4KmQrMSkpCiAgICAgICAgbC5yKys7IC8vZXhwYW5kcyB3b3JsZCByaWdodCBpZiB0aGUgZGF5IGlzIGEgdHJpYW5ndWxhciBudW1iZXIKICAgIHJldHVybiBsOwp9CgptYWluKCkgewoJZm9yIChpbnQgaSA9IDA7IGkgPCAyNDsgaSsrKQoJewoJCWMgbGw9bShpKTsKICAgIAlwcmludGYoIkRheSAlZDogJWQgJWRcbiIsaSxsbC54LGxsLnkpOwoJfQp9