Пенни спасли копейки


21

... подсчитаны!

Вы передадите своей программе переменную, которая представляет количество денег в долларах и / или центах и ​​массив значений монет. Ваша задача состоит в том, чтобы вывести количество возможных комбинаций данного массива монет, которые бы составили сумму, переданную в код. Если это невозможно с названными монетами, программа должна вернуться 0.

Примечание по американской нумизматической терминологии:

  • Монета в 1 цент: пенни
  • Монета 5 центов: никель
  • Монета 10 центов: 10 центов
  • Монета 25 центов: четверть (четверть доллара)

Пример 1:

Программа пройдена:

12, [1, 5, 10]

(12 центов)

Выход:

4

Существует 4 возможных способа объединения названных монет для получения 12 центов:

  1. 12 копеек
  2. 1 никель и 7 копеек
  3. 2 никеля и 2 копейки
  4. 1 копейка и 2 копейки

Пример 2:

Программа пройдена:

26, [1, 5, 10, 25]

(26 центов)

Выход:

13

Существует 13 возможных способов объединения названных монет для получения 26 центов:

  1. 26 копеек
  2. 21 копейка и 1 никель
  3. 16 копеек и 2 никеля
  4. 11 копеек и 3 никеля
  5. 6 копеек и 4 никеля
  6. 1 копейка и 5 никелей
  7. 16 копеек и 1 цент
  8. 6 копеек и 2 цента
  9. 11 копеек, 1 цент и 1 никель
  10. 6 копеек, 1 цент и 2 никеля
  11. 1 копейка, 1 цент и 3 никеля
  12. 1 пенни, 2 цента и 1 никель
  13. 1 четверть и 1 копейка

Пример 3:

Программа пройдена:

19, [2, 7, 12]

Выход:

2

Существует 2 возможных способа объединения названных монет для получения 19 центов:

  1. 1 монета за 12 центов и 1 монета за 7 центов
  2. 1 монета 7 центов и 6 монет 2 цента

Пример 4:

Программа пройдена:

13, [2, 8, 25]

Выход:

0

Не существует возможных способов объединения названных монет для получения 13 центов.


Это было через Песочницу. Применяются стандартные лазейки. Это код гольф, поэтому ответ с наименьшим количеством байтов выигрывает.


1
s / считать / заработал
mbomb007

4
@ mbomb007 Для четырех байт: s/count/earn.
wizzwizz4

5
Для меня и для других людей, которые не платят долларами, не очевидно, что такое никель и десять центов. Это было не сложно понять, но, может быть, вы могли бы написать это немного более интернационально?
Kritzefitz

2
@Kritzefitz. Я добавил это к вопросу.
TRiG

2
@jpaugh: Хотя монеты могут согласиться, я бы не согласился. Пенни - это стандартная монета, стоимость которой составляет один цент. Пятьдесят четыре цента - это сумма денег. Пятьдесят четыре копейки - это явно пятьдесят четыре монеты. Она также называется «монета в один цент» или (официально) «монета в один цент». Я не могу придумать какой-либо формальной обстановки, где слово «пенни» было бы неприемлемым. Эти люди , которые специально собирают монеты, без проблем называют это «копейкой».
MichaelS

Ответы:


12

Желе ( вилка ), 2 байта

æf

Это опирается на ветку Jelly, где я работал над реализацией Frobenius для решения атомов, поэтому, к сожалению, вы не можете попробовать это онлайн.

использование

$ ./jelly eun 'æf' '12' '[1,5,10]'
4
$ ./jelly eun 'æf' '26' '[1,5,10,25]'
13
$ ./jelly eun 'æf' '19' '[2,7,12]'
2
$ ./jelly eun 'æf' '13' '[2,8,25]'
0

объяснение

æf  Input: total T, denominations D
æf  Frobenius count, determines the number of solutions
    of nonnegative X such that X dot-product D = T

10
... это даже не справедливо.
ETHproductions

... и держу пари, что это намного быстрее!
Джонатан Аллан

18

Haskell, 37 34 байта

s#l@(c:d)|s>=c=(s-c)#l+s#d
s#_=0^s

Пример использования: 26 # [1,5,10,25]-> 13.

Простой рекурсивный подход: попробуйте следующее число в списке (если оно меньше или равно количеству) и пропустите его. Если вычитание числа приводит к нулю, возьмите 1еще (или, если в списке нет элементов), возьмите0 . Суммируйте те 1с и 0с.

