Учитывая список целых чисел, производите прямую разницу в указанном порядке / глубине.
Для списка целых чисел:
(10, 18, -12, 4, 8, -3, -5, 67, 9, 14)
Различия вперед на разных ордерах / глубинах:
0 10, 18, -12, 4, 8, -3, -5, 67, 9, 14
1 8, -30, 16, 4, -11, -2, 72, -58, 5
2 -38, 46, -12, -15, 9, 74, -130, 63
3 84, -58, -3, 24, 65, -204, 193
4 -142, 55, 27, 41, -269, 397
5 197, -28, 14, -310, 666
6 -225, 42, -324, 976
7 267, -366, 1300
8 -633, 1666
9 2299
Так что с вводом
4, (10, 18, -12, 4, 8, -3, -5, 67, 9, 14)
Вы бы вернули список
(-142, 55, 27, 41, -269, 397)
вход
Вход может быть через STDIN или функциональные параметры.
Целое число, указывающее глубину для возврата. Это будет 0 к длине списка минус 1
Список целых чисел для расчета прямой разницы для
Выход
Выход может быть через STDOUT или возвращен функцией.
Прямые различия для указанной глубины в виде списка целых чисел
правила
Встроенные и сторонние функции, которые делают это напрямую, не допускаются.
Стандартные ограничения лазейки применяются.
Самый короткий код выигрывает
-
единственный глагол в этой функции.Python,
6159 байтЗдесь мы выполняем вычитание, архивируя все, кроме последнего списка, со всеми, кроме первого в списке.
zip(L[1:],L)
эквивалентноzip(L[1:],L[:-1])
, в связиzip
с характером взятия минимальной длины двух списков:Альтернатива такая же длинная (только Python 2):
К сожалению, Python 2 не обрезает конец списка, поэтому я не могу этого сделать
map(int.__sub__,L,L[1:])
. Досадно, что Python 3 делает , ноmap
больше не возвращает список, так что в итоге получается больше байта (60 байт):Однако, если мы позволим вводу быть глубиной, за которой следует список, такой как
f(3, 2, 5, 6, 7, 5, 10, 25)
(т.е. глубина 3 и список[2, 5, 6, 7, 5, 10, 25]
), то это будет 56 байтов :Вот еще одна альтернатива, которая действительно раздражает любого, кто видел это в рабочем коде (этот уничтожает первоначальный список):
источник
L[1]-L.pop(0)
вместо этого.Mathematica
23 5723 байтаПредложение Мартина Бюттнера, использующее возможность вычитания.
например
Rest@#-Most@#
выполняет вычитание, которое дает различия.Nest выполняет указанную операцию указанное количество раз, работая всегда с самым последним списком.
источник
Haskell,
4034 байтаПример использования:
4 # [10,18,-12,4,8,-3,-5,67,9,14]
какие выходы[-142,55,27,41,-269,397]
.Как это работает: повторно рассчитать разницу между соседними элементами и сохранить промежуточные результаты в списке. Возьмите
n
элемент th из этого списка.Редактировать: @Zgarb нашел 6 байтов для сохранения. Потрясающе!
источник
(zipWith(-)=<<tail)
.JavaScript (ES6),
5249 байтПростая рекурсивная функция, используемая
map
для сканирования массива иslice
удаления первого элемента при каждом рекурсивном вызове.Редактировать 3 байта сохранено, спасибо @DocMax, действительно умное предложение
Тест в консоли Firefox / FireBug
источник
p
и сохранить 3 символов:H=(n,l)=>n?H(n-1,l.slice(1).map((a,k)=>a-l[k])):l
.CJam, 15 байтов
Принимает ввод как массив в стиле CJam, а затем глубину:
и печатает результат в виде массива в стиле CJam.
Проверьте это здесь.
объяснение
источник
Java,
122119 байтПример использования: http://ideone.com/ALgYez
3 байта благодаря Geobits: v)>
источник
int
и просто назначитьi=e
с другими.> <>
5350 байтовИспользование: Предварительно заполните стек (-v в интерпретаторе Python) сначала глубиной, а затем целыми числами.
Например:
Возвращает
Спасибо Sp3000 за помощь.
источник
?!
и перемещать некоторые компоненты, а не0=?
?Прелюдия ,
95927978 байтФормат ввода
где
N
глубина различий иM
количество целых чисел во входных данных. ДобавлениеM
было необходимо, потому что Prelude не может отличить a0
от конца ввода. Вывод также в виде целого числа, разделенного символом новой строки. Мне пришлось принять слегка скорректированную спецификацию Prelude, которую мы разработали для этой задачи , потому что стандартная Prelude считывает целые числа как байтовые значения, что делает невозможным ввод отрицательных чисел. По сути, это интерпретатор Python с дополнительнымNUMERIC_INPUT
флагом.Для справки есть только
483837 непробельных символов - остальные были просто необходимы для правильного выравнивания кода.объяснение
В Prelude каждая строка представляет собой отдельный «голос», который работает в своем собственном стеке. Программа выполняется колонка за колонкой, где отдельные голоса используются для работы «параллельно». Все команды представляют собой одиночные символы, а круглые скобки представляют собой циклы типа Brainfuck (которые вводятся и повторяются всякий раз, когда вершина стека отлична от нуля). Обратите внимание, что вертикальная позиция закрывающей круглой скобки не имеет значения - помещение ее в другой голос по-прежнему считается совпадающим с самой последней открывающей скобкой, и стек, который проверяется на условие цикла, всегда является тем голосом, в котором он
(
появился. Теперь к этой программе ...Программа в основном может быть разделена на две части. Две нижние строки просто используются для большинства циклов в программе (за исключением основного цикла
N
), передавая1
s вперед и назад. Две верхние строки содержат основной цикл и фактическое различие. Следующая аннотация имеет транспонированный код, поэтому я могу комментировать отдельные столбцы:источник
Python,
70686759 байтВерсия без гольфа, прежде чем я стал рекурсивным:
источник
R,
48 39 4644 байтовРекурсия!
x
число итераций для выполнения иy
вектор целых чисел.if(x)
верно покаx>0
.Recall
вызывает текущую функцию, но с новыми аргументами.Diff
выводит различия между последовательными элементами списка / вектора.Предыдущие версии:
источник
Recall()
.Python,
928786 байтЭто мой первый питон гольф. Любые предложения будут оценены :)
56 байт благодаря Sp3000: Dисточник
append
вd+=f-e,
. В общем, для Code-Golf вам никогда не понадобится использоватьL.append
из-за этого.c,
6855 байтовЭто может занять немного свободы с входной спецификацией немного. Массив int сконструирован таким образом, что элемент 0 - это глубина, а элементы с 1 по (n + 1) - это элементы списка ввода от 0 до n. Затем адрес элемента 1 передается функции.
Массив должен заканчиваться нулем. Массив редактируется на месте.
Например:
http://ideone.com/m5PDgF
источник
int *l
?Powershell
115111 байтВыполнить так:
Выход:
Перемещение фигурной скобки в другое место позволяет отображать каждый шаг к ответу.
источник
STATA, 126 байт
Ожидается ввод в виде целого числа, представляющего глубину, за которым следует разделенный пробелами список целых чисел, оба из которых задаются с помощью стандартного приглашения. Выводится разделенный символом новой строки список целых чисел.
Сначала он преобразует список целых чисел (который он рассматривает как 1 длинную строку) в список локальных переменных с именами 1,2,3, ... Затем он вычисляет прямые разности, устанавливая значение y-й локальной переменной равным значение y + 1-й локальной переменной минус значение y-й локальной переменной (то есть 18-10 = 8), которая перезаписывает существующие значения только после использования. Это делает это $ a (значение глобальной переменной a) раз. Затем он отображает значение каждой локальной переменной, по 1 за раз.
источник
T-SQL, слишком много :)
Когда я впервые увидел эту проблему, я подумал, есть ли способ сделать это в запросе. Хотя это тривиально для большинства языков, для SQL-запросов это не так уж и много.
Входные данные идут в переменные @ (для глубины) и @L для целочисленного списка. @L - определяемый пользователем тип таблицы
Настройка входа
Запрос с некоторыми комментариями
Результат
источник
Japt
-h
,175 байт12 байтов сохранено благодаря @Shaggy
Попробуйте онлайн!
источник
äÏ-X
сän
в обоих из них , чтобы спасти больше 2 байта.SmileBASIC, 76 байт
Наконец, причина для использования
ARYOP
!источник
Clojure, 47 байтов
Простая рекурсия по анонимной функции. Вы сохраняете 1 байт, если порядок аргументов поменялся местами, как сейчас
%2
происходит чаще, чем%
.источник
Желе , 2 байта
Попробуйте онлайн!
объяснение
Очень простой ответ: P
источник
Japt , 7 байт
Несколько альтернатив, которые я предоставил Луису для его решения .
Попытайся
10 байт
Попытайся
источник