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, fei rcomandi possono essere modificati da comandi Mathemania supplementari (che si aprono anche via con 2il 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 3dopo in questo emodo:
e(efrrc) -> cube a number, "efrrc" = 3
NOTA: per i nostri scopi, il comando fattoriale ( f) inizia con 2un 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 è ninferiore a esso, e ninferiore a quello, e così via fino a quando il numero finale non può essere sottratto da nsenza diventare 0o 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 ncome 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,000a 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,000e10,100. - Non è consentito produrre programmi Mathemania che non generano un numero intero. In tal caso, il programma verrà squalificato.
- Per i comandi
e,fer, 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
5e vieneefrcemesso, deve emetterlo ogni volta che5viene 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!
efad esempio, è permesso al codice di "saltare" e di emettere il risultato prima efdell'operazione?