Редактировать: @Damien: сохранил 3 байта, указав на более короткий базовый вариант для рекурсии (который также можно найти в ответе @xnors ).


s # l @ (c: d) | s> = c = (sc) # l + s # d; s # _ = 0 ^ s
Дэмиен

и каков будет результат 1209 [1,5,10,33,48] и 6000 [1,5,10,33], чтобы я мог откалибровать свой код
RosLuP

@RosLuP: 1209 # [1,5,10,33,48]-> 1314050.
Ними

@nimi хорошо для 1314050 У меня здесь тот же результат ... Спасибо ...
RosLuP

@RosLuP: ... 537 минут спустя: 6000 # [1,5,10,33]-> 22086484.
Ними

15

Mathematica, 35 22 байта

Спасибо милям за предложение FrobeniusSolveи сохранение 13 байтов.

Length@*FrobeniusSolve

Оценивает безымянную функцию, которая принимает список монет в качестве первого аргумента и целевое значение в качестве второго. FrobeniusSolveявляется сокращением для решения диофантовых уравнений вида

a1x1 + a2x2 + ... + anxn = b

для более неотрицательных целых чисел и дает нам все решения.xi


@RosLuP Для запуска вам понадобится доступ к Mathematica. Кроме того, это анонимная функция, поэтому ее можно вызвать, либо заключить в скобки, либо сохранить в переменной. Например,(Length@*FrobeniusSolve)[{1, 7, 9}, 18]
мили

и каковы будут результаты 1209 [1,5,10,33,48] и 6000 [1,5,10,33], чтобы я мог откалибровать свой код
RosLuP

@RosLuP 1314050 и 22086484 соответственно.
Мартин Эндер

Хорошо, результат такой же, спасибо ...
RosLuP

16 голосов за это оправдано, только если программист, написавший Length @ * FrobeniusSolve, это вы ...
RosLuP

12

Pyth, 8 байт

