:roclet: improve algorithm, add an intermediate phase to clean up residual cell from previous layer, before grabing the free ones

This commit is contained in:
platane
2020-10-26 00:18:50 +01:00
parent 69c3551cc5
commit a3f590a7d2
13 changed files with 565 additions and 21 deletions

View File

@@ -84,6 +84,41 @@ setColor(enclaveU, 1, 3, 1 as Color);
setColor(enclaveU, 2, 4, 1 as Color);
setColor(enclaveU, 16, 8, 1 as Color);
export const closed = createEmptyGrid(16, 16);
setColor(closed, 1 + 5, 1 + 5, 3 as Color);
setColor(closed, 2 + 5, 4 + 5, 3 as Color);
setColor(closed, 2 + 5, 1 + 5, 3 as Color);
setColor(closed, 0 + 5, 2 + 5, 3 as Color);
setColor(closed, 0 + 5, 3 + 5, 3 as Color);
setColor(closed, 1 + 5, 4 + 5, 3 as Color);
setColor(closed, 3 + 5, 1 + 5, 3 as Color);
setColor(closed, 3 + 5, 2 + 5, 3 as Color);
setColor(closed, 3 + 5, 3 + 5, 3 as Color);
setColor(closed, 1 + 5, 2 + 5, 3 as Color);
setColor(closed, 1 + 5, 3 + 5, 3 as Color);
setColor(closed, 2 + 5, 2 + 5, 1 as Color);
export const closedU = createEmptyGrid(20, 20);
setColor(closedU, 1 + 10, 1 + 10, 3 as Color);
setColor(closedU, 2 + 10, 1 + 10, 3 as Color);
setColor(closedU, 3 + 10, 1 + 10, 3 as Color);
setColor(closedU, 0 + 10, 1 + 10, 3 as Color);
setColor(closedU, 0 + 10, 2 + 10, 3 as Color);
setColor(closedU, 0 + 10, 3 + 10, 3 as Color);
setColor(closedU, 3 + 10, 1 + 10, 3 as Color);
setColor(closedU, 3 + 10, 2 + 10, 3 as Color);
setColor(closedU, 3 + 10, 3 + 10, 3 as Color);
setColor(closedU, 1 + 10, 4 + 10, 3 as Color);
setColor(closedU, 3 + 10, 4 + 10, 3 as Color);
setColor(closedU, 3 + 10, 5 + 10, 3 as Color);
setColor(closedU, 1 + 10, 5 + 10, 3 as Color);
setColor(closedU, 2 + 10, 5 + 10, 3 as Color);
setColor(closedU, 2 + 10, 2 + 10, 1 as Color);
setColor(closedU, 1 + 10, 2 + 10, 1 as Color);
setColor(closedU, 2 + 10, 3 + 10, 1 as Color);
setColor(closedU, 1 + 10, 3 + 10, 1 as Color);
setColor(closedU, 2 + 10, 4 + 10, 1 as Color);
const create = (width: number, height: number, emptyP: number) => {
const grid = createEmptyGrid(width, height);
const pm = new ParkMiller(10);

View File

@@ -1,4 +1,4 @@
export type Color = (1 | 2 | 3 | 4 | 5 | 6) & { _tag: "__Color__" };
export type Color = (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9) & { _tag: "__Color__" };
export type Empty = 0 & { _tag: "__Empty__" };
export type Grid = {

View File

@@ -5,6 +5,8 @@ export type Snake = Uint8Array & { _tag: "__Snake__" };
export const getHeadX = (snake: Snake) => snake[0] - 2;
export const getHeadY = (snake: Snake) => snake[1] - 2;
export const getSnakeLength = (snake: Snake) => snake.length / 2;
export const copySnake = (snake: Snake) => snake.slice() as Snake;
export const snakeEquals = (a: Snake, b: Snake) => {