Добавление пирамиды вверх ногами - это процесс составления списка чисел и последовательного их сложения, пока вы не достигнете одного числа.
При задании чисел 2, 1, 1
происходит следующий процесс:
2 1 1
3 2
5
Это заканчивается в количестве 5
.
ТВОЕ ЗАДАНИЕ
Учитывая правую сторону пирамиды вверх-вниз (по возрастанию), напишите программу или функцию, которая будет возвращать исходный список.
Новый дополнительный вызов : попробуйте сделать это меньше, чем O (n ^ 2)
ПРИМЕР
f([5, 2, 1]) => [2, 1, 1]
f([84,42,21,10,2]) => [4,7,3,8,2]
ПРИМЕЧАНИЕ. Пирамида вверх ногами никогда не будет пустой и всегда будет состоять только из положительных целых чисел.
Try doing this in less than O(n)
Разумеется, невозможно выделить массив размером n или изменить в нем O (n) элементов быстрее, чем сложность O (n)?Ответы:
JavaScript (ES6),
62 58 4946 байтСохранено 3 байта благодаря @Oliver
Возвращает список в виде строки, разделенной запятыми.
Попробуйте онлайн!
комментарии
источник
Haskell , 22 байта
Попробуйте онлайн!
источник
Haskell, 42 байта
Попробуйте онлайн!
источник
TI-BASIC, 54 байта
Ввод - это список правой стороны треугольника
Ans
, как описано в задании.Выход - верхний ряд указанного треугольника.
Примеры:
Объяснение:
Это решение использует тот факт, что треугольник, образованный с использованием правой стороны треугольника в качестве начала, является изменением в каждом элементе.
Другими словами,
будет выглядеть так:
Таким образом, результирующий список является правой стороной этого нового треугольника, который можно сформировать, задав последнему элементу индекс длины его родительского списка в результирующем списке.
Примечание: TI-BASIC - это токенизированный язык. Количество символов не равно количеству байтов.
источник
Желе , 6 байт
Монадическая ссылка, принимающая список целых чисел, которая выдает список целых чисел.
Попробуйте онлайн!
Как?
Создает весь треугольник, затем извлекает необходимые элементы.
источник
U
s вместоṚ
!IƬUZḢA
будет работать с данным вопросом тоже; Интересно, есть ли где-нибудь сохранение байта ...ạƝƬZṪ€
тоже работает но опять шестеркаMathGolf ,
1411 байтПопробуйте онлайн!
объяснение
источник
Python 2 , 56 байт
Рекурсивная функция, принимающая список целых положительных чисел, которая возвращает список неотрицательных целых чисел.
Попробуйте онлайн!
источник
Желе , 5 байт
Попробуйте онлайн!
Мы можем предположить, что вся пирамида положительна, поэтому мы можем использовать операцию && вместо «правильной» операции.
источник
Пари / ГП , 36 байт
Основываясь на комментарии @Lynn :
Pari / GP имеет встроенную матрицу Паскаля, а ее обратная - это именно та матрица, которая нам нужна:
Попробуйте онлайн!
источник
R ,
6967 байтПопробуйте онлайн!
Возвращает вектор столбца.
-2 байта благодаря Кириллу Л.
Также на основе комментария Линн :
Это длиннее, чем другой ответ R, но это был интересный подход, чтобы взять и попробовать в гольф.
источник
Javascript (ES6), 127 байт
Оригинальный код
О, я потерял, как ... много ... к предыдущему ответу ...
источник
Wolfram Language (Mathematica) , 57 байтов
Попробуйте онлайн!
источник
05AB1E ,
1211 байтПорт @JonathanAllan 's Jelly ответ , хотя я желе о более удобных встроенных функциях Jelly в этом случае. ;)
-1 байт благодаря @Emigna .
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
R.¥.Γ¥}¨
помощью, начиная со списка, дельта которого является входным.R ,
55635553 байтаПопробуйте онлайн!
-2 байта благодаря Джузеппе.
источник
Perl 6 , 37 байт
Попробуйте онлайн!
Неоднократно уменьшается путем поэлементного вычитания, а затем возвращает последний номер каждого списка в обратном порядке.
Объяснение:
источник
Python 2 , 78 байт
Попробуйте онлайн!
источник
C # (интерактивный компилятор Visual C #) , 164 байта
Попробуйте онлайн!
источник
Древесный уголь , 19 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Цикл один раз для каждого термина в исходном списке.
Напечатайте последний термин в списке, но переместите курсор в начало предыдущей строки, чтобы термины выводились в обратном порядке.
Вычислите дельты, вставив фиктивное значение в начале, чтобы мы могли использовать операцию, которая не изменяет длину списка.
источник
APL + WIN, 34 или 28 байт
Попробуйте онлайн! Предоставлено Dyalog Classic
Запрашивает правый боковой вектор.
или реализуя подход @ Линн:
Попробуйте онлайн! Предоставлено Dyalog Classic
Запрашивает правый боковой вектор.
источник
Атташе , 29 байт
Попробуйте онлайн!
Просто повторяет
Delta
функцию до тех пор, пока она не станет пустой. Гораздо короче самого многословногоPeriodicSteps
решения ...источник
C 76 байт
вход :
(*a = pointer to array, n = last element's index of that array)
выход :
return int* = output
объяснение
идет справа налево вверх, так как последние элементы одинаковы как во входе, так и в выводе. Цикл внутри функции просто находит следующие более высокие числа в треугольнике, постепенно достигая вершины, оставляя ответ без изменений в конце.
негольфированный (из C ++)
источник
Japt ,
119 байтПопытайся
2 байта сохранены благодаря Оливеру.
1211 байтПопытайся
1 байт сохранен благодаря Оливеру.
источник
y(f)
достаточно плохо, но совершенно забыть о новой строке непростительно! Скоро обновлю. Спасибо :)Юлия 0.6 , 44 байта
Попробуйте онлайн!
Тот же итерационный принцип, что и у моего R ответа.
Юлия 0,65 байт
Попробуйте онлайн!
@ Алгоритм Линн (обратный к матрице Паскаля, умноженной на вход).
источник