Учитывая разделенный пробелами список целых чисел, ваша задача состоит в том, чтобы найти следующее целое число в последовательности. Каждое целое число в последовательности является результатом применения единой математической операции ( +
, -
, *
или /
) к предыдущему целому, и каждая последовательность состоит из переменного числа таких операций (но не более 10). Ни одна последовательность не будет длиннее половины длины последовательности целых чисел, поэтому каждая последовательность операций должна появляться как минимум дважды для подтверждения.
Ввод будет через стандартный ввод (или prompt
для решений JavaScript).
Вот несколько пояснительных примеров.
Входные данные:
1 3 5 7 9 11
Выход:
13
Довольно легко, этот. Все значения являются предыдущими +2
.
Входные данные:
1 3 2 4 3 5 4 6 5 7 6
Ouput:
8
Два шага в этой последовательности, а +2
затем -1
.
Входные данные:
2 6 7 3 9 10 6 18 19 15 45 46
Выход:
42
Три шага - *3
, +1
, -4
.
Контрольные примеры
Вот еще несколько тестов:
Входные данные:
1024 512 256 128 64 32 16
Выход:
8
Входные данные:
1 3 9 8 24 72 71 213 639
Выход:
638
Входные данные:
1 2 3 4 5 2 3 4 5 6 3 4 5 6 7
Выход:
4
Входные данные:
1 2 4 1 3 9 5 8 32 27 28 56 53 55 165 161 164 656 651 652 1304
Выход:
1301
У меня есть решение Scala (42 строки), которое я опубликую через пару дней.
Это код-гольф - самый короткий ответ выигрывает.
Ответы:
Golfscript,
203138 символовЭто использует гораздо больше,
if
чем стандартная программа Golfscript, и ее работа довольно загадочна, так что здесь есть закомментированная (но не зацикленная, кроме добавления пробела и комментариев) версия:Мое оригинальное представление было следующим в 88 символов:
Тем не менее, он пытается вычислить операции из первого вхождения каждого из них, поэтому, если операция является умножением или делением, а аргумент в первый раз равен 0, он прерывается.
источник
Haskell,
276261259257243 символовВот мое неэффективное решение. Он работает с неограниченными (и ограниченными) целыми числами. Такое решение работает правильно с неточным делением (например:)
5 / 2 = 2
.Как это работает: я создаю все возможные последовательности (возможных) операций. Затем я проверяю последовательность входных чисел, чтобы увидеть, будет ли сгенерированная последовательность создавать входные данные. Если это так, верните следующий номер в последовательности. Код всегда возвращает ответ, полученный из кратчайшей последовательности операций. Это происходит потому, что список последовательностей операций создается в этом порядке. Это произвольный (но последовательный) выбор между связями. Например, код возвращается
6
или8
для последовательности2 4
.Ungolfed:
источник
Control.Monad -> Monad
Возможно ли ? А как насчетinteract$show.n.q read.words
Python,
333366...315303278269261246 символовСоздает операцию с первой парой чисел и проверяет ее на других парах. Сохраняет все операции, и если все они выполняются успешно, применяет соответствующую операцию к последнему элементу списка.
Отредактировано: проходит злой тест :-) Теперь ищите работу по всем позициям.
источник
0 0 1 2 3 6 7 14
0 0 0 0 1 0 0 0 0 1
не выводится0
.lambda x:x+b-a
->(b-a).__add__
. Жаль, что это всего лишь один персонаж, я так много узнаю о Python.l
неявно глобальных средств значительно экономит: pastie.org/2416407Питон,
309305295279 символовОбрабатывает все оригинальные тестовые случаи, а также грубый тест Питера Тейлора
0 0 1 2 3 6 7 14
:Ungolfed, с выводом отладки (очень полезно при проверке правильности):
Использование:
источник
v<1
работает в качестве охранника.Рубин 1,9
(437)(521)(447)(477)Работает для всех тестовых случаев, включая «злой». Я буду играть в гольф позже.
РЕДАКТИРОВАТЬ: я понял, что есть еще один случай, который я не обрабатывал должным образом - когда продолжение должно использовать операцию «тайна». Последовательность
2 0 0 -2 -4 -6
изначально возвращала 0 вместо -12. Я сейчас исправил это.РЕДАКТИРОВАТЬ: Исправлено еще несколько крайних случаев и сократить код до 447.
РЕДАКТИРОВАТЬ: тьфу. Пришлось добавить некоторый код для обработки других «злых» последовательностей, таких как
0 0 0 6 18 6 12
источник
Scala
Это решение, которое я придумал:
Ungolfed:
источник
echo "0 0 1 2 3 6 7 14" | scala Sequence
держит экран чернымscala Sequence
а затем введите последовательность и нажмите клавишу ввода.Scala 936
ungolfed:
С треском проваливается на Питера Тейлора
h
, но я не вижу возможности вылечить программу за разумное время.источник
-
как особый случай+
и/
как особый случай*
? Мой способ передачи ввода Питера Тейлора (и тому подобного) состоял в том, чтобы отрубить первое число в последовательности и повторить попытку. У меня еще не было времени посмотреть, как работает ваша программа, чтобы узнать, поможет ли это вашей.-1, 0, 0, 1, 2, 3, 6, 7, 14
, потребует другого лечения.