А
Size: a a a
А
L
А
function findNumber (number) {
return arr.reduce((p, c, posY) => {
let posX = c.findIndex(v => v === number)
return ~posX ? { x: posX, y: posY } : p
}, null)
}
function findZero () { return findNumber(0) }
function toLeft (x, y) {
x += 1
if (x === 0 || x >= arr[y].length) return { x, y }
arr[y][x] = arr[y].splice(x - 1, 1, arr[y][x])[0]
return { x: x - 1, y }
}
function toRight (x, y) {
x -= 1
if (x === arr[y].length - 1) return { x, y }
arr[y][x] = arr[y].splice(x + 1, 1, arr[y][x])[0]
return { x: x + 1, y }
}
function toUp (x, y) {
y += 1
let zero = findZero()
if (y - 1 !== zero.y || y === 0) return { x, y }
arr[zero.y][zero.x] = arr[y][x]
arr[y][x] = 0
return zero
}
function toDown (x, y) {
y -= 1
let zero = findZero()
if (y + 1 !== zero.y || y === arr.length - 1) return { x, y }
arr[zero.y][zero.x] = arr[y][x]
arr[y][x] = 0
return zero
}
}
А
CM
function findNumber (number) {
return arr.reduce((p, c, posY) => {
let posX = c.findIndex(v => v === number)
return ~posX ? { x: posX, y: posY } : p
}, null)
}
function findZero () { return findNumber(0) }
function toLeft (x, y) {
x += 1
if (x === 0 || x >= arr[y].length) return { x, y }
arr[y][x] = arr[y].splice(x - 1, 1, arr[y][x])[0]
return { x: x - 1, y }
}
function toRight (x, y) {
x -= 1
if (x === arr[y].length - 1) return { x, y }
arr[y][x] = arr[y].splice(x + 1, 1, arr[y][x])[0]
return { x: x + 1, y }
}
function toUp (x, y) {
y += 1
let zero = findZero()
if (y - 1 !== zero.y || y === 0) return { x, y }
arr[zero.y][zero.x] = arr[y][x]
arr[y][x] = 0
return zero
}
function toDown (x, y) {
y -= 1
let zero = findZero()
if (y + 1 !== zero.y || y === arr.length - 1) return { x, y }
arr[zero.y][zero.x] = arr[y][x]
arr[y][x] = 0
return zero
}
}
А
CM
L
function findNumber (number) {
return arr.reduce((p, c, posY) => {
let posX = c.findIndex(v => v === number)
return ~posX ? { x: posX, y: posY } : p
}, null)
}
function findZero () { return findNumber(0) }
function toLeft (x, y) {
x += 1
if (x === 0 || x >= arr[y].length) return { x, y }
arr[y][x] = arr[y].splice(x - 1, 1, arr[y][x])[0]
return { x: x - 1, y }
}
function toRight (x, y) {
x -= 1
if (x === arr[y].length - 1) return { x, y }
arr[y][x] = arr[y].splice(x + 1, 1, arr[y][x])[0]
return { x: x + 1, y }
}
function toUp (x, y) {
y += 1
let zero = findZero()
if (y - 1 !== zero.y || y === 0) return { x, y }
arr[zero.y][zero.x] = arr[y][x]
arr[y][x] = 0
return zero
}
function toDown (x, y) {
y -= 1
let zero = findZero()
if (y + 1 !== zero.y || y === arr.length - 1) return { x, y }
arr[zero.y][zero.x] = arr[y][x]
arr[y][x] = 0
return zero
}
}
N
KS
KS
L
CM
А
А
А
А
CM