Tugas Anda, jika Anda ingin menerimanya, adalah menulis program yang menampilkan kode sumbernya sendiri dalam representasi UTF-8 biner .
Aturan
Panjang sumber minimal harus 1 byte.
Program Anda tidak boleh mengambil input (atau memiliki input kosong yang tidak digunakan).
Output mungkin dalam format apa pun yang nyaman.
Newline trailing opsional diizinkan.
Perhatikan bahwa satu byte adalah 8 bit, dan panjang representasi biner UTF-8 adalah kelipatan dari 8.
Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
Celah standar dilarang.
Contoh
Katakanlah kode sumber Anda Aä$$€h
, representasi biner UTF-8 yang sesuai adalah010000011100001110100100001001000010010011100010100000101010110001101000
.
Jika saya menjalankan Aä$$€h
output harus 010000011100001110100100001001000010010011100010100000101010110001101000
.
A --> 01000001
ä --> 1100001110100100
$ --> 00100100
$ --> 00100100
€ --> 111000101000001010101100
h --> 01101000
Aä$$€h --> 010000011100001110100100001001000010010011100010100000101010110001101000
01011110
atau0010011100100010
di UTF-8 (mereka terlihat sangat mirip:^
vs∧
)01111100
dan0010001100100010
menyandikan|
dan∣
.Jawaban:
V , 28 (atau 16?) Latin 1 byte (35 UTF-8 byte)
Cobalah online!
Hexdump (dalam bahasa Latin 1):
Output (representasi biner dari kode yang sama dalam UTF-8, bukan Latin 1):
Penjelasan:
Atau...
V , 16 byte
Cobalah online!
Keluaran:
OP mengatakan:
Output ini dalam format yang jauh lebih nyaman untuk V: P (tapi saya tidak yakin apakah itu sesuai aturan)
sumber
CJam , 20 byte
Cobalah online!
Terkejut melihat CJam menang! kita akan lihat berapa lama ...
sumber
05AB1E , 105 byte
05AB1E tidak memiliki bawaan konversi UTF-8, jadi saya harus melakukan semuanya secara manual ..
Cobalah secara online atau verifikasi bahwa itu quine .
Penjelasan:
Quine :
Quine terpendek untuk 05AB1E adalah ini:
0"D34çý"D34çý
( 14 byte ) disediakan oleh @OliverNi . Jawaban saya menggunakan versi modifikasi dari Quine bahwa dengan menambahkan di...
sini:0"D34çý..."D34çý...
. Penjelasan singkat tentang quine ini:Bagian tantangan:
Sekarang untuk bagian tantangan dari kode. Seperti yang saya sebutkan di atas, 05AB1E tidak memiliki builtin konversi UTF-8, jadi saya harus melakukan hal-hal ini secara manual. Saya telah menggunakan sumber ini sebagai referensi tentang cara melakukan itu: Mengubah secara otomatis unicode codepoint menjadi UTF-8 dan UTF-16 . Berikut ringkasan singkat tentang konversi karakter Unicode ke UTF-8:
"dЖ丽"
menjadi[100,1046,20029]
)[100,1046,20029]
menjadi["1100100","10000010110","100111000111101"]
)0x00000000 - 0x0000007F
(0-127):0xxxxxxx
0x00000080 - 0x000007FF
(128-2047):110xxxxx 10xxxxxx
0x00000800 - 0x0000FFFF
(2048-65535):1110xxxx 10xxxxxx 10xxxxxx
0x00010000 - 0x001FFFFF
(65536-2097151):11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Ada juga rentang untuk 5 atau 6 byte, tetapi mari kita tinggalkan untuk saat ini.
Karakter
d
akan berada di kisaran pertama, jadi 1 byte di UTF-8; karakterЖ
berada di kisaran kedua, jadi 2 byte di UTF-8; dan karakter丽
berada di kisaran ketiga, jadi 3 byte di UTF-8.The
x
dalam pola di balik itu diisi dengan biner dari karakter ini, dari kanan ke kiri. Jadid
(1100100
) dengan pola0xxxxxxx
menjadi01100100
; yangЖ
(10000010110
) dengan pola110xxxxx 10xxxxxx
menjadi11010000 10010110
; dan丽
(100111000111101
) dengan pola1110xxxx 10xxxxxx 10xxxxxx
menjadi1110x100 10111000 10111101
, setelah itu sisanyax
diganti dengan0
:11100100 10111000 10111101
.Jadi, pendekatan itu saya juga gunakan dalam kode saya. Alih-alih memeriksa rentang sebenarnya, saya hanya melihat panjang biner dan membandingkannya dengan jumlah
x
dalam pola, karena itu menghemat beberapa byte.Lihat ini 05AB1E jawaban saya (bagian Cara kompres bilangan bulat besar? Dan Cara daftar bilangan bulat kompres? ) Untuk memahami mengapa
•Xó•18в
adalah[1,8,12,17]
.sumber
JavaScript (Node.js) , 60 byte
-15 byte dari @Neil dan @Shaggy
Cobalah online!
sumber
padStart(8,0)
menghemat 2 byte.map
dan membuangnyajoin
untuk menampilkan array bitKarat , 187 byte
Cobalah online!
sumber
Perl 6 , 46 byte
Cobalah online!
Quine standar dengan
.fmt("%08b",'')
memformat daftar nilai ordinal ke dalam biner panjang 8 dan bergabung dengan string kosong.sumber
Perl 5, 42 byte
TIO
sumber
Java 10,
339308265227225186184 byte-8 byte berkat @NahuelFouilleul menghapus yang tidak perlu
&255
(dan tambahan -35 untuk menarik perhatian saya bahwa spesifikasi program penuh dari tantangan telah dicabut dan fungsi diizinkan sekarang juga ..)-41 byte terima kasih kepada @ OlivierGrégoire .
Cobalah online.
Penjelasan:
quine -part :
var s
berisi String kode sumber yang tidak diformat%s
digunakan untuk menempatkan String ini ke dalam dirinya dengans.format(...)
%c
,%1$c
dan34
digunakan untuk memformat tanda kutip ganda ("
)s.format(s,34,s)
menempatkan semuanya bersama-samaBagian tantangan:
sumber
c&255
tidak diperlukan&255
karena kami tidak menggunakan karakter non-ASCII, terima kasih!BigInteger
cukup singkat untuk mengkonversi ke binary-Strings. Dan 2 byte lagi dengan mengubahreturn'0'+
toreturn 0+
. Hmm, mengapa itu memimpin0
diperlukan? Ini membingungkan saya bahwa semua binary-Strings terdepan0
, tetapi yang pertama tidak saat menggunakanBigInteger.toString(2)
..Python 2 ,
6867 byteCobalah online!
Modifikasi dari jawaban ini
-1 byte dengan menghapus spasi setelah 'in' (terima kasih @mdahmoune)
sumber
in
'%08b'%ord(i)
alih - alihbin(256|ord(i))[3:]
, tetapi itu tidak berhasil karena beberapa alasanR ,
138114 byteCobalah online!
Menggunakan kemampuan R untuk menyebarkan fungsi ke representasi karakter mereka. The
rev
s diperlukan karenarawToBits
menempatkan sedikit signifikan pertama.as.integer
diperlukan karena jika tidak bit ditampilkan dengan nol di depan.Diedit setelah saya menyadari bahwa output yang nyaman diizinkan. Juga keluar satu per satu pada hitungan byte asli.
sumber
C # (Visual C # Interactive Compiler) , 221 byte
Cobalah online!
C # (Visual C # Interactive Compiler) dengan flag
/u:System.String
, 193 byteCobalah online!
sumber
Alat Bash + GNU, 48 byte
TIO
sumber