Desafio Poliglota Cíclico (Policiais)

11

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.

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.
Silvio Mayolo
fonte
3
"O idioma deve ter um intérprete ou compilador disponível gratuitamente. Desculpe, fãs do Mathematica, mas os ladrões precisam poder verificar sua solução." O que há de errado com o Wolfram Open Cloud? sandbox.open.wolframcloud.com
Scott Milner
Eu não sabia disso, pois tenho uma cópia local do Mathematica no meu computador. Comentário removido.
Silvio Mayolo
Tudo bem para N = 2 e M = 3?
Mdahmoune 5/07
Sim está bem. Sua pontuação será simplesmente 2, mas isso é perfeitamente aceitável.
Silvio Mayolo

Respostas:

1

C (gcc) , 126 bytes

M=N+1

Levenshtein(polyglot(M),polyglot(N))é 36 bytes

#include<stdio.h>
#define print(a) main(){int z[1];if(sizeof(0,z)==4)printf("C(gcc)");else printf("Perl5");}
print("C++(gcc)")

Experimente online!

mdahmoune
fonte
Rachado (com Levenshtein de 10)
Stephen