Tafsirkan DOGO!

9

Tafsirkan DOGO

DOGO adalah bahasa pemrograman yang kurang dikenal. Sementara DOGO asli (bahasa lelucon dari pos Usenet) belum pernah diterapkan, bahasa yang menyerupai itu telah dibuat. Perintah untuk bahasa adalah:

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

Operasi adalah:

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

Contohnya

Halo Dunia:

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 botol bir

Aturan

  • Setiap pengiriman harus berupa program atau fungsi lengkap. Jika itu adalah fungsi, itu harus bisa dijalankan dengan hanya perlu menambahkan panggilan fungsi ke bagian bawah program. Hal lain (mis. Tajuk dalam C), harus dimasukkan.
  • Jika memungkinkan, berikan tautan ke situs online tempat kode Anda dapat diuji.
  • Program Anda tidak dapat menulis apa pun untuk STDERR(atau yang serupa).
  • Anda dapat mengambil input dari STDIN(atau alternatif terdekat dalam bahasa Anda), atau sebagai argumen.
  • Celah standar dilarang.

Mencetak gol

Program diberi skor berdasarkan byte . Set karakter default adalah UTF-8, jika Anda menggunakan yang berbeda, silakan tentukan.

Selain itu, ini adalah , dan jumlah byte terendah akan dianggap sebagai pemenang!

Pengajuan

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

# Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

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

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

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

Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:

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

Papan peringkat

Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.

Memperbarui:

Maaf karena tidak mengklarifikasi sitdan staymemerintahkan dengan sangat baik. Yaitu, seperti yang dikatakan @ user6245072, sukai [dan ]di BF.

Pembaruan 2:

Untuk mengklarifikasi pertanyaan @ KennyLau:

  • Operasi standarnya adalah 0.
  • Memori terdiri dari sel 8-bit.
  • Sel membungkus overflow / underflow.
  • Input diperlukan untuk operasi 4.
George Gibson
sumber
Apakah kita perlu menangani input dari luar? Seperti input darisit lie-down roll-over play-dead heel
Nilai Tinta
1
Juga, operasi 1mengatakan "increment next cell`, tetapi kode BF yang sesuai adalah" decrement current cell ". Yang mana perilaku yang benar?
Value Ink
@ KevinLau-notKenny Terima kasih, salahku.
George Gibson

Jawaban:

1

Ruby, 287 byte

Berjalan pada pita tanpa batas di kedua arah. Input DOGO adalah file di baris perintah. Jika tidak ada argumen baris perintah, program DOGO akan tetap berfungsi jika dilewatkan sebagai STDIN, kecuali jika menggunakan operasi 3(dapatkan byte dari STDIN) dalam hal ini saya tidak tahu. Bagaimanapun, input file adalah yang terbaik.

Diasumsikan tidak ada teks selain dari empat perintah dan spasi putih yang ada di file program.

Halo Demonstrasi Dunia

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]
Nilai Tinta
sumber
2

Python 3, 388 398 373 371 byte

Diasumsikan 256 sel memori. Hanya dengan implementasi yang mudah, mudah dikalahkan, mungkin bisa bermain golf lebih banyak. Cobalah repl.it .

Terima kasih kepada @EasterlyIrk karena membuat saya menyadari bahwa Python 3 jauh lebih pendek daripada Python 2.

EDIT: Sadar Saya hanya memperhitungkan over / underflow saat mencetak, bukan pada nilai sebenarnya.

Terima kasih kepada @ KevinLau-notKenney karena telah menghemat 25 (!) Byte dengan daftar multiplikasi dan trik operator inversi

EDIT: -3 byte dengan menempatkan 256 ke dalam variabel, -4 mengotak-atik operator, +8 memastikan huruf kecil

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
Biru
sumber
Mengapa menggunakan sys.stdout.write? Mengapa tidak print?
R
@ EᴀsᴛᴇʀʟʏIʀᴋ print menambahkan baris baru. fungsi cetak yang sebenarnya dengan arg akhir adalah dalam Python 3
Biru
Apa yang membuat python3 keluar dari pertanyaan? Baru diuji, berfungsi dengan baikprint(...,end='')
Rɪᴋᴇʀ
@ EᴀsᴛᴇʀʟʏIʀᴋ Saya terlalu malas untuk menginstalnya. Saya mungkin juga mengubah jawaban, tho
Biru
Maka mungkin coba ideone atau juru bahasa python online untuk itu. Atau pasang. : P
Rɪᴋᴇʀ