From 8aadcaf69ff02767e5570d593964e2ddf065b73d Mon Sep 17 00:00:00 2001 From: Alexandre Date: Sat, 31 Aug 2024 14:44:10 +0200 Subject: [PATCH] fixed template 0 (chunk timeout) being able to generate outside of failures + added level 4 (CPU) --- Makefile | 5 +- bin/back | Bin 125360 -> 125728 bytes src/display.c | 2 +- src/generation.c | 22 ++- src/move.c | 187 +++++++++--------- src/move.h | 18 +- src/structure.h | 3 + templates.txt | 9 + templates_lv4.txt | 470 ++++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 615 insertions(+), 101 deletions(-) create mode 100644 templates_lv4.txt diff --git a/Makefile b/Makefile index 4ca407b..f9a2cdd 100644 --- a/Makefile +++ b/Makefile @@ -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 $@ diff --git a/bin/back b/bin/back index ac2639c2e90ccaffbe6b1f02ce7daf903db9a896..1dd40818e1519fd87d92c66783666a38de622652 100755 GIT binary patch delta 33955 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 Zd>vrhz7*_itrxLL6@s0k_44amk43d0gZ?S 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 + 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 ; } } diff --git a/src/generation.c b/src/generation.c index bfbe332..69350fd 100644 --- a/src/generation.c +++ b/src/generation.c @@ -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); } diff --git a/src/move.c b/src/move.c index 4c0b6c8..496bffb 100644 --- a/src/move.c +++ b/src/move.c @@ -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; diff --git a/src/move.h b/src/move.h index 1422171..12ac694 100644 --- a/src/move.h +++ b/src/move.h @@ -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); diff --git a/src/structure.h b/src/structure.h index 481cef9..2a95ecd 100644 --- a/src/structure.h +++ b/src/structure.h @@ -55,4 +55,7 @@ extern imgs letters ; extern template full ; extern template empty ; +extern char** level_list ; +extern int level_count ; + #endif \ No newline at end of file diff --git a/templates.txt b/templates.txt index 73a0088..1d9f4a0 100644 --- a/templates.txt +++ b/templates.txt @@ -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 diff --git a/templates_lv4.txt b/templates_lv4.txt new file mode 100644 index 0000000..ec52a4f --- /dev/null +++ b/templates_lv4.txt @@ -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 + + +$ \ No newline at end of file