Especificaciones de Mathemania:
Cada pieza del código de Mathemania comienza con el número 2
. Desde el 2
, puede hacer las siguientes operaciones:
e
: Exponenciación. El valor predeterminado de este comando es cuadrar el número.f
: Factorial. El valor predeterminado de este comando es usar el factorial único en el número (using f on 2 = 2! = 2
).r
: Raíz. El valor predeterminado de este comando es el enraizamiento cuadrado del número.c
: Función de techo.l
: Función de piso.
Para generar un número en Mathemania, debe encadenar estos comandos, que se ejecutan de izquierda a derecha en el número 2
.
Ejemplos:
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
Los comandos e
, f
y r
pueden ser alterados por comandos adicionales de Mathemania (que también comienzan con 2
su número "base") para generar diferentes exponenciaciones, factoriales y raíces colocando corchetes después de la función alterada y colocando los comandos de Mathemania dentro de ella.
Por ejemplo, para poner un número al cubo en lugar de cuadrarlo, puede poner el comando para 3
después de la siguiente e
manera:
e(efrrc) -> cube a number, "efrrc" = 3
NOTA: para nuestro propósito, el comando factorial ( f
) comienza 2
como un factorial único. Entonces, si lo hace f(efrrc)
, se evaluará a un factorial doble, no a un factorial triple.
Para los n
factores (por ejemplo, factores dobles = factorial 2, factorial triple = factorial 3, etc.), el número base se multiplica por el número que es n
menor que él, y n
menor que eso, y así sucesivamente hasta que el número final no pueda ser sustraído por n
sin llegar a ser 0
o negativo.
Por ejemplo:
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)
Para más información, ver aquí .
Puede insertarlo en cualquier lugar, y Mathemania lo tratará como una función única:
e(efrrc)rc = ceil(sqrt(2^3))
= ceil(2.82...)
= 3
También se te permite anidar estos unos dentro de otros:
e(e(e)) = e(4th power)
= (2^4)th power
= 16th power
Para obtener un intérprete del código de Mathemania, haga clic aquí (¡salud, @ BradGilbertb2gills!)
Tarea:
Su tarea es crear un programa que, cuando se le da un entero positivo n
como entrada, genera un programa Mathemania que cuando se ejecuta, regresa n
.
Sin embargo, los programas Mathemania que se generan deben ser lo más pequeña (golfed) como sea posible, y su puntuación final se determina por la suma del número de bytes en los programas generados Mathemania de la muestra, que son los números enteros 10,000
a 10,100
. El puntaje más bajo gana.
Reglas y especificaciones:
- Su programa debe generar un programa Mathemania válido para cualquier número entero positivo, pero solo se evaluarán los números entre
10,000
y10,100
. - No está permitido generar programas de Mathemania que no den como resultado un número entero. Si lo hace, su programa queda descalificado.
- Para los comandos
e
,f
yr
, el código de Mathemania dentro de esas funciones (por ejemploe(efrrc)
, dondeefrrc
es el código dentro de la función) debe evaluar a un entero positivo arriba2
. Si su programa no sigue esta regla, también queda descalificado. - Su programa debe devolver un programa Mathemania para cualquiera de los 101 enteros de prueba en un máximo de 30 minutos en una computadora portátil moderna.
- Su programa debe devolver la misma solución para cualquier número entero cada vez que se ejecuta. Por ejemplo, cuando un programa recibe una entrada
5
y se emiteefrc
, debe generarla cada vez que5
se da la entrada . - No puede codificar ninguna solución para ningún entero positivo.
- Para maximizar al máximo el potencial de golf en su salida, su programa debería ser capaz de manejar enteros arbitrariamente grandes. No es un requisito, aunque buena suerte si su idioma no lo admite.
Esto es metagolf , ¡así que gana la puntuación más baja!
ef
por ejemplo, ¿se permite que el código se "salte" y solo muestre el resultado antes de la ef
operación?