Ошибка функции iqTest()

173
04 августа 2018, 11:30

В IQ тесте дается массив с числами.
Одно из них отличается от других четностью/нечетностью.
Функция возвращает его индекс.

function iqTest(str) {
    array = str.split(' ');
    var boolArray = [];
    function checkEven(num) {
        return +num % 2 === 0? true:false;
    }
    for (var i = 0; i < array.length; i++) {
        boolArray.push(checkEven(array[i]));
    }
    var differ = boolArray[0];
    var index = 1;
    for (var j = 1; j < boolArray.length; j++) {
        if (boolArray[j] !== differ) {
            differ = boolArray[j];
            index = j;
        }
    }
    return index;
};

Но функция возвращает неверный индекс, когда отличный от других елемент - четное число

Answer 1

Как можно решить задачу, не сравнивая четность каждого элемента массива с четностью предыдущих:

  1. Создаём два массива: один для хранения индексов четных чисел, другой - для нечетных
  2. Проходим по проверяемому массиву и добавляем индекс элемента в соответствующий массив
  3. Если в каком-то из массивов ровно один элемент - возвращаем его, иначе - например, -1

Реализация:

function iqTest(array) { 
  var data = [[], []]; 
  array.forEach(function(value, index) { 
    data[value % 2].push(index); 
  }); 
  if (data[0].length == 1) 
    return data[0][0]; 
  if (data[1].length == 1) 
    return data[1][0]; 
  return -1; 
} 
 
console.log(iqTest([1, 3, 5, 2]));

При желании можно расширить алгоритм для проверки остатка от деления на произвольное (заданное) число:

function iqTest(array, base) { 
  var data = []; 
  for (var i = 0; i < base; i++) 
    data.push([]); 
     
  array.forEach(function(value, index) { 
    data[value % base].push(index); 
  }); 
   
  for (var i = 0; i < base; i++) { 
    if (data[i].length == 1) 
      return data[i][0]; 
  } 
  return -1; 
} 
 
console.log(iqTest([1, 2, 3, 4, 5], 3));

READ ALSO
Зачем индексировать внешний / вторичный (foreign key) ключ в MySQL?

Зачем индексировать внешний / вторичный (foreign key) ключ в MySQL?

Есть понятие "ограничитель" в MySQLНапример, это первичный ключ (ключ должен быть уникален, поэтому каждый раз производится поиск "а не было...

216
Кастомные радио инпуты

Кастомные радио инпуты

у меня есть два обычных радио-инпута, которые должны иметь жирный текст при состоянии checked Вот пример – Пример на codepen Но в моем примере при...

182
Не выводятся значения атрибутов

Не выводятся значения атрибутов

Почему для тега select не выводится значение атрибута style? Все теги закрыты

205