O Cubically é muito tedioso para escrever manualmente qualquer código. Seu desafio é traduzir o texto ASCII no código-fonte do Cubically.
Cubicamente
Este é apenas um rápido resumo do Cubically; o repositório tem um guia e detalhes mais completos.
Cubicamente é um esolang que escrevi há algum tempo, projetado para ser doloroso de usar. Ele contém dois pedaços de memória, um cubo de Rubik 3x3x3 e um registro chamado "bloco de notas".
Memória
O Cubo de Rubik interno é inicializado assim:
000
000 top face
000
111222333444 left, front, right, and back faces, respectively
111222333444
111222333444
555
555 down face
555
Depois de executar uma rotação de 90 ° no sentido horário na face direita, o cubo de memória ficaria assim:
002
002
002
111225333044
111225333044
111225333044
554
554
554
Comandos
Um caractere não inteiro define o comando padrão. Para cada número inteiro antes que o comando padrão seja definido novamente, o comando é executado com esse número inteiro. Por exemplo, x524y312
executaria o comando x
com 5, depois com 2, depois com 4, depois executaria o comando y
com 3, depois com 1 e depois com 2.
Os números inteiros que os comandos usam representam índices de face. Então, x0
teria desempenho x
na face UP (indexada 0). x1
executaria x
na face ESQUERDA (indexada 1) e assim por diante.
Executar qualquer comando com 6
executará esse comando no valor do bloco de notas. Executar qualquer comando com um número inteiro acima de 6 resultará em um erro.
Aqui estão alguns comandos de exemplo:
R1
- gire a face DIREITA no sentido horário 90 ° para que o cubo interno pareça com o segundo exemplo acimaR11
- gire a face DIREITA no sentido horário 90 ° duas vezes, idêntico aoR2
+0
- adicione todos os valores da face UP ao bloco de notas+000
- adicione todos os valores da face UP ao bloco de notas três vezes@6
- imprime o rosto inexistente do sexto índice (memória) como um caractere%4
- imprime a soma de todos os valores na face BACK como um número inteiro
Uma lista completa de comandos e sintaxe está disponível no repositório .
Desafio
Você pegará o texto ASCII como entrada e imprimirá um programa Cubically como saída.
Exemplos (roubados daqui e aqui ):
Input -> Output
Hello, World! -> +53@6+1F2L2+0@6L2F2U3R3F1L1+2@66L3F3R1U1B3+0@6:4U1R1+00@6-000@6*0-4+000@6-00@6+2-000000@6-5+4000@6-00@6/0+00@6:0+0/0+00@6
1$2$3$4$5$6$7$8$9$10$ -> B1+2/2%6@4+00/0%6@4+00/1%6@4+21/1%6@4+30/0%6@4+22/1%6@4+22/1%6@4+40/1%6@4+52/1%6@4+42/1%6@4
Regras
- Seu programa não pode conter um dicionário contendo as traduções para as 100 caixas de teste.
- Seu programa deve terminar em menos de 180 segundos (nenhum programa de força bruta que leva semanas).
- Seu programa deve gerar um código Cubically válido que termine em menos de 180 segundos.
- Seu programa receberá entrada por entrada padrão, a menos que você queira mexer com o driver de teste.
- Seu programa deve gerar um código cubicamente que não produza nada além da entrada do seu programa quando executado. ಠ_ಠ
Pontuação
Você testará seu programa com 100 seqüências pseudo-aleatórias de comprimento pseudo-aleatório. (É fornecido um script bash que fará isso por você.) Veja como você pontuará:
- Deixe o comprimento do programa de saída ser o .
- Seja o comprimento da string de entrada l .
- Seja uma variável r o resultado de o / l .
- Encontre a média de todos os r : (r 1 + r 2 + r ... + r 100 ) / 100 .
Teste com este script. Você precisará modificá-lo conforme as instruções. Observe que o programa não verifica se a saída é um código cubicamente válido. Se você não conseguir que o script funcione, eu posso ajudar. Ping me na sala de bate-papo cubicamente .
@6
- imprimiria a soma da face inexistente do sexto índice (bloco de notas) como caractere" seria mais precisa? %4
Também é uma soma? Os +
comandos sum face são adicionados a todos os valores ou ...?
@6
/ %6
apenas imprime diretamente o valor do bloco de notas como um caractere / número inteiro. @x
/ %x
(onde x é qualquer face existente) adiciona todos os valores na x
face indexada e imprime a soma como um caractere / número inteiro. +
adiciona todos os valores na face especificada ao registro.