2B için bir tercüman yaz
Gibi David Catt sitesindeki gizli dil 2B, her bir hücre bayt ayrı bir bant (bir bant depolanan bellek olan 'subtape'). Bunun için bir tercüman yaz!
Dil Özellikleri
Resmi şartnameyi burada bulabilirsiniz . Bu spesifikasyonda, "
aralıktaki bir sayı 0-9
( 0
olarak yorumlanır 10
) ve _
herhangi bir uzunlukta bir dize anlamına gelir. Her hücre aralıkta bir değer depolar 0-255
ve taşma / taşma bir BF'de olduğu gibi sarar. (Teşekkürler @ MartinBüttner). Metni sayılara dönüştürmek 0-255
için ASCII kodlarını kullanın . Bu konuda hiçbir ayrıntı bulamadığım için, bant uzunluğunun 255
minimum olması gerektiğini söyleyeceğim , ancak aksi halde lütfen düzenleyin.
+-------------+----------------------------------------------------------------------------------------------------------------------------------------+
| Instruction | Description |
+-------------+----------------------------------------------------------------------------------------------------------------------------------------+
| 0 | Zeroes the current cell and clears the overflow/underflow flag. |
| { | If the current cell is zero, jump to the matching }. |
| } | A placeholder for the { instruction. |
| ( | Read a byte from the input stream and place it in the current cell. |
| ) | Write the value of the current cell to the console. |
| x | Store the value of the current cell in a temporary register. |
| o | Write the value of the temporary register to the console. |
| ! | If the last addition overflowed, add one to the current cell. If the last subtraction underflowed, subtract one from the current cell. |
| ? | Performs a binary NOT on the current cell. |
| +" | Adds an amount to the current cell. |
| -" | Subtracts an amount from the current cell. |
| ^" | Moves the subtape up a number of times. |
| V" | Moves the subtape down a number of times. |
| <" | Moves the tape left a number of times. |
| >" | Moves the tape right a number of times. |
| :_: | Defines a label of name _. |
| *_* | Jumps to a label of name _. |
| ~_~ | Defines a function of name _. |
| @_@ | Calls a function of name _. |
| % | Ends a function definition. |
| #_# | Is a comment. |
| [SPACE] | Is an NOP. |
| [NEWLINE] | Is treated as whitespace and removed. |
| [TAB] | Is treated as whitespace and removed. |
+-------------+----------------------------------------------------------------------------------------------------------------------------------------+
Testler
+0+0+0+0+0+0+0+2)+0+0+9)+7))+3)-0-0-0-0-0-0-0-9)+0+0+0+0+0+0+0+0+7)-8)+3)-6)-8)-7-0-0-0-0-0-0)
Çıktı gerekir Hello world!
+1:i:{()*i*}
A sıralama cat
sadece bir satır olmadan, programın.
+1:loop:{@ReadChar@*loop*}@PrintHello@@WriteAll@(~ReadChar~(x-0-3<2o^1>1+1>1%~PrintHello~+0+0+0+0+0+0+0+2)-1+0+0+0)+7))+3)+1-0-0-0-0-0-0-0-0)%~WriteAll~<1x:reverse:{<1v1>1-1*reverse*}o-1:print:{-1<1)^1>1*print*}%
Önce bir ismi kabul etmeli, daha sonra, düğmesine basmak Returngerekir Hello name
(burada isim girilen addır ).
Bu programın kredisi David Catt .
Tam bir test programı üzerinde çalışıyorum.
kurallar
- Standart boşluklar yasaktır
- Tercümanınız, yorumlar hariç, gerekli olmayan tüm özellikleri karşılamalıdır.
puanlama
- Bu kod golf , çok az bayt kazanır!
- Tercümanınız yorum yapıyorsa -10 bayt.
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ığı.
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
N
gö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