From 878e9d65400670e4acbe53e174422a48a925f05d Mon Sep 17 00:00:00 2001 From: Alexandre Date: Fri, 23 Aug 2024 13:57:43 +0200 Subject: [PATCH] implemented ALL config at the cost of my sanity, or what's left of it --- .vscode/settings.json | 4 +- bin/back | Bin 97792 -> 101528 bytes src/base.c | 30 +++++ src/base.h | 10 ++ src/display.c | 45 +++---- src/display.h | 2 +- src/generation.c | 290 +++++++++++++++++++++++++++++++++++------- src/generation.h | 8 +- src/hash.c | 22 ++-- src/hash.h | 7 +- src/main.c | 6 +- src/move.c | 5 +- src/structure.h | 21 +-- templates.txt | 211 +++++++++++++++++++++++++++--- 14 files changed, 535 insertions(+), 126 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index b8e1db1..3d80f2c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,6 +6,8 @@ "sdl_image.h": "c", "sdl.h": "c", "base.h": "c", - "limits": "c" + "limits": "c", + "move.h": "c", + "stdbool.h": "c" } } \ No newline at end of file diff --git a/bin/back b/bin/back index d7325d2d59acd47ca72f71407b25834c8c43747e..75b70b73db53407f128f6a90f1e598ed8737591e 100755 GIT binary patch literal 101528 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 cDOJ-C&A`+6VEt9glen -1; j++) { + arr->arr[j] = arr->arr[j+1]; + } + arr->len -= 1 ; +} + +void append(array* arr, int elt) { + arr->arr[arr->len] = elt ; + arr->len += 1 ; +} + +void pop(array* arr, int elt) { + int abort = 1 ; + for(int i = 0; i < arr->len * abort; i++) { + if(arr->arr[i] == elt) { + abort = 0 ; + indent(arr, i); + } + } +} + // ------------------------------------------------------------------------------------------------ // void import_digits(SDL_Renderer* renderer) { diff --git a/src/base.h b/src/base.h index 06ac328..701fdde 100644 --- a/src/base.h +++ b/src/base.h @@ -35,6 +35,16 @@ void terminate_line(FILE* ptr); bool arr_mem(array arr, int elt); +cardinal rotateClockWise(cardinal dir); + +cardinal rotateCounterWise(cardinal dir); + +void indent(array* arr, int i); + +void append(array* arr, int elt); + +void pop(array* arr, int elt); + void import_digits(SDL_Renderer* renderer); void import_letters(SDL_Renderer* renderer); diff --git a/src/display.c b/src/display.c index 3ba3787..15f355d 100644 --- a/src/display.c +++ b/src/display.c @@ -136,16 +136,19 @@ void drawStringToRenderer(SDL_Renderer* renderer, imgs data, char* s, int X, int } } -void drawChunkToRenderer(SDL_Renderer* renderer, chunk ch, int xmin, int xmax, int ymin, int ymax) { - if(ch.draw_id != draw_par) { - ch.draw_id = draw_par ; +void drawChunkToRenderer(SDL_Renderer* renderer, chunk* ch, int xmin, int xmax, int ymin, int ymax, int di) { + if(ch->draw_id != draw_par) { + ch->draw_id = draw_par ; + //printf("[DDDDD] chunk (%d, %d) has signature : \n", ch.chx, ch.chy); + //signature(ch.chdata); + //printf("\n"); for(int i = 0; i < 8; i++) { - uint8_t cur = ch.chdata.lines[i] ; + uint8_t cur = ch->chdata.lines[i] ; for(int j = 0; j < 8; j++) { - int cux = 50*(8*ch.chx + i); - int cuy = 50*(8*ch.chy + j); - int cux2 = 50*(8*ch.chx + i+1); - int cuy2 = 50*(8*ch.chy + j+1); + int cux = 50*(8*ch->chx + j); + int cuy = 50*(8*ch->chy + i); + int cux2 = 50*(8*ch->chx + j+1); + int cuy2 = 50*(8*ch->chy + i+1); if(true) { //if(cux - 50/zoom > xmin || cux - 50/zoom < xmax || cuy > ymin || cuy < ymax) { if(cur%2 == 1) { @@ -163,42 +166,26 @@ void drawChunkToRenderer(SDL_Renderer* renderer, chunk ch, int xmin, int xmax, i } void drawHashToRenderer(SDL_Renderer* renderer, int chx, int chy, int xmin, int xmax, int ymin, int ymax, int dist) { - //printf("[DEBUG]%d / %d\n", dist, render_distance); if(dist < render_distance) { - //printf("[DEBUG] drawing chunk (%d, %d)\n", chx, chy); chunk* todraw = gridGet(map, chx, chy) ; if(todraw == NULL) { fprintf(stderr, "NO\n"); exit(1); }; - drawChunkToRenderer(renderer, *todraw, xmin, xmax, ymin, ymax); - //printf("[DEBUG] drawn chunk (%d, %d)\n", chx, chy); + drawChunkToRenderer(renderer, todraw, xmin, xmax, ymin, ymax, dist); - if(!gridMem(map, chx+1, chy)) { - //printf("[DEBUG] (%d, %d) from (%d, %d)\n", chx+1, chy, chx, chy); - //select_config(*gridGet(map, chx, chy), EAST); + if(dist != render_distance -1 && !gridMem(map, chx+1, chy)) { generate_chunk_all(chx+1, chy); - //printf("[DEBUG] done\n"); }; - if(!gridMem(map, chx-1, chy)) { - //printf("[DEBUG] (%d, %d) from (%d, %d)\n", chx-1, chy, chx, chy); - //select_config(*gridGet(map, chx, chy), WEST); + if(dist != render_distance -1 && !gridMem(map, chx-1, chy)) { generate_chunk_all(chx-1, chy); - //printf("[DEBUG] done\n"); }; - if(!gridMem(map, chx, chy+1)) { - //printf("[DEBUG] (%d, %d) from (%d, %d)\n", chx, chy+1, chx, chy); - //select_config(*gridGet(map, chx, chy), SOUTH); + if(dist != render_distance -1 && !gridMem(map, chx, chy+1)) { generate_chunk_all(chx, chy+1); - //printf("[DEBUG] done\n"); }; - if(!gridMem(map, chx, chy-1)) { - //printf("[DEBUG] (%d, %d) from (%d, %d)\n", chx, chy-1, chx, chy); - //select_config(*gridGet(map, chx, chy), NORTH); + if(dist != render_distance -1 && !gridMem(map, chx, chy-1)) { generate_chunk_all(chx, chy-1); - //printf("[DEBUG] done\n"); }; - //printf("[DEBUG] recursive (%d, %d)\n", chx, chy); drawHashToRenderer(renderer, chx+1, chy, xmin, xmax, ymin, ymax, dist+1); drawHashToRenderer(renderer, chx-1, chy, xmin, xmax, ymin, ymax, dist+1); diff --git a/src/display.h b/src/display.h index 19c6893..f743e16 100644 --- a/src/display.h +++ b/src/display.h @@ -21,7 +21,7 @@ void drawNumberToRenderer(SDL_Renderer* renderer, imgs data, int n, int X, int Y void drawStringToRenderer(SDL_Renderer* renderer, imgs data, char* s, int X, int Y, int W, int H); -void drawChunkToRenderer(SDL_Renderer* renderer, chunk ch, int xmin, int xmax, int ymin, int ymax); +void drawChunkToRenderer(SDL_Renderer* renderer, chunk* ch, int xmin, int xmax, int ymin, int ymax, int di); void drawHashToRenderer(SDL_Renderer* renderer, int chx, int chy, int xmin, int xmax, int ymin, int ymax, int dist); diff --git a/src/generation.c b/src/generation.c index a0a2825..07328fb 100644 --- a/src/generation.c +++ b/src/generation.c @@ -22,9 +22,9 @@ Grid map ; template* configs ; array** matches ; -int n_configs = 2; +int n_configs = 18; -int render_distance = 3 ; +int render_distance = 4 ; int player_x = 4; int player_y = 4; @@ -32,7 +32,7 @@ int player_y = 4; int player_cx = 0; int player_cy = 0; -int zoom = 250 ; +int zoom = 75 ; int draw_par = 1; int __width__ = 1200 ; @@ -41,6 +41,8 @@ int __height__ = 800 ; imgs digits ; imgs letters ; +template full ; + // ------------------------------------------------------------------------ // void one_debug() { @@ -92,81 +94,265 @@ bool is_compatible(chunk ch, cardinal dir, int config_id) { return arr_mem(matches[(int)dir][ch.chdata.id], config_id); } -void generate_chunk(int x, int y, int config_id) { +template copy(template src) { + template new ; + new.id = src.id ; + new.eastsig = src.eastsig; + new.westsig = src.westsig; + new.lines = malloc(sizeof(uint8_t)*8); + for(int i = 0; i < 8; i++) { + new.lines[i] = src.lines[i]; + }; + return new; +} + +void generate_chunk(int x, int y, int config_id) { chunk* new = malloc(sizeof(chunk)) ; new->chx = x ; new->chy = y ; new->draw_id = draw_par - 2; - new->chdata = configs[config_id]; - //printf(" inserting\n"); + if(config_id >= 0) { + new->chdata = copy(configs[config_id]); + } else { + new->chdata = copy(full) ; + }; + //printf("inserting chunk (%d, %d)[%d]\n", new->chx, new->chy, new->draw_id); gridInsert(map, x, y, new); } -void select_config(chunk ch, cardinal dir) { - //printf(" in\n"); - int i = 1 + (rand()%n_configs); - int idx = 0 ; - //printf("init : %d\n", i); - while(i > 0) { - //printf(" current : %d | %d\n", i, idx); - if(is_compatible(ch, dir, idx)) { - i -= 1; - if(i != 0) { - idx = (idx+1)%n_configs; +void print_template(int config_id) { + for(int i = 0; i < 8; i++) { + uint8_t rem = configs[config_id].lines[i]; + for(int j = 0; j < 8; j++) { + if(rem%2 == 1) { + printf("X "); + } else { + printf(" "); }; - //printf(" pass\n"); - } else { - idx = (idx+1)%n_configs; - //printf(" smash\n"); + rem = rem/2 ; + }; + printf("(%d)\n", configs[config_id].lines[i]); + };/* + for(int i = 0; i < 4; i++) { + printf("["); + for(int j = 0; j < matches[i][config_id].len; j++) { + printf("%d ", matches[i][config_id].arr[j]); + } + printf("]\n"); + };*/ + printf("\n"); +} + +void rotateTemplateClockWise(int config_id) { + // 1st line become last column ... last line become 1st column + uint8_t* new = malloc(sizeof(uint8_t)*8); + + configs[config_id].westsig = configs[config_id].lines[7]; + configs[config_id].eastsig = configs[config_id].lines[0]; + + for(int i = 0; i < 8; i++) { + new[i] = configs[config_id].lines[i]; + configs[config_id].lines[i] = 0; + }; + for(int i = 0; i < 8; i++) { + uint8_t rem = new[i]; + for(int j = 0; j < 8; j++) { + configs[config_id].lines[j] *= 2 ; + configs[config_id].lines[j] += rem%2 ; + rem = rem / 2 ; } }; - //printf("chosen : %d\n\n", idx); - if(dir == NORTH) { - generate_chunk(ch.chx, ch.chy - 1, idx); - } else if(dir == SOUTH) { - generate_chunk(ch.chx, ch.chy + 1, idx); - } else if(dir == EAST) { - generate_chunk(ch.chx + 1, ch.chy, idx); - } else { - generate_chunk(ch.chx - 1, ch.chy, idx); - }; - //printf(" out\n"); + + if(config_id >= 9 ) { + //print_template(config_id); + } + + if(false) { + int* temp = matches[0][config_id].arr; + int len0 = matches[0][config_id].len; + + matches[0][config_id].arr = matches[1][config_id].arr; + matches[0][config_id].len = matches[1][config_id].len; + + matches[1][config_id].arr = matches[2][config_id].arr; + matches[1][config_id].len = matches[2][config_id].len; + + matches[2][config_id].arr = matches[3][config_id].arr; + matches[2][config_id].len = matches[3][config_id].len; + + matches[3][config_id].arr = temp; + matches[3][config_id].len = len0; + + for(int tp = 0; tp < n_configs; tp++) { + pop(&matches[0][tp], config_id); + append(&matches[1][tp], config_id); + + pop(&matches[1][tp], config_id); + append(&matches[2][tp], config_id); + + pop(&matches[2][tp], config_id); + append(&matches[3][tp], config_id); + + pop(&matches[3][tp], config_id); + append(&matches[0][tp], config_id); + } + } + + free(new); } bool is_compat_one(int cx, int cy, cardinal dir, int idx) { - if(!gridMem(map, cx, cy)) { + if(idx == -1 || !gridMem(map, cx, cy)) { return true; }; return is_compatible(*gridGet(map, cx, cy), dir, idx); } -void generate_chunk_all(int cx, int cy) { - int i = 1 + (rand()%n_configs); - int idx = 0 ; - while(i > 0) { - if(is_compat_one(cx-1, cy, EAST, idx) && is_compat_one(cx+1, cy, WEST, idx) && is_compat_one(cx, cy-1, SOUTH, idx) && is_compat_one(cx, cy+1, NORTH, idx)) { - i -= 1; - if(i != 0) { - idx = (idx+1)%n_configs; +bool is_compat_sig_north(int cx, int cy, int idx) { + chunk* cp = gridGet(map, cx, cy-1); + if(cp == NULL) { + return true; + } else { + return cp->chdata.lines[7] == configs[idx].lines[0]; + } +} +bool is_compat_sig_south(int cx, int cy, int idx) { + chunk* cp = gridGet(map, cx, cy+1); + if(cp == NULL) { + return true; + } else { + return cp->chdata.lines[0] == configs[idx].lines[7]; + } +} +bool is_compat_sig_east(int cx, int cy, int idx) { + chunk* cp = gridGet(map, cx+1, cy); + if(cp == NULL) { + return true; + } else { + return cp->chdata.westsig == configs[idx].eastsig; + } +} +bool is_compat_sig_west(int cx, int cy, int idx) { + chunk* cp = gridGet(map, cx-1, cy); + if(cp == NULL) { + return true; + } else { + return cp->chdata.eastsig == configs[idx].westsig; + } +} + +void signature(template t) { + printf("[NORTH] %d\n", t.lines[0]); + printf("[EAST] %d\n", t.eastsig); + printf("[SOUTH] %d\n", t.lines[7]); + printf("[WEST] %d\n\n", t.westsig); +} + +bool is_compat_with_spins(int cx, int cy, int idx) { + for(int k = 0; k < 4; k++) { + //printf(" (%d %d %d %d)\n", is_compat_one(cx-1, cy, EAST, idx), is_compat_one(cx+1, cy, WEST, idx), is_compat_one(cx, cy-1, SOUTH, idx), is_compat_one(cx, cy+1, NORTH, idx)); + //if(is_compat_one(cx-1, cy, EAST, idx) && is_compat_one(cx+1, cy, WEST, idx) && is_compat_one(cx, cy-1, SOUTH, idx) && is_compat_one(cx, cy+1, NORTH, idx)) { + if(is_compat_sig_north(cx, cy, idx) && is_compat_sig_east(cx, cy, idx) && is_compat_sig_south(cx, cy, idx) && is_compat_sig_west(cx, cy, idx)) { + + /*printf("---------------------------------\n"); + signature(configs[idx]); + if(gridGet(map, cx, cy+1) != NULL) { + printf("[SOUTH] - %d\n", (gridGet(map, cx, cy+1)->chdata).lines[7]); + } else { + printf("[SOUTH] - \n"); } + if(gridGet(map, cx+1, cy) != NULL) { + printf("[EAST] - %d\n", (gridGet(map, cx+1, cy)->chdata).westsig); + } else { + printf("[EAST] - \n"); + } + if(gridGet(map, cx, cy-1) != NULL) { + printf("[NORTH] - %d\n", (gridGet(map, cx, cy-1)->chdata).lines[0]); + } else { + printf("[NORTH] - \n"); + } + if(gridGet(map, cx-1, cy) != NULL) { + printf("[WEST] - %d\n\n", (gridGet(map, cx-1, cy)->chdata).eastsig); + } else { + printf("[WEST] - \n"); + } + printf("---------------------------------\n");*/ + + return true ; } else { - idx = (idx+1)%n_configs; + rotateTemplateClockWise(idx); } }; + return false; +} + +bool is_compat_with_spins_uno(int cx, int cy, int idx) { + if(is_compat_sig_north(cx, cy, idx) && is_compat_sig_east(cx, cy, idx) && is_compat_sig_south(cx, cy, idx) && is_compat_sig_west(cx, cy, idx)) { + return true ; + } else { + rotateTemplateClockWise(idx); + return false; + } +} + +void generate_chunk_all(int cx, int cy) { + int i = 1 + (rand()%(4*n_configs)); + int idx = 0 ; + int turn = 0 ; + int k = 0 ; + while(i > 0) { + if(turn > 8*n_configs) { + i = 0 ; + idx = 0 ; + printf("failed\n"); + } else { + if(is_compat_with_spins_uno(cx, cy, idx)) { + i -= 1; + if(i != 0) { + if(k == 3) { + idx = (idx+1)%n_configs; + k = 0 ; + } else { + k++ ; + }; + } + } else { + if(k == 3) { + idx = (idx+1)%n_configs; + turn += 1; + k = 0 ; + } else { + k++ ; + } + } + } + }; + //printf("\ngenerating %d\n", idx); generate_chunk(cx, cy, idx); } void initialize(SDL_Renderer* renderer) { map = newGrid(); + import_letters(renderer); import_digits(renderer); - generate_chunk(0, 0, rand()%n_configs); + + full.lines = malloc(sizeof(uint8_t)*8); + for(int i = 0; i < 8; i++) { + full.lines[i] = 255 ; + }; + full.id = -1 ; + + generate_chunk(0, 0, 1); } void destroy() { freeGrid(map); + free_digits(digits); free_digits(letters); + + free(full.lines); } void parse_one(FILE* ptr, FILE* ptr2, int index) { @@ -175,19 +361,27 @@ void parse_one(FILE* ptr, FILE* ptr2, int index) { int xres = get_integer_plus_align(ptr, ptr2); configs[index].lines[i] *= 2 ; configs[index].lines[i] += xres ; + + if(j == 0) { + configs[index].westsig *= 2; + configs[index].westsig += xres; + } else if(j == 7) { + configs[index].eastsig *= 2; + configs[index].eastsig += xres; + } } - }; + };/* for(int i = 0; i < 4; i++) { int len = count_char_in_line(ptr2, ','); matches[i][index].len = len ; - matches[i][index].arr = malloc(sizeof(int)*len); + matches[i][index].arr = malloc(sizeof(int)*n_configs); // just in case int wasted = fgetc(ptr); // always a '[' - for(int j = 0; j capacity; //printf(" inserting at index [%d]", index); List* data = grid->data; @@ -53,6 +53,8 @@ void subGridInsert(Grid grid, int hash, chunk* elt) { //printf(" <-->\n"); List list = malloc(sizeof(struct List)); list->hash = hash; + list->x = x; + list->y = y; list->elt = elt; list->next = NULL; grid->size++; @@ -64,11 +66,13 @@ void subGridInsert(Grid grid, int hash, chunk* elt) { list = list->next; }; //printf(" <>\n"); - if (list->hash == hash) { + if (list->x == x && list->y == y) { list->elt = elt; } else { List nex = malloc(sizeof(struct List)); nex->hash = hash; + nex->x = x; + nex->y = y; nex->elt = elt; nex->next = NULL; list->next = nex; @@ -82,7 +86,7 @@ void gridInsert(Grid grid, int x, int z, chunk* elt) { grid->size = 0; grid->capacity *= 2; - //printf("resizing\n"); + printf("resizing\n"); List* old_data = grid->data; grid->data = malloc(sizeof(List) * grid->capacity);; @@ -92,21 +96,21 @@ void gridInsert(Grid grid, int x, int z, chunk* elt) { for (int i = 0; i < grid->capacity/2; i++) { List list = old_data[i]; while (list != NULL) { - subGridInsert(grid, list->hash, list->elt); + subGridInsert(grid, list->hash, list->elt, list->x, list->y); list = list->next; } } }; int hash = generate_hash(x, z); - subGridInsert(grid, hash, elt); + subGridInsert(grid, hash, elt, x, z); } chunk* gridGet(Grid grid, int x, int z) { int hash = generate_hash(x, z); int index = hash % grid->capacity; List list = grid->data[index]; - while (list != NULL && list->hash != hash) { + while (list != NULL && (list->x != x || list->y != z)) { list = list->next; } if (list == NULL) { @@ -119,7 +123,7 @@ bool gridMem(Grid grid, int x, int z) { int hash = generate_hash(x, z); int index = hash % grid->capacity; List list = grid->data[index]; - while (list != NULL && list->hash != hash) { + while (list != NULL && (list->x != x || list->y != z)) { list = list->next; } if (list == NULL) { @@ -153,9 +157,9 @@ chunk* gridRemove(Grid grid, int x, int z) { Grid newGrid() { Grid grid = malloc(sizeof(struct Grid)); - grid->data = malloc(sizeof(List) * 8); + grid->data = malloc(sizeof(List) * 800); grid->size = 0; - grid->capacity = 8; + grid->capacity = 800; grid->loadFactor = 0.75; for (int i = 0; i < grid->capacity; i++) { grid->data[i] = NULL; diff --git a/src/hash.h b/src/hash.h index 8ea1667..3cca3fb 100644 --- a/src/hash.h +++ b/src/hash.h @@ -7,13 +7,16 @@ typedef struct template { uint8_t id ; uint8_t* lines ; // len = 8 + + uint8_t eastsig ; + uint8_t westsig ; } template ; typedef struct chunk { int16_t chx ; int16_t chy ; - uint8_t draw_id ; + int draw_id ; template chdata ; } chunk ; @@ -22,6 +25,8 @@ typedef struct chunk { typedef struct List { int hash; + int x; + int y; chunk* elt; struct List* next; } *List; diff --git a/src/main.c b/src/main.c index c4e0b31..9b92fe0 100644 --- a/src/main.c +++ b/src/main.c @@ -43,10 +43,14 @@ int main(int argc, char** argv) { /* -------------------------------------------------------- */ //one_debug(); - parse_configs("templates.txt", 2); + parse_configs("templates.txt", 23); initialize(rend); + //print_template(1); + //rotateTemplateClockWise(1); + //print_template(1); + moveFunctionMaster(rend); destroy(); diff --git a/src/move.c b/src/move.c index 69955e9..266450f 100644 --- a/src/move.c +++ b/src/move.c @@ -69,7 +69,7 @@ void increment_y(double dy) { bool moveRequest(double dx, double dy) { increment_x(dx); increment_y(dy); - if(checkCollision()) { + if(false && checkCollision()) { increment_x(-dx); increment_y(-dy); return false; @@ -110,7 +110,7 @@ void moveControl(bool* halt) { *halt = true; break; case SDLK_m: - zoom = max(100, zoom-25); + zoom = max(25, zoom-25); break; case SDLK_p: zoom = min(2250, zoom+25); @@ -133,6 +133,7 @@ void moveFunctionMaster(SDL_Renderer* renderer) { drawNumberToRenderer(renderer, digits, to_int(epsilon_x*100), 2 * __width__ / 3, 10, 50, 70, 0); drawNumberToRenderer(renderer, digits, to_int(epsilon_y*100), 2 * __width__ / 3, 80, 50, 70, 0); updateRenderer(renderer); + draw_par += 1 ; usleep(20000); } } \ No newline at end of file diff --git a/src/structure.h b/src/structure.h index c15699f..c0b0c25 100644 --- a/src/structure.h +++ b/src/structure.h @@ -11,7 +11,7 @@ typedef struct array { int len ; } array ; -typedef enum cardinal {NORTH, SOUTH, EAST, WEST} cardinal ; +typedef enum cardinal {NORTH, EAST, SOUTH, WEST} cardinal ; extern Grid map ; @@ -46,23 +46,6 @@ extern int n_configs ; // 2nd length extern imgs digits ; extern imgs letters ; -/* example -[ - [ - [1, 3], [0], [3], [2] <-- this 1 means "config 1 can be placed above a chunk with config 0" - ], - [ - [1], [0], [3], [0, 2] <-- this (1st) 0 means "config 0 can be placed below a chunk with config 1" - ], - [ - [1], [], [], [] - ], - [ - [1], [0], [], [] - ] -] -*/ - -// chunk is 8x8 and (0, 0) is at top left +extern template full ; #endif \ No newline at end of file diff --git a/templates.txt b/templates.txt index efef2e8..742487b 100644 --- a/templates.txt +++ b/templates.txt @@ -1,28 +1,209 @@ 1 1 1 0 0 1 1 1 -1 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 1 +1 1 1 0 0 1 1 1 +1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 -[0,1,] -[0,1,] -[0,1,] -[0,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 0 0 0 0 0 0 1 -1 1 1 0 0 1 0 1 +1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 1 0 0 1 1 1 +1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 -[0,1,] -[0,1,] -[1,0,] -[1,0,] + +1 1 1 0 0 1 1 1 +1 0 0 0 0 0 0 1 +1 0 0 1 1 0 0 1 +0 0 1 1 1 1 0 0 +0 0 1 1 1 1 0 0 +1 0 0 1 1 0 0 1 +1 0 0 0 0 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 0 0 0 0 0 +1 1 1 0 0 0 0 0 +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 +1 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 +1 0 0 0 0 1 1 1 +1 0 0 0 0 1 1 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 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +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 +1 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 1 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +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 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +0 0 0 0 0 0 0 0 +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 +1 1 0 0 0 0 1 1 +1 1 0 0 0 0 1 1 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 +1 1 0 0 0 0 1 1 +1 1 0 0 0 0 1 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +0 0 0 0 0 0 1 1 +1 0 0 0 0 0 1 1 +1 0 0 1 1 0 0 0 +1 0 0 1 1 0 0 0 +1 0 0 0 0 0 1 1 +0 0 0 0 0 0 1 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +0 0 0 1 0 0 0 1 +1 0 0 0 0 0 0 1 +1 0 0 0 0 1 0 0 +1 0 0 0 0 1 0 0 +1 0 0 0 0 0 0 1 +0 0 0 1 0 0 0 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 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 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 +0 0 0 0 0 0 0 0 +1 0 1 1 1 1 0 1 + +1 1 1 0 0 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 0 0 1 1 1 + +1 0 1 1 1 1 0 1 +0 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 1 +1 1 1 1 1 1 0 1 +0 0 0 0 0 0 0 1 +1 1 1 1 1 1 1 1 + +1 1 1 1 1 1 1 1 +0 0 0 0 0 1 1 1 +1 0 0 0 0 0 1 1 +1 0 0 0 0 0 1 1 +1 0 0 0 0 0 1 1 +1 0 0 0 0 0 1 1 +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 0 0 0 0 1 1 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 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 1 1 1 1 0 1 +1 0 1 1 1 1 0 1 +0 0 0 0 0 0 0 0 +0 0 0 0 0 0 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 1 1 0 0 1 1 1 +0 0 1 0 0 1 0 0 +1 0 0 0 0 0 0 1 +1 0 0 1 1 0 0 1 +1 0 0 1 1 0 0 1 +1 0 0 0 0 0 0 1 +0 0 1 0 0 1 0 0 +1 1 1 1 1 1 1 1 + +1 1 1 0 0 1 1 1 +0 0 1 0 0 1 0 0 +1 0 0 0 0 0 0 1 +1 0 0 1 1 0 0 1 +1 0 0 1 1 0 0 1 +1 0 0 0 0 0 0 1 +0 0 1 0 0 1 0 0 +1 1 1 0 0 1 1 1 + +1 1 1 0 0 1 1 1 +0 0 1 0 0 1 1 1 +1 0 0 0 0 0 0 1 +1 0 0 1 1 0 0 0 +1 0 0 1 1 0 0 0 +1 0 0 0 0 0 0 1 +0 0 1 0 0 1 1 1 +1 1 1 0 0 1 1 1 + +1 1 1 1 1 1 1 1 +0 0 1 0 0 1 1 1 +1 0 0 0 0 0 0 1 +1 0 0 1 1 0 0 0 +1 0 0 1 1 0 0 0 +1 0 0 0 0 0 0 1 +0 0 1 0 0 1 1 1 +1 1 1 0 0 1 1 1 + +1 1 1 0 0 1 1 1 +0 0 1 0 0 1 1 1 +1 0 0 0 0 0 0 1 +1 0 0 1 1 0 0 0 +1 0 0 1 1 0 0 0 +1 0 0 0 0 0 0 1 +0 0 1 0 0 1 1 1 +1 1 1 1 1 1 1 1 $ @@ -30,6 +211,6 @@ format is : eight lines with eight 0s and 1s in each four lists separated with a \n containing compatibilities with other configs WARNING : do NOT forget the commas (1 for each)(otherwise seg fault will await...) -order is NORTH SOUTH EAST WEST +order is NORTH EAST SOUTH WEST separate two templates with \n\n \ No newline at end of file