Terkait dengan: Buat kode ; # interpreter dan Generate; #
;#
- Panduan Whirlwind
Ini adalah bahasa yang sederhana dengan dua perintah. Satu-satunya struktur data adalah akumulator, yang diinisialisasi ke 0.
;
Tambahkan akumulator#
Hitung nilai akumulator modulo 127, dan cetak karakter ASCII yang sesuai. Kemudian, setel ulang akumulator ke 0.
Kode sumber dapat berisi karakter tambahan (printable ASCII + whitespace), tetapi ini diperlakukan sebagai komentar dan tidak berpengaruh pada eksekusi program.
Tantangan
Karena sebagian besar komputer tidak dilengkapi dengan ;#
pra - instal, akan sangat berguna untuk memiliki alat yang dapat mengubah ;#
kode menjadi bahasa yang berbeda. Dalam tantangan ini, Anda harus menulis sebuah program untuk mencapai ini.
Memasukkan
Beberapa ;#
kode sumber, diambil melalui argumen atau STDIN. Kode sumber ini dapat berisi (komentar) karakter selain ;
atau #
.
Keluaran
Kode, dalam bahasa yang sama dengan kiriman Anda, yang, ketika dieksekusi, mencetak / mengembalikan string yang sama dengan ;#
kode aslinya . Kode yang dihasilkan ini dapat menampilkan baris tambahan setelah string target, jika itu lebih nyaman untuk bahasa Anda.
Catatan
Satu hal yang perlu diwaspadai adalah urutan melarikan diri, seperti kode yang mencetak garis miring terbalik atau mencetak tanda kutip. Cari juga ;#
kode yang bisa berisi hal-hal yang terlihat seperti kata kunci atau perintah dalam bahasa Anda.
Batasan tambahan
Semua program harus diakhiri (Saya biasanya menganggap ini sebagai default, tetapi seseorang bertanya tentang hal itu jadi saya menyatakannya di sini).
Contohnya
input: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
output (python): print(";#")
input: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
output (element): \'`
;#
prainstal ...;
atau#
?Jawaban:
Python 2 ,
7669 byteKode
Input dikelilingi oleh tanda kutip.
Cobalah online!
Penjelasan
Bagian pertama dari output pada dasarnya dilakukan oleh input, menggunakan
input('print')
. Kami membagi input pada tagar dan membuang elemen terakhir. Kami mencetak representasi ord (y% 127) , di mana y adalah jumlah kemunculan titik koma. Kami menambahkan,
di akhir cetakan untuk memastikan ini tidak mencetak baris baru.Ini akan memberikan kode Python berikut untuk
Hello, World!
-program:Yang bisa dicoba online .
sumber
brainfuck , 126 byte
Cobalah online!
Program output akan gagal dalam implementasi TIO jika
;#
output melebihi 65536 karakter. Saya juga membuat versi 130-byte yang menghasilkan[+]
bukan<
, menghindari masalah ini:Penjelasan
sumber
Spasi, 291 byte
Ganti S dengan spasi, T oleh tab dan N dengan baris baru.
Menghasilkan spasi putih di ruang putih bukanlah hal yang paling efisien di dunia. Menghasilkan segala jenis kode dinamis memerlukan sedikit-twiddling signifikan yang, dalam bahasa tanpa operasi bitwise, akan menyebabkan ukuran kode meledak. Oleh karena itu, program ini tidak berusaha melakukan sesuatu yang cerdas, melainkan memilih hanya menerjemahkan program sumber satu ke satu. Itu membongkar sebagai berikut:
Kode yang dihasilkan oleh program terlihat seperti:
sumber
V ,
192028 bytePerbaikan bug, rusak jika tidak ada
#
di akhirPerbaikan bug, diterapkan
mod 127
Cobalah online!
Coba Kode Generated
Penjelasan:
Dalam V, dalam mode penyisipan, karakter ASCII apa pun dapat dimasukkan dengan kode menggunakan
<C-v><Code>
. Kode V menggantikan semua#
dengan<C-v>0
, di mana nol adalah pseudo-akumulator per#
. Setiap#
reset akumulator ke 0 sehingga memiliki satu per bekerja dengan baik. Kemudian kode melakukan penambahan untuk setiap titik koma yang ditemukan, yang hanya menambah angka berikutnya yang ditemukannya, yang akan menjadi akumulator berikutnya. The0
ditambahkan ke akhir sehingga instruksi tidak gagal untuk;
s tanpa pengikut#
.Hexdump:
sumber
05AB1E ,
20 19 1816 byte-1 berkat Adnan
-2 berkat carusocomputing
-2 berkat Kevin Cruijssen
Cobalah online! (termasuk output dari kode 05AB1E yang dieksekusi)
sumber
';¢
bisag
,žy
mendorong 128, dapat bekerja entah bagaimana dan mengapa tidak hanya mengeja kata lengkap dan mengelilinginya dengan tanda kutip?';¢
memetikan ada karakter selain;
.žy<
sama dengan127
. Mencetak kata yang dikelilingi oleh tanda kutip akan pecah jika salah satu karakter adalah kutipan.ƵQ
adalah versi terkompresi dari 127 .Python 2 , 75 byte
Cobalah online! (termasuk output dari mengeksekusi kode Python yang di-transpile)
Berkat ovs untuk banyak byte!
Penjelasan
Program ini mentranspilasikan #; kode dengan memisahkan pada #s (
s.split('#')[:-1]
), menghitung jumlah titik koma di setiap chunk mod 127 (x.count(';')%127for x in ...
), dan mengonversinya menjadi masing-masing karakter ASCII (chr(...)
). Daftar itu kemudian digabungkan (''.join(...)
), dikonversi menjadi representasi Python dari string (backticks) dan dimasukkan ke dalam program kerangka Python untuk mencetak string ("print"+...
).sumber
Jelly ,
25 2416 byteProgram lengkap yang mencetak kode Jelly yang setara (sebagai tautan monadik, kode ini mengembalikan daftar jenis campuran).
Contoh pertama ada di Coba online! yang menghasilkan program ini .
Bagaimana?
Menghitung
;
s di setiap run antara#
s mengambil setiap modulo 127 dan menambahkan gips ke instruksi ordinal,Ọ
atom monadik , setelah masing-masing.Jelly secara tersirat menyalurkan setiap nilai ke STDOUT saat dijalankan melalui program seperti yang
72Ọ101Ọ108Ọ108Ọ111Ọ44Ọ32Ọ119Ọ111Ọ114Ọ108Ọ100Ọ33Ọ
akan dicetakHello, world!
.Catatan tentang input: Jelly mengambil input string dalam format Python. Program yang kosong bisa menjadi masukan sebagai
""
, dan program hash-hanya sebagai"#"
,"##"
, dll manipulasi lain mungkin diperlukan untuk masukan mengandung backslash dan kutipan.sumber
Secara kubik ,
138137 byteCobalah online!
Catatan: Anda mungkin perlu menggantinya
&6
dengan?6&
agar bisa bekerja di TIO.&6
dalam spesifikasi bahasa, meskipun.Bagaimana itu bekerja
Program keluaran:
sumber
@6
,%6
dan-6
. Perintah yang sebelumnya tidak melakukan apa pun ketika dipanggil secara implisit sekarang menggunakan notepad. Begitu@
juga dengan@6
,%
sama dengan%6
, dll.JavaScript (ES6), 101 byte
Diberikan string input, menghapus semua karakter yang tidak perlu, lalu mengembalikan sumber fungsi berikut:
Di mana
...
merupakan;#
sumber yang dibersihkan .sumber
C,
9896999897 byte+3 byte karena saya lupa C tidak diartikan :(
Berjalan dengan:
Akan dicetak:
sumber
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
menghasilkanf(){puts(""");}
, yang tidak valid. Tantangan secara khusus berseru "Satu hal yang harus diwaspadai adalah urutan melarikan diri, seperti kode yang mencetak garis miring terbalik atau mencetak tanda kutip."Jelly , 26 byte
Cobalah online!
Dan coba kode Jelly itu di sini!
Output Jelly menjadi kode seperti
Ọø‘‘‘‘‘‘‘‘‘‘‘‘‘Ọø‘‘‘‘‘‘‘‘‘‘Ọø
, yang mencetak chr (13) + chr (10)sumber
PHP, 72 byte
sumber
> <>,
1068177 byteIni golf pertama saya di> <> (ikan)! Saya harus mengatakan bahasa yang cukup menarik. Menyenangkan!
sumber
i:1+?!
menjadii:0(?
, dan saya juga merasa seperti Anda dapat menyimpan beberapa byte jika Anda membangun hasilnya di stack dan menunggu akhir input untuk mengeluarkannya. Maksudku, itu banyako
s;)C # 169 Bytes
Golf:
Versi yang dapat dibaca manusia:
sumber
Haskell ,
106102 byteCobalah online!
Tidak disatukan
sumber
Brachylog , 33 byte
Cobalah online!
Merasa terlalu lelah untuk menjelaskan ini saat ini, jika ada yang melihat ini dan bertanya-tanya bagaimana cara kerjanya, berikan komentar untuk mengingatkan saya.
sumber
MathGolf , 17 byte
Cobalah online!
Penjelasan
Karena setiap karakter dapat diletakkan di stack (dan dengan demikian output) menggunakan
'<char>
, ini akan menampilkan urutan blok kode tersebut.sumber
Þ
.Þ
. ( Doks yang saya gunakan masih menyatakan nilai lama. )MATL ,
3228 byteCobalah online!
Pendekatan yang benar-benar berbeda berdasarkan pada
strsplit
program tipe otomat.sumber
Sebenarnya , 25 byte
Cobalah online! (termasuk keluaran dari mengeksekusi kode Sebenarnya yang ditranskrip)
Penjelasan:
sumber
shortC , 48 byte
sumber
Fourier, 32 byte
Cobalah di FourIDE!
Ini adalah tantangan yang mudah karena Fourier pada dasarnya adalah superset dari; #:
sumber
CJam, 14 byte
Penjelasan:
sumber
APL, 31 byte
Keluaran:
Penjelasan:
⌽
: membalikkan input{
...}
: berikan ke fungsi ini:⍵⊂⍨'#'=⍵
: partisi pada masing-masing#
dalam string (dari awal, itulah sebabnya harus dibalik dulu)+/¨';'=
: hitung;
s di setiap partisi127|
: modulo 127⌽
: balikkan lagi'⎕UCS',
: prepend the string⎕UCS
, yang merupakan fungsi Unicode.⍕
: representasi stringsumber
⍕
karena output sebenarnya ke STDOUT sama.Ruby , 47 + 1 = 48 byte
+1 byte untuk
-p
.Cobalah online!
-30 byte terima kasih kepada @manatwork !
sumber
;
atau#
."/;+#/
→/.*?#/
dan blok kodes.length-1
→s.count(?;)
. BTW, matematika Anda juga salah, karena%
memiliki prioritas lebih tinggi daripada-
, jadi seharusnya(s.length-1)%127
. Dan di.gsub
's blok kode Anda dapat mengakses kelompok ditangkap dengan$&
,$1
, ... jadi|s|
kode blok parameter biasanya tidak layak. Dan stringifies interpolasi string:{"$><<#{$&.count(?;)%127}.chr;"}
. Cobalah online!gsub
memodifikasi$_
secara langsung, yang berarti Anda tidak perlu menetapkan ulang. NAMUN, Anda memiliki masalah jika Anda memiliki karakter komentar setelah terakhir Anda#
... lihat di siniPyth,
252324 byte+1 byte berkat @FryAmTheEggman
Cobalah!
menangani karakter yang harus melarikan diri dengan hanya menggunakan string 1-char.
Output sampel:
Menggunakan penerjemah; # saya .
sumber
#
input, karena akan dicetak0
. Anda dapat memperbaiki ini denganjk
bukans
.C, 150 byte
Diperluas:
Ini adalah program lengkap yang (harus) mengakhiri, mengabaikan komentar dan menghasilkan kode keluaran yang selalu benar. Saya menganggap EOF = -1
Diuji pada SystemResque-Cd 4.9.6, dikompilasi dengan gcc 4.9.4
sumber
braingasm , 40 byte
Harus dikatakan, itu sangat singkat.
Kode yang dihasilkan untuk
;
adalah a+
, yang menambah sel saat ini.Kode yang dihasilkan untuk
#
berisi operasi modulo manual, akwardsumber
Braingolf , 55 byte
Cobalah online!
Pada dasarnya menggantikan
;
dengan1+
,#
dengan#~1+%@
dan pra-pends semuanya dengan0
monadik+
operator rusak sekarang.1+
menambahkan 1 ke item terakhir di stack.#~1+%@
mendorong nilai char~
(126), menambahkan 1 untuk membuat 127, modulus dengan item lain di stack, lalu pop dan cetak sebagai char.Penjelasan
sumber
q / kdb +, 42 byte
Larutan:
Contoh:
Perhatikan bahwa
,
digunakan untuk menandakan daftar (versus atom) sebagaimana"\""
daftar satu elemen, bukan menjadi atom.Penjelasan:
Ambil string input, hapus apa pun yang bukan a
#
atau a;
, pisahkan ke dalam daftar#
, hitung jumlah elemen dalam setiap daftar, lakukan mod 127 pada hasilnya dan masukkan ke string:Catatan:
#
, jika tidak, potongan terakhir akan salah dijatuhkan oleh-1_
.;#
.sumber
Perl 5 , 78 byte
Cobalah online!
sumber