Вероятно, простой вызов кода-гольфа. Учитывая 2 положительных целых числа m
и n
, составьте список n
значений, которые являются положительными целыми числами, сумма которых равна числу m
. Либо все значения в выходных данных являются одинаковыми, либо разница точно равна 1.
Примеры
Например
m=6
иn=3
станет2, 2, 2
m=7
иn=3
станет2, 2, 3
или2, 3, 2
или3, 2, 2
m=7
иn=2
станет3, 4
или4, 3
m=7
иn=1
станет7
m=7
иn=8
сгенерирует ошибку, потому что сумма 8 натуральных чисел не может быть 7.m=10
иn=4
станет3, 3, 2, 2
или любая другая перестановка
правила
- И вход, и выход только о положительных целых числах.
- Либо все значения в выходных данных являются одинаковыми, либо разница точно равна 1.
- Порядок значений в списке не важен.
- Сумма значений в списке равна
m
. - Когда это не разрешимо, генерируют ошибку или ложное значение (например, в случае m = 7 и n = 8).
- В результате других правил
m=8
иn=3
будет генерировать любую из перестановок3, 3, 2
(не2, 2, 4
)
Победитель
Это код-гольф, поэтому самый короткий действительный ответ - измеренный в байтах - выигрывает.
float a = -0f, b = 0f; System.out.println(a == b); System.out.println(a + "," + b);
... производитtrue
и-0.0,0.0
. Видите, положительный 0 и отрицательный 0 - это явно два разных числа ... реализация так говорит!Ответы:
Gaia , 4 байта
Для этого есть почти просто встроенный ...
объяснение
источник
Python 2 ,
4843 байтаВозвращает
0
при ошибке.Попробуйте онлайн!
41 байт (с трюком @ xnor)
Выдает
NameError
ошибку.Попробуйте онлайн!
источник
Mathematica, 33 байта
вход
выход
выводит False, когда это не разрешимо
источник
MATL , 7 байт
Когда решения не существует, выводом является массив, содержащий по крайней мере один ноль, что является ложным в MATL.
Попробуйте онлайн!
объяснение
Рассмотрим входы
m = 10
иn = 4
.источник
Haskell , 30 байт
Попробуйте онлайн!
источник
Древесный уголь , 15 байт после применения NDD 1
Попробуйте онлайн!
Ничего не выводится, если нет решения. Ссылка на подробную версию .
1 NDD = Neil-Driven Development.
Мой предыдущий ответ:
Древесный уголь ,
32 27 2420 байтПопробуйте онлайн!
Ничего не выводится, если нет решения. Ссылка на подробную версию .
Конечно, я не смог бы сыграть в гольф без помощи Нейла.
источник
Cast
оператора работает по некоторым причинам, но это не идеальный алгоритм ... У меня есть 16-байтовое решение.Cast
работает со списками, я сократил до 11 байт ...Map
, как на земле это работает ??Map
это как версия выраженияfor
, вплоть до использования той же переменной цикла. Таким образом, в вашем примере вместо того, чтобы каждый раз выдвигать выражение в список, онMap
автоматически собирает их и оценивает список результатов.R , 33 байта
Порт Луиса Мендо, октавский ответ . Довольно грустно, что это почти на 50% короче, чем мой предыдущий ответ.
Попробуйте онлайн!
предыдущий ответ, 63 байта:
Анонимная функция , которая принимает два (обязательные) аргументов
m
иn
, и два необязательных те , которые для целей игр в гольф. Возвращает вектор в порядке возрастания. В случае неудачи первое значение будет0
равно Falsey в R, посколькуif
используется только первое значение вектора (с предупреждением).По сути это эквивалентно следующей функции:
Попробуйте онлайн!
источник
pryr::f(diff(trunc(0:n*m/n)))
работает и короче!Желе ,
76 байтПопробуйте онлайн!Ничего не выводит для фальши.
Как это устроено
источник
TI-Basic, 23 байта
Возвращает ERR: DIVIDE BY 0 при ошибке
источник
Октава , 24 байта
Код определяет анонимную функцию. Выходными данными является числовой массив (вектор строки). Когда нет этого массива, он содержит хотя бы один ноль, что ложно в Octave.
Попробуйте онлайн!
объяснение
0:m/n:m
производит массивn+1
значений от0
кm
с шагомm/n
.fix
округляет каждую запись в сторону0
, иdiff
вычисляет последовательные различия.В качестве примера, здесь все промежуточные результаты для
m = 7
,n = 3
:источник
Haskell ,
938988878671 байтПопробуйте онлайн!
объяснение
Основная функция здесь
e
.e
возьмем список и, по сути, проведем скалкой по нему слева направо. Пока в списке есть элемент, который больше, чем его сосед справа, мы переместим один элемент вправо.Теперь все, что нам нужно сделать, это передать этой функции достаточно односторонний список и позволить ей творить чудеса. Список, который мы выберем,
m
сопровождаетсяn-1
нулями. Так как это легко сделать.Последнее, что нам нужно сделать, это убедиться, что ошибка обрабатывается. Для этого мы просто выбрасываем
Non-exhaustive patterns in function
ошибку, покаm>n
.источник
error[]
, не сумев с неисчерпывающим рисунком вместо:m!n|m>n=e$m:replicate(n-1)0
.(0<$[1..n-1])
короче чемreplicate(n-1)0
.C # (.NET Core) ,
868271 байтвыдает ошибку для неверных входных данных.
Попробуйте онлайн!
-4 байта благодаря TheLethalCoder
-11 байт благодаря Оливье Грегуар
источник
a=>b=>
в начале.using System.Collections.Generic
если я вернуIEnumerable<int>
?IEnumerable<int>
будет в определении функции, вам не нужно будет включатьusing
.Haskell, 48 байтов
Начнем со списка
n
нулей. Повторениеm
раз: возьмите первый элемент, добавьте один и поместите его в конец списка.Сбой с ошибкой сопоставления с образцом, если
n < m
.Попробуйте онлайн!
источник
Брайнгольф , 30 байт
Попробуйте онлайн!
Принимает входные данные в обратном порядке (
n
это первый вход,m
второй)Делит
m
наn
, дублирует время результатаn
, затем перебирает и увеличивает одинm % n
разисточник
Пакетная, 71 байт
cmd/cset/a
не выводит разделитель, поэтому я должен использоватьecho(
((
избегает печатиECHO is on.
).источник
PHP> = 7.1, 62 байта
PHP Sandbox Online
источник
Python 2 , 41 байт
Попробуйте онлайн!
NameError
когда невозможноPython 2 , 43 байта
Попробуйте онлайн!
ValueError
когда невозможноисточник
NameError
для выхода по ошибкеJavascript (ES6),
57 56 5341 байтОтвет теперь включает в себя умный способ создания ценностей. Спасибо @Neil
использование
история
Первый мой
Затем добавлен оператор распространения и синтаксис каррирования, полученный @Arnauld
источник
_=>m++/n|0
сохраняет кучу байтов.Java (OpenJDK 8) ,
8073636159 байтПопробуйте онлайн!
Обратите внимание, для карри цели,
m
иn
наоборот.источник
Pyth , 11 байт
Попробуйте онлайн!
источник
Pyth , 13 байт
Попробуйте онлайн! Выход
0
по ошибке.Обман, 6 байт
Попробуйте онлайн! Массив содержит
0
ошибку включения. К сожалению , это не falsy в Pyth .объяснение
источник
CJam ,
1312 байтПопробуйте онлайн!
Это анонимный блок, который принимает входные данные как
n m
в стеке. Это был бы хороший ответ, но требование обработки ошибок полностью убило его.Ошибки с делением на ноль, когда невозможно решить.
объяснение
Если требование обработки ошибок снято, его можно сократить до 7 байтов, что составляет более 40%:
источник