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 ac2639c..1dd4081 100755 Binary files a/bin/back and b/bin/back differ diff --git a/src/display.c b/src/display.c index 19daf13..e8c7030 100644 --- a/src/display.c +++ b/src/display.c @@ -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 ; } } 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