Saya suka konsep 0815 , kecuali penerjemah di situs web pembuatnya mengembalikan Kesalahan 404. Jadi saya memutuskan untuk meminta Anda semua untuk membantu!
Dasar
0815 didasarkan pada tiga (3) register dan antrian. Register diberi nama X, Y, dan Z, dengan X menjadi hanya-tulis, Z menjadi hanya-baca, dan Y menjadi register "pembantu" yang tidak dapat diakses secara langsung. Semua register mulai diatur ke 0. Semua angka dalam heksadesimal.
Instruksi
Catatan: Beberapa instruksi mengambil parameter yang diformat seperti di }:hello:
mana :hello:
parameternya. Catatan lain: Beberapa deskripsi instruksi tidak jelas, jadi saya mengambil beberapa kebebasan dengannya. (Instruksi asli di sini )
~
berarti parameter diperlukan
----------|---|--------------------------------------------
~Move | < | <:8: will write 8 to X (parameter required)
----------|---|--------------------------------------------
Swap | x | Swap X and Y
----------|---|--------------------------------------------
~Label | } | }:hello: makes a label called 'hello'
----------|---|--------------------------------------------
Input | | | Set X to an integer from input in
Number | | hexadecimal greedily (regex: [0-9A-F]+)
----------|---|--------------------------------------------
Input | ! | Set X to the ASCII code of one ASCII
ASCII | | character in the input
----------|---|--------------------------------------------
Print | % | Prints an integer stored in Z
number | | (hexadecimal base)
----------|---|--------------------------------------------
Print | $ | Prints an ASCII char stored in Z
ASCII | |
----------|---|--------------------------------------------
Roll | | Rolls all registers to the left
Registers | ~ | X <- Y <- Z <- X
Left | | After roll: X = Y, Y = Z and Z = X
----------|---|--------------------------------------------
Roll | | Rolls all registers to the right
Registers | = | X -> Y -> Z -> X
Right | | After roll: Y = X, Z = Y and X = Z
----------|---|--------------------------------------------
~Jump if | ^ | ^:loop: Jumps to the label 'loop' if Z is
not zero | | not zero
----------|---|--------------------------------------------
~Jump if | # | #:loop: Jumps to the label 'loop' if Z is
zero | | zero
----------|---|--------------------------------------------
Instruksi Antrian
----------|---|--------------------------------------------
Clear | ? | Clears the queue
----------|---|--------------------------------------------
Enqueue | > | Enqueue the number stored in Z
----------|---|--------------------------------------------
Dequeue | { | Dequeue a number into X
----------|---|--------------------------------------------
| | Rolls the queue to the left, wrapping as
Roll | | necessary. The first number becomes the
Queue | @ | last; second becomes first and so on. Can
Left | | take a parameter to roll a certain number
| | of times. @:b: rolls 11 times.
----------|---|--------------------------------------------
Roll | |
Queue | & | The opposite of @
Right | |
----------|---|--------------------------------------------
Instruksi aritmatika
----------|---|--------------------------------------------
Add | + | Z = X + Y
----------|---|--------------------------------------------
Subtract | - | Z = X - Y
----------|---|--------------------------------------------
Multiply | * | Z = X * Y
----------|---|--------------------------------------------
Divide | / | Z = X / Y
| | Y = remainder
----------|---|--------------------------------------------
Contoh program
Halo dunia: (Sedikit golf)
<:48:~$<:65:~$<:6C:~$$><:6F:~$>@<:2C:~$<:20:~$<:57:~${~$<:72:~${~$<:64:~$
Kucing:
}:_t:!~$^:_t:
Mesin kebenaran:
|~}:i:%^:i:
Ini adalah kode-golf , jadi pengiriman dengan byte paling sedikit akan menang!
sumber
~
dan~
dalam perintah "roll register" Anda? Apakah Anda memiliki contoh program yang dapat digunakan orang untuk menguji?Jawaban:
Pip ,
321262248 byteSangat dipersingkat menggunakan eval dan beberapa trik Kolmogorov-kompleksitas.
Cobalah online! (Contohnya adalah program nomor Collatz / hailstone dari situs web penulis bahasa.)
Catatan:
[0-9A-F]+
). Jika, pada|
instruksi, karakter input berikutnya tidak0-9A-F
, pembacaan gagal dan menyebabkan perilaku yang berpotensi aneh. Ini berarti program genap penulis tidak bekerja seperti yang tertulis ... Saya tidak yakin bagaimana ia mengharapkan beberapa angka dibaca berfungsi, tapi saya hanya menerapkan sesuai dengan apa yang dikatakan spec.Versi ungolfed saya dengan komentar:
sumber
haxe, 987 byte
atau dengan spasi putih:
Berhasil bermain golf dengan haxe? Wow.
sumber
Python 3, 1320 byte
Versi yang tidak disatukan, serta analisis (dan jika perlu, versi yang diperbaiki) dari program pengujian, dapat ditemukan di intisari ini .
Keputusan desain:
Ada masalah dengan contoh program menggunakan CR saja sebagai baris baru mereka (kadang-kadang), yang membuat shell saya menimpa baris saat ini daripada memulai yang baru. Ini memengaruhi program Fibonacci Sequence dan 99 Bottles of Beer. Ayat terakhir dari 99 Botol Bir juga tidak mencetak dengan benar, dan saya masih menyelidiki sebabnya.
sumber
Scala,
3,1232,8442,6262,540 byteSelain kendala yang dijabarkan dalam pertanyaan, juru bahasa ini ditulis untuk bersandar sebanyak mungkin terhadap prinsip-prinsip FP. Secara khusus:
Ini dicapai, dengan pengecualian dari empat baris kode yang menggerakkan loop utama dari interpreter. Struktur yang tidak dapat diubah sangat sulit untuk digunakan di sini karena keadaan register mendorong aliran kontrol dari loop (khususnya dua pernyataan GOTO). Saya masih berpikir tentang bagaimana mengubahnya menjadi menggunakan struktur murni & tidak dapat diubah, tetapi itu tidak relevan dengan tantangan golf kode.
Saya akan memposting versi tidak berjubah di Github dan akan memberikan tautan ketika saya melakukannya. Untuk saat ini, saya akan memposting versi aslinya di sini:
sumber
Flex / C ++,
848838 byteDikompilasi dengan:
Mungkin dikompilasi dengan
lex
es lain juga, tapi saya tidak memeriksanya. Ia bekerja dalam dua lintasan, sehingga lompatan ke depan ditangani dengan benar. Nama label diizinkan untuk memulai dengan angka, karena itu terjadi lebih dari satu kali dalam kasus uji. Hex literal hanya dapat huruf besar, sesuai dengan spesifikasi.Lewati semua kasus uji, termasuk yang ditemukan di Esolangs Wiki dan halaman 0815. Penanganan kesalahan tidak ada dan keluar pada label yang tidak dikenal tidak anggun, setelah semua ini adalah kode-golf.
Saya sedang mempersiapkan penerjemah yang tidak disolf (dan jauh lebih baik) untuk rilis, sehingga OP dapat terus bermain-main dengan 0815. Tetap disini :)
sumber
\r
bukan\n
sebagai baris baru (OS OS jadul?), Jadi jika Anda ingin melihat sesuatu dicetak pada penggunaan layar./0815 99bb.0815 | tr "\r" "\n"
. Sama untuk Fibonacci.Common Lisp, 1088 bytes
Tidak disatukan
Dengan penelusuran opsional saat runtime.
Fibonnaci
Ekspansi makro
Keluaran
Mungkin lebih banyak penjelasan nanti
sumber
Python 3,
1573, 1499 byteMenjalankan contoh program di http://paulo-jorente.de/poncho/esolang/0815/ dan mengimplementasikan semua instruksi (bahkan yang tertulis, sesuai dengan spesifikasi asli).
Menjalankan file sumber yang diteruskan pada baris perintah.
sumber
j=raw_input
kej=input
), tetapi itu tidak berhasil bagi saya pada program "99 Bottles of Beer". Contoh ("//" untuk baris baru): "0x63 // 0x63jelas bir di dinding // 0x62 satu turun dan letakkan sekitar // 0x62jelas bir di dinding // 0x62jelas bir di dinding // 0x61 satu bir turun dan menyebarkannya ")