Соревнование:
Рассмотрим функцию, F(N) = 2^N + 1
где N
положительное целое число меньше, чем 31
. Последовательность, определенная этой функцией:
3, 5, 9, 17, 33, 65, 129, 257, 513, 1025, 2049, 4097, 8193, 16385, 32769, 65537, 131073, 262145, 524289, 1048577, 2097153, 4194305, 8388609, 16777217, 33554433, 67108865, 134217729, 268435457, 536870913, 1073741825
Вход будет сгенерирован следующим образом:
- Возьмите 5 смежных целых чисел из вышеуказанной последовательности.
- Замените одно из них другим положительным целым числом (которое может быть или не быть частью вышеуказанной последовательности).
- При желании можно изменить 5 полученных номеров.
Учитывая такой список из 5 целых чисел, найдите тот, который был заменен и, следовательно, не является частью оригинальных 5 смежных целых чисел.
Пример:
- Оригинальный Подсписок:
5, 9, 17, 33, 65
. - Заменить один:
5, 7, 17, 33, 65
. - Упорядочивание
33, 17, 5, 7, 65
.
Ожидаемый результат будет 7
.
5 значений на входе всегда будут отличаться, и всегда будет уникальное решение. (Например, вам не придется иметь дело с входными данными, такими как, 3, 9, 17, 33, 129
где либо, 3
либо 129
могли быть заменены.)
Тестовые случаи:
5,9,17,33,829
o/p: 829
9,5,17,829,33
o/p: 829
33, 17, 5, 7, 65
o/p: 7
5,9,177,33,65
o/p: 177
65,129,259,513,1025
o/p: 259
129,259,513,1025,65
o/p: 259
63,129,257,513,1025
o/p: 63
65,129,257,513,4097
o/p: 4097
5, 9, 2, 17, 33
o/p: 2
536870913, 67108865, 1073741825, 1, 268435457
o/p: 1
code-golf
sequence
subsequence
Аджай
источник
источник
536870913,67108865,134217729,1,268435457
N = 30
качестве одного из входных значений.Ответы:
Желе, 15 байт
TryItOnline
Все тестовые случаи также в TryItOnline
Возвращает список, содержащий один список, содержащий нечетный.
Как?
источник
JavaScript (ES6), 62 байта
Абсолютно новый алгоритм, так как, как указывал @ edc65, предыдущий был сломан. Объяснение: Сначала мы разберемся с простым случаем, ища 2 или число, которое не на единицу больше, чем степень 2. Если ничего не найдено, то есть два возможных случая, в зависимости от того, было ли дополнительное значение ниже или выше исходный цикл из пяти, поэтому мы проверяем, принадлежат ли наименьшее и второе по величине значение к одному и тому же циклу из пяти, и в этом случае обвиняют самое большое значение, в противном случае самое маленькое значение.
источник
n-1&n-2
со значением2
[3, 17, 33, 65, 257]
.--n&--n|!n
выглядит для2
дела?Python, 84 байта
Все тесты в идеале
Для корректного ввода возвращает набор, содержащий только odd-one-out.
Для неверного ввода будет достигнут предел рекурсии и будет выдана ошибка.
источник
Mathematica, 65 байт
Это определяет функцию,
f
которая должна вызываться с 5 аргументами, напримерВ принципе, функцию можно вызывать с любым (ненулевым) числом аргументов, но вы можете получить неожиданные результаты ...
Я думаю, что это первый раз, когда мне удалось поместить все решение нетривиальной задачи в левую часть a
=
.объяснение
Это решение действительно позволяет нам использовать возможности сопоставления с образцом Mathematica. Основная функция, которую мы используем, состоит в том, что Mathematica не может просто определять простые функции, как,
f[x_] := (* some expression in x *)
но мы можем использовать произвольно сложные шаблоны в левой части, напримерf[{a_, b_}, x_?OddQ] := ...
, добавить определение, кf
которому будет использоваться, только когда оно вызывается с двухэлементным список и нечетное целое число. Удобно, что мы уже можем давать имена элементам произвольно далеко вниз по левому выражению (например, в последнем примере мы могли бы сразу ссылаться на два элемента списка какa
иb
).Шаблон, который мы используем в этой задаче
f[a___,x_,b___]
. Здесьa___
иb___
есть последовательности из нуля или более аргументов иx
является одним аргументом. Так как правая часть определения простоx
, что мы хотим, какая - то магия , которая гарантирует , чтоx
используется для ввода , мы ищем иa___
иb___
просто маски , которые охватывают остальные элементы.Это делается путем прикрепления условия к шаблону с помощью
/;
. Правая часть/;
(все до=
) должна вернуться,True
чтобы этот шаблон соответствовал. Прелесть в том , что модель согласовань Mathematica будет пытаться каждое назначениеa
,x
иb
к входам для нас, поэтому поиска правильного элемента делается для нас. По сути, это декларативное решение проблемы.Что касается самого условия:
Обратите внимание, что это не зависит
x
вообще. Вместо этого это условие зависит только от оставшихся четырех элементов. Это еще одна удобная особенность решения сопоставления с образцом: благодаря шаблонам последовательностиa
иb
вместе содержат все другие входные данные.Таким образом, это условие должно проверить, являются ли оставшиеся четыре элемента непрерывными элементами из нашей последовательности с не более чем одним пропуском. Основная идея для проверки этого состоит в том, что мы генерируем следующие четыре элемента из минимума (через ) и проверяем, являются ли четыре элемента его подмножеством. Единственные входные данные, в которых это может вызвать проблемы, - это те, которые содержат a , потому что это также генерирует допустимые элементы последовательности, поэтому нам нужно обрабатывать это отдельно.
xi+1 = 2xi - 1
2
Последняя часть: давайте пройдемся по самому выражению, потому что здесь есть еще несколько забавных синтаксических символов.
Эта инфиксная нотация коротка для
Min[a,b]
. Но помните, чтоa
иb
являются последовательностями, так что это фактически расширяется до четырех элементовMin[i1, i2, i3, i4]
и дает нам наименьший оставшийся элемент на входе.Если это приводит к 2, мы заменяем его на 0 (который будет генерировать значения, которых нет в последовательности). Пространство необходимо, потому что иначе Mathematica анализирует плавающий литерал
.2
.Мы применяем безымянную функцию слева 4 раза к этому значению и собираем результаты в список.
Это просто умножает его вход на 2 и уменьшает его.
И, наконец, мы проверяем, что список, содержащий все элементы из
a
иb
является подмножеством этого.источник
Ракетка 198 байт
Безголовая версия:
Тестирование:
Выход:
источник
05AB1E ,
3230262420 байтобъяснение
Попробуйте онлайн!
источник
R, 97 байт
Это оказалось сложнее, чем я думал. Я уверен, что это может быть значительно лучше, хотя.
Разгромил и объяснил
match()
Функция будет возвращать ,NA
если какой - либо элемент входного вектора не в той последовательности , и , следовательно , мы можем просто найти индекс , гдеNA
существуют на входе и вернуть это:x[is.na(m)]
Это становится немного сложнее, если ввод является частью последовательности, но не на месте. Поскольку входные данные были отсортированы, расстояние между каждой парой индексов должно быть
1
. Поэтому мы можем найти неуместный элемент, исследуя1st
разницу в сопоставляемых индексахl=diff(m)
и выбирая индекс, для которогоl>1
. Этого было бы достаточно, если бы не тот факт, чтоl
содержит4
элементы, а не5
. Это проблема только в том случае, если последний элемент в отсортированном входе является членом последовательности, НО не является частью подпоследовательности (как в последнем тестовом примере). Следовательно, если4th
элемент>1
извлекает5th
запись в отсортированном вводе, в противном случае ищите индекс в4
векторе -length:x[ifelse(l[4]>1,5,l>1)]
источник
anyNA
которая эквивалентнаany(is.na(x))
Haskell,
6664 байтаПример использования:
g [65,129,257,513,4097]
->4097
.Перебирает все смежные подсписки длины 5 of
F(N)
, сохраняет элементы, которых нет в списке ввода,x
и шаблон соответствует элементам длины 1 (->[s]
).Редактировать: @xnor сохранил два байта, удалив верхнюю границу внешнего цикла. Поскольку решение гарантировано существует, лень Haskell останавливается на первом найденном числе.
источник
Perl,
6459 байтВключает +2 для
-an
Дайте список ввода на STDIN:
oddout.pl
:Если вы не возражаете против переменного количества места вокруг результата, этот 58-байтный версон работает:
Обе версии зацикливаются навсегда, если вход не имеет решения.
Это очень больной код, но я не могу придумать ничего элегантного ...
%a
Насколько я знаю, способ, которым я (ab) пользуюсь, - это новый трюк с perlgolf.источник
Python 2, 73 байта
Перебирает наборы
d
из пяти последовательных элементов последовательности до тех пор, пока не найдет элемент, содержащий все входные элементы, кроме одного, а затем напечатает разницу, которая является выходной информацией в единственном наборе.Наборы
d
из пяти последовательных элементов создаются из ничего путем многократного добавления нового элементаi+1
и удаления любого старого элемента,i/32+1
который находится перед текущим окном 5. Вот как выглядит его прогресс.В начале инициализации находится паразитная единица, но она безвредна, потому что немедленно удаляется. Меньшие наборы, поскольку он собирает до 5 элементов, также безвредны.
источник
PHP,
877675 байтбежать с
php -r '<code>' <value1> <value2> <value3> <value4> <value5>
источник
array_diff
. Но я могу сохранить один байт там.end
вместо,max
и ваша заметка не более важнаC #, 69 байт
int M(int[]a)=>a.Except(new int[30].Select((_,i)=>(1<<i+1)+1)).Sum();
источник
Java 7,85 байт
Ungolfed
источник
l
31? В вопросе я вижу только массив int в качестве ввода, но не дополнительный int? : SPHP, 76 байт
реализовал идею Тита с модом 5
До 126 байт
источник
array_map(function($z){return 2**$z+1;},range($i,$i+4))
.$x[key($x)]
->end($x)
1-count($x=...)
условие, вы избавитесь от перерыва:for(;1-count($x=...););echo end($x);
(-13)Pyth, 18 байт
Сформируйте последовательность, возьмите подсписки длиной 5, удалите каждый подсписок из Q, возьмите самый короткий результат, выведите его единственный элемент.
источник
[5, 9, 2, 17, 33]
Котлин, 55 байт
fun f(a:IntArray)=a.find{it-1 !in(1..30).map{1 shl it}}
источник