TovTovTov (uma mutação de Chicken ): 810147050 bytes
A seguir, são descritas duas soluções sugeridas: uma solução completa para a questão que requer muitos bytes e uma segunda solução parcial (resolvendo apenas as partes N + N e N * N , exigindo apenas 484 bytes), cada uma adotando uma abordagem diferente e própria conjunto de truques legais! :)
1. Solução completa (810147050 bytes)
Usando TovTovTov(TOV='hi',SEP=',')
, os TOV
elementos são imunes à duplicação de caracteres no lugar (ambos "hihihi"
e "hhiihhiihhii"
têm três "hi"
s neles, e tudo se TovTovTov
preocupa é com quantos TOV
s aparecem entre SEP
s).
Se usássemos SEP=', '
, o programa inteiro seria imune à duplicação de caracteres (o que é legal, mas não resolve a questão). Então nós usamos SEP=','
.
Portanto, o programa "hihihi,hi"
, por exemplo, compila na matriz ints [3,1]
, enquanto "hhiihhiihhii,,hhii"
compila para [3,0,1]
e "hhiihhiihhii,,hhii"
para [3,0,0,1]
. Isso significa que os próprios comandos não mudam de significado após a duplicação, mas o comprimento geral muda com a duplicação de caracteres. A solução abaixo consulta a duração do programa e usa isso para decidir se quer imprimir N+N
, N*N
ou N^N
.
A solução completa sugerida, como matriz ints, é: [6, 12, 9, 18, 9, 142, 11, 38, 8, 9, 260, 11, 73, 8, 22, 75, 7, 10, 14, 3, 1, 22, 24, 18, 15, 8, 10, 16, 3, 1, 22, 24, 18, 15, 8, 10, 45, 16, 7, 22, 3, 1, 22, 24, 18, 15, 8, 22, 3, 1, 22, 24, 18, 15, 8, 25, 3, 1, 22, 24, 18, 15, 8, 48, 3, 1, 22, 24, 18, 15, 8, 277, 3, 1, 22, 24, 18, 15, 8, 3146, 3, 1, 22, 24, 18, 15, 8, 46677, 3, 1, 22, 24, 18, 15, 8, 823564, 3, 1, 22, 24, 18, 15, 8, 16777237, 3, 1, 22, 24, 18, 15, 8, 387420510, 3, 1, 22, 24, 18, 15, 8]
Como uma sequência, é um programa bastante longo, composto por 810147050 caracteres, começando com:
hihihihihihi,hihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihih...
2. Resolvendo apenas as partes N + N e N * N da pergunta (484 bytes)
Usando TovTovTov(TOV='1',SEP=', ')
, desta vez, os SEP
s são imunes à duplicação ( ",, "
ainda tem apenas um ", "
), portanto, a seguinte solução sugerida sempre terá 33 comandos, mesmo após a duplicação de caracteres:
1111, 111111111111111111111111111111111111111111111111, 1111111111, 1111111111, 1111111111, 111111, 111111111111, 111111111, 11111111111111, 111, 1, 1111111111111111111111, 111111111111111111111111, 111111111111111111, 111111111111111, 11111111, 111111111111, 1111111111111111, 111111111111111, 1111111111111111111111, 111111111111111111111111111111111111, 11, 1111111111111111111111111111, 111111, 111, 111111, 11111111111, 111111111111111111111111111, 1111, 1, 11111111, 1, 11111111
A matriz ints correspondente (o número de TOV
s ( 1
s) em cada um dos 33 comandos acima) é a seguinte:[4,48,10,10,10,6,12,9,14,3,1,22,24,18,15,8,12,16,15,22,36,2,28,6,3,6,11,27,4,1,8,1,8]
Duplicar os caracteres no local resulta em uma lista de 33 comandos totalmente diferentes :
[8,96,20,20,20,12,24,18,28,6,2,44,48,36,30,16,24,32,30,44,72,4,56,12,6,12,22,54,8,2,16,2,16]
A matriz original é ints (que calcula N + N ) foi concebido com cuidado de modo que depois os comandos alterar o seu sentido, o programa ainda faz sentido, mas calcula N * N . Por exemplo, o primeiro 4
(que TovTovTov
entende como "tratar a próxima operação como um código ASCII para converter em um caractere") muda após a duplicação de caracteres para 8
, que é um comando totalmente diferente ("altere o contador de programa para o primeiro valor populado do pilha, se o valor exibido imediatamente após for verdadeiro ").