Saya ingat orang mengatakan bahwa ukuran kode harus diukur dalam byte, dan bukan dalam karakter, karena itu mungkin untuk menyimpan informasi dengan karakter Unicode yang aneh, yang tidak memiliki makna visual.
Seberapa buruk itu?
Dalam tantangan ini, Anda harus menampilkan teks Lorem Ipsum berikut, yang diambil dari Wikipedia :
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Silakan tentukan jumlah karakter (bukan byte) dalam kode Anda. Kode dengan jumlah karakter minimum yang menang.
Kode Anda hanya boleh berisi karakter Unicode yang valid, seperti dijelaskan di sini , yaitu:
- Kode poin hingga U + 10FFFF
- Tidak ada pengganti (kisaran D800 – DBFF dilarang)
- Tidak ada karakter FFFE dan FFFF
- Tidak ada karakter nol (kode 0)
Jika kode Anda tidak dapat ditampilkan, berikan versi dengan karakter menyinggung yang dihapus, dan hexdump.
Beberapa catatan:
- Output harus satu garis panjang (445 karakter). Jika sistem Anda tidak dapat melakukan itu (misalnya Anda mencetaknya di atas kertas), hasilkan perkiraan terdekat. Trailing linebreak tidak penting.
- Fungsi bawaan yang menghasilkan teks Lorem Ipsum tidak diizinkan
- Harap tentukan penyandian teks yang valid untuk kode Anda, jika relevan
code-golf
kolmogorov-complexity
unicode
anatolyg
sumber
sumber
=lorem()
di MS Word tidak menampilkan versi yang benarJawaban:
Dyalog APL , 123 karakter
Semua kecuali periode akhir dikemas dalam 111 karakter 32-bit (UTF-32).
'.',⍨
periode ditambahkan ke80⎕DR
8-bit (8
) karakter (0
) D ata R representasi dari'
...'
111 karakter Unicode U + 26F4C 9206D D7573 C6F64 32.072 12.074 C7465 E6F63 46365 27574 96461 37369 10676E 4696C 57.320 F6420 56.965 46F6D D6574 10726F 9636E 56.469 52.074 16C20 5726F 107.465 F6C6F D2065 16E67 96C61 E6175 107.455 D696E 106.461 96E69 57.620 D6169 57.120 E2073 27.473 52.064 37.265 46.174 106E6F 16C6C 106F63 F6261 107.369 97.369 107.475 1696C 107.069 52.078 F6320 46F6D F6320 16.573 E7461 97544 56120 92065 57275 C6F64 92072 57220 86572 5646E 107469 6206E 10756C 57.461 C6576 52.074 106.573 C6C69 4206D 26F6C 56.520 77.566 107.461 C6C75 17020 46.169 102E72 56.378 56.574 97.320 F2074 56.163 107.461 97.075 17.461 F6E20 27020 56469 102C74 46E75 106E69 106C75 57120 66F20 96369 56420 57265 D2074 96C6C E6120 9206D 36520 16C20 5726F, yang semuanya termasuk dalam kisaran 12074-10756C dan dengan demikian di dalam kisaran yang diizinkan semua OP 10.000-10FFFF.sumber
JavaScript (ES7),
326283273249243242 karakterBagaimana itu bekerja
Langkah pertama dalam teknik kompresi saya adalah mengubah seluruh string menjadi huruf kecil (tidak wajib, tetapi terlihat lebih baik), dan mengganti masing-masing pasangan karakter
, exum.
(serta ruang trailing dengan sendirinya) dengan indeks dalam string ditambah 2. Ini menjadikan teks nomor basis-32 yang valid:Langkah selanjutnya adalah mengonversi setiap run 4-char menjadi desimal, lalu mendapatkan karakter pada titik kode itu. Ini dapat dilakukan dengan fungsi berikut:
( Catatan: Karena semua digit adalah 2 atau lebih besar, nilai minimum yang mungkin dari empat digit adalah 2222₃₂. Ini sama dengan 95978₁₀, atau 176EA₁₆; oleh karena itu, titik kode tidak akan pernah berada dalam rentang terbatas.)
Dan sekarang kita memiliki string terkompresi:
Itu 445 karakter dikompresi menjadi 106 karakter. Dekompresi hanya membalikkan proses ini:
n
dengan" , exum. ".substr(n,2)
.Satu-satunya fitur ES7 yang digunakan adalah
**
. Ganti4**8
dengan65536
untuk berjalan di browser yang belum mendukung ES7.sumber
4**8
bukan65536
.bash + coreutils + gzip + recode, 191 karakter
String adalah gzip teks yang ditafsirkan sebagai UTF-16BE, ditambah beberapa byte tambahan untuk dipasangkan dengan bagian pengganti yang tidak berpasangan. Tr melepas strip pengganti tambahan.
File skrip ini (atau shell di mana perintah ini diketik) harus menafsirkan teks sebagai UTF-8, itulah sebabnya diperlukan recode.
sumber
Javascript (ES6),
261255254 karakterDisimpan 1 byte, berkat produk ETH
Kerusakan
Muatan: 148 karakter Unicode
Kode: 107 byte
Bagaimana itu bekerja
Kami pertama-tama menghapus pimpinan
'L'
dari pesan asli sehingga kami memiliki 444 = 148 * 3 karakter.Tanpa memimpin
'L'
, rangkaian karakter terbuat dari 27 karakter berikut:Setiap kelompok 3 karakter dikodekan sebagai:
di mana a, b dan c adalah indeks karakter dalam set karakter di atas.
Ini mengarah ke titik kode Unicode dalam kisaran U + 0020 hingga U + 801F, berakhir di suatu tempat di "CJK Unified Ideographs".
sumber
05AB1E , 319 byte
Menggunakan pengodean CP-1252.
Menafsirkan string berikut sebagai nomor 36 basis dan mengkodekan ke dalam basis 214
Setelah itu kita
Untuk beberapa alasan pengkodean tidak bekerja dengan 0 di akhir yang mengapa memerlukan kasus khusus untuk final ".".
Cobalah online!
sumber
Y
danZ
dengan1
dan2
dan menyimpan beberapa byte. Juga mungkin mengatur ulang 0, 1 dan 2 untuk menyingkirkan kasus khusus yang misterius?PHP, 247 Karakter
kombinasi dari 2 versi sebelumnya
PHP, 261 Karakter
Pengkodean $ s berisi string
PHP Versi Lama, 386 Bytes | Karakter
sumber
C #,
337333331 karakter-4 karakter dengan mengganti
.
s setelah "pariatur" dan "laborum" dengan!
sebelum menggabungkan chars ke chars lebar dan menambahkan garis baru.-2 karakter dengan menetapkan ulang output var daripada menambahkan
+=
.Bagaimana itu bekerja:
String lorem ipsum dikonversi ke kekacauan itu dengan menggantinya
.
dengan!
,dengan
_
begitu ketika ascii chars ditempatkan bersebelahan untuk membuat char yang lebar, setiap char yang lebar adalah karakter tunggal.sumber
ISOLADOS, 44016 byte
http://pastebin.com/raw/Y2aAhdpi
Tekan kode ASCII untuk setiap karakter dalam string Lorem Ipsum, gabungkan semuanya, dan hasilkan.
sumber
MATL , 354 karakter
Ini menerjemahkan dari base-94 (menggunakan karakter ASCII yang dapat dicetak kecuali tanda kutip tunggal; jadi hanya karakter Unicode hingga 126 yang digunakan) ke alfabet karakter yang diperlukan, dibentuk oleh sebagian besar huruf kecil, beberapa huruf besar, spasi, koma, dan titik.
Diperlukan beberapa detik dalam kompiler online.
Cobalah online!
sumber
JavaScript (ES5), 342 karakter
Cukup mudah, jadi saya yakin ada ruang untuk perbaikan. Saya menyandikan setiap pasangan karakter keluaran sebagai satu karakter Unicode.
sumber
var
?join('')
denganjoin``
. Jika tidak, ubah bahasa Anda keJavaScript (ES5)
y/27|0
daripada~~(y/27)
menyimpan dua byte. Anda juga dapat menghapus0
inx.charCodeAt(0)
..split('').map(function).join('')
bisa jadi.replace(/./g,function)
Jelly , 300 karakter (tidak bersaing?)
Cobalah online!
Pengkodeannya adalah Jelly .
Berkat string terkompresi, saya dapat memampatkannya dengan 3 byte.
sumber