Alexandroppolus,
видел и ваше решение, сколько времени ушло? |
j0hnik,
Да не помню уже. Я на прогулке вспомнил задачу, придумал решение. Что любопытно, как-то сразу возникла мысль, что тут n*ln должно быть, хотя от n^2 никак не получалось уйти. Но я с расчетом на возможный упорядоченный входной массив делал, потому не через дерево, его балансировать бы пришлось. Кстати, хочу свою кату запилить, есть одна забавная идея ) |
Цитата:
|
j0hnik,
даны переменные: a = randomShuffle([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - массив из 10 разных чисел 0..9, в неизвестном порядке k - неизвестное целое число в пределах 0..9 написать выражение, которое находит позицию числа k в массиве a, используя как можно меньше различных символов (минимизируем не длину выражения, а именно разные символы, т.е. в строке "aaaaabbbbbb" только 2 разных символа) a.indexOf(k) - решение, но тут разных символов 12, а можно меньше Ответ по замыслу должен быть в виде строки, например, "a.indexOf(k)", которую можно будет подставить в Function('a', 'k', 'return ' + str) и получить функцию. |
Alexandroppolus,
и во сколько разных символов надо уложиться? |
j0hnik,
всего 4 :) |
Alexandroppolus,
4 это весь внутренний код функции? function fn(k){ // 4 } пустые символы считаются? |
j0hnik,
Нет, 4 - это только в самом выражении. function f(a, k) { return expr; } Учитывается только то что в этом expr - между пробелом и ; |
имя функции в один символ, полагаю не просто так?
|
j0hnik,
Имя функции, в общем, значения не имеет. Фиксированы только имена переменных a и k - массив и искомое число. Состав и длина массива тоже известны, но порядок элементов может быть любой. Попробую написать более формально. Требуется только выражение в виде строки: var str = ... Проверяется тип (typeof str === 'string') и символы (new Set(str).size <= 4) Потом будет создана функция var indexOf = new Function('a', 'k', 'return ' + str); и проверена для разных данных. Например: var str = 'a.indexOf(k)'; - работает правильно, но не проходит по ограничению. var str = '1'; - вписывается в лимит, но иногда работает неверно. |
Часовой пояс GMT +3, время: 02:20. |