Editar: em breve postarei uma versão mais recente desta pergunta meta-golf
. Fique ligado!
Editar # 2: não vou mais atualizar o desafio, mas o deixarei em aberto. A meta-golf
versão está disponível aqui: /codegolf/106509/obfuscated-number-golf
Fundo:
A maioria dos números pode ser escrita com apenas 6 símbolos diferentes:
e
(Constante de Euler)-
(Subtração, não negação)^
(Exponenciação)(
)
ln
(Logaritmo natural)
Por exemplo, você pode converter o número imaginário i
usando esta equação:
(e-e-e^(e-e))^(e^(e-e-ln(e^(e-e)-(e-e-e^(e-e)))))
Objetivo:
Dado qualquer número inteiro k
por qualquer meio razoável, produza a menor representação possível desse número usando apenas esses 6 símbolos.
Exemplos:
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:
- Os parênteses finais contam para a quantidade total de caracteres.
ln(
conta apenas como 1 caractere.- Tudo o resto conta como 1 caractere.
n^0=1
- Ordem de operações aplicável
- Parêntese multiplicador é aceitável, por exemplo
(2)(8)=16
,2(5)=10
, eeln(e)=e
. ln e
não é válido, você deve fazerln(e)
code-golf
math
number
number-theory
Julian Lachniet
fonte
fonte
ln(ee...e)
) é a melhor maneira de retratar aspectos positivos. Edit: não, não é.ln(e^(ln(eeeee)ln(eeee)))
é melhor para 20ln(eeee)^ln(ee)
é menor queln(eeeeeeeeeeeeeeee)
para 16Respostas:
Python 3, 402 bytes
Exemplo de uso:
Observe que, embora o formato de saída não o reflita, o código conta adequadamente todos os comprimentos de acordo com as especificações da pergunta.
Esta é uma força bruta estúpida em todos os comprimentos possíveis de cordas. Então eu uso algumas substituições para que o Python possa avaliá-lo. Se é igual ao que queremos, também verifico para excluir sinais negativos unários, verificando o AST.
Eu não sou muito bom em jogar golfe em Python, então aqui está o código semi-ungolfed, se alguém quiser ajudar!
fonte