XKCD # 99 , dengan judul "Binary Heart" menunjukkan gambar sederhana satu dan nol, dengan beberapa digit berwarna merah.
Hati merah terlihat oleh mata telanjang, tetapi pesan yang disembunyikan dalam urutan biner tidak. Jika Anda menghapus semua spasi dan baris baru dan menafsirkan urutan biner sebagai kode ASCII 8 bit, Anda akan berakhir dengan pesan:
iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOv
Lucu kan?
Pssst ... String bukan pengulangan string murni.
Tantangan Anda adalah membuat gambar biner ini dengan 21 angka melintang, dan 23 digit kebawah. Harus ada tepat satu ruang antara setiap digit di setiap baris, dan satu baris baru untuk setiap baris baru. Perhatikan bahwa bit terakhir hanya awal dari surat e
, karena 21*23
tidak dapat dibagi oleh 8. Anda perlu bit-bit itu juga benar.
Fungsi atau program tidak boleh mengambil input apa pun. Ruang terkemuka dan trailing serta baris baru diterima.
Hasil kode Anda akan terlihat seperti ini:
0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1
1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0 1
1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 1 0
1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 0 0
1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0
1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 1 1 0 1
0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1
0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1
0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0
1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1
0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0
1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1
0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0
1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1
0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 1
1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0
0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0
1 0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1
1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0
0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0
0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0
1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1
0 0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1
Ini adalah kode golf, jadi jawaban tersingkat (dalam byte) menang.
Papan peringkat
sumber
O
dari string keluaran ASCII!Jawaban:
Jelly ,
363332 byteTerima kasih kepada @JonathanAllan untuk bermain golf 3 byte!
Cobalah online!
Bagaimana itu bekerja
Tautan utama
dieksekusi secara niladis (yaitu, tanpa argumen) ketika program dijalankan. Nilai kembaliannya akan dicetak secara implisit.
menemukan indeks karakter yang dikutip dalam halaman kode Jelly dan menafsirkannya sebagai digit nomor bijective base 250. Ini menghasilkan bilangan bulat 13021639057551959994 .
mengubah integer yang dihasilkan menjadi biner. Ini menghasilkan bit array 1011010010110110001001111011101100110010101111001010011110111010 yang sesuai dengan pengkodean UTF-8 dari string ilOveyOu , bergeser satu bit ke kiri.
Pergeseran diperlukan karena
B
tidak dapat mengembalikan array bit dengan 0 di depan . Pilihan lain termasuk meniadakan digit biner atau menghitung kuadrat secara terbalik, tetapi pendekatan ini menghemat satu byte.cetakan array yang dihasilkan seperti rentang 1 hingga 484 , yaitu, mengulangi isi array sebanyak yang diperlukan untuk mencapai panjang 484 .
Ini satu bit lebih banyak dari yang kita butuhkan, untuk menjelaskan perubahan itu. Kita dapat menghapus bit pertama sekarang, tetapi melakukannya kemudian berarti bahwa semua bit yang harus ditukar berada pada indeks genap, yang memungkinkan kita untuk menyimpan byte yang disebutkan di atas.
mengambil titik kode karakter antara
“
dan‘
( [10, 58, 74, 138, 154, 186] ), lalu "unhalves" mereka, yaitu, gandakan dengan 2 ( [20, 116, 148, 276, 308, 372 ] ).kondisional meniadakan bit pada indeks tersebut. Ini sesuai dengan variasi O / o dalam pola asli.
Akhirnya,
dequeues the bit array (menghapus bit pertama), membagi array yang tersisa ke dalam baris 21 elemen dan mencetak matriks yang dihasilkan sebagai kisi.
sumber
O
sebagai default, saya pikir ini melakukannya:“ỊḂr×C)ḃȯ’B¬ṁ483¬“Œ` ° @‘+\¤¦s21G
Jelly ,
41 40 3533 byteTerima kasih kepada @Dennis karena telah membuat akhir
ṖṖCG
! (komplemenC
=1-x
di tempat yang tidak logis¬
)TryItOnline
Bagaimana?
"Warna" versi, 77 byte
TryItOnline
Jelly tidak memiliki keluaran warna, tetapi ini lebih mudah bagi saya untuk melihat (saya buta warna) ...
Bagaimana?
sumber
¬
, empat byte terakhir bisa menjadiṖṖCG
. :)complement
?Sebenarnya, 58 byte
Cobalah online!
Penjelasan
Ada tiga bagian utama di sini, jadi saya akan memecahnya sesuai.
Bagian 1: Membangun string base-256
Kita benar-benar akan membangun string biner terbalik, untuk mengambil keuntungan dari struktur berdasarkan-tumpukan (LIFO) Sebenarnya dan untuk menghindari komplikasi dengan memimpin nol dalam string biner. Jadi, string biner target adalah
110011011101111001000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111011010011110101001100110111011110010001101101001011010101110111101101001111010100110011011101111011000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111001010011110101001100110111011110110001101101001011010101110111101101001111010100110011011101111001000110110100101101010111011110010100111101010011001101110111101100011011010010110
, yang setara dengan20083405242288679348048842451418880256193335738939042905519679590571514414673488599852759703515507690399267425671627412178904636115120346432419478
dalam desimal. Di base-256 (menggunakan tabel karakter CP437 untuk konversi), string yang sesuai adalah♠n≥6û«≥₧ªn≥6û«÷₧ªn≥6û«÷₧ªn÷6û«≥₧ªn≥6û«≥₧ªn÷6û«÷₧ªn≥6û«≥₧ªn÷6û
. Untuk membangun string biner asli, kami membangun string base-256 (memanfaatkan pola di dalamnya), dan melakukan konversi basis ke desimal dan biner.String base-256 memiliki format berikut (spasi dan baris baru ditambahkan untuk kejelasan):
Dengan demikian, masing-masing dari 7 bagian tengah dapat dibentuk dengan menggunakan perancah
«%s₧ªn%s6û
dan mengganti%s
bagian - bagian dengan salah satu≥
atau÷
.Urutan spesifik dari
≥
s dan÷
s yang kita butuhkan adalah≥≥÷≥÷÷≥≥≥÷÷≥≥÷
. Karena kita membutuhkan ini sebagai daftar string panjang-1, cara naif untuk mewakili ini adalah"≥≥÷≥÷÷≥≥≥÷÷≥≥÷"#
(dorong string, buat menjadi daftar). Namun, kami bisa melakukan sedikit lebih baik. Dengan mengartikan string itu sebagai angka biner (di mana≥
mewakili1
dan÷
mewakili0
), kita mendapatkan13542
dalam desimal. Dengan mengubah ini kembali ke biner (menggunakan1
s dan s tradisional0
), dan mengindeks ke dalam string panjang-2, kita bisa mendapatkan daftar menggunakan satu byte lebih sedikit daripada metode naif.Bagian 2: Konversi ke biner
Bagian ini jauh lebih mudah. Jika Sebenarnya memiliki kemampuan untuk secara langsung mengkonversi basis-256 ke biner, kami akan menggunakannya. Sayangnya, tidak, jadi kita harus menggunakan desimal sebagai format perantara.
Dalam
,
kode berikut ini merupakan kode dari Bagian 1 - untuk tujuan penjelasan, saya telah mengganti kode Bagian 1 dengan,
untuk membaca output dari Bagian 1 dari STDIN. Ini bukan bagian dari kode final yang sebenarnya.Bagian 3: Memformat
Jika tantangannya adalah hanya mengeluarkan string biner apa adanya, kita akan selesai. Namun, kami masih memiliki beberapa format yang harus dilakukan untuk mendapatkan string biner ke dalam persegi panjang 21 x 23.
Seperti pada Bagian 2,
,
mewakili output dari bagian sebelumnya, dan bukan bagian dari kode aktual.Bagi mereka yang melacak di rumah, ini adalah kode Python 3 yang setara (481 byte):
sumber
JavaScript (ES6),
169...136135 byteDisimpan 2 byte berkat Andrakis
Disimpan 4 byte berkat Hedi
Saved
35 bytes berkat NeilVersi berwarna, 249 byte (237 byte JS + 12 byte CSS)
Kode JS menampilkan seni ASCII dengan tag tebal untuk hati. Diperlukan 12 byte CSS untuk diwarnai dengan warna merah. (Apakah jumlah byte itu adil?)
sumber
s=>s.replace(/./g,'$& ')
. Saya telah mengerjakan solusi yang hampir identik.s.replace(/./g,'$& ')
bisa digantikan olehs.split``.join` `
?[...s].join` `
replace(/./g,(c,i)=>c+=++i%21?' ':'\n')
(jelas menggunakan baris literal di sana) menyimpan byte lebih lanjut. Mungkin ada cara yang lebih baik untuk mengekspresikan ide itu.05AB1E ,
775453444341 byteMenggunakan pengodean CP-1252 .
Penjelasan
Cobalah online!
sumber
Sðý42ô»
untukS21ô»
, karena»
bergabung daftar batin dengan spasi secara implisit (dan•1žä¿*•
seharusnya sekarang•Å¾$6•
, karena bilangan bulat dikodekan dalam basis-255 sekarang, bukan basis-214).CJam , 48 byte
Kolaborasi dengan @MartinEnder, yang melepas 3 byte rumit dengan
"uilvey"3/
string. Penerjemah online .sumber
Javascript ES6 REPL ,
124121119113 byteDisimpan 6 byte berkat produk @ETH
Ini adalah program lengkap yang dapat ditempelkan di REPL / konsol untuk menghasilkan hasil yang benar.
Tampilkan cuplikan kode
Lebih banyak kata kerja
Hanya JavaScript berwarna, 281 byte
Ini bekerja dengan mengganti warna setiap n bit dan memanfaatkan kemampuan console.log untuk mencatat warna
CSS Heart berwarna, 229 + 12 byte
Jika menggunakan css diperbolehkan, hati berwarna dapat dikurangi lebih jauh menjadi 229 byte kode JavaScript dan 12 byte CSS
Tampilkan cuplikan kode
sumber
a
dan hanya menggunakannum>>i/64&1
di kedua tempat, menghemat 1 byte. Juga,++i%21==0?newline:space
sama dengan++i%21?space:newline
.i=0,r=''
menjadii=r=''
;''
secara otomatis dipaksa ke 0.MATL,
5655 byteCobalah secara Online
Penjelasan
sumber
PowerShell v2 +, (UTF-16) 300 byte
Jumlah byte yang salah dikoreksi berkat @Mego
Bukan yang terpendek, tetapi pendekatan yang berbeda. Saya secara manual mengambil setiap baris dan mengirisnya menjadi pasangan masing-masing (kira-kira) panjang signifikan 9-11. Konversi masing-masing nilai biner menjadi
char
(Catatan: PowerShell menggunakan UTF-16 secara default, bukan UTF-8), dan memotongnya menjadi string. Itulah'...'
awalnya.Kami kemudian
-split
ke string 2, dan loop melalui masing-masing pasangan. Pasangan-pasangan itu dibagi menjadichar
-array via$_[0,1]
, dan masing-masing dilemparkan sebagai int+$_
, dan[convert]
ed ke dalam biner (,2
)String
. Itu-join
disatukan menjadi satu string, laluPadLeft
untuk mendapatkan panjang yang tepat, lalu masing-masing elemen-replace
d dengan dirinya sendiri dan spasi'$1 '
.String-string itu semuanya tertinggal di pipeline, dan output tersirat, dengan default
Write-Output
menempelkan garis baru di antara elemen-elemen.sumber
len("'ږƍƕ๓ƺ֥˄ϝӊ༭ǝ֥ţϝɥޔǮƱϝIJ˲ӷʴ˘ͻ֙ץŻŬɻˌʼֽ͖ҶɻŦʼʞݖɛĽƳ'-split'(..)'-ne''|%{(-join($_[0,1]|%{[convert]::ToString(+$_,2)})).PadLeft(21,'0')-replace'(.)','$1 '}".encode('utf-16be'))
/// , 237 byte
Cobalah online!
sumber
Python 3,
147144 byteUji di ideone
Menginisialisasi
i
ke0
dalam deklarasi fungsi, kemudian mengulangi ini 23 kali:membuat seluruh string biner tanpa spasi (lihat di bawah);
mengiris satu baris dari dalam menggunakan
[i:i+21]
;menyisipkan spasi dengan
' '.join(...)
;cetakan; dan
selisih
i
21 dengani+=21
Untuk membuat seluruh string biner:
berulang
"ilOveyOu"
delapan kali;diganti
O
dengan yango
diperlukan (pada indeks[2,14,18,34,38,46]
);- - - ini dicapai dengan
chr(j+30)in' ,0@DL'
menyimpan 3 bytemengkonversi masing-masing karakter ke urutannya;
melemparkan setiap ordinal ke string biner (
'0bxxxxxxx'
);menghapus pemimpin
'0b'
dari masing-masing menggunakan[2:]
;masing-masing ditukar dengan
'0'
; danbergabung dengan semuanya
''.join(...)
sumber
i=0\nexec(...)
ataui=0;exec(...)
untuk 137 byte.exec("...")
keexec"..."
danprint(...)
keprint...
PHP + HTML + CSS, 173 Bytes Berwarna 367 Bytes
CLI hanya PHP 173 Bytes
sesuai dengan teks tipe konten spec karunia / html
b{all:unset;color:red}
dari padab{all:unset;color:#911;background:red}
di versi pertamaPHP + HTML + CSS, 392 Bytes
merah hati + hitam yang terlihat lebih cantik
Mungkin memanggil nomor warna di Bagian CSS
tambahkan ini sebelum terlihat lebih bagus
Keluaran versi pertama itu adalah Kode HTML paling jelek di hidup saya
hati merah-hitam
375 Bytes untuk membuat Halaman HTML dengan PHP secara langsung
sumber
color:#911;background:red
dengancolor:red;
membuatnya sesuai dengan spesifikasi karunia serta menghemat beberapa byte.Powershell, 110 byte
Penjelasan:
Baris pertama dari skrip mengambil substring dan menyisipkan surat di
O
antara mereka. Hasilnya adalah stringuiloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOvey
. Perhatikan bahwa karakter pertama dan terakhir berlebihan.Loop menghasilkan semua yang diperlukan
(8..490)
bit yang dari karakter string, serta spasi atau umpan baris.Teka-teki penerima surat valentine
Dapat dilihat bahwa simbol kecil dan besar itu
O
sendiri merupakan bit encoding. Ada 15 simbol (bit). Hanya ada satu partisi pada bit untuk mendapatkan karakter ASCII:oOOooOOO
+ooOoOOO[o]
. Kami harus menambahkan yang kecilo
alih - alih0
di bagian akhir. Simbol ASCII ini adalah:g.
Siapa yang misterius ini
g.
?sumber
PHP, 121 byte
kerusakan
sumber
q / kdb +,
10793855553 byteLarutan:
Contoh:
Penjelasan:
Catatan:
sumber
Python 3, 199 Bytes:
sumber
Python 3, 170 byte
membuat pengulangan string "Il% svey% su", mengulanginya beberapa kali, kemudian menggunakan tuple untuk memasukkan semua huruf o. Kemudian mengonversinya menjadi biner, menggunakan modul textwrap, mengubah setiap item dari yang baru daftar ke daftar, bergabung dengan spasi, lalu menambahkan 0 1 1 karena itu tampaknya sebuah rintisan atau sesuatu
sumber
Mathematica, 123 byte (275 dengan warna)
Saya tidak yakin apakah menggunakan
Grid
bukannya mengeluarkan string tidak apa-apa (jika tidak maka ini adalah entri yang tidak bersaing).B / W
Warna
sumber
grid
dalam teks biasa dan menempelkannya ke notepad? Seperti apa bentuknya? Spasi dipisahkan (spasi tunggal) dengan baris baru, seperti yang ditunjukkan gambar?Ruby 142 Bytes
(Sedikit lebih) terbaca:
Saya belum menemukan cara untuk menyingkat teks asli menjadi bentuk yang lebih ringkas di Ruby - ia memiliki beberapa fungsi manipulasi String yang hebat, tetapi semua cara saya telah mencoba menggunakan lebih banyak karakter daripada string itu sendiri. Setiap petunjuk dihargai, ini adalah Code Golf pertama saya di StackOverflow!
sumber
a
), lalu melakukana+a+a
...? Bahkan lebih baik, jika Ruby mendukung perbanyakan string,a*count
!a+a+a
jalannya)o
dengan modalO
!Rust, 195 byte
Tidak Disatukan:
sumber
C (gcc) , 102 byte
Kehabisan
Cobalah online!
sumber
K (oK) ,
5048 byteLarutan:
Cobalah online!
Penjelasan:
Port solusi Q / KDB + saya .
Catatan:
sumber
2 14 18 34 38 46
->0x020e1222262e
Pyth, 47 byte
Cobalah online di sini .
sumber
/// , 220 byte
Cobalah online!
sumber
C ++ 11, Non-bersaing,
726687636 byte (* Diperlukan NIX atau W10 ambang 2)Saya tahu ini bisa bermain golf dengan lebih baik. Saya ingin melihat c ++ jawaban pendek sialan!
Saya juga mungkin membuat beberapa kesalahan ketika saya mengkodekan bagian hati.
Output (warna tetap):
sumber
Python, 473 byte
Berwarna!
sumber
str.translate
mungkin pilihan yang lebih baikFEU , 360 byte
Kompresi hanya bodoh
sumber