fixed template 0 (chunk timeout) being able to generate outside of failures + added level 4 (CPU)

This commit is contained in:
Alexandre 2024-08-31 14:44:10 +02:00
parent 4f4674e30b
commit 8aadcaf69f
9 changed files with 615 additions and 101 deletions

View File

@ -8,7 +8,7 @@ test-1: bin/back
bin/back templates_lv0.txt 27 0
test0: bin/back
bin/back templates.txt 47 1
bin/back templates.txt 48 1
test1: bin/back
bin/back templates_lv1.txt 18 1
@ -19,6 +19,9 @@ test2: bin/back
test3: bin/back
bin/back templates_lv3.txt 33 1
test4: bin/back
bin/back templates_lv4.txt 52 1
bin/back: obj/main.o obj/generation.o obj/display.o obj/base.o obj/hash.o obj/move.o
mkdir -p bin
$(CC) $(FLAGS) $^ $(LFLAGS) -o $@

BIN
bin/back

Binary file not shown.

View File

@ -167,7 +167,7 @@ void drawChunkToRenderer(SDL_Renderer* renderer, chunk* ch, int xmin, int xmax,
int nxmin2 = to_int((to_double(cux2) - to_double(xmin)) * to_double(__width__)) / (to_double(xmax) - to_double(xmin)) ;
int nymin2 = to_int((to_double(cuy2) - to_double(ymin)) * to_double(__height__)) / (to_double(ymax) - to_double(ymin)) ;
bool x = abs(ch->chx + ch->chy)%2 == 0 ;
placeRectToRenderer(renderer, nxmin, nymin, nxmin2 - nxmin, nymin2 - nymin, 255-64*(1-x), 192, 255-64*x, SDL_ALPHA_OPAQUE/(1+3*(cur%2 == 0)));
placeRectToRenderer(renderer, nxmin, nymin, nxmin2 - nxmin, nymin2 - nymin, 192+63*(1-x)*(ch->chdata.meta->next != NULL), 192+63*x*(ch->chdata.meta->next != NULL), 32, SDL_ALPHA_OPAQUE/(1+3*(cur%2 == 0)));
cur = cur / 2 ;
}
}

View File

