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 daef
operação?Respostas:
Python 3.5, Pontuação de ??
No momento, não tenho a saída para todas as 101 entradas, mas depois de executar o programa para todos os casos de teste, atualizarei com minha pontuação.
Além disso, não consegui verificar as saídas de alguns dos casos de teste que experimentei devido ao grande número de números e, nesse ponto, o intérprete on-line do @ BradGilbertb2gills expira. Espero que todas as saídas funcionem.
fonte