Size: a a a

2020 May 06

ВЛ

Влад Лазуткин... in pro.js
Lupusregina[beta]
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
`) )
Какая сложность алгоритма?
источник

L

Lupusregina[beta] in pro.js
Влад Лазуткин
Какая сложность алгоритма?
перебор всех состояний
источник

ВЛ

Влад Лазуткин... in pro.js
Я не вникал в твой код, но если там просто перебор, то так не прокатит
источник

В

Виктория in pro.js
Lupusregina[beta]
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
`) )
источник

ВЛ

Влад Лазуткин... in pro.js
Вот и плохо
источник

ВЛ

Влад Лазуткин... in pro.js
Худший вариант -О(n!)
источник

ВЛ

Влад Лазуткин... in pro.js
Что достаточно много
источник

p

persona x grata in pro.js
th.witness
Попробуй сделать это с целыми предложениями.
У тебя решение есть? Предложение в цифры получается, а обратно только 1 слово выходит.

const words = 'EcmaScript kruto, i like it.';
const translate = words.split(' ').map(x => parseInt(x, 36));
const toStr = x => x.toString(36);

console.log(translate) -> [ 1457440206173057, 34891980, 18, 1003838, 677 ]
console.log(toStr(...translate)) -> ecmascript
источник

p

persona x grata in pro.js
воще правильно делаю?
источник

L

Lupusregina[beta] in pro.js
Влад Лазуткин
Худший вариант -О(n!)
н что такое?
источник

ВЛ

Влад Лазуткин... in pro.js
Длина перестановки
источник

ВЛ

Влад Лазуткин... in pro.js
Максимум 100 по задаче, 30 мс времени
источник

ВЛ

Влад Лазуткин... in pro.js
Путем несложных операций, имеем около 10^6 итераций максимум
источник

ВЛ

Влад Лазуткин... in pro.js
Это максимум О(n^3)
источник

L

Lupusregina[beta] in pro.js
Влад Лазуткин
Максимум 100 по задаче, 30 мс времени
ну вот для 4 6 6 1 6 6 1 любимых чисел, получаем все 48 комбинаций
источник

ВЛ

Влад Лазуткин... in pro.js
Но никак не n!
источник

L

Lupusregina[beta] in pro.js
не так много
источник

В

Виктория in pro.js
Lupusregina[beta]
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
`) )
Монстрофункция
источник

ВЛ

Влад Лазуткин... in pro.js
Всегда в таких задачах рассматривается худший вариант, и здесь это перестановка ста чисел в обратном порядке с любимыми числами единицами
источник

DE

Denis Efremov in pro.js
Lupusregina[beta]
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
`) )
источник