Я был удивлен, что уже не нашел этот вопрос, хотя есть большой вопрос о проверке дартс: Дартс встречает Codegolf
Ваша задача состоит в том, чтобы подсчитать, какие баллы невозможны, если число пикарей ниже «n», а максимальный - «д». Например, для n = 3 максимально возможный балл равен 180, поэтому вы бы вернулись [163,166,169,172,173,175,176,178,179]
Для краткого изложения правила:
Возможные оценки для одного дротика:
- 0 (мисс)
- 1-20, 25, 50
- двойной или тройной 1-20
Правила:
- применяются стандартные правила игры в гольф
- Вы должны принимать один параметр 'n' любым способом, который позволяет ваш язык, и возвращать список / массив всех уникальных баллов ниже максимального балла, который нельзя набрать с помощью n дротиков. Вы также можете распечатать эти значения в консоли.
- порядок результатов не важен
- самый короткий код в байтах выигрывает
Ответы:
Python 3 ,
80795957 байт-1 байт благодаря Arnauld
-20 байт благодаря ArBo -2 байт благодаря отрицательной семерке
Попробуйте онлайн!
источник
Perl 6 , 42 байта
Попробуйте онлайн!
Решение грубой силы, которое вырабатывает все возможные значения дротиков.
источник
JavaScript (ES6),
5554 байтаСохранено 1 байт благодаря @Shaggy
На основе шаблона, используемого Родом .
Попробуйте онлайн!
источник
s=60*n
->n*=60
чтобы сохранить байт.Perl 6 , 39 байт (37 символов)
Это, безусловно, использование массивной кувалды, но это работает. (Это не просто грубая сила, это грубая сила)
Попробуйте онлайн!
Вот объяснение этого:
X* ^4
Кросс умножитель генерирует много повторяющихся значений (будет 20+ нули , участвующие и это перед делать перекрестное сложение), но это не вызывает никаких проблем , так как мы используем разность множеств ,∖
которая работает с уникальными значениями.Это в настоящее время не удается
$n == 1
(что должно вернуть пустой набор), но есть проблема, поданная и, вероятно, будет работать в будущих версиях. Версия JoKing немного длиннее, но работает$n == 1
в нынешнем Rakudo.источник
Желе , 19 байт
Попробуйте онлайн!
источник
MATL ,
2523 байтаСпасибо @Giuseppe , который исправил ошибку и сыграл в гольф 2 байта!
Попробуйте онлайн!
объяснение
Метод грубой силы.
источник
n=2
, так что я исправил ее и проиграл в байте! Попробуйте онлайн!J ,
4845 байтПопробуйте онлайн!
-3 байта благодаря FrownyFrog
Попытка решения грубой силы, но не смогла превзойти этот перевод идеи Рода.
источник
626b66jh
b
был «разделитель», и читал его как часть номера…R , 64 байта
Попробуйте онлайн!
Портс удивительный ответ, найденный Родом .
R ,
857368 байтПопробуйте онлайн!
Грубая сила генерирует все возможные результаты с помощью
n
дротиков, а затем берет соответствующую разность установок.Благодарим компанию OrangeCherries за октаву, которая напомнила мне о
combn
.Еще 5 байтов благодаря предложению Робина Райдера об использовании
%o%
.источник
FUN
аргументаcombn
! Вы можете получить 68 байт с%o%
вместоx*3,x*2
.Октава ,
91 байт,73 байта71 байтЕще один метод грубой силы.
До
73 байтблагодаря ДжузеппеУменьшение до 71 байт путем замены nchoosek на combnk
Попробуйте онлайн!
источник
Pyth , 22 байта
Попробуйте онлайн!
Время ожидания в TIO для входов больше 3.
источник
U4
наS3
производительность улучшается немного , потому что оба декартовы продукты не должны иметь дело со всеми этими дополнительными бесполезными 0s. В этом случае вход 3 выводится через ~ 13 секунд вместо ~ 30 (хотя время ввода 4 все еще истекло, и это кодовый гольф, так что это не имеет большого значения; p).-S*60QsM^*MP*S3aU21 25
, но пробел между21
и25
немного раздражает.yT
Вместо 0 можно использовать инклюзивный диапазон, основанный на 021
, вроде как:-S*60QsM^*MP*S3a}ZyT25
( но тогда без,Z
конечно, с}
заменой на 0-основанный включающий диапазон). Может быть, вы видите что-то в гольфе в этом альтернативном подходе: добавление25
в список и удаление75
после первого декартового произведения?Stax , 24 байта
Запустите и отладьте его
Это довольно медленно для n = 3, и от этого становится хуже.
источник
Python 2 , 125 байт
Попробуйте онлайн!
Python 3 ,
126125122 байтовПопробуйте онлайн!
-3 байта, спасибо Роду
источник
05AB1E ,
212018 байт-3 байта благодаря @Grimy .
Тайм-аут довольно быстро, чем выше ввод, из-за встроенного декартового произведения
ã
.Попробуйте онлайн или проверьте еще несколько тестов .
Объяснение:
источник
60 * input
не 180.Желе , 28 байт
Попробуйте онлайн!
источник
MathGolf , 26 байт
Попробуйте онлайн!
-2 байта благодаря Кевину Круйссену
объяснение
источник
3╒*mÅ~*N_∞α+
наN▐3╒*mÅ~*╡
. (PS: Почему вы упоминаете « для ввода 3 » в заголовке объяснения?)Wolfram Language (Mathematica) , 69 байт
Попробуйте онлайн!
Основано на ответе лиртозиаста .
Array
Третий аргумент задает смещение (по умолчанию 1), а четвертый аргумент задает заголовок для использования вместоList
.##&
эквивалентноSequence
, поэтомуArray[1##&,{4,21},0,##&]
возвращает (сплющенный),Sequence
содержащий элементы внешнего произведения0..3
и0..20
.источник
Древесный уголь , 36 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Использует алгоритм Рода @; Грубая сила заняла бы 60 байтов. Работает путем усечения строки до 9 символов, если ввод больше 1, затем взятия порядковых чисел символов и добавления соответствующего кратного 60.
источник
C # (интерактивный компилятор Visual C #) , 305 байт
Что ж, похоже, нет простого способа вычислить все возможные комбинации в C #, поэтому я могу придумать эту катастрофу кода.
Плюс для этого требуется около 30 секунд ...
Хотелось бы увидеть лучшее решение.
Попробуйте онлайн!
источник
Котлин , 118 байт
Попробуйте онлайн!
источник
Perl 5
-n
,969391 байтПопробуйте онлайн!
Он был оптимизирован для длины кода, а не для времени выполнения, поэтому он довольно медленный. Он генерирует много избыточных записей для своего хэша поиска. Выполнение
@b
массива черезuniq
него значительно ускоряет его, но стоит на 5 байт больше, поэтому я этого не делал.источник
Wolfram Language (Mathematica) , 81 байт
Попробуйте онлайн!
Mathematica имеет несколько связанных встроенных функций, включая
FrobeniusSolve
и ограниченную формуIntegerPartitions
, , но ни один из них не ниже грубой силы.источник
{163,166,169,172,173,175,176,178,179}