Skip to content

Instantly share code, notes, and snippets.

@gkucmierz
Last active February 6, 2026 07:27
Show Gist options
  • Select an option

  • Save gkucmierz/8134f76fe134332605b74a0f652e0bab to your computer and use it in GitHub Desktop.

Select an option

Save gkucmierz/8134f76fe134332605b74a0f652e0bab to your computer and use it in GitHub Desktop.
maze-creatated-with-llm.js
/* --------------------------------------------------------------
Labirynt 200x250 pól (200 na szerokość, 250 na wysokość)
Otwarcie: górna krawędź po prawej → wejście
dolna krawędź po lewej → wyjście
Unikalny szlak od wejścia do wyjścia → perfekcyjny labirynt
-------------------------------------------------------------- */
const labW = 50; // szerokość (liczba pól)
const labH = 40; // wysokość (liczba pól)
function createMaze(width, height) {
const W = width * 2 + 1; // długość kolumny w znakach (ściany + pola)
const H = height * 2 + 1; // liczba wierszy w znakach
/* 1. Siatka wypełniona „#” – ściany */
const maze = Array.from({ length: H }, () => Array(W).fill('#'));
/* 2. Puste pola (współrzędne nieparzyste) */
for (let y = 0; y < height; y++) {
for (let x = 0; x < width; x++) {
maze[y * 2 + 1][x * 2 + 1] = ' ';
}
}
/* 3. Otwarcie brzegów (wejście / wyjście) */
const startX = width - 1; // wejście na górnej krawędzi po prawej
const endX = 0; // wyjście na dolnej krawędzi po lewej
maze[0][startX * 2 + 1] = ' '; // górna krawędź po prawej
maze[H - 1][endX * 2 + 1] = ' '; // dolna krawędź po lewej
/* 4. DFS – backtracking (perfekcyjny labirynt) */
const visited = Array.from({ length: height }, () => Array(width).fill(false));
const stack = [[startX, 0]]; // start od wejścia
visited[0][startX] = true;
const dirs = [
[ 0, -1], // góra
[ 1, 0], // prawo
[ 0, 1], // dół
[-1, 0] // lewo
];
while (stack.length) {
const [x, y] = stack[stack.length - 1];
const candidates = [];
// znajdź wszystkich nieodwiedzonych sąsiadów
for (const [dx, dy] of dirs) {
const nx = x + dx, ny = y + dy;
if (nx >= 0 && nx < width && ny >= 0 && ny < height && !visited[ny][nx]) {
candidates.push([nx, ny, dx, dy]);
}
}
if (!candidates.length) { // brak sąsiadów – cofamy się
stack.pop();
} else { // wybierz losowego sąsiada i idź dalej
const [nx, ny, dx, dy] = candidates[Math.floor(Math.random() * candidates.length)];
maze[y * 2 + 1 + dy][x * 2 + 1 + dx] = ' '; // otwarcie ściany
visited[ny][nx] = true;
stack.push([nx, ny]);
}
}
/* 5. Wypisanie do konsoli */
for (let i = 0; i < H; i++) {
console.log(maze[i].join(''));
}
}
/* -------------------------------------------------------------- */
createMaze(labW, labH);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment