Poliglotas são programas que são válidos em várias linguagens de programação simultaneamente. A maioria desses poliglotas é escrita de tal maneira que certas construções de um idioma são interpretadas como comentários de outro idioma (por exemplo, #define
em C sendo interpretado como um comentário em várias linguagens de script).
Estou curioso para ver se é possível criar uma poliglota não trivial que não contenha comentários, mas também muda imediatamente quando você remove qualquer caractere que não seja um espaço em branco. Por isso, desafio você a criar esse programa.
As regras concretas são as seguintes:
- (Saída). Seu programa deve produzir alguma saída no console em cada um dos seus idiomas. Ou seja, seu programa não tem permissão para simplesmente sair sem imprimir nada.
- (Variância). Como um relaxamento da definição poliglota padrão, a saída do programa pode variar entre os idiomas.
- (Erros). Seu programa não deve produzir nenhum erro (definido de forma ampla) em nenhum dos seus idiomas. Para a maioria dos idiomas, isso é definido como o retorno de um código de saída diferente de zero do compilador e / ou intérprete.
- (Restrição). A remoção de qualquer caractere que não seja um espaço em branco do código deve fazer com que o programa altere o comportamento dele em todos os idiomas. O programa pode "mudar" se tornando inválido para esse idioma ou alterando a saída produzida.
- Este é um desafio de código . Winner é o programa que é válido na maioria das linguagens de programação. Os laços serão quebrados em favor da duração mais curta do programa.
A regra de restrição não se aplica à remoção de vários caracteres. Ou seja, é bom se a remoção de vários caracteres simultaneamente resultar em nenhuma alteração para um dos seus idiomas.
Observe que a regra de restrição implica que você não pode usar o espaço em branco como um dos seus idiomas, pois a remoção de caracteres que não sejam espaços em branco não mudará o comportamento do programa em branco.
Aqui está um exemplo simples de um programa que cumpre todas as restrições acima, para os idiomas Python 2 e Python 3:
print("Hello World!")
A remoção de qualquer caractere print
fará com que os dois idiomas atinjam a NameError
; a remoção de qualquer colchete ou aspas gerará um SyntaxError
e a remoção de qualquer um dos caracteres da sequência alterará a saída nos dois idiomas. (Observe que print("hello", "world")
é um programa mais sutil, mas ainda válido, de acordo com as regras acima).
Este exemplo é um pouco ruim porque o Python 2 e o Python 3 são muito semelhantes, portanto, não aceitarei outras soluções que usem apenas versões diferentes da mesma linguagem (especialmente Python 2 e Python 3).
print("Hello World!")
também é um código Ruby válido