// function stepsToKey(start, target, deadends) {
// if(start == target) return 0
// let queue = [start], queueReverse = [target]
// let visited = [start,target];
// let step = 0;
// while(queue.length && queueReverse.length){
// let qSz = queue.length
// let currentQueue = [];
// for (let i = 0; i < qSz; i ++) {
// let currentKey = queue.shift()
// console.log("currentKey = " + currentKey)
// if(queueReverse.indexOf(currentKey) > -1) {
// return step
// }
// if(deadends.indexOf(currentKey) > -1) {
// continue
// }
// for (let j = 0; j < currentKey.length; j ++) {
// let plus1 = key_plus1(currentKey, j)
// if (plus1 && visited.indexOf(plus1) == -1) {
// currentQueue.push(plus1)
// }
// let minus1 = key_minus1(currentKey, j)
// if (minus1 && visited.indexOf(minus1) == -1) {
// currentQueue.push(minus1)
// }
// }
// }
// queue = queueReverse;
// queueReverse = currentQueue;
// step ++;
// }
// return -1;
// }
// function key_plus1 (key, plusIndex) {
// if(typeof(key) != "string" || key.length <= plusIndex) return null;
// let keyArr = key.split("");
// if (keyArr[plusIndex] == 9) {
// keyArr[plusIndex] = 0
// } else {
// keyArr[plusIndex] ++
// }
// return keyArr.join("")
// }
// function key_minus1 (key, plusIndex) {
// if(typeof(key) != "string" || key.length <= plusIndex) return null;
// let keyArr = key.split("");
// if (keyArr[plusIndex] == 0) {
// keyArr[plusIndex] = 9
// } else {
// keyArr[plusIndex] --
// }
// return keyArr.join("")
// }
// let steps = stepsToKey("0000", "1001", ["1010", "1110", "1111"])
// console.log(steps)
function stepsToKey(start, target, deadends) {
if(start == target) return 0
let queue = [start]
let visited = [start];
let step = 0;
while(queue.length){
let qSz = queue.length
for (let i = 0; i < qSz; i ++) {
let currentKey = queue.shift()
console.log("currentKey = " + currentKey)
if(currentKey == target) {
return step
}
if(deadends.indexOf(currentKey) > -1) {
continue
}
for (let j = 0; j < currentKey.length; j ++) {
let plus1 = key_plus1(currentKey, j)
if (plus1 && visited.indexOf(plus1) == -1) {
queue.push(plus1)
visited.push(plus1)
}
let minus1 = key_minus1(currentKey, j)
if (minus1 && visited.indexOf(minus1) == -1) {
queue.push(minus1)
visited.push(plus1)
}
}
}
step ++;
}
return -1;
}
function key_plus1 (key, plusIndex) {
if(typeof(key) != "string" || key.length <= plusIndex) return null;
let keyArr = key.split("");
if (keyArr[plusIndex] == 9) {
keyArr[plusIndex] = 0
} else {
keyArr[plusIndex] ++
}
return keyArr.join("")
}
function key_minus1 (key, plusIndex) {
if(typeof(key) != "string" || key.length <= plusIndex) return null;
let keyArr = key.split("");
if (keyArr[plusIndex] == 0) {
keyArr[plusIndex] = 9
} else {
keyArr[plusIndex] --
}
return keyArr.join("")
}
let steps = stepsToKey("0000", "1001", ["1010", "1110", "1111"])
console.log(steps)
console