Напишите программу, которая вычисляет, может ли введенное денежное значение в виде целого числа быть представлено уникальной комбинацией монет и / или банкнот, что означает, что одна и та же монета / банкнота не может использоваться более одного раза.
Ваша программа должна принимать значение в качестве входных данных и может принимать список значений монет / банкнот либо посредством ввода, либо с помощью массива, эквивалентного вашему языку. Список монет / заметок должен быть в состоянии изменить, поэтому убедитесь, что ясно, где это определено, если вы используете константу.
Ваша программа должна выводить любое значение «истина / ложь» соответственно.
Обратите внимание, что вывод списка монет / купюр, составляющих значение, не требуется.
ПРИМЕР
Использование британского фунта (£ 1,00 = 100 и £ 420,69 = 42069)
coins = [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000]
Следующее выведет true:
6 (1, 5)
15 (10, 5)
88 (1, 2, 5, 10, 20, 50)
512 (500, 10, 2)
7003 (5000, 2000, 2, 1)
Следующий выводит false:
4
209
8889
4242424242
[ANYTHING ABOVE 8888]
АЛЬТЕРНАТИВНЫЕ ТЕСТОВЫЕ ДАННЫЕ (Доллар США)
coins = [1, 5, 10, 25, 50, 100, 200, 500, 1000, 2000, 5000, 10000]
Удачи!
Ответы:
Brachylog 2 (TIO Nexus), 2 байта
Попробуйте онлайн!
Принимает список монет либо посредством стандартного ввода, либо путем добавления его к началу программы в качестве литерала массива (либо будет работать, так что вам решать, что вы считаете «более легитимным»; первое допускается по умолчанию) Правила PPCG, последнее конкретно разрешено вопросом); и принимает значение для выдачи в качестве аргумента командной строки.
объяснение
Эта программа использует детали реализации способа обертки TIO Nexus для функций брахилога; в частности, он позволяет вам указать аргумент командной строки для ввода через Output. (Это не было предусмотрено в первоначальном дизайне для Brachylog; однако языки определяются их реализацией на PPCG, и если приходит реализация, которая делает то, что мне нужно, я могу воспользоваться этим.) Это означает, что Программа выглядит так:
Как полная программа, она возвращает логическое значение;
true.
если все утверждения в программе могут быть выполнены одновременно, илиfalse.
если они не могут быть выполнены.(Напомним, или для людей, которые еще не знают: Brachylog 2 использует свою собственную кодировку символов,
⊇
длина которой составляет один байт.)источник
08
2B
(вы можете посмотреть кодировки здесь ). Причина, по которой я не перечислил конкретную кодировку, заключается в том, что она не имеет значения; все, что действительно имеет значение, это то, что Brachylog использует не более 256 уникальных символов, так что каждый из них может быть представлен одним байтом. Это обычно делается языками игры в гольф, чтобы сделать код более читабельным; вместо этого они могли бы использовать кодировку, подобную кодовой странице 437, но если вы это сделаете, никто не сможет ее прочитать .05AB1E , 4 байта
Объяснение:
Попробуйте онлайн!
источник
Mathematica, 25 байтов
Чистая функция, принимающая массив значений coin в качестве первого аргумента и целевое число в качестве второго аргумента и возвращающая
True
илиFalse
.источник
Желе, 6 байт
Попробуйте онлайн!
-2 байта благодаря Leaky Nun
-13 байтов благодаря Leaky Nun (длинный рассказ)
источник
Retina ,
5231 байтПопробуйте онлайн! Принимает ввод как разделенный пробелами список монет и примечаний, за которым следует желаемое значение. Редактировать: Сохранено 18 байт благодаря @Kobi, который отлаживал мой код. Пояснение: первые две строки просто преобразуются из десятичной в унарную. Третья строка затем захватывает список монет и заметок. Чередование позволяет двигателю вернуться назад и выбрать не захватывать определенные монеты / примечания. Затем группа балансировки сопоставляет значение со всеми суффиксами в списке захвата (не обязательно, но в гольфе).
источник
^((1+) )+(\2?(?<-2>)|){99}$
(34 байта, с ограничением по количеству монет) или^((1+) |1+ )+(\2?(?<-2>))+$
(также 34 байта).(?<-2>\2?)
работает, а также еще один байт из вашего второго ответа, потому что?
больше нет необходимости.Брахилог , 7 байт
Попробуйте онлайн!
Как это работает
Включая комбинацию, 9 байт
Попробуйте онлайн!
источник
Java (OpenJDK 8) , 125 байт
Попробуйте онлайн!
источник
boolean f(int[]c,int n){for(int l=c.length;l-->0;n-=n<c[l]?0:c[l]);return n<1;}
(79 байт). С Java 8 и его лямбдами, он может быть уменьшен до 62 байтов. Что касается вашего ответа, как это в настоящее время,int l=c.length-1
тоl
вместо использованияl-1
также корочеПролог (SWI) , 46 байт
Попробуйте онлайн!
Вилка из моего Python ответа .
источник
is
как#=
, что позволит вам удалить некоторые пробелы).JavaScript (ES6),
81696764 байтаПринимает список монет
c
и целевое количествоa
в синтаксисе карри(c)(a)
. Возвращает0
илиtrue
.Контрольные примеры
Показать фрагмент кода
источник
Haskell , 28 байт
Функция оператора
(#)
принимает целое число и список целых чисел (или, в более общем случае, любойTraversable
контейнер чисел) и возвращаетBool
.Использовать как
6#[1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000]
.Попробуйте онлайн!
Как это работает
c
желаемое значение иl
список значений монет.mapM(:[0])l
карт(:[0])
надl
, соединяя каждое значение с 0, а затем строит декартово произведение, давая списки , где каждый элемент является либо его соответствующее значение вl
, или 0.sum<$>
суммирует каждую комбинацию иelem c$
проверяет, есть лиc
в результирующем списке.источник
R,
8883 байта-5 байт благодаря @Jarko Dubbeldam
возвращает анонимную функцию. Он генерирует все возможные комбинации монет (используя
expand.grid
парыT,F
) и проверяет наличие значений.k
это монеты, так какc
является зарезервированным словом в R. Может проверять несколько значений одновременно.Попробуйте онлайн!
источник
c(T,F)
на!0:1
, иrep(list(!0:1),length(k))
поlapply(k,function(x)!0:1)
Map(function(x)!0:1,k)
Japt , 7 байт
Попробуйте онлайн! Выходы
0
для ложных, положительное целое для правдивых.объяснение
источник
Python 3 , 52 байта
5 байт благодаря овс.
Попробуйте онлайн!
источник
Рубин , 39 байт
Возвращает
nil
как ложное значение и наименьшее значение монеты в списке, которое составляет число как правдивое (в Ruby все числа являются правдивыми).Имейте в виду, однако, что этот алгоритм безумно медленный, со
O(C!)
сложностью времени, гдеC
длина списка монет. Это в конечном итоге заканчивается, но большинство тестовых случаев будет тайм-аут на большинстве онлайн-переводчиков, дажеf(UK_POUND, 5)
.Вот 41-байтовая версия, которая завершается намного быстрее, добавляя дополнительное условие завершения, и на самом деле намного труднее истечь время ожидания
Попробуйте онлайн!
источник
Утилиты Bash + GNU,
5639Входной список наименований (несортированный) задается в виде списка через запятую. Список ввода и значение задаются в качестве параметров командной строки.
Вывод дан в виде кода возврата оболочки. Проверьте
echo $?
после запуска скрипта.0
значит правдиво,1
значит ложный.Попробуйте онлайн .
printf %$2s
выводит строкуvalue
пробелов"^ {${1//,/\}? {}}?$"
это расширение оболочки, которое расширяет список наименований до регулярных выражений^ {1}? {2}? {5}? {10}? ... $
. Оказывается, чтоegrep
движок регулярных выражений достаточно умен, чтобы правильно соответствовать этому, независимо от того, в каком порядке находятся деноминации.egrep
проверяет, соответствует ли строка пробелов регулярному выражениюисточник
C 66 байтов
Видеть это работает здесь .
C, 53 байта
Этот вариант принимает массив монет, который побеждает цель этой задачи, потому что сводится к простому вычитанию.
Первый аргумент - это массив монет, второй - количество монет, а третий - значение.
C, 48 байтов
Альтернатива предыдущему варианту. Предполагается, что массив монет может быть обращен и завершен нулем.
источник
Pyth , 6 байт
Тестирование.
источник
CJam ,
1817 байтовПопробуйте онлайн!
объяснение
источник
C (gcc) , 91 байт
Попробуйте онлайн!
источник
PHP, 70 байт
печатает 1 за правду и ничего за ложь
Попробуйте онлайн!
источник
Октава, 39 байт
Анонимная функция, которая принимает массив значений coin в качестве первого аргумента и целевое целое число в качестве второго аргумента и возвращает true или false.
Попробуйте онлайн!
источник
Mathematica, 42 байта
вход
источник