Tarefa
Crie um programa ou uma função que seja válida em várias linguagens de programação e, quando compilada / interpretada como uma linguagem diferente, produz "Olá, Mundo!" em uma linguagem natural diferente.
Por exemplo, uma solução válida pode produzir Hello World!
(inglês) quando compilado e executado como C, Hallo Welt!
(alemão) quando compilado e executado como C ++ e 你好世界!
(chinês) quando executado como Python.
Regras
Para evitar ambiguidade sobre a validade de uma resposta, abaixo está uma lista de versões permitidas da frase em vários idiomas. A lista consiste na frase nos idiomas para os quais o Google Translate possui uma tradução verificada pela comunidade (até o momento em que este artigo foi escrito). *
A precisão dessas traduções é discutível, mas elas são o que esse desafio usará. As seqüências impressas devem seguir exatamente o formato abaixo (com exceção dos espaços em branco à esquerda ou à direita).
Afrikaans: Hello Wêreld!
Albanian: Përshendetje Botë!
Amharic: ሰላም ልዑል!
Arabic: مرحبا بالعالم!
Armenian: Բարեւ աշխարհ!
Basque: Kaixo Mundua!
Belarussian: Прывітанне Сусвет!
Bengali: ওহে বিশ্ব!
Bulgarian: Здравей свят!
Catalan: Hola món!
Chichewa: Moni Dziko Lapansi!
Chinese: 你好世界!
Croatian: Pozdrav svijete!
Czech: Ahoj světe!
Danish: Hej Verden!
Dutch: Hallo Wereld!
English: Hello World!
Estonian: Tere maailm!
Finnish: Hei maailma!
French: Bonjour monde!
Frisian: Hallo wrâld!
Georgian: გამარჯობა მსოფლიო!
German: Hallo Welt!
Greek: Γειά σου Κόσμε!
Hausa: Sannu Duniya!
Hebrew: שלום עולם!
Hindi: नमस्ते दुनिया!
Hungarian: Helló Világ!
Icelandic: Halló heimur!
Igbo: Ndewo Ụwa!
Indonesian: Halo Dunia!
Italian: Ciao mondo!
Japanese: こんにちは世界!
Kazakh: Сәлем Әлем!
Khmer: សួស្តីពិភពលោក!
Kyrgyz: Салам дүйнө!
Lao: ສະບາຍດີຊາວໂລກ!
Latvian: Sveika pasaule!
Lithuanian: Labas pasauli!
Luxemburgish: Moien Welt!
Macedonian: Здраво свету!
Malay: Hai dunia!
Malayalam: ഹലോ വേൾഡ്!
Mongolian: Сайн уу дэлхий!
Myanmar: မင်္ဂလာပါကမ္ဘာလောက!
Nepali: नमस्कार संसार!
Norwegian: Hei Verden!
Pashto: سلام نړی!
Persian: سلام دنیا!
Polish: Witaj świecie!
Portuguese: Olá Mundo!
Punjabi: ਸਤਿ ਸ੍ਰੀ ਅਕਾਲ ਦੁਨਿਆ!
Romanian: Salut Lume!
Russian: Привет мир!
Scots Gaelic: Hàlo a Shaoghail!
Serbian: Здраво Свете!
Sesotho: Lefatše Lumela!
Sinhala: හෙලෝ වර්ල්ඩ්!
Slovenian: Pozdravljen svet!
Spanish: ¡Hola Mundo! // Leading '¡' optional
Sundanese: Halo Dunya!
Swahili: Salamu Dunia!
Swedish: Hej världen!
Tajik: Салом Ҷаҳон!
Thai: สวัสดีชาวโลก!
Turkish: Selam Dünya!
Ukrainian: Привіт Світ!
Uzbek: Salom Dunyo!
Vietnamese: Chào thế giới!
Welsh: Helo Byd!
Xhosa: Molo Lizwe!
Yiddish: העלא וועלט!
Yoruba: Mo ki O Ile Aiye!
Zulu: Sawubona Mhlaba!
Portanto, existem 74 idiomas que podem ser usados.
Critério vencedor
A solução que pode gerar a frase no maior número de idiomas vence. Em caso de empate, a solução mais curta (em bytes) vence.
* As traduções para malgaxe e maltês foram marcadas como verificadas pela comunidade, mas estavam claramente incorretas (uma era apenas "Hello World!" E a outra "Hello dinja!", Mas apenas "Hello!" Se traduz em "Bongu!"). Estes foram excluídos. Além disso, alguns idiomas (árabe, hebraico, pashto, persa e ídiche) são lidos da direita para a esquerda no Google Translate, mas, quando copiados aqui, são lidos da esquerda para a direita. Espero que esteja tudo bem.
fonte
!
, U + FF01) são diferentes dos outros (!
, U + 0021).Respostas:
23 bits, 713 bytes
A única linguagem que eu realmente sei é o Befunge, então, em vez de vários idiomas, acabei de usar várias implementações do Befunge. Eu acredito que isso ainda é válido sob as regras do PPCG, que consideram o idioma a ser definido por sua implementação .
O que é frustrante no Befunge é que, embora exista uma implementação de referência de código aberto e a própria linguagem seja simples, não há um único intérprete de terceiros (que eu saiba) que corresponda exatamente ao comportamento de referência. Toda implementação falha de uma maneira diferente.
No lado positivo, isso nos dá a oportunidade de desenvolver um único pedaço de código que produzirá um resultado diferente em quase todos os intérpretes. E é isso que estou tentando no programa acima.
Se alguém estiver interessado em verificar os resultados, tentei agrupar as várias implementações em categorias com base na facilidade de instalação e funcionamento (por exemplo, algumas pessoas podem não conseguir executar os binários do Windows ou podem não estar dispostas a construir a partir da fonte, mas todos devem poder testar os intérpretes on-line).
Intérpretes Online
Nenhuma instalação é necessária. Geralmente, basta colar o código e clicar em um ou dois botões. Mas observe que alguns deles são bastante lentos, por isso pode levar algum tempo para concluir a execução.
Befunge Playground de Alexios - Salamu Dunia!Clique no Clear...botão e cole o código no campo de entrada. Alterne Editpara ativar o intérprete e clique no Runbotão para começar a executar.
Befungius - Molo Lizwe!Observe que este site provavelmente não funcionará no navegador que não seja o Chrome.
Cole o código no campo de entrada, substituindo o código existente. Em seguida, clique no Runbotão para executar.
Intérprete Befunge 93 de David Klick - Sannu Duniya!Cole o código no campo de entrada Playfield e clique no Runbotão para começar a executar.
Intérprete Befunge-93 de Ian Osgood - Salut Lume!Cole o código no campo de entrada abaixo do Showbotão, certificando-se de substituir o
jsFunge IDE - Hej Verden!@
que já está lá. Clique no Showbotão para importar o código e clique no Runbotão para começar a executar.Primeiro feche a caixa de diálogo Ajuda , clique no botão Abrir / Importar da barra de ferramentas (segundo da esquerda), cole o código e clique em OK. Para executar, clique no botão Modo de Execução (quarto da esquerda) e, em seguida, Iniciar (quinto da esquerda).
Observe também que alguns dos intérpretes baseados em console estão realmente disponíveis no TIO; portanto, embora não sejam intérpretes tecnicamente online, eles podem ser testados online. Para aqueles que são suportados (atualmente BEF, FBBI, MTFI e PyFunge), incluí um Try It Online! ao lado da entrada deles.
IDEs Java
Você precisará ter o tempo de execução do Java instalado para eles, mas eles teoricamente devem funcionar em qualquer plataforma. Apenas testado no Windows.
Applet visual de Ashley Mills ' - Moien Welt!Inicialmente, era um applet online que, infelizmente, não está mais disponível, mas você ainda pode fazer o download do jar e executá-lo localmente como um aplicativo de desktop. Você precisará colar o código na janela do Editor de Programas e clicar no Convertbotão, seguido pelo Runbotão.
WASABI: Wasabi é um intérprete soberbamente asinino - Hallo Welt!Para colar o código, clique com o botão direito do mouse no canto superior esquerdo da janela do editor (ele deve estar no canto superior esquerdo) e selecione o item de menu Colar . Em seguida, ative a caixa de seleção Velocidade total (caso contrário, levará uma eternidade) e clique no Run!botão para começar a executar.
YABI93: Mais um intérprete Befunge93 - Halo Dunia!Pressione Ctrl+ A, Ctrl+ Vpara colar o código na janela do editor, substituindo a fonte padrão. Em seguida, clique no Startbotão para começar a executar.
IDEs do Windows
Você normalmente precisará do Windows para isso, embora em alguns casos possa haver binários disponíveis para outros sistemas operacionais. Não posso prometer que o código funcionará em outras plataformas.
BefunExec - Olá Mundo!Como você não pode colar o código no editor, primeiro precisará salvá-lo em disco em algum lugar. Em seguida, no IDE, use o menu Arquivo> Abrir para carregar o código do disco e selecione o menu Simulação> Executar / Pausar para executá-lo.
BeQunge - Labas pasauli!Pressione Ctrl+ Vpara colar o código e clique no botão Debug da barra de ferramentas (a engrenagem azul) para começar a execução. Quando o painel Debugger aparecer, você desejará definir a velocidade no máximo - o botão à direita do controle deslizante - caso contrário, levará uma eternidade para terminar.
Fungo - Tere maailm!Pressione Ctrl+ Vpara colar o código e pressione F5para executá-lo.
Visbef: Visual Befunge '93 para Windows - Olá, Wereld!Como você não pode colar o código no editor, primeiro precisará salvá-lo em disco em algum lugar. Em seguida, no IDE, pressione Ctrl+ Opara abrir o navegador de arquivos e carregar o código do disco e pressione F5para executá-lo.
Aplicativos de console do Windows
Novamente, eles normalmente exigem Windows, embora outras plataformas possam estar disponíveis, mas não garantidas que funcionem.
Em todos os casos, o código precisará ser salvo em um arquivo no disco e o nome do arquivo passado para o intérprete como um parâmetro da linha de comando ( source.bf nos exemplos de linhas de comando abaixo). Observe também que alguns deles são tecnicamente intérpretes do Befunge-98 e devem ser executados com uma opção de linha de comando específica para forçar um modo de compatibilidade do Befunge-93. Se você não fizer isso, não obterá os resultados corretos.
BEFI: Intérprete Befunge-93 de Rugxulo - Hei Verden!Linha de comando:
CCBI: Em conformidade com o intérprete Befunge-98 concorrente - Sveika pasaule!bef93w32 -q source.bf
Linha de Comand:
MTFI: Magus Technica Funge Intérprete - Hai dunia!ccbi --befunge93 source.bf
Linha de comando:
mtfi -3 source.bf
( Experimente online! )Aplicativos de console Python e PHP
Isso requer a linguagem de script apropriada instalada - Python ou PHP.
Befungee - Helo Byd!Linha de comando:
PyFunge - Halo Dunya!befungee.py source.bf
Linha de comando:
Bephunge - Bonjour Monde !pyfunge -v 93 source.bf
( Experimente online! )Linha de comando:
php bephunge.phps source.bf
Aplicativos de console somente de origem
Eles precisarão ser construídos a partir da fonte, e isso geralmente é mais fácil com um ambiente semelhante ao * nix. No Windows, eu uso o Windows Subsystem for Linux .
BEF: Distribuição de referência Befunge-93 - Ciao mondo!Linha de comando:
cfunge - Sawubona Mhlaba!bef -q source.bf
( Experimente online! )Linha de comando:
FBBI: Intepreter-98 Befunge-98 Bovine flamejante - Hei maailma!cfunge -s 93 source.bf
Linha de comando:
Fungos - Kaixo Mundua!fbbi -93 source.bf
( Experimente online! )Linha de comando:
Rc / Funge-98 - Salom Dunyo!fungi source.bf
Linha de comando:
rcfunge -93 source.bf
Como funciona
O desafio foi encontrar o menor número de testes que fornecesse a maior diferenciação entre intérpretes. No final, resumiu-se a quatro principais sequências de teste:
A primeira é uma memória fora dos limites lida do deslocamento -1,1. Em teoria, isso sempre deve retornar 32 (espaço ASCII), mas na verdade havia 10 variações na prática. Esse teste é complicado pelo fato de dois dos intérpretes travarem em uma leitura fora dos limites; portanto, foram necessários alguns testes de casos especiais (arredondamento de divisão e ponte de espaço) para forçar esses dois de volta aos limites.
A segunda sequência é um teste da funcionalidade Befunge-98 - especificamente as instruções
;
e'
. Quase todos os intérpretes são o Befunge-93 ou são executados no modo de compatibilidade do Befunge-93, portanto, eles devem simplesmente ignorar essas instruções. Na prática, havia 6 maneiras diferentes pelas quais essa sequência foi interpretada.O terceiro teste verifica o intervalo de células da memória. No intérprete de referência, as células de memória são assinadas com 8 bits, mas outras implementações variam de 8 bits a ilimitadas, algumas assinadas e outras não assinadas. No entanto, para os fins deste teste, tivemos apenas que distinguir entre 5 dessas variantes.
A quarta e última sequência é uma combinação de testes de sub-fluxo e de divisão negativa. Existem várias maneiras pelas quais os intérpretes estão errados e há pelo menos três maneiras diferentes pelas quais as instruções de divisão e módulo são implementadas, mas havia apenas três combinações com as quais nos importamos aqui.
Cada uma dessas seqüências retornou um único número e esses quatro números foram combinados (por meio de algumas tabelas aritméticas e de conversão básicas) para produzir um valor final no intervalo de 0 a 22. Esse valor poderia ser usado como um índice para pesquisar a mensagem real mostrar.
fonte
3y
).16 idiomas, 1363 bytes
Experimente online!
(use "alternar idiomas" para alterar o idioma)
Python 3 = Halo Dunia! (Indonésio)
Python 2 = Hej Verden! (Dinamarquês)
Python 1 = Hai dunia! (Malaio)
C (gcc) = Helo Byd! (Galês)
C ++ (gcc) = Halo Dunya! (Sudanês)
Objetivo C (toque) = Olá, Welt! (Alemão)
Brainfuck = Olá Mundo! (Inglês obviamente)
Befunge-93 = Salute Lume! (Romena)
Ruby = Moien Welt! (Luxemburguês)
Bash = Salom Dunyo! (Usbeque)
Befunge-98 (PyFunge) = Kund Mundua! (Basco)
Unefunge-98 (PyFunge) = Sannu Duniya! (Hausa)
Cardeal = Olá, Wereld! (Holandês)
Alphuck = Ciao mondo! (Italiano)
> <> = Moni Dziko Lapansi! (Chichewa)
Fissão = Pozdrav svijete! (Croata)
Quaisquer dicas de golfe são bem-vindas (especialmente no Brainfuck) !!
Graças a @ JonathanFrech por -1 byte! Além disso, obrigado a @ovs por -40 bytes!
Como (idéias gerais, eu realmente esqueci detalhes)?
Os idiomas podem ser divididos em quatro grupos:
As linguagens de macro são vistas
#
como o início de uma diretiva de pré-processador. Eles são usados por três razões: para abrigar o código de outros grupos, para distinguir entre os idiomas de macro e para definir realmente uma macro. Todos os três são usados//
como comentário. Depois disso, armazenamos o código para os outros grupos. Além disso, a barra invertida continua o comentário nesses idiomas.Os idiomas de comentário são vistos
#
como o início de um comentário. A peculiaridade aqui são as aspas triplas, que distinguem os Pythons de Ruby e Bash. E para distinguir Python 1 de 2 de 3, usamos um recurso distintivo nos três, juntamente com uma matriz de saídas. Ah sim, também tem isso__END__
. Isso é usado para finalizar o código para alguns dos idiomas de Comentário (não consigo lembrar exatamente quais).As linguagens dimensionais são diferenciadas de uma maneira difícil de explicar. É preciso conhecer as especificidades de cada idioma para descobrir isso. Por exemplo,
#
é apenas um pulo nos fungeóides, enquanto faz várias coisas diferentes nos outros idiomas. O código está espalhado por toda parte para esses idiomas.E, finalmente, chegamos às línguas vulgares. Esses dois ignoram tudo o que não está no conjunto de caracteres válidos. Um ato de equilíbrio deve ser executado com esses idiomas e com os outros, pois o código já contém caracteres nos conjuntos de caracteres.
fonte
"abcabcabc"[n::3] -> "aaa" for n = 0, "bbb" for n = 1
. Sinto que provavelmente existe uma maneira de cortá-lo e salvar bytes, incluindo os caracteres duplicados na fatia de alguma forma (como H e!).["Hai dunia!","Hej Verden!","Halo Dunia!"]
escudo as vírgulas!+[++[<+++>->+++<]>+++++++]<<<--.<.<--..<<---.<+++.<+.>>.>+.>.>-.<<<<+.
parte BF? ( fonte )15 idiomas, 532 bytes
Experimente online!
Kaixo Mundua!
em Befunge-93Hej Verden!
em fissãoTere maailm!
em Unefunge-98Hei maailma!!
em Befunge-98Hai dunia!
em> <>Hola món!
em RubyHola Mundo!
no GolfScriptHallo Welt!
na festançaNdewo Ụwa!
em kshCiao mondo!
em colisãoMoien Welt!
em zshHei Verden!
em cinzasOlá Mundo!
no cardealHello World!
em brainfuck, cortesia de primo .Helo Byd!
em espaço em brancoExplicação
A linha 1 distingue entre cinco esolangs 2D:
><>
lê#
como um espelho, envolve a esquerda, imprime"Hai dunia!"
e trava (@
). Todos os Fungos o leem como um trampolim e vão para a direita.;
, imprimeKaixo Mundua!
e sai (@
).;
para o segundo e depois do terceiro;
para o quarto.w
é um NOP para Befunge-98, imprimindoHei maailma!
.w
reflete o ponteiro de instruções em Unefunge-98, imprimindoTere maailm!
.R"Hej Verden!";
É executado. (Outro ponteiro de instrução começa a partir doD
in__END__
, mas ele não faz nada e morre no;
intrue;
.)Ruby vê
`true #{puts'Hola món!'}`
, então__END__
.GolfScript vê
`
, entãotrue
(NOP), então um comentário; então__END__
(NOP); então"Hola Mundo!" puts
(isto é executado); thencase
(NOP), then`
(trava na pilha vazia).Os shells veem um comentário, depois uma invocação para
true
(NOP), depois invocações para comandos desconhecidos__END__
e"Hola Mundo!"
(que erro ocorre no STDERR, mas a execução continua), depois acase
instrução que distingue com base na primeira letra do nome do processo atual.O Cardinal é outro esolang 2D que começa no
%
, enviando 4 IPs para cima, baixo, esquerda e direita. Todos são mortos pelosx
comandos ao redor , mas um imprime"Olá Mundo!"
antes de morrer.O código brainfuck é primo, prefixado com
++
para combater os traçosps -p$$ -oargs=
.O espaço em branco no meu código é executado como o programa Whitespace
que imprime
Helo Byd!
Edição : Eu esqueci que adicionar
UDLR
caracteres interrompe o programa Fission, então eu mudei as cordas para evitar isso.fonte
#define
não é algo em D ... que atrapalha muito a poliglota). Além disso, eu realmente preciso aprender espaço em branco.4 idiomas, 75 bytes
Python -
Hai dunia!
Perl -
Helo Byd!
Ruby -
Hola món!
Palheiro -
Hej Verden!
fonte
7 idiomas, 221 bytes
Como este programa contém alguns caracteres desagradáveis, aqui está um xxd:
Përshendetje Botë!
- Experimente online!Hallo Wereld!
- Experimente online!ሰላም ልዑል!
- Experimente online!Hello Wêreld!
- Experimente online!Kaixo Mundua!
- Experimente online!مرحبا بالعالم!
- Experimente online!Բարեւ աշխարհ!
- Experimente online!fonte
<?='مرحبا بالعالم!';die?>
? É PHP válido (essencialmente o mesmo<?php echo ... ?>
),5 idiomas, 168 bytes
Eu acho que as linguagens bidimensionais são interessantes.
> <> impressões
Tere maailm!
Befunge-98 impressões de
Hej Verden!
cera de abelha impressões de
Sawubona Mhlaba!
cardeais impressões de
Helo Byd!
fissão
Hello World!
Experimente online! (Cardeal)
fonte
//
existem comentários em vários idiomas.*/\_
e podem ser redirecionadas em direções fixas ou por espelhos ou rotação. Veja aqui para mais.;
o segundo backtick não é necessário. A abelha sai correndo do favo de mel para a direita.2 idiomas, 16 caracteres, 24 bytes
Bem, pelo menos é mais curto que as duas cordas.
05AB1E -
שלום עולם!
Ajuda, WarDoq! -
Hello World!
Ajuda, WarDoq! pode adicionar dois números e testar primos, por isso é considerada uma linguagem de programação válida para este meta post .
fonte
3 idiomas,
6762 bytesPara se qualificar para essa recompensa (100 rep).
Adicionar ++: Experimente online!
Foo: Experimente online!
Somme: Experimente online!
Explicação
Adicionar ++
Adicionar ++ vê:
"
x
String de saída ""Defina y para uma sequência diferente"
"idk algo estranho, eu vou errar"
Foo
Foo vê:
"Oo, citações, eu produzo essas."
"Uh ... algo sobre um modo? Idk, eu vou errar."
Somme
Somme vê, bem, isso:
Cada coluna é convertida em pontos de código e, em seguida, 32 são subtraídos deles, e cada um é obtido no módulo 95. Isso corresponde a esses caracteres, que exibem "Hei Verden!"
fonte
4 idiomas, 138 bytes
Experimente online!
Py1, Py2, Py3, Proton; graças ao Sr. Xcoder; traduzido da resposta de Zacharý
fonte
4 idiomas, 115 bytes
Perl 5 dá
Hallo Wereld!
- TIORuby dá
Hello World!
- TIOPython 2 dá
Hej Verden!
- TIOPython 3 dá
Hei Verden!
- TIOfonte
print (((“b”+”0"==0)and eval('"Hallo Wereld!"'))or(0and"Hello World!”or((1/2and"Hei"or"Hej")+" Verden!")));
Quatro idiomas, uns impressionantes 650 bytes
Java dá "Salut Lume!" Tente!
SILOS dá "Hola Mundo" Experimente!
Brainfuck dá "Ciao mondo!" Tente!
(O código alphuck é modificado na página Esolangs em Alphuck )
Alphuck dá "Olá Mundo!" Tente!
A linha que começa com \ u000A é o código Java. O código da linha um é o código Alphuck, que ignorará o restante do código (desde que "p" e "s" estejam equilibrados. A linha relevante para SIL / SILOS é "print Hola Mundo" e o código brainfuck está no final e ignorará o restante do código.
fonte
+>++>+>+++[+++++[>+++++++++++>++++<<-]+++<]>>--.>+.>.>-.>.<--.++.-.<+++.>+.>+.
Usando a sequência de bytes [69, 104, 97, 112, 32]5 idiomas, 213 bytes
Decidi tentar escrever uma pequena resposta.
Línguas:
C e C ++ vêem o código como:
auto i=.5;
é (com efeito) igual aint i=0;
C, mas igual adouble i=0.5;
C ++.Experimente online! (como C)
Experimente online! (como C ++)
O Python 3 vê o código como:
Experimente online!
A linguagem de script OFP vê:
A fissão vê:
Experimente online!
fonte
3 idiomas,
184181 bytesFunciona apenas uma vez - você precisa limpar a lista para executá-la novamente.
Raspadinha 1.4:
Helo Byd!
Scratch 2.0:
Hello world!
Scratch 3.0 beta no momento desta resposta:
Hai dunia!
Explicação
No Scratch 1.4, adicionar um booleano a uma lista adiciona
1
or0
, mas no 2.0 e acima adicionatrue
orfalse
, mas ao verificar se o item é igual a1
<[] = []>, ele retornará true se o item for1
outrue
, adicionamos outra letra a ela e verificamos isso.No Scratch 3.0, as listas têm um tamanho máximo de 200.000 itens; portanto, apenas adicionamos vários itens e veremos se a lista é longa.
fonte
3 idiomas, 61 bytes
Adicionar saídas ++
Hai dunia!
Saídas de geléia
Hello World!
Saídas Foo
Helo Byd!
Só porque defini a recompensa não significa que não posso participar: D (ab) usa o brilhante truque de configuração de string que Conor encontrou para adicionar ++
Como funciona
Adicionar ++
Geléia
Os comentários no Jelly podem ser formados com a sintaxe
ḷ“comment”
, que é como os códigos Add ++ e Foo são ignorados. O código que é realmente executado pelo Jelly éFoo
Foo ignora todos os caracteres aqui, exceto o
"Helo Byd!"
que, como está entre aspas, é emitido.fonte