Вы должны написать программу или функцию, которая, учитывая список положительных целых чисел, умножает каждый элемент на наименьшее положительное целое число, чтобы создать строго увеличивающийся список.
Например, если вход
5 4 12 1 3
умножения будут
5*1=5 4*2=8 12*1=12 1*13=13 3*5=15
и вывод будет увеличивающимся списком
5 8 12 13 15
вход
- Список натуральных чисел, содержащий хотя бы 1 элемент
Выход
- Список целых положительных чисел
Примеры
9 => 9
1 2 => 1 2
2 1 => 2 3
7 3 => 7 9
1 1 1 1 => 1 2 3 4
5 4 12 1 3 => 5 8 12 13 15
3 3 3 8 16 => 3 6 9 16 32
6 5 4 3 2 1 => 6 10 12 15 16 17
9 4 6 6 5 78 12 88 => 9 12 18 24 25 78 84 88
8 9 41 5 12 3 5 6 => 8 9 41 45 48 51 55 60
15 8 12 47 22 15 4 66 72 15 3 4 => 15 16 24 47 66 75 76 132 144 150 153 156
Это код гольф, поэтому выигрывает самая короткая программа или функция.
Забавный факт: последний элемент вывода для входа N, N-1, ... ,1
представляется (N+1)th
элементом последовательности A007952 . Если вы найдете доказательство, вы можете включить его в свой гольф-ответ или опубликовать в качестве комментария.
code-golf
math
number
arithmetic
randomra
источник
источник
Ответы:
Желе ,
65 байтПервый ответ Jelly
прежде, чем @Dennis просыпается и бьет меня.Попробуйте онлайн!объяснение
Спасибо @Dennis за -1 байт.
источник
:‘×µ\
сохраняет байт.JavaScript (ES6), 28
Редактировать По предложению @Patrick Roberts,
p
может быть неинициализированным параметром. Тот же счетчик байтов, но избегайте использования глобальной переменнойТЕСТ
источник
f=a=>a.map(n=>a+=n-a%n,a=0)
. Но это не мой алгоритм (глупый я), так что я оставлю свой как есть и воздержусь от голосованияPython 2,
6764 байтаСначала попробуйте сыграть в гольф, так что советы приветствуются.
источник
print l
вместо того,return l
чтобы сохранить другой байт. Хорошая работа!PHP,
55464241 байтИспользует кодировку ISO 8859-1.
Запустите так (
-d
добавлено только для эстетики):~ß
для получения пробела.источник
$a+0
на+$a
. Кроме того, вы можете предположить, что вход никогда не будет иметь0
, так что вы можете$a+0&&print
просто заменить его на+$a&print
. На самом деле, вы могли бы даже сделать$a&print
, так как в PHP"0" == 0 == 0.0 == false
. Но это может не понадобиться, если вы просто используетеecho
, я думаю.and
не будет работать (в отличие от логического) и не будет работать таким же образом. Поскольку я беру информацию из CLI, первый аргумент - это то-
, что я хочу поймать вместо вывода нуля. Попробуйphp -r 'print_r($argv);' foo
. Сохранено 1 байт с первым предложением, спасибо.for(;$a=$argv[++$i];)echo$l+=$a-$l%$a,' ';
? Он имеет длину 42 байта и пропускает первый элемент.a^A
, но это вылилось бы слишком много предупреждений (предупреждения игнорируются). Это никак не изменит байтаунта, но, безусловно, выглядит иначе.Haskell (
302825 байт)Расширенная версия
объяснение
scanl1
позволяет вам свернуть список и собрать все промежуточные значения в другой список. Это специализацияscanl
, которая имеет следующий тип:Поэтому все, что нам нужно, - это подходящая функция, которая берет два последних элемента нашего списка (
acc
в расширенной версии) и один элемент, который мы хотим обработать (next
в расширенной версии), и возвращает подходящее число.Мы можем легко получить это число, разделив аккумулятор на следующий и получив результат.
div
заботится об этом. После этого нам просто нужно добавить,1
чтобы убедиться, что список действительно увеличивается (и что мы не заканчиваем0
).источник
( ... )
с ,$ ...
и я думаю , что вы насчитали окончательную строку , которая может быть опущена:scanl1$\x y->y*div x y+y
24 байта.(...)
vs$
, так$\
как анализируется как оператор, и после этого мне понадобится один пробел$
.scanl1(...)
являются неназванными функциями. Относительно$
против()
: ты прав, моя ошибка.C ++,
636057 байтРаботает на месте с учетом диапазона
[first, last)
. Первоначально написано как вариант шаблона, но это было дольше:Расширенная версия
источник
CJam, 13 байтов
Ввод в виде списка в стиле CJam. Выход отделен переводом строки.
Проверьте это здесь.
объяснение
Окончательное значение остается в стеке и печатается автоматически в конце.
источник
Mathematica,
3632 байтаТест
источник
Perl, 17 + 3 = 20 байт
Требуются
-p
и-l
флаги:Объяснение:
источник
Python (3,5),
6362 байтаТест
Предыдущее решение
некоторые рекурсивные решения, но больше
источник
r+=[…]
, вы можете использоватьr+=…,
r=[0]
в параметре по умолчанию,r
становится нелокальнымBrachylog , 12 байт
Как ни странно, попытка умножить каждую переменную на число начнется с попытки умножения на 2, а не на 0 или 1. Это, кажется, работает, хотя и превосходит обе другие реализации Brachylog
объяснение
Попробуйте онлайн!
источник
Брахилог , 54 байта
объяснение
источник
Пиф, 11
Тестирование
Кумулятивное уменьшение, уменьшение, которое возвращает все промежуточные значения, начиная с
0
. Поскольку входные данные гарантированно содержат только положительные целые числа, это нормально. На каждом шаге мы берем старое значение, делим его на новое значение и добавляем1
, затем умножаем на новое значение.источник
C, 79 байтов
Ungolfed
источник
p=p/x*x+x
сработает?PowerShell, 26 байт
Принимает ввод как явный массив, например,
> .\sort-by-multiplying.ps1 @(6,5,4,3,2,1)
через$args[0]
.Затем мы зациклимся на этом
|%{...}
и каждая итерация выполняет магию . Нет, просто шучу, мы используем тот же трюк по модулю, что и другие ответы (реквизит @aross, потому что я сначала заметил его там ).Инкапсулирующие парены
(...)
гарантируют, что результат математической операции помещается в конвейер и, следовательно, выводится. Если бы мы оставили их, ничего не было бы выведено, так как$l
переменная собирается после завершения выполнения.пример
источник
Japt, 11 байт
Проверьте это онлайн!
Как это работает
источник
05AB1E , 11 байт
Код:
Попробуйте онлайн!
Объяснение:
Использует кодировку CP-1252.
источник
Минколанг 0,15 , 17 байт
Попробуй это здесь!
объяснение
По сути, регистр хранит последний элемент в восходящем списке, и он делится на входные данные и увеличивается, чтобы получить множитель для следующего члена. Тороидальная особенность кодового поля Минколанга означает, что оно зацикливается по горизонтали без необходимости
()
или[]
петель.источник
Брахилог , 21 байт
Попробуйте онлайн!
Использует сумму входных значений в качестве верхней границы для коэффициентов C. Довольно медленно, тайм-аут на TIO для длины входного списка больше 5 или 6 (также в зависимости от суммы значений). Но не так медленно, как моя оригинальная версия, для которой требуются крошечные списки до 3 элементов с крошечными значениями, чтобы не истекло время ожидания:
21 байт
Попробуйте онлайн!
источник
C (gcc) , 37 байт
Попробуйте онлайн!
источник
Python 2 , 53 байта
Попробуйте онлайн!
k*x>y
подразумеваетk>y/x
; так что самое маленькоеk
может бытьk=floor(y/x)+1
. Поскольку в Python 2.7 целочисленное деление уже принято какfloor
, мы хотимk=y/x+1
, иk*x = (y/x+1)*x = y/x*x+x
.источник
Oracle SQL 11.2, 210 байт
Un-golfed
источник
Схема Chez (140 байт)
Версия для гольфа:
Безголовая версия:
Попробуйте онлайн!
источник
* m(car l)
может быть*(car l)m
.K (ок) , 11 байт
Попробуйте онлайн!
источник