Editar: meta-golf
Pronto publicaré una versión más nueva de esta pregunta . Mantente tooned!
Edición n.º 2: ya no actualizaré el desafío, pero lo dejaré abierto. La meta-golf
versión está disponible aquí: /codegolf/106509/obfuscated-number-golf
Antecedentes:
La mayoría de los números se pueden escribir con solo 6 símbolos diferentes:
e
(Constante de Euler)-
(Resta, no negación)^
(Exponenciación)(
)
ln
(Logaritmo natural)
Por ejemplo, podría convertir el número imaginario i
usando esta ecuación:
(e-e-e^(e-e))^(e^(e-e-ln(e^(e-e)-(e-e-e^(e-e)))))
Objetivo:
Dado cualquier número entero a k
través de cualquier medio razonable, genera la representación más corta posible de ese número usando solo esos 6 símbolos.
Ejemplos:
0 => "e-e"
1 => "ln(e)"
2 => "ln(ee)"
// Since - cannot be used for negation, this is not a valid solution:
// ln(e)-(-ln(e))
-1 => "e-e-ln(e)"
Notas:
- El paréntesis final cuenta para la cantidad total de caracteres.
ln(
solo cuenta como 1 personaje.- Todo lo demás cuenta como 1 personaje.
n^0=1
- Se aplica el orden de operaciones
- Paréntesis multiplicador es aceptable, por ejemplo
(2)(8)=16
,2(5)=10
, yeln(e)=e
. ln e
no es válido, debes hacerln(e)
code-golf
math
number
number-theory
Julian Lachniet
fuente
fuente
ln(ee...e)
) es la mejor manera de retratar lo positivo. Editar: no, no lo es.ln(e^(ln(eeeee)ln(eeee)))
es mejor para 20ln(eeee)^ln(ee)
es más corto queln(eeeeeeeeeeeeeeee)
para 16Respuestas:
Python 3, 402 bytes
Ejemplo de uso:
Tenga en cuenta que aunque el formato de salida puede no reflejarlo, el código cuenta correctamente todas las longitudes de acuerdo con las especificaciones de la pregunta.
Esta es una fuerza bruta tonta a través de todas las longitudes posibles de cuerdas. Luego uso algunos reemplazos para que Python pueda evaluarlo. Si es igual a lo que queremos, también verifico para excluir signos negativos unarios marcando el AST.
No soy muy bueno jugando al golf en Python, ¡así que aquí está el código semi-sin golf si alguien quiere ayudar!
fuente