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 .
8023/# !-1401p680p88+79*6+1p238*7+0pg90p$#v0';1';+>9%80p$$$$"ph~s"+3vv
vv_2#!>#-/\#21#:+#:>#\<0/-2*3`0:-/2g01g00p>#< 2#0 ^#1/4*:*9"9"p00***<<
>>$:2%3*-4/3g68*-70p1-0`02-3/-03-2%1+2/-70g+80g65+70g`7++3g68*-70g9`*v
0168:0>0133?45130120340200v00:<+8*+76%4p00+5/4:+-*86g3++98/2%+98g09+<<
@>gg#^:#+,#$"!"-#1_@
!Helo Byd!!!!!Hai dunia!!!!Ciao mondo!!!Hallo Wereld!!!!
!Hallo Welt!!!Halo Dunia!!!Halo Dunya!!!Bonjour monde!!!
!Hei Verden!!!Hej Verden!!!Moien Welt!!!Labas pasauli!!!
!Molo Lizwe!!!Salut Lume!!!Hei maailma!!Sveika pasaule!!
!Hello World!!Salom Dunyo!!Tere maailm!!Sawubona Mhlaba!
!Kaixo Mundua!Salamu Dunia!Sannu Duniya!!!!!!!!!!!!!!!!!
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.
Observe que este site provavelmente não funcionará no navegador que não seja o Chrome.
Befungius -
Molo Lizwe!
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 @
que já está lá. Clique no Showbotão para importar o código e clique no Runbotão para começar a executar.
jsFunge IDE -
Hej Verden!
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: bef93w32 -q source.bf
CCBI: Em conformidade com o intérprete Befunge-98 concorrente -
Sveika pasaule!
Linha de Comand: ccbi --befunge93 source.bf
MTFI: Magus Technica Funge Intérprete -
Hai dunia!
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: befungee.py source.bf
PyFunge -
Halo Dunya!
Linha de comando: pyfunge -v 93 source.bf
( Experimente online! )
Bephunge -
Bonjour Monde !
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: bef -q source.bf
( Experimente online! )
cfunge -
Sawubona Mhlaba!
Linha de comando: cfunge -s 93 source.bf
FBBI: Intepreter-98 Befunge-98 Bovine flamejante -
Hei maailma!
Linha de comando: fbbi -93 source.bf
( Experimente online! )
Fungos -
Kaixo Mundua!
Linha de comando: fungi source.bf
Rc / Funge-98 -
Salom Dunyo!
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.