Há uma história antiga sobre um pedreiro que nunca ficou satisfeito com o que ele era. Ele desejou poder se tornar o sol, e assim foi. Bloqueado pelas nuvens, ele queria ser - e se tornou - uma nuvem. Quando o vento soprou, ele desejou ser o vento. Parado pela montanha, ele desejava ser uma montanha, e assim se tornou uma. Logo, porém, ele estava sendo atacado por um pedreiro, e desejava ser um pedreiro.
Da mesma forma, sua tarefa é escrever um programa que nunca esteja satisfeito com o idioma em que está. Seu programa deve gerar um conjunto de substituições de regex para transformá-lo em um idioma diferente. E assim por diante.
Regras
- Escreva um programa no idioma de sua escolha.
- O programa deve gerar uma série de pelo menos dois segmentos. Um segmento é um monte de texto, separado por ponto e vírgula. No entanto, se um ponto-e-vírgula estiver contido em uma regex, de forma que sua divisão resultará em sintaxe inválida, ele não separará segmentos. Veja o exemplo.
- O primeiro segmento é um padrão de regex a ser encontrado e o segundo segmento é o padrão de substituição. O terceiro é outro padrão de "localização" e o quarto é um padrão de "substituição", e assim por diante.
- Aplique os padrões de regex ao programa. Substitua o padrão no primeiro segmento por um no segundo; substitua o terceiro padrão pelo quarto, e assim por diante.
- O resultado deve ser um programa em um idioma diferente, que siga as regras 2 a 4.
- Os idiomas usados devem formar um ciclo infinito e repetitivo.
- Por exemplo, Python -> PHP -> C ++ -> Python -> PHP -> C ++ -> Python -> ...
- Sua pontuação é o período do ciclo. Os laços são quebrados pelo menor tamanho inicial do código.
- No exemplo acima, a pontuação é três.
- Em cada iteração do ciclo, nenhum idioma pode ser usado mais de uma vez.
- Para as regras 5 e 7, linguagens compatíveis (C e C ++) e versões diferentes da mesma linguagem (Python 2 e Python 3) são consideradas iguais.
- Os programas em si não precisam ser repetidos.
- No exemplo acima, o primeiro e o quarto programas podem ser diferentes.
- Qualquer versão do regex é aceitável, mas o mesmo deve ser usado para todos os programas.
- A saída total de cada programa não pode exceder 100 caracteres.
- Cada saída deve conter instruções para realmente alterar o programa. Ou seja, dois programas consecutivos no ciclo não podem ser os mesmos.
Exemplo
Python -> Ruby -> Python -> ...
print "uts;Z;rint;uts;Z(?=;Z);rint"
Saídas:
uts;Z;rint;uts;Z(?=;Z);rint
Os segmentos são:
FIND ; REPLACE
uts ; Z
rint ; uts
Z(?=;Z ; rint (breaking the first segment in two would result in invalid syntax)
A aplicação das substituições regex, em ordem, nos fornece:
print "Z;Z;rint;Z;Z(?=;Z);rint" # replace each "uts" with "Z"
puts "Z;Z;uts;Z;Z(?=;Z);uts" # replace each "rint" with "uts"
puts "rint;Z;uts;rint;Z(?=;Z);uts" # replace each "Z" followed by ";Z" with "rint"
A execução da última linha nos dá as instruções para transformar isso de volta no código Python.
\;
;)Respostas:
2 idiomas: Python, Ruby;
3329 bytesAqui está outra maneira de fazer Python e Ruby, um pouco mais curta que a do desafio:
Não deve ser muito difícil adicionar PHP à mistura.
fonte
2 idiomas: Python 2 e Befunge-93, 77 bytes
Depois de ler atentamente as regras desta vez , tive uma resposta real. Não ganhará nenhum prêmio, mas o Befunge é muito divertido de se programar.
Este programa Python produz:
O que gera essas substituições:
O que transforma o programa nesse programa Befunge:
Talvez eu veja se consigo fazer uma linha. Francamente, estou um pouco surpreso com o fato de o Befunge trabalhar para esse tipo de problema.
(Desculpe por excluir e desfazer a exclusão de muitos; fiquei em pânico por um segundo porque achei que o programa talvez não tivesse funcionado.)
fonte