DOGOを解釈する!


9

DOGOを解釈する

DOGOはあまり知られていないプログラミング言語です。オリジナルのDOGO(Usenetの投稿からのジョーク言語)は実装されていませんが、それに似た言語が作成されています。言語のコマンドは次のとおりです。

+===========+================================================================+
|  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.                      |
+-----------+----------------------------------------------------------------+

操作は次のとおりです。

+========+=======================================================+====+
| 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.              | .  |
+--------+-------------------------------------------------------+----+

こんにちは世界:

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

ビール99本

ルール

  • 各提出物は完全なプログラムまたは機能のいずれかである必要があります。関数の場合は、プログラムの最後に関数呼び出しを追加するだけで実行できる必要があります。それ以外のもの(Cのヘッダーなど)を含める必要があります。
  • 可能であれば、コードをテストできるオンラインサイトへのリンクを提供してください。
  • プログラムは何もSTDERR(または同様のものに)書き込むことができません。
  • あなたはSTDIN(またはあなたの言語で最も近い選択肢)から、または引数として入力を受け取ることができます。
  • 標準の抜け穴は禁止されています。

得点

プログラムはバイトに従ってスコアリングされます。デフォルトの文字セットはUTF-8です。別の文字セットを使用している場合は、指定してください。

それはさておき、これはであり、最小のバイト数が勝者と見なされます!

提出物

回答が確実に表示されるようにするには、次のMarkdownテンプレートを使用して、見出しから回答を始めてください。

# Language Name, N bytes

N提出物のサイズはどこですか。スコアを向上させる場合、古いスコアを打ち消すことで見出しに残すことができます。例えば:

# Ruby, <s>104</s> <s>101</s> 96 bytes

ヘッダーに複数の数値を含めたい場合(たとえば、スコアが2つのファイルの合計である場合、またはインタープリターフラグのペナルティを個別にリストしたい場合)、実際のスコアがヘッダーの最後の数値であることを確認してください。

# Perl, 43 + 2 (-p flag) = 45 bytes

言語名をリンクにして、リーダーボードスニペットに表示することもできます。

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

リーダーボード

これは、通常のリーダーボードと言語ごとの勝者の概要の両方を生成するスタックスニペットです。

更新:

sitstayコマンドがよくわかりません。@ user6245072が言ったように、それらはBF [と同様]です。

アップデート2:

@KennyLauの質問を明確にするには:

  • デフォルトの操作は0です。
  • メモリは8ビットのセルで構成されます。
  • セルはオーバーフロー/アンダーフローで折り返されます。
  • 操作には入力が必要です4。

無関係な入力を処理する必要がありますか?次の入力などsit lie-down roll-over play-dead heel
Value Ink

1
また、操作で1は「次のセルをインクリメント」と表示されていますが、対応するBFコードは「現在のセルをデクリメント」です。どちらが正しい動作ですか?
Value Ink

@ KevinLau-notKennyありがとう、私のせい。
ジョージギブソン2016

回答:


1

Ruby、287バイト

両方向の無限テープ上で実行されます。DOGO入力は、コマンドライン上のファイルです。コマンドライン引数がない場合、DOGOプログラムはSTDINとして渡されても動作します。ただし、操作を使用する3(STDINからバイトを取得する)場合を除きます。とにかく、ファイル入力が最適です。

4つのコマンドと空白以外のテキストがプログラムファイルに存在しないと仮定します。

ハローワールドデモンストレーション

i=k=o=0;m={}
c=$<.read.upcase.split.map{|e|%w{SIT STAY ROLL-OVER HEEL}.index e}.join
(m[k]||=0
e=c[i].to_i
e>2?o>4?$><<m[k].chr:
o>3?m[k]=STDIN.getc.ord:
o>1?k+=o>2?-1:1:
m[k]=o<1?-~m[k]%256:~-m[k]%256:
e>1?o=-~o%6:
e>0?m[k]>0?i=c.rindex(?0,i):0:
m[k]<1?i=c.index(?1,i):0
i+=1)while c[i]

2

Python 3、388 398 373 371バイト

256のメモリセルを想定しています。単純明快な実装で、簡単に打ち勝つことができ、おそらくもっとゴルフをすることができます。repl.itで試してください。

Python 3はPython 2よりもはるかに短いことを認識させてくれた@EasterlyIrkに感謝します。

編集:私は実際の値ではなく、印刷中のオーバー/アンダーフローのみを考慮したことに気付きました。

リストの乗算と反転演算子のトリックで25(!)バイトを節約してくれた@ KevinLau-notKenneyに感謝

編集:256を変数に入れて-3バイト、-4で演算子をいじる、+ 8で小文字にする

def p(s):
 b=256
 l,m=[w[-1]for w in s.lower().split()],[0]*b
 i=p=x=0
 while x<len(l):
  c=l[x]
  if'm'>c:
   if 1>i:m[p]=-~m[p]%b
   if 1==i:m[p]=~-m[p]%b
   if 2==i:p=-~p%b
   if 3==i:p=~-p%b
   if 4==i:m[p]=ord(input()[0])
   if 4<i:print(chr(m[p]),end="")
  if'r'==c:i=-~i%6
  if't'==c and m[p]<1:x+=l[:x].index('y')
  if'x'<c and m[p]>0:x-=l[x::-1].index('t')
  x+=1

なぜ使うのsys.stdout.write?なんでprint
Rɪᴋᴇʀ

@EᴀsᴛᴇʀʟʏIʀᴋprintは改行を追加します。終了引数を持つ実際の印刷関数はPython 3にあります
Blue

なぜpython3が問題にならないのですか?テスト済み、print(...,end='')
正常に

@EᴀsᴛᴇʀʟʏIʀᴋ私はそれをインストールするのが面倒だった。私も答えを変えるかもしれません、
ブルー

次に、ideoneまたはオンラインのPythonインタープリターを試してみてください。またはそれをインストールします。:P
Rɪᴋᴇʀ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.