/sM{yS*E

Сырая грубая сила, слишком большая память для реального тестирования. Это O (2 mn ), где n - количество монет, а m - целевая сумма. Принимает вход как target\n[c,o,i,n,s].

/sM{yS*EQQ      (implicit Q's)
      *EQ       multiply coin list by target
     S          sort
    y           powerset (all subsequences)
   {            remove duplicates
 sM             sum all results
/        Q      count correct sums

9

Haskell, 37 байт

s%(h:t)=sum$map(%t)[s,s-h..0]
s%_=0^s

Использование некоторого кратного первой монеты hуменьшает требуемую сумму sдо неотрицательного значения в убывающей прогрессии [s,s-h..0], что затем должно быть сделано с оставшимися монетами. Как только не останется монет, проверьте, что сумма равна нулю арифметически 0^s.


Удивительно, как вы используете тот же счетчик байтов, что и @nimi, используя другой подход.
Kritzefitz

9

JavaScript (ES6), 51 48 байт

f=(n,a,[c,...b]=a)=>n?n>0&&c?f(n-c,a)+f(n,b):0:1

Принимает монеты в любом порядке. Пытается использовать и не использовать первую монету, рекурсивно вычисляя количество комбинаций в любом случае. n==0означает соответствующую комбинацию, n<0означает, что количество монет превышает количество, а c==undefinedозначает, что монет больше не осталось. Обратите внимание, что функция очень медленная, и если у вас есть монета на пенни, то следующая функция работает быстрее (не передавайте монету в копилке):

f=(n,a,[c,...b]=a)=>c?(c<=n&&f(n-c,a))+f(n,b):1

... dangit. Реальная хорошая идея.
ETHproductions

и каковы будут результаты 1209 [1,5,10,33,48] и 6000 [1,5,10,33], чтобы я мог откалибровать свой код
RosLuP

@RosLuP Данный код в конечном итоге возвращает 1314050 для вашего первого примера. Мой интерпретатор не может обработать рекурсию, необходимую для оценки второго примера.
Нил

@RosLuP Я изменил функцию, предполагая, что существует дополнительная монета пенни, которая вернула 22086484 за 6000 [5,10,33].
Нил

@Neil ok 22086484 для 6000 [1,5,10,33] ... Вместо этого было бы 11239 здесь для 6000 [5,10,33] (массив, который вы написали)
RosLuP

7

Perl, 45 байт

Количество байтов включает 44 байта кода и -pфлага.

s%\S+%(1{$&})*%g,(1x<>)=~/^$_$(?{$\++})^/x}{

Принимает значения монет в первой строке и целевую сумму во второй строке:

$ perl -pE 's%\S+%(1{$&})*%g,(1x<>)=~/^$_$(?{$\++})^/x}{' <<< "1 5 10 25
26"
13

Краткие объяснения:

-p                        # Set $_ to the value of the input, 
                          # and adds a print at the end of the code.
s%\S+%(1{$&})*%g,         # Converts each number n to (1{$&})* (to prepare the regex)
                          # This pattern does half the job.
(1x<>)                    # Converts the target to unary representation.
  =~                      # Match against.. (regex)
    /^ $_ $               # $_ contains the pattern we prepared with the first line.
     (?{$\++})            # Count the number of successful matches
     ^                    # Forces a fail in the regex since the begining can't be matched here.
    /x                    # Ignore white-spaces in the regex 
                          # (needed since the available coins are space-separated)
 }{                       # End the code block to avoid the input being printed (because of -p flag) 
                          # The print will still be executed, but $_ will be empty, 
                          # and only $\ will be printed (this variable is added after every print)

6

Желе , 10 9 байт

œċЀS€€Fċ

Попробуйте онлайн!

Как?

œċЀS€€Fċ - Main link: coins, target
  Ѐ      - map over right argument, or for each n in [1,2,...,target]
œċ        - combinations with replacement, possible choices of each of n coins
    S€€   - sum for each for each (values of those selections)
       F  - flatten into one list
        ċ - count occurrences of right argument

2
+1 за использование такого количества символов евро в вопросе, связанном с деньгами.
Стинберг

6

JavaScript (ES6), 59 байт

f=(n,c)=>n?c.reduce((x,y,i)=>y>n?x:x+f(n-y,c.slice(i)),0):1

Монеты вводятся от высшего к низшему, например f(26,[100,25,10,5,1]). Если у вас есть пенни, удалите его и используйте вместо этого эту более быструю версию:

f=(n,c)=>n?c.reduce((x,y,i)=>y>n?x:x+f(n-y,c.slice(i)),1):1

Здесь используется рекурсивная формула, очень похожая на @ nimi. Первоначально я написал это несколько дней назад, когда проблема была еще в песочнице; это выглядело так:

f=(n,c=[100,25,10,5])=>n?c.reduce((x,y,i)=>y>n?x:x+f(n-y,c.slice(i)),1):1

Единственное отличие состоит в значении по умолчанию c(оно имело заданное значение в исходном вызове) и изменении 0в .reduceфункции на1 (это было на два байта короче и в несколько миллиардов раз быстрее c=[100,25,10,5,1]).


Вот модифицированная версия, которая выводит все комбинации, а не количество комбинаций:

f=(n,c)=>n?c.reduce((x,y,i)=>y>n?x:[...x,...f(n-y,c.slice(i)).map(c=>[...c,y])],[]):[[]]

и что будет результатом 1209 [1,5,10,33,48] и 6000 [1,5,10,33], чтобы я мог откалибровать свой код
RosLuP

@RosLuP Я получаю 1314050 (через 5 минут) и переполнение стека (через час) соответственно. С более быстрой версией, которую я только что добавил, я получаю 1314050 и 22086484 в течение нескольких секунд.
ETHproductions

С моим старым компьютером Pentium 2.8Gh 6 секунд для первого результата, для второго 5 минут + или -
RosLuP

5

PHP, 327 байт

function c($f,$z=0){global$p,$d;if($z){foreach($p as$m){for($j=0;$j<=$f/$d[$z];){$n=$m;$n[$d[$z]]=$j++;$p[]=$n;}}}else for($p=[],$j=0;$j<=$f/$d[$z];$j++)$p[]=[$d[$z]=>$j];if($d[++$z])c($f,$z);}$d=$_GET[a];c($e=$_GET[b]);foreach($p as$u){$s=0;foreach($u as$k=>$v)$s+=$v*$k;if($s==$e&count($u)==count($d))$t[]=$u;}echo count($t);

Попытайся


5

Аксиома, 63 62 байта

1 байт сохранен @JonathanAllan

f(n,l)==coefficient(series(reduce(*,[1/(1-x^i)for i in l])),n)

Этот подход использует производящие функции. Возможно, это не помогло уменьшить размер кода. Я думаю, что это первый раз, когда я играю с Аксиомой, я дошел до определения своей собственной функции.

При первом вызове функции она выдаёт ужасное предупреждение, но все равно дает правильный результат. После этого все в порядке, пока список не пуст.


1
Я не знаю аксиомы - возможно ли убрать пространство раньше for?
Джонатан Аллан

1
@JonathanAllan Да, это так! Хороший инстинкт игры в гольф, спасибо!
Кристиан Сиверс

5

R, 81 76 63 байта

Спасибо @rturnbull за 13-байтовую игру в гольф!

function(u,v)sum(t(t(expand.grid(lapply(u/v,seq,f=0))))%*%v==u)

Пример (обратите внимание, что c(...)вы передаете векторы значений в R):

f(12,c(1,5,10))
[1] 4

Объяснение:

uжелаемое значение, vвектор значений монет.

expand.grid(lapply(u/v,seq,from=0))

создает фрейм данных с каждой возможной комбинацией от 0 до k монет (k зависит от достоинства), где k - это наименьшее значение, так что k раз значение этой монеты равно по меньшей мере u (значение, которое нужно достичь).

Обычно мы используем это, as.matrixчтобы превратить это в матрицу, но это много символов. Вместо этого мы берем транспонирование транспонирования (!), Которое автоматически вызывает его, но принимает меньше символов.

%*% vзатем рассчитывает денежную стоимость каждой строки. Последний шаг - подсчитать, сколько из этих значений равно желаемому значению.u .

Обратите внимание, что сложность вычислений и требования к памяти ужасны, но эй, это код игры в гольф.


1
Хорошее использование expand.grid! И я люблю t(t())трюк. Поскольку ваша функция содержит только одну строку кода, вы можете удалить фигурные скобки, сэкономив вам 2 байта. Кроме того, вы можете переключиться do.call(expand.grid,lapply(u/v,seq,from=0))на просто expand.grid(lapply(u/v,seq,f=0)), экономя 11 байтов.
rturnbull

Спасибо за это! Я никогда не понимал, expand.gridбудет принимать список в качестве входных данных. Немного обидно, что ":"плохо работает с нецелыми числами, иначе lapply(u/v,":",0)спас бы еще пару.
JDL

do.call(x,y)так же, как x(y), так что это не о том, какие виды ввода принимаются. Если вы действительно хотите использовать :, я думаю, вы могли бы использовать lapply(u%/%v,`:`,0), но это тот же счетчик байтов.
rturnbull

1
" do.call(x,y)то же самое, что и x(y)" --- только если yэто не список, как в данном случае. Согласитесь с вашим вторым пунктом, хотя.
JDL

3

J, 27 байт

1#.[=](+/ .*~]#:,@i.)1+<.@%

использование

   f =: 1#.[=](+/ .*~]#:,@i.)1+<.@%
   12 f 1 5 10
4
   26 f 1 5 10 25
13
   19 f 2 7 12
2
   13 f 2 8 25
0

объяснение

1#.[=](+/ .*~]#:,@i.)1+<.@%  Input: target T (LHS), denominations D (RHS)
                          %  Divide T by each in D
                       <.@   Floor each
                             These are the maximum number of each denomination
                     1+      Add 1 to each, call these B
                ,@i.         Forms the range 0 the the product of B
             ]               Get B
              #:             Convert each in the range to mixed radix B
     ]                       Get D
       +/ .*~                Dot product between D and each mixed radix number
                             These are all combinations of denominations up to T
   [                         Get T
    =                        Test if each sum is equal to T
1#.                          Convert as base 1 digits to decimal (takes the sum)
                             This is the number of times each sum was true

J такой потрясающий, но в то же время такой безумный
CommaToast

2

TSQL, 105 байт

Это может обработать только один доллар с этими 4 типами монет. Версия без золота может обойтись примерно в 4 доллара, но очень медленно - на моем боксе это занимает 27 секунд. Результат 10045 комбинаций между прочим

Golfed:

DECLARE @ INT = 100
DECLARE @t table(z int)
INSERT @t values(1),(5),(10),(25)
;WITH c as(SELECT 0l,0s UNION ALL SELECT z,s+z FROM c,@t WHERE l<=z and s<@)SELECT SUM(1)FROM c WHERE s=@

Ungolfed:

-- input variables
DECLARE @ INT = 100
DECLARE @t table(z int)
INSERT @t values(1),(5),(10),(25)

-- query
;WITH c as
(
  SELECT 0l,0s
  UNION ALL
  SELECT z,s+z
  FROM c,@t
  WHERE l<=z and s<@
)
SELECT SUM(1)
FROM c
WHERE s=@
-- to allow more than 100 recursions(amounts higher than 1 dollar in this example)
OPTION(MAXRECURSION 0)

скрипка


2

тинилисп репл , 66 байт

(d C(q((Q V)(i Q(i(l Q 0)0(i V(s(C(s Q(h V))V)(s 0(C Q(t V))))0))1

Рекурсивное решение: пытается использовать первую монету, а не первую, затем добавляет результаты для каждой. Экспоненциальная сложность по времени и отсутствие хвостовой рекурсии, но она прекрасно вычисляет контрольные примеры.

Ungolfed (ключ к встроенным: d= определить, q= кавычка, i= если, l= меньше, чем, s= вычитать, h= голова, t= хвост):

(d combos
 (q
  ((amount coin-values)
   (i amount
    (i (l amount 0)
     0
     (i coin-values
      (s
       (combos
        (s amount (h coin-values))
        coin-values)
       (s
        0
        (combos
         amount
         (t coin-values))))
      0))
    1))))

Пример использования:

tl> (d C(q((Q V)(i Q(i(l Q 0)0(i V(s(C(s Q(h V))V)(s 0(C Q(t V))))0))1
C
tl> (C 12 (q (1 5 10)))
4
tl> (C 26 (q (1 5 10 25)))
13
tl> (C 19 (q (2 7 12)))
2
tl> (C 13 (q (2 8 25)))
0
tl> (C 400 (q (1 5 10 25)))
Error: recursion depth exceeded. How could you forget to use tail calls?!

1

PHP, 130 байт

function r($n,$a){if($c=$a[0])for(;0<$n;$n-=$c)$o+=r($n,array_slice($a,1));return$o?:$n==0;}echo r($argv[1],array_slice($argv,2));

99-байтовая рекурсивная функция (и 31 байт ее вызова), которая многократно удаляет значение текущей монеты из цели и вызывает себя с новым значением и другими монетами. Подсчитывает, сколько раз цель достигает 0 точно. Беги как:

 php -r "function r($n,$a){if($c=$a[0])for(;0<$n;$n-=$c)$o+=r($n,array_slice($a,1));return$o?:$n==0;}echo r($argv[1],array_slice($argv,2));" 12 1 5 10

Если коллируется с более чем 97 различными типами монет, он умрет рекурсивной смертью, ничего не возвращая, но так как это гораздо больше различных типов монет, мы должны поддержать, что все в порядке.
user59178

1

Ракетка 275 байтов

(set! l(flatten(for/list((i l))(for/list((j(floor(/ s i))))i))))(define oll'())(for((i(range 1(add1(floor(/ s(apply min l)))))))
(define ol(combinations l i))(for((j ol))(set! j(sort j >))(when(and(= s(apply + j))(not(ormap(λ(x)(equal? x j))oll)))(set! oll(cons j oll)))))oll

Ungolfed:

(define(f s l)
  (set! l              ; have list contain all possible coins that can be used
        (flatten
         (for/list ((i l))
           (for/list ((j              
                       (floor
                        (/ s i))))
             i))))
  (define oll '())                    ; final list of all solutions initialized
  (for ((i (range 1  
                  (add1
                   (floor             ; for different sizes of coin-set
                    (/ s
                       (apply min l)))))))
    (define ol (combinations l i))          ; get a list of all combinations
    (for ((j ol))                           ; test each combination
      (set! j (sort j >))
      (when (and
             (= s (apply + j))              ; sum is correct
             (not(ormap                     ; solution is not already in list
                  (lambda(x)
                    (equal? x j))
                  oll)))
        (set! oll (cons j oll))             ; add found solution to final list
        )))
  (reverse oll))

Тестирование:

(f 4 '[1 2])
(println "-------------")
(f 12 '[1 5 10])
(println "-------------")
(f 19 '[2 7 12])
(println "-------------")
(f 8 '(1 2 3))

Выход:

'((2 2) (2 1 1) (1 1 1 1))
"-------------"
'((10 1 1) (5 5 1 1) (5 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1))
"-------------"
'((12 7) (7 2 2 2 2 2 2))
"-------------"
'((3 3 2) (2 2 2 2) (3 2 2 1) (3 3 1 1) (2 2 2 1 1) (3 2 1 1 1) (2 2 1 1 1 1) (3 1 1 1 1 1) (2 1 1 1 1 1 1) (1 1 1 1 1 1 1 1))

Следующее рекурсивное решение имеет некоторую ошибку:

(define (f s l)                      ; s is sum needed; l is list of coin-types
  (set! l (sort l >))
  (define oll '())                   ; list of all solution lists
  (let loop ((l l)   
             (ol '()))               ; a solution list initialized
    (when (not (null? l))
        (set! ol (cons (first l) ol)))
    (define ols (apply + ol))        ; current sum in solution list
    (cond
      [(null? l) (remove-duplicates oll)]
      [(= ols s) (set! oll (cons ol oll))
                 (loop (rest l) '()) 
                 ]
      [(> ols s) (loop (rest l) (rest ol))
                 (loop (rest l) '())   
                 ]
      [(< ols s) (loop l ol) 
                 (loop (rest l) ol)
                 ])))

Не работает должным образом для:

(f 8 '[1 2 3])

Выход:

'((1 1 1 2 3) (1 2 2 3) (1 1 1 1 1 1 1 1) (2 3 3) (1 1 1 1 1 1 2) (1 1 1 1 2 2) (1 1 2 2 2) (2 2 2 2))

(1 1 3 3) возможно, но не входит в список решений.


Я не знаком с Racket, но я написал решение в Clojure для решения аналогичной проблемы несколько лет назад, в котором использовалосьreduce
миль

«Reduce» не является частью базового языка Racket, хотя «Fold» доступен. Я добавил модифицированное решение выше, так как более раннее решение имеет некоторую ошибку.
rnso

Похоже, группа энтузиастов Лиспа собралась вместе ... и устроила рэкет
Джо

1
Некоторые из энтузиастов Лиспа впервые сделали Scheme( groups.csail.mit.edu/mac/projects/scheme ), что в итоге привело к полномасштабному Racket( racket-lang.org , stackoverflow.com/questions/3345397/… )!
rnso

1

Желе , 15 байт

s+\Fṁḷ
2*BW;ç/Ṫ

Попробуйте онлайн! или Проверьте все контрольные примеры.

Это было больше упражнение в написании эффективной версии в Jelly без использования встроенных функций. Это основано на типичном подходе динамического программирования, который используется для расчета количества способов внесения изменений.

объяснение

s+\Fṁḷ  Helper link. Input: solutions S, coin C
s       Slice the solutions into non-overlapping sublists of length C
 +\     Cumulative sum
   F    Flatten
     ḷ  Left, get S
    ṁ   Mold the sums to the shape of S

2*BW;ç/Ṫ  Main link. Input: target T, denominations D
2*        Compute 2^T
  B       Convert to binary, creates a list with 1 followed by T-1 0's
          These are the number of solutions for each value from 0 to T
          starting with no coins used
   W      Wrap it inside another array
    ;     Concatenate with D
     ç/   Reduce using the helper link
       Ṫ  Tail, return the last value which is the solution

1

На самом деле , 15 байтов

Предложения по игре в гольф приветствуются. Попробуйте онлайн!

╗;R`╜∙♂S╔♂Σi`Mc

Ungolfing

         Implicit input n, then the list of coins a.
╗        Save a to register 0.
;R       Duplicate n and create a range [1..n] from that duplicate.
`...`M   Map the following function over that range. Variable i.
  ╜        Push a from register 0.
  ∙        Push the i-th Cartesian power of a.
  ♂S       Sort each member of car_pow.
  ╔        Uniquify car_pow so we don't count too any duplicate coin arrangements.
  ♂Σ       Take the sum of each coin arrangement.
  i        Flatten the list.
c        Using the result of the map and the remaining n, push map.count(n).
         Implicit return.

0

Python, 120 байт

from itertools import*
lambda t,L:[sum(map(lambda x,y:x*y,C,L))-t for C in product(range(t+1),repeat=len(L))].count(0)

Brutefor через все комбинации монет до целевого значения (даже если самая маленькая не 1).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.