Terkait dengan: Buat juru bahasa; #
Dalam tantangan terkait di atas, tugasnya adalah menciptakan penerjemah untuk bahasa esoterik ;#
.
The ;#
bahasa
Bahasa ini memiliki dua perintah: ;
dan #
(semua karakter lain diabaikan oleh penerjemah):
;
: Menambah akumulator
#
: Modulo akumulator dengan 127, cetak karakter ASCII yang sesuai dan reset akumulator ke 0.
Tantangan
Karena saya malas tetapi masih ingin menguji beberapa testcases lagi, saya memerlukan program atau fungsi yang mengubah teks biasa menjadi ;#
kode.
Memasukkan
Masukan adalah string, diambil sebagai argumen atau melalui stdin. Ini hanya akan berisi karakter dan baris ASCII yang dapat dicetak.
Keluaran
Outputnya adalah ;#
program yang dihasilkan dengan mengembalikan, atau mencetak ke stdout. Selama program ini valid, mungkin berisi kelebihan karakter selain #
dan ;
karena semua karakter lain diabaikan.
Contohnya
Input: Hello, World!
Output: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
Input: ABC
Output: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
Input: ;#
Output: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
Papan peringkat
sumber
;#
mengabaikan semua karakter lain, sehingga program yang dihasilkan masih berfungsi.;
. Kedua, 127 benar, sebagaimana dinyatakan dalam pertanyaan terkait yang berisi spesifikasi bahasa;Jawaban:
; # + , 61 byte
Dikalahkan oleh Conor O'Brien
Cobalah online!
Perhatikan bahwa input memiliki null byte tambahan.
sumber
; # + , 40 byte
Cobalah online! Input diakhiri dengan byte nol.
Penjelasan
Kode ini dibagi menjadi dua bagian: generasi dan iterasi.
Generasi
Ini menempatkan konstanta
;
dan#
ke dalam memori sebagai berikut:Perulangan
sumber
#
@tuskiomi. Cobalah online!brainfuck ,
5954 byteCobalah online!
sumber
Jelly ,
1087 byteCobalah online!
-2 byte terima kasih kepada @Emigna
-1 byte berkat @Dennis
sumber
O”;ẋ;€”#
?;€
bisa menjadip
.GS2 , 6 byte
Cobalah online!
Hexdump yang dapat dibalik (xxd)
Bagaimana itu bekerja
sumber
■
= apa-apaan ini?2
Apakah perintah multiplikasi? GS2 aneh: P■
hanya memetakan , dan GS2 mengimplementasikan string sebagai daftar bilangan bulat.2
adalah XOR ...Taksi, 779 byte
Cobalah online!
Tidak Disatukan:
Penjelasan:
sumber
05AB1E , 8 byte
Cobalah online!
Penjelasan
sumber
Brainfuck, 43 byte
Null byte mengakhiri program.
Penjelasan
sumber
Python 3 , 39 byte
Cobalah online!
sumber
for s in input():print(";"*ord(s)+"#")
lebih pendek satu byte.> <> , 22 byte
Cobalah secara online , atau di taman bermain ikan
Input adalah STDIN, output adalah STDOUT. Dalam> <>, karakter dan kode ASCII adalah hal yang sama, jadi yang perlu kita lakukan adalah membaca karakter, mencetak
";"
dan mengurangi karakter sampai 0, lalu cetak"#"
dan putar hingga tidak ada lagi input yang tersisa.sumber
F #, 79 byte
Cobalah online!
Diperluas
convert mengambil string input dan menghasilkan program; #
Pemakaian
sumber
Python 2 - 36 byte
Cobalah online!
sumber
PowerShell,
292725 byteCukup mudah. Mengambil input sebagai argumen baris perintah. Output adalah program yang valid; # yang mencetak teks yang diminta.
sumber
#
dan;
karena semua karakter lainnya diabaikan.«$args
cukup.brainfuck , 47 byte
Cobalah online!
Lihat juga: jawaban Ovs , yang mengambil pendekatan yang serupa, tetapi dengan metode berbeda untuk menghasilkan konstanta dan tata letak sel yang berbeda.
Penjelasan:
Tantangan ini sejalan dengan spec brainfuck dengan cukup baik, yang berarti solusinya pada dasarnya sepele. Brainfuck mengambil input sebagai nilai ASCII, yang persis seperti apa; # perlu di-output.
Skema untuk pengubahan sederhana: Menghasilkan nilai ASCII untuk
;
dan#
, mencetak;
sama dengan nilai ASCII dari karakter input, mencetak#
, ulangi untuk setiap input.sumber
Mathematica, 49 byte
Penjelasan
Mengonversi string input ke daftar kode karakter, lalu
Map
s fungsinya diStringRepeat[";",#]<>"#"&
atas daftar, laluStringJoin
hasilnya dengan string kosong.sumber
<>""
?StringJoin
ing (<>
) string kosong merangkai setiap string.Aceto , 19 byte
Karena ada penerjemah di Aceto , saya pikir tidak akan ada jawaban Aceto untuk tantangan ini juga. Ini cocok dengan rapi dalam kurva Hilbert urutan 2:
Pertama-tama, kita membaca satu karakter (
,
) dan menggandakan dan meniadakannya untuk menguji apakah itu adalah baris baru (d!
, ketika membaca baris baru, karakter kosong biasanya didorong pada tumpukan). Saya kemudian menggunakan apa yang saya pikir adalah trik yang cukup pintar untuk menangani kasus baris baru dengan kompak:`'\n
Jika nilai pada stack adalah
True
(kita membaca baris baru), kode itu berarti: do (`
) meletakkan karakter literal pada stack ('
), yang merupakan baris baru:\n
.Jika nilai pada stack adalah
False
(kami tidak membaca baris baru), kode itu berarti: jangan (`
) membaca karakter literal ('
). Itu berarti karakter selanjutnya dieksekusi sebagai perintah. Untungnya, backslash lolos dari perintah berikutnya (itu membuatnya agar tidak dieksekusi), jadin
tidak mencetak baris baru (yang adalah apan
biasanya dilakukan).Sisa kode mudah; kita mengonversi karakter pada stack ke integer dari unicode codepoint (
o
), kita mendorong titik koma literal (';
), mengalikan angka dengan string (*
, seperti dalam Python),p
mematahkan hasilnya, mendorong literal ('
)#
,p
mematahkannya juga, dan kembali ke menuO
rigin.Jalankan dengan
-F
jika Anda ingin melihat hasil langsung (karena buffering), tetapi berfungsi juga.sumber
Perl, 24 byte
Jalankan dengan
perl -pe
.Solusi alternatif:
Jalankan dengan
perl -nE
.sumber
Penghiburan , 11 byte
Yay, bahasa baru.
Penjelasan
sumber
Fourier , 19 byte
Cobalah di FourIDE!
Untuk menjalankan, Anda harus melampirkan string input dalam tanda kutip.
Pseudocode penjelasan
sumber
Befunge-98 (FBBI) ,
231710 byte-5 byte terima kasih kepada Jo King .
Cobalah online!
sumber
JavaScript,
5554515048 byteCobalah online
Alternatif
Jika kita dapat mengambil input sebagai array karakter individu maka 5 byte dapat disimpan.
Jika kita juga bisa menampilkan sebagai array maka 2 byte lagi dapat disimpan.
sumber
\n
harus menjadi;;;;;;;;;;#
..
ke[^]
, yang masih akan meninggalkan sebuah byte lebih pendek darimap/join
?join()
jawaban Anda sebelumnya tidak perlu diberikan spesifikasi untuk;#
, dan Anda juga dapat menyatakan bahwa input untuk fungsi Anda adalah array karakter, meskipun saran kedua adalah sedikit peregangan. Either way, itu membawa Anda hingga paling banyak 48 byte.Sebenarnya , 11 byte
Cobalah online!
Penjelasan:
sumber
APL (Dyalog) , 18 byte
Cobalah online!
⎕UCS
Konversikan ke titik kode Unicode';'⍴¨⍨
gunakan setiap titik kode untuk membentuk kembali ( ⍴ = Rho ≈ R ; R eshape) titik koma#',¨⍨
menambahkan hash ke setiap stringsumber
Ruby,
2825 byte24 byte, ditambah
-n
saklar baris perintah untuk beroperasi berulang kalistdin
.3 byte disimpan (dan hasil koreksi pada baris baru!) Berkat manatwork.
sumber
.ord
dengan bekerja secara langsung dengan kode karakter:$_.bytes{|b|$><<?;*b+?#}
. Ada perbedaan: yang ini juga mengkodekan baris baru dalam input. Tidak yakin apa yang ingin dikatakan oleh pemilik pertanyaan dengan “Itu hanya akan berisi karakter ASCII yang dapat dicetak dan baris baru.”, Tetapi bagi saya terdengar seperti baris baru harus dikodekan juga.bytes
. Saya telah bertanya OP tentang baris baru di bagian atas dan akan mengedit ini setelahnya.PHP, 54 Bytes
Cobalah online!
sumber
Alice , 12 byte
Cobalah online!
Penjelasan
sumber
PHP, 48 byte
sumber
jq, 30 karakter
(26 karakter kode + 4 opsi opsi baris perintah)
Contoh dijalankan:
Tes online
sumber
Pyth, 10 byte
Cobalah!
sumber
Rosda , 24 byte
Cobalah online!
sumber