Giải thích DOGO!


9

Phiên dịch DOGO

DOGO là một ngôn ngữ lập trình ít được biết đến. Trong khi DOGO ban đầu (một ngôn ngữ đùa từ bài đăng Usenet) chưa bao giờ được thực hiện, một ngôn ngữ giống như nó đã được tạo ra. Các lệnh cho ngôn ngữ là:

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

Các hoạt động là:

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

Ví dụ

Chào thế giới:

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 chai bia

Quy tắc

  • Mỗi bài nộp phải là một chương trình hoặc chức năng đầy đủ. Nếu nó là một hàm, nó phải được chạy bằng cách chỉ cần thêm lệnh gọi hàm vào cuối chương trình. Bất cứ điều gì khác (ví dụ như các tiêu đề trong C), phải được bao gồm.
  • Nếu có thể, vui lòng cung cấp một liên kết đến một trang web trực tuyến nơi mã của bạn có thể được kiểm tra.
  • Chương trình của bạn không thể viết bất cứ điều gì cho STDERR(hoặc một cái gì đó tương tự).
  • Bạn có thể lấy đầu vào từ STDIN(hoặc thay thế gần nhất trong ngôn ngữ của bạn) hoặc làm đối số.
  • Sơ hở tiêu chuẩn bị cấm.

Chấm điểm

Các chương trình được tính theo byte . Bộ ký tự mặc định là UTF-8, nếu bạn đang sử dụng một ký tự khác, vui lòng chỉ định.

Ngoài ra, đây là và số byte thấp nhất sẽ được coi là người chiến thắng!

Đệ trình

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

# Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh chúng qua. Ví dụ:

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

Nếu ở đó bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ phiên dịch), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

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

Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích bảng xếp hạng:

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

Bảng xếp hạng

Dưới đây là một Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.

Cập nhật:

Xin lỗi vì đã không làm rõ các lệnh sitstayrất tốt. Họ, như @ user6245072 đã nói, thích []trong BF.

Cập nhật 2:

Để làm rõ các câu hỏi @ KennyLau:

  • Các hoạt động mặc định là 0.
  • Bộ nhớ bao gồm các ô 8 bit.
  • Các tế bào bọc trên tràn / tràn.
  • Đầu vào là cần thiết cho hoạt động 4.

Chúng ta có cần xử lý đầu vào không liên quan? Chẳng hạn như đầu vào củasit lie-down roll-over play-dead heel
Mực giá trị

1
Ngoài ra, hoạt động 1cho biết "tăng ô tiếp theo`, nhưng mã BF tương ứng là" giảm ô hiện tại ". ​​Cái nào là hành vi đúng?
Giá trị mực

@ KevinLau-notKenny Cảm ơn, lỗi của tôi.
George Gibson

Câu trả lời:


1

Ruby, 287 byte

Chạy trên một băng vô hạn theo cả hai hướng. Đầu vào DOGO là một tệp trên dòng lệnh. Nếu không có đối số dòng lệnh, chương trình DOGO sẽ vẫn hoạt động nếu được truyền vào dưới dạng STDIN, trừ khi nó sử dụng thao tác 3(lấy một byte từ STDIN) trong trường hợp tôi không biết. Ở bất kỳ giá nào, đầu vào tập tin là tốt nhất.

Giả sử không có văn bản nào khác ngoài bốn lệnh và khoảng trắng tồn tại trong tệp chương trình.

Xin chào thế giới

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 byte

Giả sử 256 ô nhớ. Chỉ cần thực hiện đơn giản, dễ dàng đánh bại, có thể có thể được chơi golf nhiều hơn. Thử nó trên repl.it .

Cảm ơn @EasterlyIrk vì đã cho tôi nhận ra rằng Python 3 ngắn hơn nhiều so với Python 2.

EDIT: Nhận ra tôi chỉ chiếm trên / dưới khi in, không có giá trị thực tế.

Cảm ơn @ KevinLau-notKenney vì đã lưu 25 byte (!) Với các thủ thuật toán tử nhân và đảo ngược danh sách

EDIT: -3 byte bằng cách đặt 256 vào một biến, -4 làm rối với các toán tử, +8 đảm bảo rằng đó là chữ thường

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

Tại sao nên sử dụng sys.stdout.write? Tại sao không print?
Rɪᴋᴇʀ

@ EᴀsᴛᴇʀʟʏIʀᴋ in thêm dòng mới. chức năng in thực tế với kết thúc arg là trong Python 3
Blue

Điều gì làm cho python3 ra khỏi câu hỏi? Chỉ cần thử nghiệm, hoạt động tốt vớiprint(...,end='')
Rɪᴋᴇʀ

@ EᴀsᴛᴇʀʟʏIʀᴋ Tôi quá lười để cài đặt nó. Tôi cũng có thể thay đổi câu trả lời, tho
Blue

Sau đó, có thể thử ideone hoặc một trình thông dịch python trực tuyến cho điều đó. Hoặc cài đặt nó. : P
Rɪᴋᴇʀ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.