Prima domanda qui, non urlare a me se questa è una sfida duplicata o cattiva.
introduzione
Ho pensato a questa sfida da solo, e sembra essere un buon puzzle di base per i golfisti principianti. Potrebbe anche aiutarmi a decidere quale lingua di golf da imparare.
Sfida
Dato un array di numeri interi che sono minori o uguali a n
, emette o restituisce il numero minimo di numeri dall'array che si sommano esattamente n
.
Puoi scegliere di scrivere una funzione o un programma completo.
Ingresso
Puoi tranquillamente supporre 0 <= n < 2^31
.
Prendi un array o un elenco di qualsiasi tipo ( sono consentiti vector
C ++ o Java LinkedList
), insieme a n
un parametro facoltativo length
, che specifica la lunghezza dell'array.
Puoi anche prendere l'input come una stringa separata da spazio, separata da n
una virgola o da uno spazio:
1 5 7 3 7 3 6 3 2 6 3,10
1 5 7 3 7 3 6 3 2 6 3 10
se è più facile.
Produzione
Output o restituisce il numero minimo di numeri dall'array che si sommano esattamente n
. Utilizzando l'esempio sopra:
1 5 7 3 7 3 6 3 2 6 3,10
Il tuo programma dovrebbe stampare:
2
perché il numero minimo di numeri che si sommano a 10
è 2
( 7
e3
).
Nel caso in cui non vi sia soluzione, stampare o restituire un valore negativo, 0
"Nessuna soluzione" (sebbene ciò non sarebbe intelligente), ∞
(come suggerito) o qualsiasi altro valore errato, ad eccezione di una stringa vuota.
Esempio di input e output
Ingresso:
1 5 7 3 7 3 6 3 2 6 3,10
143 1623 1646 16336 1624 983 122,18102
5 6 9,12
Produzione:
2
3
-1
punteggio
Questo è code-golf, quindi vince il codice più breve in byte.
La risposta migliore sarà accettata a Natale.
false
casi senza soluzioni?