Specifiche della Mathemania:
Ogni pezzo di codice Mathemania inizia con il numero 2
. Da 2
, è possibile eseguire le seguenti operazioni:
e
: Esponenziazione. L'impostazione predefinita di questo comando è la quadratura del numero.f
: Fattoriale. L'impostazione predefinita di questo comando utilizza il singolo fattoriale sul numero (using f on 2 = 2! = 2
).r
: Radice. L'impostazione predefinita di questo comando è il rooting quadrato del numero.c
: Funzione soffitto.l
: Funzione Floor.
Per generare un numero in Mathemania, è necessario mettere insieme questi comandi, che vengono eseguiti da sinistra a destra sul numero 2
.
Esempi:
ef = (2^2)! = 4! = 24
rl = floor(sqrt(2)) = floor(1.4...) = 1
er = sqrt(2^2) = sqrt(4) = 2
efrrc = ceil(sqrt(sqrt((2^2)!)))
= ceil(sqrt(sqrt(24)))
= ceil(sqrt(4.89...))
= ceil(2.21...)
= 3
I e
, f
ei r
comandi possono essere modificati da comandi Mathemania supplementari (che si aprono anche via con 2
il suo numero "base") per generare differenti exponentiations, fattoriali e radici mettendo parentesi dopo la funzione alterata e ponendo i comandi Mathemania suo interno.
Ad esempio, per cubare un numero invece di quadrarlo, puoi inserire il comando 3
dopo in questo e
modo:
e(efrrc) -> cube a number, "efrrc" = 3
NOTA: per i nostri scopi, il comando fattoriale ( f
) inizia con 2
un singolo fattoriale. Quindi, se lo fai f(efrrc)
, verrà valutato un doppio fattoriale, non un triplo fattoriale.
Per n
-fattoriali (ad es. Doppi fattoriali = 2-fattoriali, tripli fattoriali = 3-fattoriali ecc.), Il numero di base viene moltiplicato per il numero che è n
inferiore a esso, e n
inferiore a quello, e così via fino a quando il numero finale non può essere sottratto da n
senza diventare 0
o negativo.
Per esempio:
7!! = 7 * 5 * 3 * 1 = 105 (repeatedly subtract 2, 1 is the last term as
1 - 2 = -1, which is negative)
9!!! = 9 * 6 * 3 = 162 (repeatedly subtract 3, 3 is the last term as
3 - 3 = 0, which is 0)
Per ulteriori informazioni, vedere qui .
Puoi inserirlo ovunque e verrà trattato da Mathemania come una singola funzione:
e(efrrc)rc = ceil(sqrt(2^3))
= ceil(2.82...)
= 3
Puoi anche nidificarli uno dentro l'altro:
e(e(e)) = e(4th power)
= (2^4)th power
= 16th power
Per un interprete del codice Mathemania, clicca qui (evviva, @ BradGilbertb2gills!)
Compito:
Il tuo compito è creare un programma che, quando viene dato un intero positivo n
come input, genera un programma Mathemania che, una volta eseguito, ritorna n
.
Tuttavia, i programmi Mathemania che si genera deve essere il più piccolo (golfed) il più possibile, e il punteggio finale è determinato dalla somma del numero di byte nei programmi Mathemania generati del campione, che sono i numeri interi 10,000
a 10,100
. Vince il punteggio più basso.
Regole e specifiche:
- Il tuo programma deve generare un programma Mathemania valido per qualsiasi numero intero positivo, ma verranno testati solo i numeri tra
10,000
e10,100
. - Non è consentito produrre programmi Mathemania che non generano un numero intero. In tal caso, il programma verrà squalificato.
- Per i comandi
e
,f
er
, il codice Mathemania all'interno di quelle funzioni (ad esempioe(efrrc)
, dove ilefrrc
è il codice all'interno della funzione) deve restituire un intero positivo sopra2
. Se il tuo programma non segue questa regola, viene anche squalificato. - Il tuo programma deve restituire un programma Mathemania per uno dei 101 numeri interi di test in un massimo di 30 minuti su un laptop moderno.
- Il programma deve restituire la stessa soluzione per qualsiasi numero intero ogni volta che viene eseguito. Ad esempio, quando un programma riceve un input
5
e vieneefrc
emesso, deve emetterlo ogni volta che5
viene fornito l'input . - Non è possibile codificare alcuna soluzione per qualsiasi numero intero positivo.
- Al fine di massimizzare completamente il potenziale di golf nel tuo output, il tuo programma dovrebbe essere in grado di gestire numeri arbitrariamente grandi. Non è un requisito, anche se buona fortuna se la tua lingua non lo supporta.
Questo è metagolf , quindi vince il punteggio più basso!
ef
ad esempio, è permesso al codice di "saltare" e di emettere il risultato prima ef
dell'operazione?