Questa è una "controparte" di un altro enigma, otto monete per il re giusto su Puzzling.SE.
Puoi leggere il puzzle sopra per lo sfondo. I dettagli su questo puzzle sono i seguenti.
Viene creato un set di 8 tipi di monete con valori diversi, il re vuole che tu scopra il massimo N in modo tale che qualsiasi numero di prezzo da 0 a N possa essere pagato con una combinazione non più di 8 monete e senza spese.
Ad esempio, (tratto dalla risposta di Glorfindel). Se viene fornito un insieme di monete con valori 1, 2, 5, 13, 34, 89, 233, 610, il programma dovrebbe generare 1596, poiché ogni numero compreso tra 0 e 1596 (compreso) può essere rappresentato dalla somma di non più di 8 numeri dall'elenco indicato (i numeri possono essere ripetuti), mentre 1597 non può essere rappresentato in questo modo.
In modo matematico, se l'ingresso è un insieme S costituito da 8 numeri interi positivi, l'uscita N desiderata soddisfa che per qualsiasi numero n compreso tra 0 e N, esiste x1, x2, x3, ..., x8 tale che
Il tuo obiettivo è scrivere un programma, una funzione o uno snippet che accetta 8 numeri come input e genera l'N massimo come descritto sopra.
Regole:
- I / O flessibile consentito, in modo che il tuo programma possa prendere l'input in qualsiasi forma più adatta. Si può presumere che i numeri di input siano ordinati nel modo più adatto al proprio programma.
- Indicalo nella risposta se il programma dipende dall'ordine di input
- L'input è un insieme di 8 diversi numeri interi positivi (senza zeri). L'output è un numero intero non negativo.
- Nel caso in cui non ci sia 1 nel set di input, il programma dovrebbe generare 0 perché qualsiasi numero compreso tra 0 e 0 soddisfa il requisito.
- In caso di input non valido (il set contiene zero, numeri negativi o duplicati), il programma può fare qualsiasi cosa.
- Sono vietate le scappatoie standard.
- Il programma dovrebbe essere eseguito in pochi minuti su un computer moderno.
Casi di test (principalmente tratti dalle risposte sotto la domanda collegata su Puzzling):
[1, 2, 3, 4, 5, 6, 7, 8] => 64
[2, 3, 4, 5, 6, 7, 8, 9] => 0
[1, 3, 4, 5, 6, 7, 8, 9] => 72
[1, 2, 5, 13, 34, 89, 233, 610] => 1596
[1, 5, 16, 51, 130, 332, 471, 1082] => 2721
[1, 6, 20, 75, 175, 474, 756, 785] => 3356
Questo è un codice-golf , quindi vince il programma o lo snippet più breve in ogni lingua!