@ -49,6 +49,9 @@ template empty ;
linkedList* endLst ;
char** level_list ;
int level_count ;
// yes Valentin I learned to use .h the intended way xD
// ------------------------------------------------------------------------ //
@ -337,7 +340,7 @@ void generate_chunk_all(int cx, int cy) {
int turn = 0 ;
int k = 0 ;
while(i > 0) {
if(turn > 100*n_configs) {
if(turn > 50*n_configs) {
i = 0 ;
idx = 0 ;
printf("failed\n");
@ -347,7 +350,10 @@ void generate_chunk_all(int cx, int cy) {
if(i != 0) {
rotateTemplateCounterClockWise(idx);
if(k == 3) {
idx = (idx+1)%n_configs;
idx += 1;
if(idx == n_configs) {
idx = 1;
};
k = 0 ;
} else {
k++ ;
@ -443,6 +449,16 @@ void initialize(SDL_Renderer* renderer) {
endLst->coord = 0 ;
endLst->next = NULL ;
level_count = 6 ;
level_list = malloc(sizeof(char*)*level_count);
level_list[0] = "templates_lv0.txt";
level_list[1] = "templates.txt";
level_list[2] = "templates_lv1.txt";
level_list[3] = "templates_lv2.txt";
level_list[4] = "templates_lv3.txt";
level_list[5] = "templates_lv4.txt";
generate_chunk(0, 0, 2);
}
@ -452,6 +468,8 @@ void destroy() {
free_digits(digits);
free_digits(letters);
free(level_list);
free(full.lines);
free(empty.lines);
}

View File

@ -24,88 +24,6 @@ int precision = 8 ;
double εx = 0.0;
double εy = 0.0;
bool useSpecialTiles(int chx, int chy, int x, int y) {
chunk* ch = gridGet(map, chx, chy);
if(ch == NULL) {
fprintf(stderr, "ERROR : action performed in unloaded chunk\n");
exit(1);
}
//linkedPrint(ch->chdata.meta->next);
//printf("\n");
char* flag ;
if(linked_mem(ch->chdata.meta->next, y, x, &flag)) {
//printf("Triggered\n");
if(str_equal(flag, "spinCC")) {
rotateChunkCounterClockWise(chx, chy);
double plx = (double)(player_x + εx) ;
double ply = (double)(player_y + εy) ;
double npx = 7.99999999 - ply ;
double npy = plx ;
//printf("(%lf, %lf) -> (%lf, %lf)\n", plx, ply, npx, npy);
player_x = (int)npx ;
εx = (double)(npx - (int)npx) ;
player_y = (int)npy ;
εy = (double)(npy - (int)npy) ;
} else if(str_equal(flag, "spinCW")) {
for(int k = 0; k < 3; k++) {
rotateChunkCounterClockWise(chx, chy);
double plx = (double)(player_x + εx) ;
double ply = (double)(player_y + εy) ;
double npx = 7.99999999 - ply ;
double npy = plx ;
//printf("(%lf, %lf) -> (%lf, %lf)\n", plx, ply, npx, npy);
player_x = (int)npx ;
εx = (double)(npx - (int)npx) ;
player_y = (int)npy ;
εy = (double)(npy - (int)npy) ;
}
} else if(str_equal(flag, "beltX")) {
translateChunkX(chx, chy);
player_x = (player_x+1)%8;
} else if(str_equal(flag, "belt-X")) {
translateChunk_X(chx, chy);
player_x = (player_x+7)%8;
} else if(str_equal(flag, "beltY")) {
translateChunkY(chx, chy);
player_y = (player_y+7)%8;
} else if(str_equal(flag, "belt-Y")) {
translateChunk_Y(chx, chy);
player_y = (player_y+1)%8;
}
}
return true ;
}
bool checkCollision() {
return (unpack_coord(gridGet(map, player_cx, player_cy)->chdata.lines, player_x, player_y));
}
bool checkCollision2(int cx, int cy, int x, int y) {
return (unpack_coord(gridGet(map, cx, cy)->chdata.lines, x, y) && useSpecialTiles(cx, cy, x, y));
}
void normalize(int* ch_coord, int* coord, double* ε) {
if(*ε >= 1.0) {
*ε -= 1.0 ;
*coord += 1 ;
if(*coord >= 8) {
*coord -= 8 ;
*ch_coord += 1;
}
} else if(*ε < 0.0) {
*ε += 1.0 ;
*coord -= 1 ;
if(*coord < 0) {
*coord += 8 ;
*ch_coord -= 1;
}
}
}
void increment_x(double dx) {
εx = εx + dx ;
if(εx >= 1.0) {
@ -144,7 +62,100 @@ void increment_y(double dy) {
}
}
bool checkCollisionSquare(double square_size) {
bool useSpecialTiles(int chx, int chy, int x, int y, double dx, double dy) {
chunk* ch = gridGet(map, chx, chy);
if(ch == NULL) {
fprintf(stderr, "ERROR : action performed in unloaded chunk\n");
exit(1);
}
//linkedPrint(ch->chdata.meta->next);
//printf("\n");
char* flag ;
if(linked_mem(ch->chdata.meta->next, y, x, &flag)) {
//printf("Triggered\n");
if(str_equal(flag, "spinCC")) {
rotateChunkCounterClockWise(chx, chy);
increment_x(-dx);
increment_y(-dy);
double plx = (double)(player_x + εx) ;
double ply = (double)(player_y + εy) ;
double npx = 7.99999999 - ply ;
double npy = plx ;
//printf("(%lf, %lf) -> (%lf, %lf)\n", plx, ply, npx, npy);
player_x = (int)npx ;
εx = (double)(npx - (int)npx) ;
player_y = (int)npy ;
εy = (double)(npy - (int)npy) ;
increment_x(dx);
increment_y(dy);
} else if(str_equal(flag, "spinCW")) {
increment_x(-dx);
increment_y(-dy);
for(int k = 0; k < 3; k++) {
rotateChunkCounterClockWise(chx, chy);
double plx = (double)(player_x + εx) ;
double ply = (double)(player_y + εy) ;
double npx = 7.99999999 - ply ;
double npy = plx ;
//printf("(%lf, %lf) -> (%lf, %lf)\n", plx, ply, npx, npy);
player_x = (int)npx ;
εx = (double)(npx - (int)npx) ;
player_y = (int)npy ;
εy = (double)(npy - (int)npy) ;
}
increment_x(dx);
increment_y(dy);
} else if(str_equal(flag, "beltX")) {
translateChunkX(chx, chy);
player_x = (player_x+1)%8;
} else if(str_equal(flag, "belt-X")) {
translateChunk_X(chx, chy);
player_x = (player_x+7)%8;
} else if(str_equal(flag, "beltY")) {
translateChunkY(chx, chy);
player_y = (player_y+7)%8;
} else if(str_equal(flag, "belt-Y")) {
translateChunk_Y(chx, chy);
player_y = (player_y+1)%8;
}
}
return true ;
}
bool checkCollision() {
return (unpack_coord(gridGet(map, player_cx, player_cy)->chdata.lines, player_x, player_y));
}
bool checkCollision2(int cx, int cy, int x, int y, double dx, double dy) {
return (unpack_coord(gridGet(map, cx, cy)->chdata.lines, x, y) && useSpecialTiles(cx, cy, x, y, dx, dy));
}
void normalize(int* ch_coord, int* coord, double* ε) {
if(*ε >= 1.0) {
*ε -= 1.0 ;
*coord += 1 ;
if(*coord >= 8) {
*coord -= 8 ;
*ch_coord += 1;
}
} else if(*ε < 0.0) {
*ε += 1.0 ;
*coord -= 1 ;
if(*coord < 0) {
*coord += 8 ;
*ch_coord -= 1;
}
}
}
bool checkCollisionSquare(double square_size, double dx, double dy) {
double εxmin = εx - square_size;
double εxmax = εx + square_size;
double εymin = εy - square_size;
@ -166,17 +177,17 @@ bool checkCollisionSquare(double square_size) {
normalize(&cymax, &ymax, &εymax);
return (
checkCollision2(cxmin, cymin, xmin, ymin) ||
checkCollision2(cxmin, cymax, xmin, ymax) ||
checkCollision2(cxmax, cymin, xmax, ymin) ||
checkCollision2(cxmax, cymax, xmax, ymax)
checkCollision2(cxmin, cymin, xmin, ymin, dx, dy) ||
checkCollision2(cxmin, cymax, xmin, ymax, dx, dy) ||
checkCollision2(cxmax, cymin, xmax, ymin, dx, dy) ||
checkCollision2(cxmax, cymax, xmax, ymax, dx, dy)
);
}
bool moveRequest(double dx, double dy) {
increment_x(dx);
increment_y(dy);
if(checkCollisionSquare(0.1)) {
if(checkCollisionSquare(0.1, dx, dy)) {
increment_x(-dx);
increment_y(-dy);
return false;

View File

@ -1,19 +1,19 @@
#ifndef BACK_MOVE_H
#define BACK_MOVE_H
bool useSpecialTiles(int chx, int chy, int x, int y);
bool checkCollision();
bool checkCollision2(int cx, int cy, int x, int y);
void normalize(int* ch_coord, int* coord, double* ε);
void increment_x(double dx);
void increment_y(double dy);
bool checkCollisionSquare(double square_size);
bool useSpecialTiles(int chx, int chy, int x, int y, double dx, double dy);
bool checkCollision();
bool checkCollision2(int cx, int cy, int x, int y, double dx, double dy);
void normalize(int* ch_coord, int* coord, double* ε);
bool checkCollisionSquare(double square_size, double dx, double dy);
bool moveRequest(double dx, double dy);

View File

@ -55,4 +55,7 @@ extern imgs letters ;
extern template full ;
extern template empty ;
extern char** level_list ;
extern int level_count ;
#endif

View File

@ -322,6 +322,15 @@
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 0 0 1 1 1
1 1 1 0 0 1 1 1
1 1 1 3 3 1 1 1
0 0 2 1 1 2 0 0
0 0 2 1 1 2 0 0
1 1 1 3 3 1 1 1
1 1 1 0 0 1 1 1
1 1 1 0 0 1 1 1
1 1 1 0 0 1 1 1
1 1 1 0 0 1 1 1
1 1 1 1 1 1 1 1

470
templates_lv4.txt Normal file
View File

@ -0,0 +1,470 @@
1 0 1 1 1 1 0 1
0 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 0
1 0 1 1 1 1 0 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 0 1 1 1 1
1 1 1 0 0 1 1 1
1 1 1 0 0 1 1 1
1 1 1 1 0 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 1 1 1 1 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 1 1 1 1 0 0
1 0 1 1 1 1 0 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 1 1 1 1 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 1 1 1 1 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 1 1 1 1 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 1 1 1 1 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 1 1 1 1 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 1 1 1 1 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 1 1 1 1 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 1 1 1 1 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 1 1 1 1 0 0
1 0 1 1 1 1 0 1
1 0 1 1 1 1 0 1
1 0 1 1 1 1 0 1
1 0 1 1 1 1 0 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
0 0 1 1 1 1 0 0
1 0 1 1 1 1 0 1
1 0 1 1 1 1 0 1
1 0 1 1 1 1 0 1
1 0 1 1 1 1 0 1
0 0 1 1 1 1 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 0 0 0
1 1 1 1 1 0 1 1
1 1 1 1 1 0 1 1
1 1 1 1 1 0 1 1
1 1 1 1 1 0 1 1
1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 1 1 0 0 0
1 1 0 1 1 0 1 1
1 1 0 1 1 0 1 1
1 1 0 1 1 0 1 1
1 1 0 1 1 0 1 1
0 0 0 1 1 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
1 0 1 1 1 1 0 0
1 0 1 1 1 1 1 1
1 0 1 1 1 1 1 1
1 0 1 1 1 1 1 1
1 0 1 1 1 1 1 1
1 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
1 0 0 0 0 0 0 0
1 0 1 1 1 1 1 1
1 0 1 1 1 1 1 1
1 0 1 1 1 1 1 1
1 0 1 1 1 1 1 1
1 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1
1 0 1 1 1 1 0 0
1 0 1 1 1 1 0 1
1 0 1 1 1 1 0 1
1 0 1 1 1 1 0 1
1 0 1 1 1 1 0 1
1 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
$