Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Интересное задание codewars.com (https://javascript.ru/forum/misc/73461-interesnoe-zadanie-codewars-com.html)

j0hnik 07.08.2018 07:53

var a = [6,3,1,4,2,7,5,0,9,8], k = 7;

function f(a, k) {
  return a[a[a[k]]];
}

console.log(f(a,k));

Alexandroppolus 07.08.2018 09:14

j0hnik,
Если в массиве поменять 7 местами, например, с 5 или 8, неправильно работает. Надо для любого массива и любого k

j0hnik 07.08.2018 09:46

Alexandroppolus,
что-то из этой же серии только с большей вложенностью? символов слишком мало чтобы еще что-то конструировать

Dilettante_Pro 07.08.2018 10:34

Цитата:

Сообщение от j0hnik
с большей вложенностью?

Попробовал...
var a = [6,3,1,4,2,7,5,0,9,8], k = 7;

function f(a, k) {
  return a[a[a[a[a[a[a[a[a[a[a[k]]]]]]]]]]];
}

alert(f(a,k));


var a = [6,3,1,4,2,7,5,0,9,8], k = 7;

function f(a, k) {
  return a[a[a[a[a[a[a[a[a[a[a[k]]]]]]]]]]];
}

alert(f(a,k));


var a = [6,3,1,4,2,7,8,0,9,5], k = 4;

function f(a, k) {
  return a[a[a[a[a[a[a[a[a[a[a[k]]]]]]]]]]];
}

alert(f(a,k));


var a = [6,3,1,4,2,7,5,0,9,8], k = 9;

function f(a, k) {
  return a[a[a[a[a[a[a[a[a[a[a[k]]]]]]]]]]];
}

alert(f(a,k));

j0hnik 07.08.2018 10:37

Dilettante_Pro,
var a = [0,1,2,3,4,5,6,7,8,9];
a.sort(_=>Math.random() - 0.5);
function f(a, k) {
  return a[a[a[a[a[a[a[a[a[a[a[k]]]]]]]]]]]+'-'+a.indexOf(k);
}
var i = 10;
while(i--) console.log(f(a,i));


вот вам тестер!

Dilettante_Pro 07.08.2018 11:19

j0hnik,
Да, на некоторых данных врет...
var n = 0;
for(var j = 0; j< 100; j++) {
var a = [0,1,2,3,4,5,6,7,8,9];
a.sort(_=>Math.random() - 0.5);
function f(a, k) {
  return a[a[a[a[a[a[a[a[a[a[a[k]]]]]]]]]]] == a.indexOf(k);
}
console.log(a);
var i = 10;
while(i--) n += f(a,i)?1:0;
}
console.log(n/10);

Но процент правильных ответов на удивление высок - 70-80%.

Alexandroppolus 07.08.2018 11:37

Цитата:

Сообщение от j0hnik
символов слишком мало чтобы еще что-то конструировать

да, вот это немного смущает. думаю, 5-6 было бы как-то разнообразнее...

Dilettante_Pro 07.08.2018 12:14

var result = [];
var max = 0, maxm = 0;
var str = "a[k]";
for(var m = 0;m < 1000;m++) {
   var n = 0;
    str = "a[" + str + "]";
   var f = new Function('a', 'k', 'return ' + str + ' == a.indexOf(k);');
   for(var j = 0; j< 100; j++) {
      var a = [0,1,2,3,4,5,6,7,8,9];
      a.sort(_=>Math.random() - 0.5);

      var i = 10;
      while(i--) n += f(a,i)?1:0;
   }
   if(max< n) { max = n; maxm = m +1;}
}
console.log(max/10, maxm);

Больше 90% правильных ответов дают уровни вложенности 118, 238, 358, 478 - с переменным первенством между ними.
97.3%, 98.2% - 838
Более высоких уровней достичь не удалось - переполняется call stack

j0hnik 07.08.2018 12:18

Цитата:

Сообщение от Dilettante_Pro
с переменным первенством между ними.

больше итераций и проблема исчезнет.

j0hnik 07.08.2018 12:26

Dilettante_Pro,
838 это слишком для кодварс, такая городьба, видимо решение немного другое.


Часовой пояс GMT +3, время: 01:44.