The panggilan kosmik adalah pesan yang dikirim ke ruang angkasa pada tahun 1999 dan 2003. Ini terbuat dari 23 127 * 127px gambar monokrom bitmap, seperti yang dijelaskan di sini .
Misi Anda adalah menulis sebuah program yang menampilkan seluruh pesan 127 * 2921px, baik sebagai teks (terbuat dari nol, satu, dan jeda baris) atau sebagai gambar (digambar di layar atau disimpan di disk). Akan ada dua kategori pemenang: satu untuk output teks dan satu untuk output gambar.
Semua trik diizinkan, kecuali celah umum.
Diperbolehkan untuk mengeluarkan 23 halaman secara terpisah.
Anda diperbolehkan menulis hingga 23 program (seperti, satu untuk setiap halaman) dan menjumlahkan ukurannya untuk menentukan skor Anda.
Diperbolehkan untuk menggunakan hingga 23 file biner di samping program Anda. Berat badan mereka dihitung dalam skor Anda.
Kode terpendek (dalam byte) menang.
Pada 1 bit per pixel, gambar berisi 127 * 127 * 23/8 = 46370 byte + 7 bit data. (peringatan: itu tidak diizinkan untuk menghasilkan nol tambahan jika Anda menyimpan nilai piksel ke 46371 byte)
Mengejar baris baru / ruang diizinkan untuk output teks.
Output visual tidak dapat mengandung piksel hitam selain piksel hitam dari panggilan kosmik. Itu dapat digambar dalam satu kolom (dipesan dengan benar), atau dibagi dalam 23 gambar, atau animasi (seperti gif), juga dipesan dengan benar.
Lampiran: output teks , dan output gambar untuk mereproduksi:
0
yang kosong , cetakan program Siput yang kosong1
, dan program GolfScript yang kosong mencetak baris baru . Seseorang mungkin mengirimkan 0 byte, 373888 jawaban program :)Jawaban:
GIF, 27386 byte
Berikut adalah halaman-halaman dari transmisi asli yang diiris menjadi frame GIF individu, ternyata tidak sekecil 1 PNG dari semuanya :(
sumber
HTML, 16012b
Saya mengompres gambar di PNG8, membukanya di editor teks, ditambahkan
<svg onload="document.body.innerHTML='<img src=#>'">
di akhir, dan voila:
Demo: http://xem.github.io/miniCosmicCall/
NB: menambahkan saja
<img src=#>
berfungsi juga tetapi memungkinkan banyak sampah terlihat, jadi saya lebih suka tidak melakukannya.PS: untuk bersenang-senang, saya juga memasukkan seluruh pesan dalam satu tweet yang dapat dieksekusi (Anda dapat menyalin-menempelnya di konsol browser dan gambar muncul):
https://twitter.com/MaximeEuziere/status/742440423994580992
sumber
Python 2.7 -
109718077 bytememperbarui:
LZMA sebenarnya karena suatu alasan tidak bekerja untuk saya, jadi saya kembali ke Deflate.
Saya menemukan alat online untuk mengompresi PNG lebih jauh (mereka mengatakan mereka menggunakan kompresi lossy, tetapi array tetap tidak berubah)
__main__.py
skrip sedikit lebih ...Sebagian besar algoritma kompresi melihat data sebagai array 1 dimensi, dan karenanya tidak dapat menangkap karakter 2 dimensi berulang yang ditampilkan dalam panggilan kosmik (IMO juga membuat lebih sulit bagi alien untuk memahami juga: P).
Pertama, saya memilih setiap karakter sebagai array 7 * 5 dan membuat daftar semua karakter unik (101 jika saya ingat). Kemudian saya mengulangi gambar, dan ketika sebuah karakter ditemukan, posisi dan indeks karakter itu (dalam daftar karakter) direkam.
Posisi-posisi itu dapat diwakili dengan satu int, namun dengan lebih dari 2K karakter ditemukan, dan posisi mulai dari 0-370966 (bentuk divmod) masing-masing memerlukan hingga 3 byte. Saya mengumpulkan posisi karakter secara berurutan, jadi saya malah mengubah posisi absolut menjadi posisi offset, membuat sebagian besar angka kurang dari 1 byte. Saya menyandikan daftar ini dalam utf-8 untuk menjelaskan beberapa angka yang lebih besar dari 1 byte
Setelah merekam dan menghapus semua karakter yang cocok, saya menyimpan png dengan kompresi maksimum. Saya kemudian mengemas skrip rekonstruksi python (membalikkan proses yang sama), png, template chatacter, dan daftar posisi karakter semuanya ke dalam file zip untuk mengambil keuntungan dari fakta bahwa python dapat mengambil folder atau file zip sebagai argumen, dan itu akan memulai eksekusi pada file apa pun di tingkat atas bernama
__main__.py
. Saya bermain-main dengan 7z sedikit untuk mendapatkan kompresi terbaik, yang ternyata menjadi LZMA dengan dict 1M dan kata-kata 32bit.inilah skrip dekoder (golf tetapi dengan komentar masih)
tautan untuk mengunduh file zip ...sumber
Gzipbzip2
di shell,2091418965 byteBuat file data output dengan output teks yang disediakan dalam pertanyaan,
bzip2
dan ganti nama files
. Ini kemudian memungkinkan:untuk melakukan pekerjaan itu. Jadi itu menambahkan hingga 18.958 byte data dan perintah 7 byte.
sumber
Pyth, 46381 byte
Untuk alasan yang jelas itu tidak dapat diposting di sini.
Sampel.
Pastebin dari hexdump program.
sumber
jc.BC""127"
).Bash + WebP binary, 11 + 15330 = 15341 byte
Seperti aturan nyatakan ini:
dan
… Saya tidak bisa menahan diri untuk memposting sesuatu yang bodoh sederhana.
Program ini dalam bash dan menghasilkan gambar dengan menyimpannya di disk.
Ini menggunakan 1 file biner, yang juga merupakan file gambar (ya WebP adalah format gambar), oleh karena itu program ini dapat melakukan sesedikit ... membuat salinan file itu.
Jadi, kodenya (11 byte):
Dengan asumsi biner pengiring bernama "b", kode menulis file gambar ke disk dengan ekstensi yang benar ("a.webp").
Saya melihat sedikit alasan untuk mengunggah biner, karena itu dibuat sepele dengan menjalankan
ini menghasilkan file dengan 15330 byte. Jika ada yang mau, saya bisa mengunggahnya di suatu tempat.
NB:
-z
opsi dalamcwebp
mengaktifkan mode kompresi lossless.9
adalah kekuatan kompresi (maks).sumber
Python 3, 64513 byte
Gunakan hanya ASCII!
http://pastebin.com/PMLb4Xti
Versi lama, 64529 byte: http://pastebin.com/nteYkUtM
sumber
import lzma,base64,os