Interpretar DOGO
DOGO é uma linguagem de programação menos conhecida. Embora o DOGO original (um idioma de piada de uma postagem da Usenet) nunca tenha sido implementado, um idioma semelhante a ele foi criado. Os comandos para o idioma são:
+===========+================================================================+
| Command | Description |
+===========+================================================================+
| SIT | If the value of the current memory cell is 0, jump to STAY. |
+-----------+----------------------------------------------------------------+
| STAY | If the value of the current memory cell is not 0, jump to SIT. |
+-----------+----------------------------------------------------------------+
| ROLL-OVER | Select the next operation from the operation list. |
+-----------+----------------------------------------------------------------+
| HEEL | Execute the currently selected operation. |
+-----------+----------------------------------------------------------------+
As operações são:
+========+=======================================================+====+
| Number | Description | BF |
+========+=======================================================+====+
| 0 | Increment current memory cell. | + |
+--------+-------------------------------------------------------+----+
| 1 | Decrement current memory cell. | - |
+--------+-------------------------------------------------------+----+
| 2 | Move to next memory cell. | > |
+--------+-------------------------------------------------------+----+
| 3 | Move to previous memory cell. | < |
+--------+-------------------------------------------------------+----+
| 4 | Input a byte and store it in the current memory cell. | , |
+--------+-------------------------------------------------------+----+
| 5 | Output the current memory cell as ASCII. | . |
+--------+-------------------------------------------------------+----+
Exemplos
Olá Mundo:
roll-over roll-over heel roll-over roll-over roll-over roll-over heel heel heel
heel heel heel heel heel heel sit roll-over roll-over roll-over heel roll-over
roll-over roll-over heel heel heel heel heel heel heel heel roll-over roll-over
heel roll-over roll-over roll-over roll-over roll-over heel roll-over roll-over
roll-over roll-over roll-over stay roll-over roll-over roll-over heel roll-over
roll-over heel roll-over roll-over roll-over heel roll-over roll-over roll-over
roll-over heel heel heel heel heel heel heel sit roll-over roll-over roll-over
heel roll-over roll-over roll-over heel heel heel heel roll-over roll-over heel
roll-over roll-over roll-over roll-over roll-over heel roll-over roll-over
roll-over roll-over roll-over stay roll-over roll-over roll-over heel roll-over
roll-over roll-over heel roll-over roll-over roll-over roll-over roll-over heel
roll-over heel heel heel heel heel heel heel roll-over roll-over roll-over
roll-over roll-over heel heel roll-over heel heel heel roll-over roll-over
roll-over roll-over roll-over heel roll-over roll-over roll-over heel heel heel
roll-over roll-over roll-over roll-over heel heel heel heel heel heel heel heel
sit roll-over roll-over roll-over heel roll-over roll-over roll-over heel heel
heel heel roll-over roll-over heel roll-over roll-over roll-over roll-over
roll-over heel roll-over roll-over roll-over roll-over roll-over stay roll-over
roll-over roll-over heel roll-over roll-over heel roll-over roll-over roll-over
heel heel heel roll-over roll-over roll-over roll-over heel heel heel heel heel
heel heel heel heel heel sit roll-over roll-over roll-over heel roll-over
roll-over roll-over heel heel heel heel heel heel heel heel heel roll-over
roll-over heel roll-over roll-over roll-over roll-over roll-over heel roll-over
roll-over roll-over roll-over roll-over stay roll-over roll-over roll-over heel
roll-over roll-over roll-over roll-over heel heel heel roll-over roll-over
roll-over roll-over heel roll-over roll-over roll-over roll-over heel heel heel
heel roll-over roll-over heel roll-over heel heel heel roll-over roll-over
roll-over roll-over roll-over heel roll-over roll-over heel heel heel heel heel
heel roll-over roll-over roll-over roll-over heel roll-over roll-over heel heel
heel heel heel heel heel heel roll-over roll-over roll-over roll-over heel
roll-over roll-over roll-over heel heel roll-over roll-over roll-over roll-over
heel roll-over roll-over roll-over roll-over roll-over heel
Regras
- Cada envio deve ser um programa ou uma função completa. Se for uma função, deve ser executável, bastando adicionar a chamada de função na parte inferior do programa. Qualquer outra coisa (por exemplo, cabeçalhos em C) deve ser incluída.
- Se possível, forneça um link para um site online onde seu código pode ser testado.
- Seu programa não pode gravar nada em
STDERR
(ou algo semelhante). - Você pode receber informações de
STDIN
(ou a alternativa mais próxima em seu idioma) ou como argumento. - As brechas padrão são proibidas.
Pontuação
Os programas são pontuados de acordo com os bytes . O conjunto de caracteres padrão é UTF-8; se você estiver usando outro, especifique.
Além disso, trata-se de código-golfe , e a menor contagem de bytes será considerada a vencedora!
Submissões
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
# Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet do placar de líderes:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Entre os melhores
Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma.
Atualizar:
Desculpe por não esclarecer os comandos sit
e stay
muito bem. Eles são, como @ user6245072 disse, como [
e ]
no BF.
Atualização 2:
Para esclarecer as perguntas de @ KennyLau:
- A operação padrão é
0
. - A memória consiste em células de 8 bits.
- As células envolvem-se em excesso / excesso.
- É necessária entrada para a operação 4.
fonte
sit lie-down roll-over play-dead heel
1
diz "incrementar a próxima célula`, mas o código BF correspondente é" decrementar a célula atual ". Qual deles é o comportamento correto?Respostas:
Ruby, 287 bytes
É executado em uma fita infinita nas duas direções. A entrada DOGO é um arquivo na linha de comandos. Se não houver argumento de linha de comando, um programa DOGO ainda funcionará se for passado como STDIN, a menos que use operação
3
(obtenha um byte de STDIN), caso em que não faço ideia. De qualquer forma, a melhor entrada de arquivo.Assume que nenhum outro texto além dos quatro comandos e espaços em branco existem no arquivo de programa.
Olá, demonstração mundial
fonte
Python 3,
388398373371 bytesSupõe 256 células de memória. Apenas uma implementação direta, facilmente derrotável, provavelmente pode ser mais praticada. Experimente-o em repl.it .
Obrigado a @EasterlyIrk por me fazer perceber que o Python 3 é muito mais curto que o Python 2.
EDIT: Percebi que só respondi por excesso / insuficiência durante a impressão, e não pelo valor real.
Obrigado a @ KevinLau-notKenney por salvar 25 (!) Bytes com truques de operador de multiplicação e inversão de lista
EDIT: -3 bytes, colocando 256 em uma variável, -4 mexendo com os operadores, +8 certificando-se de que está em minúscula
fonte
sys.stdout.write
? Por que nãoprint
?print(...,end='')