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).
fonte
print("Hello World!")
também é um código Ruby válidoRespostas:
Bash + GolfScript + CJam
Saída
Bater:
GolfScript:
CJam:
Existe um
\x7f
no final da saída do CJam.fonte
Bash + Befunge
imprime 'olá' em befunge.
fonte
bc, GolfScript, Homespring, huh, Oitava, Scilab (0 bytes)
Garantido em conformidade com a regra 4. Não é um vencedor, mas faria bem no desempate.
Saída
bc
GolfScript
Homespring
Hã
Oitava
Scilab
fonte
What?\n?
propósito, seu programa é impresso .make: *** No targets. Stop.
GolfScript + PHP + CJam + Mathematica + bc + Pyth + /// + TI-Basic + R + Oitava + Matlab + Scilab + Linha superior numérica +? Fueue + hein?
Em Golscript, PHP, CJam, Mathematica, bc, Pyth, /// e TI-Basic, ele gera
10
.Em R, ele gera
[1] 10
No Octave, ele gera
ans = 10
No Matlab e Scilab, ele gera
ans = 10
.Na Linha superior numérica, ele gera
0
.Se eu entendo o Fueue corretamente, ele gera uma nova linha e atua como um programa para gatos.
Em hein ?, ele gera
fonte
72
para10
, ele deverá ser impresso0
na Linha Superior Numérica .C ++ e Javascript
A ideia é:
C ++: http://codepad.org/SK2wbIDL
Javascript: basta copiar o código no console do navegador
E um conjunto de correções para satisfazer
Do lado do Javascript:
Alterar
int
,main
ouputs
irá falhar com a leitura da variável não declarada. Masbool
eHi from C++!
pode ser com segurança muda. Vamos consertar:Se as strings são iguais, verifica a existência de
bool
, caso contrário, trava com não declaradonope
.Agora, existem dois pontos e vírgulas finais que podem ser removidos. O primeiro é corrigido esyly - basta remover a nova linha antes
int
:O segundo é anterior
}
, então eu preciso de alguma constrição, válida em ambos os idiomas e sem exigir ponto e vírgula no final em C ++ ou forjar um ponto e vírgula em js. Bem:É impossível omitir ponto e vírgula em js conforme a
while
necessidade do corpo.Portanto, o programa no momento é:
Do lado de C ++:
Existem 2 problemas:
eval
pode ter qualquer nome e todo o código js pode ser alterado.Vou tentar consertá-los em alguns dias.
fonte
CJam + Golfscript
Ok, isso é um pouco chato, mas é um começo.
Imprime "0" nos dois idiomas. A remoção das
1
causas causa um erro, removendo as,
impressões "1".O mesmo pode ser feito com
1)
ou1(
. Existem muitas alternativas.(Sim, eu sei que isso não é código-golfe)
fonte
C e C ++
C e C ++ são linguagens diferentes que são quase compatíveis entre si - ao contrário do que você pode ouvir, C ++ não é um superconjunto de C. Veja http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B para algumas diferenças . O exemplo acima não é C ++ idiomático, mas funciona e produz a mesma saída em C e C ++.
fonte
0
C.0
pode ser removido.gcc -ansi
no x86 (ou em muitas outras arquiteturas: o que acontece é que o valor de retornoputs
acaba no registro em que o tempo de execução lê o valor para retornar damain
função).JavaScipt, Lua, R e Python 3-24 bytes
Pode funcionar em alguns outros idiomas, testarei mais tarde.
O JavaScript foi testado no console do Firefox e nos outros idiomas aqui , aqui e aqui
fonte
Perl + Ruby + Python
Eu acho que em PHP isso precisaria de um ponto e vírgula se você estiver executando
-R
.fonte
Bash + sh + zsh + ksh, 4 bytes:
Realmente simples e satisfaz todas as regras:
fonte
Bash + sh + zsh + ksh + Lote do Windows, 4 bytes:
Realmente simples e satisfaz todas as regras:
Gera uma nova linha que não varia em cada um dos idiomas (mas o Lote do Windows, que gera
ECHO is on
, no idioma que você usa) não gera erro, exceto quando qualquer letra é removida ou alterada.fonte