Skip to content

Instantly share code, notes, and snippets.

@MatMercer
Last active April 16, 2018 18:55
Show Gist options
  • Save MatMercer/52864a2c75b5abab9767edc0a4efb4d6 to your computer and use it in GitHub Desktop.
Save MatMercer/52864a2c75b5abab9767edc0a4efb4d6 to your computer and use it in GitHub Desktop.
Snake matrix algorithm in JS
function createMatrix(x, y) {
matrix = new Array(y);
// Popula matriz
for (var i = matrix.length - 1; i >= 0; i--) {
matrix[i] = new Array(x)
}
return matrix;
}
function snakefy(x, y, blanks) {
var cur_i = 0;
var snake = createMatrix(x, y);
/*
- - X
- - -
- - -
*/
var cur_x = x - 1;
var cur_y = 0;
/*
direção
-1 = para baixo
1 = para cima
*/
var direction = 1;
// Contador, as vezes incrementado ou não
// Dependen do "blanks"
var counter = 1;
// Se a matriz não acabou
while (cur_i < x * y) {
// Se a row for a ultima
if (cur_y == y || cur_y < 0) {
// Se para cima, vá para ultima linha
if (direction > 0) {
cur_y = y - 1;
} else {
cur_y = 0;
}
// Volte para a linha da próxima direção
direction = -direction;
// Vá para a coluna da esquerda
cur_x -= 1;
}
if (typeof(blanks) == 'object') {
// Se os ID esta em um lugar que deve ser vazio
if ((cur_x >= blanks.x && cur_x < blanks.dx + blanks.x) &&
(cur_y >= blanks.y && cur_y < blanks.dy + blanks.y)) {
// Não precisa disso, mas melhora legibilidade
snake[cur_y][cur_x] = undefined;
} else {
snake[cur_y][cur_x] = counter++;
}
} else {
// Atribui o valor normalmente
snake[cur_y][cur_x] = counter++;
}
// Vá para a proxima linha na direção certa
cur_y += direction;
// Selecione o próximo elemento
cur_i += 1;
}
return snake;
}
C = snakefy(10, 4);
console.log('C: ');
console.log(C);
E = snakefy(5, 3);
console.log('E: ');
console.log(E);
A = snakefy(9, 4);
console.log('A: ');
console.log(A);
B = snakefy(9, 3);
console.log('B: ');
console.log(B);
D = snakefy(10, 4, {
"x": 0,
"y": 3,
"dx": 5,
"dy": 1
});
console.log('D: ');
console.log(D);
F = snakefy(10, 4, {
"x": 0,
"y": 0,
"dx": 1,
"dy": 4
});
console.log('F: ');
console.log(F);
G = snakefy(10, 4, {
"x": 9,
"y": 0,
"dx": 1,
"dy": 4
});
console.log('G: ');
console.log(G);
H = snakefy(10, 4, {
"x": 2,
"y": 1,
"dx": 6,
"dy": 2
});
console.log('H: ');
console.log(H);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment