Mathemania Especificações:
Cada parte do código da Mathemania começa com o número 2
. No 2
, você pode executar as seguintes operações:
e
: Exponenciação. O padrão deste comando é quadrado o número.f
: Fatorial. O padrão deste comando é usar o fatorial único no número (using f on 2 = 2! = 2
).r
: Raiz. O padrão deste comando é o número da raiz quadrada.c
: Função de teto.l
: Função de piso.
Para gerar um número no Mathemania, você deve encadear esses comandos, que são executados da esquerda para a direita no número 2
.
Exemplos:
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
Os comandos e
, f
e r
podem ser alterados por comandos extras do Mathemania (que também começam com 2
seu número "base") para gerar diferentes exponenciações, fatoriais e raízes, colocando colchetes após a função alterada e colocando os comandos do Mathemania dentro dele.
Por exemplo, para cubar um número em vez de quadrá-lo, você pode colocar o comando para 3
depois da seguinte e
maneira:
e(efrrc) -> cube a number, "efrrc" = 3
NOTA: para nosso propósito, o comando fatorial ( f
) começa 2
como um fatorial único. Portanto, se o fizer f(efrrc)
, isso será avaliado em fatorial duplo, e não triplo.
Para n
fatoriais (por exemplo, fatorial duplo = fatorial 2, fatorial triplo = fatorial 3, etc.), o número base é multiplicado pelo número que é n
menor que ele, e n
menor que isso, e assim sucessivamente até que o número final não possa ser subtraído por n
sem se tornar 0
ou negativo.
Por exemplo:
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 mais informações, clique aqui .
Você pode inseri-lo em qualquer lugar e ele será tratado pelo Mathemania como uma única função:
e(efrrc)rc = ceil(sqrt(2^3))
= ceil(2.82...)
= 3
Você também pode aninhar estes dentro um do outro:
e(e(e)) = e(4th power)
= (2^4)th power
= 16th power
Para um intérprete do código da Mathemania, clique aqui (felicidades, @ BradGilbertb2gills!)
Tarefa:
Sua tarefa é criar um programa que, quando recebe um número inteiro positivo n
como entrada, gera um programa Mathemania que, quando executado, retorna n
.
No entanto, os programas Mathemania que geram deve ser tão pequena (golfed) quanto possível, e sua pontuação final é determinado pela soma do número de bytes nos programas Mathemania gerados da amostra, que são os números inteiros 10,000
para 10,100
. A pontuação mais baixa vence.
Regras e especificações:
- Seu programa deve gerar um programa Mathemania válido para qualquer número inteiro positivo, mas apenas os números entre
10,000
e10,100
serão testados. - Você não tem permissão para produzir programas Mathemania que não resultam em um número inteiro. Se você fizer isso, seu programa será desqualificado.
- Para os comandos
e
,f
er
, o código Mathemania dentro dessas funções (por exemploe(efrrc)
, onde aefrrc
é o código no interior da função) deve ser avaliada como um número inteiro positivo acima2
. Se o seu programa não seguir esta regra, também será desqualificado. - Seu programa deve retornar um programa Mathemania para qualquer um dos 101 números inteiros de teste em no máximo 30 minutos em um laptop moderno.
- Seu programa deve retornar a mesma solução para qualquer número inteiro sempre que for executado. Por exemplo, quando um programa recebe uma entrada
5
e geraefrc
, ele deve gerar essa saída toda vez que a entrada5
é fornecida. - Você não pode codificar soluções para nenhum número inteiro positivo.
- Para maximizar totalmente o potencial de golfe em sua saída, seu programa deve ser capaz de lidar com números inteiros arbitrariamente grandes. Não é um requisito, apesar de boa sorte se o seu idioma não suportar isso.
Isso é metagolf , então a pontuação mais baixa vence!
ef
por exemplo, o código pode "pular" e apenas gerar o resultado antes da ef
operação?