Diberikan masukan dari setiap program Glypho yang valid , mengeluarkan mitra "yang dapat dibaca manusia".
Glypho adalah ide esolang yang menarik:
Referensi instruksi diberikan di sini. Untuk setiap instruksi, karakter abcd mewakili simbol yang menyusun setiap instruksi. a mengacu pada simbol unik pertama, b mengacu pada simbol unik kedua, dll.
aaaa ..... n NOP - no operation; do nothing aaab ..... i Input - push input onto top of stack aaba ..... > Rot - pops top stack element and pushes to bottom of stack aabb ..... \ Swap - swaps top two stack elements aabc ..... 1 Push - pushes a 1 onto the top of stack (creates new element) abaa ..... < RRot - pops bottom element and pushes to top of stack abab ..... d Dup - Duplicates top stack element abac ..... + Add - pops top two elements and pushes their sum abba ..... [ L-brace - skip to matching ] if top stack element is 0 abbb ..... o Output - pops and outputs top stack element abbc ..... * Multiply - pops top two elements and pushes their product abca ..... e Execute - Pops four elements and interprets them as an instruction abcb ..... - Negate - pops value from stack, pushes -(value) abcc ..... ! Pop - pops and discards top stack element abcd ..... ] R-brace - skip back to matching [
(kredit: Brian Thompson alias Wildhalcyon)
Jadi, misalnya, PPCG
akan mewakili instruksi Push —PPCG
cocok dengan pola aabc
, di mana a
diwakili P
, b
diwakili C
, dan c
diwakili G
.
Input akan berupa string tunggal yang hanya terdiri dari karakter ASCII yang dapat dicetak. Itu akan selalu memiliki panjang habis dibagi empat (duh).
Outputnya adalah setiap kelompok yang terdiri dari empat karakter dalam string input diganti dengan instruksi yang mereka pilih. Gunakan nama instruksi satu huruf (yang tepat setelah lima titik dalam tabel yang dikutip di atas).
Karena ini adalah kode-golf , kode terpendek dalam byte akan menang.
Kasus uji:
In Out
------------------------------------------------
Programming Puzzles & Code Golof ]!]!]]]+
nananananananana batman! dddd]]
;;;;;;;:;;:;;;:: ni>\
llamas sleep 1-*
8488133190003453 <[oe
<empty string> <empty string>
Jawaban:
Pyth,
373534 byteKode berisi karakter yang tidak patut
xxd
dicetak , jadi di sini adalah hexdump:Berikut adalah versi yang dapat dicetak pada 36 byte:
Cobalah online. Suite uji.
Penjelasan
sumber
CJam,
423935 byteDisimpan 4 byte meminjam ide pengguna81655 menggunakan basis 3, bukan basis 4.
Jalankan semua test case.
Pasti ada cara yang lebih baik untuk mengompresi tabel pencarian perintah ...
sumber
JavaScript (ES6), 97
Untuk setiap blok 4 karakter, saya mengganti setiap simbol dengan posisinya di blok, mendapatkan nomor basis 4. Misalnya
'aabc' -> '0023'
. Angka-angka yang memungkinkan berada dalam kisaran 0..0123, yaitu 0..27 dalam desimal. Saya menggunakan angka sebagai indeks untuk menemukan karakter instruksi yang tepat dari string 28 karakter.Uji
sumber
MATLAB, 291 byte
Saya ragu-ragu untuk waktu yang cukup lama jika saya harus melakukan jawaban saya. Saya hanya bermain-main dengan MATLAB. Saya sadar bahwa sangat tidak mungkin untuk menghasilkan kode padat (jumlah instruksi / byte yang rendah; sekitar 3 kali lebih besar dari solusi ~ 100 byte Anda) dan bahwa MATLAB mungkin tidak terlalu cocok untuk kode golf dan saya baru mengenal kode golf . Tapi saya hanya ingin mencoba, dan kodenya berfungsi (karakter baris baru disimpan). Ada petunjuk yang diterima. : P
sumber
JavaScript (ES6),
115101 byteDisimpan 14 byte berkat @ edc65 !
Penjelasan
Menyimpan daftar instruksi dalam sebuah string dengan setiap karakter pada indeks base-3-nya. Misalnya,
+
sesuai denganabac
yang dapat direpresentasikan dalam basis-3 sebagai0102
, atau11
dalam desimal. Satu-satunya instruksi yang tidak dapat direpresentasikan dalam base-3 adalah]
, tetapi dengan algoritma yang digunakan untuk menghitung nomor base-3, ia dengan mudah berakhir pada posisi 18 di ujung string.Uji
Tampilkan cuplikan kode
sumber
parseInt
dan menghitung angka dengan jumlah berulang dan berlipat ganda. Ini menghindari masalah dengan '0123' yang tidak valid di basis 3 tetapi memberikan 1 * 9 + 2 * 6 + 3 == 18 yang merupakan posisi yang baik. Hasil:F=s=>s.replace(/..../g,g=>"ni]>\\1 <d+[o*e-!]"[[...g].map(c=>r=r*3+(m[c]=m[c]||++i)-1,r=i=0,m={})|r])
Python 2, 158 byte
Mengambil input seperti
"test"
. Output adalah daftar karakter.Cobalah online
Tidak Disatukan:
sumber