Дайте кредит тому, кому это нужно .
Цель Дано целое число N > 0
, из самых маленьких целых чисел A
, B
и C
таким образом , чтобы:
- Все
A
,B
иC
строго большеN
; 2
делитA
;3
делитB
;- и
4
делитC
.
Это код-гольф, поэтому выигрывает самый короткий ответ в байтах. Вы можете использовать язык, созданный / обновленный после этого испытания, но он не является конкурирующим.
Контрольные примеры
N => A, B, C
1 => 2, 3, 4
4 => 6, 6, 8
43 => 44, 45, 44
123 => 124, 126, 124
420 => 422, 423, 424
31415 => 31416, 31416, 31416
1081177 => 1081178, 1081179, 1081180
C B A
), если это четко указано в ответе?Ответы:
Желе , 8 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
Python 2, 32 байта
Битовая арифметика для 2 и 4, модульная арифметика для 3.
Я нашел четыре 7-байтовых выражения для следующего кратного из
k
приведенных выше,n
но ни одно из них не короче:Любой дает 34 байта, когда копии для
k=2,3,4
, и 33 байта, если объединены:Но 2 и 4 - это степени 2, которые позволяют битовым трюкам обнулять последние 1 или 2 байта.
Это дает 6 байтов (вместо 7) для получения следующего кратного, для всего 32 байта, побеждая
for k in 2,3,4
.К сожалению, они выглядят многообещающе,
n|1+1
иn|3+1
добавление выполняется в первую очередь, поэтому при увеличении вывода требуются скобки.источник
n+k-n%k
.n&3+1
ли сложение первым тоже?Юлия, 16 байт
Попробуйте онлайн!
источник
MATL,
15 109 байтПопробуйте онлайн!
Объяснение:
источник
5M
(автоматический буфер обмена входов функций) вместо второго2:4
.MATL, 8 байт
Использует алгоритм Желе Дениса, я удивлен, что он такой же длины!
Попробуйте онлайн или проверьте все контрольные примеры .
источник
Matlab, 33 байта
Еще один немного другой подход
источник
05AB1E , 8 байтов
Код:
Попробуйте онлайн! ,
источник
±D2xŸ%α
(2xŸ
это просто альтернатива для вас3L>
; и две другие равноправные альтернативы могут бытьƵ…S
или4L¦
).Рубин, 27 байт
Карты 2, 3 и 4 на следующий кратный выше
n
.источник
CJam, 15 байтов
Попробуйте онлайн! или проверьте все контрольные примеры .
источник
Пайк,
11 98 байтПопробуй это здесь!
источник
Mathematica, 21 байт
Это безымянная функция, которая принимает одно целое число в качестве входных данных и возвращает список кратных чисел.
Ceiling
Функция принимает необязательный второй параметр , который говорит ему , чтобы округлить до следующего кратного заданного числа. К счастью, он также автоматически перебирает второй аргумент, так что мы можем дать ему список значений, и, в свою очередь, мы получим округленные кратные для всех них.источник
Октава, 20 байт
Примеры:
Стоит отметить, что мы можем сделать это до 9 без добавления дополнительных байтов:
Выходные данные (2520 - наименьшее положительное целое число, равномерно делимое на все однозначные числа):
источник
Haskell, 27 байт
источник
Лабиринт , 19 байт
Попробуйте онлайн!
Это выводит результаты в порядке,
C, B, A
разделенном переводом строки.объяснение
Как обычно, короткий лабиринтный праймер:
Несмотря на два no-ops (
"
), которые делают макет немного расточительным, я вполне доволен этим решением, потому что поток управления на самом деле довольно тонкий.IP начинается в верхнем левом углу
:
справа. Он сразу же попадет в тупик?
и развернется, так что программа фактически запустится с этим линейным фрагментом кода:Это означает, что у нас теперь есть три копии
n
в главном стеке, но его глубина равна4
. Это удобно, потому что это означает, что мы можем получить глубину стека, чтобы извлечь текущий множитель при работе с копиями ввода.IP теперь входит в (по часовой стрелке) цикл 3х3. Обратите внимание, что
#
, увеличивая глубину стека, мы всегда получим положительное значение, так что мы знаем, что IP будет всегда поворачиваться на восток в этой точке.Тело цикла выглядит так:
После того, как цикл был пройден (до
!
) три раза, все копииn
израсходованы и ноль внизу обнаружен. Из-"
за нижней части (которая в противном случае кажется довольно бесполезной) эта позиция является перекрестком. Это означает, что с нулем на вершине стека IP пытается идти прямо вперед (на запад), но, поскольку есть стена, он на самом деле делает поворот на 180 градусов и движется обратно на восток, как если бы он зашел в тупик.В результате теперь выполняется следующий бит:
источник
Matlab, 50 байтов
источник
2:4
вместо[2 3 4]
.Pyth,
1110 байтТестирование.
Спасибо Денису за байт!
источник
JavaScript (ES6), 26 байт
Интересно, что портирование либо ответа @ KevinLau's Ruby, либо ответа @ xnor's Python приводит к одинаковой длине:
Я немного предпочитаю порт ответа Ruby, так как он работает до 2 53 -3, в то время как порт ответа Python работает только до 2 31 -5.
источник
)
->]
Как я думаюC,
5046 байтовСпасибо Нейлу и nwellnhof за сохранение 4 байта!
Неутешительно долго. Я чувствую, что здесь есть какой-то взломанный хак, о котором я не знаю, но пока не могу его найти. Возвращает указатель на массив, содержащий три элемента. Полная программа:
источник
n + i - n % i++
приводит к неопределенному поведению?s/a[i-2]/*a++/
чтобы сохранить два байта.f(a,n,i)int*a;{for(i=1;++i<5;)*a++=n+i-n%i;}
Reng, 40 байт
1: init
i1+#i
устанавливает вход в1 + input
; это потому, что мы должны работать над числами, строго превышающими входные.234
инициализирует ленту с нашими значениями итерации и1ø
переходит к началу следующей строки.2а: петля
i(
помещает ввод в STOS и2[
создает новый стек с двумя верхними элементами.¤
дублирует стек и,
выполняет модуль. Если есть остаток,q!^
вырывается из цикла, чтобы перейти к (b). В противном случае мы можем печатать.$
удаляет лишнюю штуковину,]
закрывает стопку иæ
красиво печатает.l0wq!~
завершается, если в стеке нет нулевых элементов.2b: этот другой цикл
(1+)
добавляет 1 к STOS и31j
переходит к той части цикла, которая не берет вещи из стека. И прибыль.Этот лишний пробел действительно беспокоит меня. Возьми GIF.
источник
Retina,
624326 байт17 байт благодаря @Martin Büttner .
(Обратите внимание на завершающий символ новой строки.)
Попробуйте онлайн!
Ввод в унарном виде
1
, вывод в унарном виде1
через пробел.Предыдущая 43-байтовая версия:
Попробуйте онлайн!
Ввод в унарном виде, вывод в унарном виде через точку с запятой (
;
).Предыдущая 62-байтовая версия:
Попробуйте онлайн!
Ввод в унарном виде, вывод в унарном виде через точку с запятой (
;
).источник
Октава,
272220 байтMATLAB и Octave:
Лучше (решения эквивалентны, но одно может превзойти другое, если дальше играть в гольф), MATLAB и Octave:
Только в Октаве:
Попробуй здесь .
источник
Минколанг 0,15 , 17 байт
Попробуй это здесь!
объяснение
источник
> <> , 31 байт
Ожидается
N
присутствие в стеке при запуске программы. Попробуйте онлайн!источник
Mathematica 28 байтов
{2, 3, 4}
{6, 6, 8}
{44, 45, 44}
{124, 126, 124}
{422, 423, 424}
{31416, 31416, 31416}
{1081178, 1081179, 1081180}
Общий случай дает общий ответ:
{2 + r - Mod [r, 2], 3 + r - Mod [r, 3], 4 + r - Mod [r, 4]}
источник
R,
3026 байт(Уменьшено на 4 байта благодаря @Neil)
Это (аналогично остальным ответам, я думаю) добавляет 2: 4 к входу и уменьшает остаток после выполнения по модулю на тех же числах.
источник
N+2:4-N%%2:4
?UGL ,
51312524 байтаПопробуйте онлайн!
Предыдущая 25-байтовая версия:
Попробуйте онлайн!
Предыдущая 31-байтовая версия:
Попробуйте онлайн!
Предыдущая 51-байтовая версия:
Попробуйте онлайн!
источник
Java
7057источник
=
вint a = new Integer(z[0]);
Golfscript, 22 байта
Попробуйте онлайн!
Альтернативное 22-байтовое решение:
Попробуйте онлайн!
источник
На самом деле, 22 байта
Попробуйте онлайн!
Интересный факт: 3 ошибки в интерпретаторе Actual были найдены и исправлены при написании этой программы.
Не очень забавный факт: эти 3 ошибки помешали этому решению стать намного короче.
Объяснение:
источник
J, 18 байт
Попробуйте онлайн!
источник