DOGO'yu yorumlayın!


9

DOGO'yu yorumla

DOGO daha az bilinen bir programlama dilidir. Orijinal DOGO (bir Usenet gönderisinden şaka dili) hiç uygulanmamış olsa da, ona benzeyen bir dil yaratılmıştır. Dil için komutlar:

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

Operasyonlar:

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

Örnekler

Selam Dünya:

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 şişe bira

kurallar

  • Her başvuru tam bir program veya işlev olmalıdır. Bir işlevse, yalnızca işlev çağrısını programın altına eklemeye gerek duyularak çalıştırılabilir olmalıdır. Başka herhangi bir şey (örn. C'deki başlıklar) dahil edilmelidir.
  • Mümkünse, lütfen kodunuzun test edilebileceği çevrimiçi bir siteye bağlantı verin.
  • Programınız hiçbir şey yazamıyor STDERR(veya buna benzer bir şey).
  • Girdileri STDIN(veya dilinize en yakın alternatifi) veya bağımsız değişken olarak alabilirsiniz.
  • Standart boşluklar yasaktır.

puanlama

Programlar baytlara göre puanlanır . Varsayılan karakter kümesi UTF-8'dir, farklı bir karakter kullanıyorsanız lütfen belirtin.

Bu bir yana, bu ve en düşük bayt sayısı kazanan sayılır!

gönderimler

Yanıtınızın göründüğünden emin olmak için lütfen aşağıdaki Markdown şablonunu kullanarak yanıtınızı bir başlıkla başlatın:

# Language Name, N bytes

Ngönderiminizin büyüklüğü nerede . Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğu veya yorumlayıcı bayrak cezalarını ayrı olarak listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra skor tablosu snippet'inde görünecek bir bağlantı da yapabilirsiniz:

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

Liderler Sıralaması

İşte hem düzenli bir skor tablosu hem de kazananları dile göre gözden geçirmek için bir Yığın Parçacığı.

Güncelleme:

sitVe staykomutlarını çok iyi açıklamadığım için üzgünüm . @ User6245072'nin dediği gibi BF gibi [ve içindeler ].

Güncelleme 2:

@ KennyLau'nun sorularını açıklığa kavuşturmak için:

  • Varsayılan işlem şudur 0.
  • Bellek 8-bit hücrelerden oluşur.
  • Hücreler taşma / taşma üzerine sarılır.
  • İşlem 4 için giriş gereklidir.

Yabancı girişi ele almamız gerekiyor mu? Gibi girişsit lie-down roll-over play-dead heel
Value Ink

1
Ayrıca, işlem 1"bir sonraki hücreyi artır" der, ancak karşılık gelen BF kodu "mevcut hücreyi azalt" dır. Hangisi doğru davranıştır?
Value Ink

@ KevinLau-notKenny Teşekkürler, benim hatam.
George Gibson

Yanıtlar:


1

Yakut, 287 bayt

Her iki yönde sonsuz bir bant üzerinde çalışır. DOGO girişi, komut satırındaki bir dosyadır. Komut satırı bağımsız değişkeni yoksa, bir DOGO programı STDIN olarak iletilirse çalışmaya devam eder 3( işlemi kullanmadıkça ( STDIN'den bir bayt alın), bu durumda hiçbir fikrim yok. Her halükarda dosya girişi en iyisidir.

Program dosyasında dört komut ve boşluk dışında başka bir metin olmadığını varsayar.

Merhaba Dünya Gösteri

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

Piton 3, 388 398 373 371 bayt

256 bellek hücresi olduğunu varsayar. Kolayca yenilebilir, basit bir uygulama muhtemelen daha fazla golf edilebilir. Repl.it üzerinde deneyin .

@EasterlyIrk'e Python 3'ün Python 2'den çok daha kısa olduğunu fark ettiğim için teşekkürler.

EDIT: Gerçekleştirme değerinde değil, yazdırma sırasında yalnızca aşırı / düşük akışı hesaba kattım.

@ KevinLau-notKenney'e liste çarpma ve ters çevirme operatörü hileleriyle 25 (!) Bayt kaydettiği için teşekkürler

EDIT: 256 değişken, -4 operatörleri ile karışıklık, +8 küçük harf koyarak -3 koyarak bayt

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

Neden kullanılmalı sys.stdout.write? Neden olmasın print?
Rɪᴋᴇʀ

@ EᴀsᴛᴇʀʟʏIʀᴋ print yeni satırlar ekler. arg parametresiyle birlikte gerçek yazdırma işlevi Python 3
Blue

Python3'ü bu sorunun dışında kılan nedir? Sadece test edildi, şu şekilde çalışıyorprint(...,end='')
Rɪᴋᴇʀ

@ EᴀsᴛᴇʀʟʏIʀᴋ Yüklemek için çok tembeltim. Cevabı da değiştirebilirim, tho
Blue

O zaman belki ideone veya çevrimiçi bir python yorumlayıcısı deneyin. Veya yükleyin. : P
Rɪᴋᴇʀ
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.