Tafsirkan Volatile
Volatile adalah esolang berbasis stack yang dibuat oleh A_ / a '_' / A yang hanya memiliki 8 instruksi dan sedang menyelesaikan. Namun, ini juga non-deterministik ... artinya program tidak selalu memberikan hasil yang sama. Tugas Anda adalah menafsirkan bahasa ini.
Spesifikasi bahasa
Diambil dari halaman esolangs:
~: Push a random integer in any range of integers. Minimum range of 0 through 32768
+: Pop 2 values and push the sum of the 2 values
-: Like +, but subtracts
*: Multiply
/: Divide. 0-division will result in an error.
:: Duplicate the top of the stack
.: Output the top of the stack without popping it
(...): Execute ... inside a while loop when the top of the stack is not 0
Segala sesuatu yang lain diabaikan
Memasukkan
Perhatikan bahwa program ini dapat gagal secara acak
~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++.~:/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/:::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++.~:/::::::::::++++++++++.
~:-.~:/+.(~:/+.)
~:-:/
Keluaran
73 102 109 109 112 45 33 120 112 115 109 101 34 11
0 1 2 3 4 5 6 7 8 9 ...
<Any Error Message>
Lebih banyak contoh, serta implementasi referensi (gunakan yang kedua, ditemukan di bawah (Lain) python 3 interpreter ) dapat ditemukan di https://esolangs.org/wiki/Volatile
Mencetak gol
Ini adalah kode-golf, jadi jawaban tersingkat dalam byte menang
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
# Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
sumber
~
mendorong bilangan bulat, atau nomor apa saja?1
, yang mungkin dibagi dengan nol.~
harus dapat menekan nol, kalau tidak itu deterministik. Selain itu, RNG harus selalu dapat mengembalikan nol setelah sejumlah nol dalam satu baris.~:-.~:/+.(~:/+.)
mulai dari0 1 2 ...
bukan1 2 3 ...
? Itu~:-.
akan menghasilkan 0 yang akan dikeluarkan. Penerjemah-penafsir pada halaman Esolang tampaknya mengkonfirmasi ini (di sini yang kedua ).~:-.(~:/+.)
Jawaban:
05AB1E , 35 byte
Cobalah online!
Transpiles kode Volatile ke 05AB1E, lalu eval.
*
,+
dan-
dapat dibiarkan apa adanya.:
,,.
dan)
memiliki setara langsung satu byte. Perintah lain masing-masing mengambil beberapa byte. Sayangnya, 05AB1E tidak mogok di divisi oleh 0, jadi ini malah diterapkan oleh kondisi "berhenti jika bagian atas tumpukan == 0".sumber
0
dan1
benar sebelum loop, tetapi kemudian mulai mengeluarkan program Volatile (input implisit) itu sendiri. Saya sukaD Doingõq
string kamus untuk pernyataan if, btw! :)while peek
, tetapi dalam interpreter referensi itu awhile pop
. Contohnya dapat diperbaiki dengan menambahkan beberapa:
( TIO ). Atau, kode saya dapat diubah menjadiwhile peek
dengan menambahkan aD
.0 1 2 3 ...
. Saya belum melihat kode sumber mereka, tetapi hanya mencoba keduanya.D
kode saya.replace
vsreplaceAll
(yang keduanya menggantikan semua kejadian, tetapireplaceAll
menggunakan regex dan yang lainnya tidak). xDJulia 1.0 , 334 byte
"Penerjemah" pertama saya dari jenis apa pun, lebih mudah dari yang saya harapkan. Saya melakukan beberapa golf dasar, tetapi mungkin ada ruang untuk lebih. Saya membuatnya mencetak spasi setelah output untuk. untuk mach misalnya output. Versi ungolfed ada di header di tautan TIO. Contoh penggunaan
v("~:-:/")
.+41 byte untuk memperbaiki bug yang ditunjukkan Night2 dengan menambahkan penghitung lingkaran. Sekarang saya mengerti mengapa transpiling adalah pilihan yang baik. Kasing uji yang baik adalah
~:-.(~:/+.)(~:/+.())~:-.
dengan output yang diharapkan0 0
Cobalah online!
sumber
Pesona Rahasia ,
266264 byteCobalah online!
Karena keterbatasan yang ada pada Runic, ia hanya dapat mendukung panjang program (dan ukuran tumpukan) ~ 50 1 . Program yang terlalu besar akan gagal. Jika tumpukan tumbuh terlalu besar, itu akan kesalahan dengan
SO!
(tidak diperlukan, tetapi lebih baik daripada penghentian diam; biaya 24 byte). Jika program mencoba untuk membagi dengan 0, itu akan dicetak/0!
.Kesalahan ditambahkan ke akhir output standar karena Runic tidak memiliki cara menulis ke STDERR.
Versi ini akan mendukung program-program panjang yang sewenang-wenang, tetapi masih terbatas pada setumpuk ~ 90 (dan dengan demikian kesalahan pada hasil ke-2 dari program uji pertama) dan belum golf dengan baik (peningkatan panjang perintah antara
S͗}:
danS͗}͍:0%:
membutuhkan beberapa spasi tambahan untuk membuat bagian berbaris, tetapi ruang ekstra itu juga memungkinkan lebih<
untuk ukuran tumpukan maksimum yang lebih besar).Atau, program ini akan menghindari
~
menghasilkan nol dan program akan berakhir setelah 1 juta langkah eksekusi (perlindungan terhadap loop tak terbatas yang dibangun ke dalam penerjemah Runic). Juga termasuk beberapa byte untuk melewati kelebihan ruang NOP dan berjalan sedikit lebih lama.sizeof(stack) < mana
dan ada 5 IP yang menggabungkan dan menggabungkan mana (50 inisial). Meningkatkan nilai itu ke batas sebenarnya (+10) akan membutuhkan 2 byte lagi dan saya meninggalkan logika golf bukannya akurat.Penjelasan
<<<<<
dan lima IP bergabung bersama diy
~
atau:
perintah untuk kesalahan pada Stack Overflow, bagian kuning dilewati jika tumpukan tidak terlalu penuh dan kembali melalui sampul ke biru gelap.)
ditemukan program bercabang ke bagian merah dan bergerak ke kanan.(
ditemukan (lanjutkan hijau).)
ditemukan (lanjutkan oranye), tumpukan kedalaman tumpukan terbentur dan ketika(
ditemukan, tumpukan kedalaman tumpukan muncul satu kali (lanjutkan entri hijau tua dan oranye)B
dan kembali ke cyan ke loop parsing utama, jika tidak bungkus dengan warna oranye> kuning-> merah (memasukkan kembali loop-reset loop).sumber
PHP , 196 byte
Input 1: Cobalah online!
Input 2 (0, 1, 2, ...): Cobalah online!
Input 3 (Divisi dengan kesalahan nol): Cobalah online!
Hanya menerjemahkan kode ke PHP dan mengevaluasinya!
sumber
JavaScript (V8) ,
178 172171 byteTranspile ke JS. Dapat melempar
Z is not defined
ataux is not defined
jika kode mencoba melakukan sesuatu yang buruk.Coba program 1 online!
Coba program kedua online!
Coba program ke-3 online!
Bagaimana?
Setiap instruksi dialihkan ke
S.push(
, diikuti oleh pola tertentu, diikuti oleh);
.Kami harus menguji divisi dengan nol secara eksplisit karena JS tidak peduli sedikit pun tentang operasi yang tidak berbahaya. :-p
sumber
Java 8,
420418402373359357341 byte-2 byte terima kasih kepada @Grimy .
-16 byte berkat @ceilingcat .
Cobalah online.
Penjelasan:
sumber
new Random().nextInt()
2 lebih pendek dari(int)(Math.random()*1e5)
.java.util.*
mengimpor itu untukStack
. Terima kasih! :)new Random().nextInt()
dengan5
semua testcases masih lulus.5
tidak sepenuhnya acak ;) xkcd yang relevanC (gcc) untuk Linux x86_64,
675 643 621 613 597 432 404399 byteCobalah online!
Ini adalah JIT yang secara langsung menerjemahkan instruksi Volatile ke dalam bahasa mesin x86_64 dan mengeksekusi kode. Jika mesin Anda tidak memiliki
rdrand
instruksi, Anda dapat menggantinyaL"\xf0c70f50"
dengan"Pj*X"
" PRNG yang kurang seragam ". Untuk port ke sesuatu selain Linux, ganti syscalls diprintf()
danexit()
gumpal dan sesuaikan parametermmap()
.EDIT: Versi ini memanggil
printf()
alih-alih menerapkan subset dari awal.EDIT2: Bilangan bulat yang didukung sekarang 32 bit, bukan 64.
Sedikit kurang golf ...
sumber
Kotlin , 412 byte
Sayangnya saya kehilangan ke Jawa, tetapi saya tidak mau
import java.util.Stack
(dan saya tidak yakin itu akan menutup celah pula.)Tidak disatukan
Cobalah online!
sumber