Ringraziamo Geobits in TNB per l'idea
Un post senza dettagli sufficienti ha recentemente proposto un gioco interessante:
2 bambini si siedono davanti a una serie di caramelle. Ogni pezzo di caramella è numerato da 1 a x
, con x
la quantità totale di caramelle presenti. C'è esattamente 1 occorrenza di ciascun numero.
L'obiettivo del gioco è che i bambini mangino caramelle e moltiplichino i valori delle caramelle che hanno mangiato per arrivare a un punteggio finale, con il punteggio più alto vincente.
Tuttavia, nel post originale sono mancate le informazioni chiave, come il modo in cui vengono selezionate le caramelle, quindi i bambini nella nostra storia hanno deciso che il bambino più grande deve iniziare per primo e possono mangiare fino a metà delle caramelle, tuttavia una volta che annuncia la fine del suo turno, non può cambiare idea.
A uno dei bambini in questo gioco non piacciono le caramelle, quindi vuole mangiare il meno possibile, e una volta ha visto suo padre scrivere un po 'di codice una volta, e figure che può usare le abilità acquisite da quello per capire quante caramelle ha bisogno di mangiare per garantire la vittoria, pur continuando a mangiare il meno possibile.
La sfida
Dato il numero totale di caramelle x
, il tuo programma o funzione dovrebbe generare la minima quantità di caramelle che deve mangiare per garantire la vittoria,n
, anche se il suo avversario mangia tutte le caramelle rimanenti.
I numeri naturalmente più grandi generano numeri più grandi, quindi qualsiasi importo gli darai, ne mangerà n
numeri più grandi.
Le regole
x
sarà sempre un numero intero positivo nell'intervallo in0 < x! <= l
cui sil
trova il limite superiore delle capacità di gestione dei numeri della tua lingua- È garantito che il bambino mangerà sempre il
n
maggior numero, ad esempio perx = 5
en = 2
, mangerà4
e5
Casi test
x = 1
n = 1
(1 > 0)
x = 2
n = 1
(2 > 1)
x = 4
n = 2
(3 * 4 == 12 > 1 * 2 == 2)
x = 5
n = 2
(4 * 5 == 20 > 1 * 2 * 3 == 6)
x = 100
n = 42
(product([59..100]) > product([1..58]))
x = 500
n = 220
(product([281..500]) > product([1..280]))
punteggio
Sfortunatamente, il nostro coraggioso concorrente non ha nulla con cui scrivere il suo codice, quindi deve disporre le caramelle nei caratteri del codice, di conseguenza, il tuo codice deve essere il più piccolo possibile, il codice più piccolo in byte vince!
x = 0
essere gestito anche da allora 0! = 1
? (Forse x
dovrebbe anche essere specificato come numero intero positivo?)