introduzione
Questo è uno dei miei puzzle di matematica preferiti.
Data una cifra (diciamo 3) e il numero di volte per usare quella cifra (diciamo 5), genera 10 espressioni che risultano a 1, 2, 3, 4, 5, 6, 7, 8, 9 e 10 usando solo +, -, ×, ÷, ^ e √ (radice) (le parentesi possono raggruppare le operazioni).
Per esempio:
(3^3 + 3)/(3 + 3) = (33 - 3)/(3 + 3) = 3 + 3/3 + 3/3 = 5
Si noti che tutti i precedenti utilizzano cinque 3 e le operazioni matematiche e risultano su 5. È inoltre possibile utilizzare un 3 prima di √ per indicare una radice cubica. Lo stesso vale per l'utilizzo di 4 prima di √ per indicare una quarta radice.
Si noti inoltre che due 3 possono essere utilizzati per formare 33 o tre 3 per formare 333 e così via.
Sfida
- Ti verranno dati due numeri (entrambi compresi tra 1 e 5) come argomento della funzione, STDIN o argomento della riga di comando.
- Il primo numero indica quale cifra usare e il secondo numero indica il numero di volte in cui quella cifra deve essere usata nell'espressione.
- Il tuo programma dovrebbe generare una matrice di dimensioni 10 (o 10 numeri separati da spazi) in cui ogni elemento indica se un'espressione matematica (usando solo gli operatori consentiti) risultante nel
(index + 1)
numero è possibile o meno usando un valore di verità / falsità.
Ad esempio, se l'ingresso è
1 3
Quindi l'output dovrebbe essere
[1, 1, 1, 0, 0, 0, 0, 0, 0, 1]
perché solo 1, 2, 3 e 10 possono essere espressi usando tre 1.
Punto
- Questo è un code-golf quindi vince la lunghezza minima del codice in byte.
indennità
Stampa tutti [−50]
Sottrai 50 dal tuo punteggio se gli elementi dell'array di output sono uguali al numero totale di combinazioni plausibili per ottenere il (index + 1)
valore anziché i valori di verità o falsa.
Ad esempio, se ci sono solo 3 possibili combinazioni di cinque 3 che risultano 5, allora la quarta voce dell'array di output dovrebbe essere 3.
Extreme Maths [−100]
Sottrai 100 dal tuo punteggio se gli elementi dell'array di output contengono almeno una delle espressioni effettive risultanti dal (index + 1)
valore.
Ad esempio, se si utilizza cinque 3 di 4 della matrice di uscita th entrata può essere (3^3 + 3)/(3 + 3)
, (33 - 3)/(3 + 3)
o3 + 3/3 + 3/3
Overkilled [−200]
Sottrai 200 dal tuo punteggio se gli elementi dell'array di output contengono tutte le possibili combinazioni (separate da |
). Questo bonus viene aggiunto al bonus Extreme Maths , quindi ottieni 300 in totale.
Ad esempio, se si utilizzano cinque 3, dovrebbe essere il 4 ° elemento dell'array di output(3^3 + 3)/(3 + 3)|(33 - 3)/(3 + 3)|3 + 3/3 + 3/3
Nota: due espressioni qualsiasi per ottenere lo stesso risultato dovrebbero essere logicamente diverse con un approccio diverso in entrambe.
Ad esempio, per ottenere 5 usando cinque 3, 3 + 3/3 + 3/3
è uguale 3/3 + 3 + 3/3
o 3/3 + 3/3 + 3
perché viene adottato lo stesso approccio per ciascuno di essi. (3^3 + 3)/(3 + 3)
e (33 - 3)/(3 + 3)
differiscono, poiché i 30 nel numeratore vengono raggiunti tramite approcci diversi.
AGGIORNAMENTO : Dopo aver esaminato tutte le risposte, si è riscontrato che tutte le risposte presentavano imperfezioni dovute a casi limite di unario -
e √. Pertanto, la mancanza di tali casi limite è stata considerata corretta per quanto riguarda la completezza delle risposte.
Questa è una domanda difficile, ma piuttosto interessante.
Buon golf!
1
s?