ตีความ 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

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

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

นอกจากนี้คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างกระดานแต้มนำ:

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

ลีดเดอร์บอร์ด

นี่คือ Stack Snippet เพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา

ปรับปรุง:

ขออภัยที่ไม่ชัดเจนsitและstayคำสั่งดีมาก พวกเขาเป็นอย่างเช่น @ user6245072 กล่าวว่าชอบ[และ]ใน BF

อัปเดต 2:

เพื่อชี้แจงคำถามของ @ KennyLau:

  • 0การดำเนินการเริ่มต้นคือ
  • หน่วยความจำประกอบด้วยเซลล์ 8 บิต
  • เซลล์ห่อบนโอเวอร์โฟลว์ / อันเดอร์โฟล์
  • จำเป็นต้องป้อนข้อมูลสำหรับการทำงาน 4

เราจำเป็นต้องจัดการอินพุตภายนอกหรือไม่? เช่นอินพุทของsit lie-down roll-over play-dead heel
หมึกมูลค่า

1
นอกจากนี้การดำเนินการ1บอกว่า "เพิ่มเซลล์ถัดไป` แต่รหัส BF ที่สอดคล้องกันคือ "เซลล์ปัจจุบันลดลง" ซึ่งหนึ่งในพฤติกรรมที่ถูกต้องคืออะไร
หมึกมูลค่า

@ KevinLau-notKenny ขอบคุณความผิดของฉัน
George Gibson

คำตอบ:


1

ทับทิม 287 ไบต์

รันบนเทปที่ไม่สิ้นสุดทั้งสองทิศทาง อินพุต DOGO เป็นไฟล์บนบรรทัดคำสั่ง หากไม่มีอาร์กิวเมนต์บรรทัดคำสั่งโปรแกรม DOGO จะยังคงทำงานหากผ่านเป็น STDIN เว้นแต่ว่าจะใช้การดำเนินการ3(รับ byte จาก STDIN) ซึ่งในกรณีนี้ฉันไม่มีความคิด ไม่ว่าในกรณีใดอินพุตไฟล์ที่ดีที่สุด

ถือว่าไม่มีข้อความอื่นนอกเหนือจากสี่คำสั่งและช่องว่างที่มีอยู่ในไฟล์โปรแกรม

สวัสดีการสาธิตโลก

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

ขอบคุณ @EasterlyIrk ที่ทำให้ฉันรู้ว่า Python 3 นั้นสั้นกว่ามากที่ Python 2

แก้ไข: รับรู้ฉันคิดเฉพาะในส่วนที่เกิน / ต่ำในขณะที่พิมพ์ไม่ใช่มูลค่าจริง

ขอบคุณ @ KevinLau-notKenney สำหรับการบันทึก 25 (!) ไบต์ด้วยเทคนิคการคูณรายการและเทคนิคการดำเนินการผกผัน

แก้ไข: -3 ไบต์โดยใส่ 256 ลงในตัวแปร, -4 messing กับโอเปอเรเตอร์, +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ʀᴋพิมพ์เพิ่มบรรทัดใหม่ ฟังก์ชั่นการพิมพ์จริงพร้อม arg arg อยู่ใน Python 3
Blue

อะไรทำให้ python3 เป็นคำถาม เพิ่งผ่านการทดสอบใช้งานได้ดีกับprint(...,end='')
Rɪᴋᴇʀ

@ ฉันเป็นคนขี้เกียจเกินไปที่จะติดตั้ง ฉันอาจเปลี่ยนคำตอบได้เช่นกัน
Blue

จากนั้นอาจลองใช้ ideone หรือล่ามภาษาไพ ธ อนออนไลน์ หรือติดตั้ง : P
Rɪᴋᴇʀ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.