AK
Size: a a a
AK
L
const canState = text => {
const [finalState, favoriteNums] = text
.split(/[\r\n]+/)
.map(s => s.trim())
.filter(Boolean)
.slice(1)
.map(s => s.split(/\s+/).map(Number))
const deep = (children, favoriteNums, finalState, set = new Set) => {
const skey = children.join(" ")
if ( set.has(skey) ) return;
set.add(skey)
if ( skey === finalState )
return true
for(let i = 0; i < children.length; i++) {
const j_arr = [];
if ( [i + favoriteNums[i], i - favoriteNums[i]]
.filter(j => j >= 0 && j < children.length)
.some(j => {
const newChildren = [...children];
[newChildren[i], newChildren[j]] = [newChildren[j], newChildren[i]]
return deep(newChildren, favoriteNums, finalState, set)
}) )
return true
}
return false
}
return deep(
Array(favoriteNums.length).fill(0).map((v, i) => i),
favoriteNums,
finalState.map(v => v - 1).join(" ")
);
}
console.log( canState(`
7
4 2 5 1 3 7 6
4 6 6 1 6 6 1
`) )
console.log( canState(`
7
4 3 5 1 2 7 6
4 6 6 1 6 6 1
`) )
S
const canState = text => {
const [finalState, favoriteNums] = text
.split(/[\r\n]+/)
.map(s => s.trim())
.filter(Boolean)
.slice(1)
.map(s => s.split(/\s+/).map(Number))
const deep = (children, favoriteNums, finalState, set = new Set) => {
const skey = children.join(" ")
if ( set.has(skey) ) return;
set.add(skey)
if ( skey === finalState )
return true
for(let i = 0; i < children.length; i++) {
const j_arr = [];
if ( [i + favoriteNums[i], i - favoriteNums[i]]
.filter(j => j >= 0 && j < children.length)
.some(j => {
const newChildren = [...children];
[newChildren[i], newChildren[j]] = [newChildren[j], newChildren[i]]
return deep(newChildren, favoriteNums, finalState, set)
}) )
return true
}
return false
}
return deep(
Array(favoriteNums.length).fill(0).map((v, i) => i),
favoriteNums,
finalState.map(v => v - 1).join(" ")
);
}
console.log( canState(`
7
4 2 5 1 3 7 6
4 6 6 1 6 6 1
`) )
console.log( canState(`
7
4 3 5 1 2 7 6
4 6 6 1 6 6 1
`) )
AK
T
AK
AK
AK
DE
OR
DE
AK