Desafio Poliglota Cíclico
Este é o tópico da polícia. Você pode encontrar o tópico dos ladrões aqui .
Poliglota cíclica
Um poliglota cíclico de elemento N é um programa completo que pode ser executado em N idiomas diferentes. Em cada idioma, quando o programa é executado sem entrada (possivelmente sujeito a essa exceção ), ele deve imprimir o nome de um idioma em STDOUT. Especificamente, se o programa for executado no idioma K, deve imprimir o nome do idioma (K + 1). Se o programa for executado no enésimo idioma (ou seja, o idioma final em um ciclo de elementos N), ele deverá imprimir o nome do primeiro idioma.
Um exemplo pode ser útil.
a = [[ v = 7, puts('Befunge') ]]
__END__
= print("Ruby")
-->*+:292*++,,@
--3 9
--7 *
--^,:-5<
A execução deste programa com Lua imprime a string "Ruby". A execução deste programa no Ruby imprime a string "Befunge". A execução deste programa no Befunge imprime a string "Lua", completando o ciclo. Este programa constitui um ciclo de 3 composto por Lua, Ruby e Befunge.
O mesmo idioma não pode aparecer duas vezes em um ciclo e versões diferentes do mesmo idioma (como Python 2 e Python 3) não podem aparecer no mesmo ciclo que o outro.
Policiais
Seu desafio é escrever um poliglota N-cíclico, onde N é pelo menos 2. Em seguida, você deve adicionar, substituir e excluir um número de caracteres ao programa para produzir um poliglota M-cíclico, em que M é estritamente maior que N Você deve publicar o poliglota N-cíclico mais curto (e os idiomas em que ele é executado), bem como o número de caracteres que você alterou para produzir o poliglota mais longo. Sua pontuação é N, o número de idiomas em seu ciclo mais curto.
Os ladrões tentarão identificar seu ciclo mais longo. Se, após sete dias, ninguém quebrar sua solução com êxito, edite sua resposta declarando que ela é segura. Você também deve publicar seu poliglota M-cíclico mais longo neste momento.
Ladrões
Dado o poliglota N-cíclico de um policial e o número de caracteres adicionados para produzir um ciclo poliglota maior, seu objetivo é produzir esse ciclo maior. Se você pode produzir um ciclo mais longo adicionando, excluindo ou substituindo tantos caracteres quanto o policial fez ou menos caracteres , você quebrou a poliglota do policial. Sua pontuação é a duração do novo ciclo que você criou. Seu novo poliglota não precisa ser o mesmo ou semelhante ao poliglota secreto do policial; ele só precisa ser maior que o existente.
Sua solução também pode estar quebrada. Se outro ladrão aparecer e produzir um ciclo estritamente mais longo que o seu, a partir do poliglota do mesmo policial, eles roubaram seus pontos.
Linguagens de programação válidas
Como esse desafio indiretamente envolve adivinhar as linguagens de programação usadas por outros participantes, a definição de uma linguagem de programação para os propósitos desse desafio será um pouco mais rigorosa do que a definição usual. Uma linguagem de programação usada neste desafio deve atender a todas as seguintes condições.
- A linguagem deve atender às exigências usuais do PPCG para uma linguagem de programação .
- O idioma deve ter um artigo da Wikipedia , um artigo da Esolangs ou um artigo do Código Rosetta no momento em que esse desafio foi lançado.
- O idioma deve ter um intérprete ou compilador disponível gratuitamente.
Notas Finais
- O código que você escreve deve ser um programa independente em todos os idiomas em que ele se destina a executar. Não são permitidas funções ou trechos de código.
- Seu programa não receberá nenhuma entrada através do STDIN. Da mesma forma, seu programa não deve imprimir nada no STDERR.
- A pontuação de um policial é o número de idiomas no ciclo da poliglota que eles publicaram. O policial deve postar os idiomas nos quais a poliglota publicada é executada corretamente, bem como o número de caracteres adicionados para produzir uma poliglota mais longa. Eles não são responsáveis por postar os idiomas por mais tempo, poliglotas ocultos são executados até que sua resposta seja segura.
- A pontuação de um ladrão é o número de idiomas em que o poliglota modificado é executado. Assim como o policial, o ladrão deve postar a lista de idiomas nos quais o poliglota é executado corretamente.
- O número de caracteres alterados deve ser calculado à distância de Levenshtein.
fonte
Respostas:
C (gcc) , 126 bytes
M=N+1
Levenshtein(polyglot(M),polyglot(N))
é 36 bytesExperimente online!
fonte