Python 2.7 - 10971 8077 byte
memperbarui:
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)
- Saya memainkan
__main__.py
skrip sedikit lebih ...
- Saya menemukan saya sedang menghilangkan langkah (mengekstraksi file data dari arsip zip)
- Menambahkan tautan DL (lihat bawah)
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)
import sys,zipfile as z
z.ZipFile(sys.argv[0]).extractall() #extract data files from zip to cwd
from numpy import*
o=open #next line overwrites open, which I need
from PIL.Image import*
from scipy.ndimage import*
a=imread('p')[:,:,0]/255 #read image file
a[:2414,0]=0 #draw vertical borders
a[2541:,0]=0
a[2412:,-1]=0
a[:2287,-1]=0
for x in range(0,2921,127):a[[x,x+126],:]=0 #draw horizontal borders
with o('c','rb') as f:t=f.read();C=[int(i)for c in t for i in'{0:08b}'.format(ord(c))] #read character template file and convert to list of bytes
C=array(C[:-1]).reshape([101,7,5]) #re-slice (extra 0 appended to make even number of bytes) and re-shape
with o('l','rb') as f:L=array([ord(x)for x in f.read().decode('utf_8')]).reshape([2158,2]) #read decode and reshape positional list
p=0 #relative position accumulator
for e in L:p+=e[0];x,y=p%127,p/127;a[y:y+7,x:x+5]=C[e[1]] #divmod for x,y position and paste character template onto array at position
i=fromarray(a*255)
i.show()
tautan untuk mengunduh file zip ...
0
yang kosong , cetakan program Siput yang kosong1
, dan program GolfScript yang kosong mencetak baris baru . Seseorang mungkin mengirimkan 0 byte, 373888 jawaban program :)