DOGO를 해석하십시오!


9

DOGO 해석

DOGO 는 덜 알려진 프로그래밍 언어입니다. 원래 DOGO (유즈넷 게시물의 농담 언어)는 구현되지 않았지만 이와 유사한 언어가 만들어졌습니다. 언어 명령은 다음과 같습니다.

+===========+================================================================+
|  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입니다. 다른 문자 세트를 사용하는 경우 지정하십시오.

옆으로, 이것은 가장 낮은 바이트 수는 승자로 간주됩니다!

제출물

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

# 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

리더 보드

다음은 일반 리더 보드와 언어 별 수상자 개요를 생성하는 스택 스 니펫입니다.

최신 정보:

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 고마워, 내 잘못이야.
George Gibson

답변:


1

루비, 287 바이트

무한 테이프에서 양방향으로 실행됩니다. DOGO 입력은 명령 행의 파일입니다. 커맨드 라인 인수가 없으면 DOGO 프로그램은 STDIN으로 전달 된 경우 작동하지 않습니다 3(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

파이썬 3 388 398 373 371 바이트

256 개의 메모리 셀을 가정합니다. 쉽게 이길 수있는 간단한 구현만으로도 더 많은 골프를 즐길 수 있습니다. repl.it에서 사용해보십시오 .

Python 3이 Python 2보다 훨씬 짧다는 것을 깨닫게 해준 @EasterlyIrk에게 감사드립니다.

편집 : 실제 값이 아닌 인쇄하는 동안 오버 / 언더 플로우 만 설명했습니다.

목록 곱셈 및 반전 연산자 트릭으로 25 (!) 바이트를 절약 한 @ KevinLau-notKenney에게 감사합니다

편집 : -3 바이트는 변수에 256을 넣고 연산자는 -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ʀᴋ 인쇄는 개행을 추가합니다. 끝 인수가있는 실제 인쇄 함수는 Python 3
Blue

python3을 문제에서 벗어나게 만드는 것은 무엇입니까? 방금 테스트를 거쳐 print(...,end='')
제대로

@ EᴀsᴛᴇʀʟʏIʀᴋ 나는 그것을 설치하기에는 너무 게으르다. 나는 대답을 바꿀 수도 있습니다. tho
Blue

그런 다음 아마도 아이디어 나 온라인 파이썬 인터프리터를 사용해보십시오. 또는 설치하십시오. : P
Rɪᴋᴇʀ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.