Python 2.7 - 10971 8077 bayt
Güncelleme:
LZMA aslında bir nedenden dolayı benim için çalışmıyor, bu yüzden Deflate'e geri döndüm.
PNG'yi daha da sıkıştırmak için çevrimiçi bir araç buldum (kayıplı sıkıştırma kullandıklarını söylüyorlar, ancak dizi değişmeden kalıyor)
__main__.py
Senaryoyu biraz daha golf oynadım
- Bir adımı atladığımı fark ettim (veri arşivlerini zip arşivinden ayıklama)
- DL bağlantısı eklendi (aşağıya bakın)
Çoğu sıkıştırma algoritması verilere 1 boyutlu bir dizi olarak bakar ve bu nedenle kozmik çağrıda görüntülenen yinelenen 2 boyutlu karakterleri yakalayamaz (IMO ayrıca uzaylıların da anlamasını zorlaştırır: P).
İlk olarak, her karakteri 7 * 5 dizisi olarak seçtim ve tüm benzersiz karakterlerin bir listesini yaptım (hatırlıyorum 101). Sonra görüntüyü yineledim ve bir karakter bulunduğunda, o karakterin (karakter listesinde) konumu ve dizini kaydedildi.
Bu konumlar tek bir int ile temsil edilebilir, ancak 2K'dan fazla karakter bulundu ve 0-370966 (divmod formu) arasındaki konumların her biri en fazla 3 bayt gerektirir. Ancak karakter pozisyonlarını sırayla topladım, bunun yerine mutlak pozisyonu ofset pozisyonuna dönüştürdüm ve sayıların çoğunu 1 bayttan az hale getirdim. 1 bayttan büyük sayıları hesaba katmak için bu listeyi utf-8'de kodladım
Eşleşen tüm karakterleri kaydettikten ve kaldırdıktan sonra, png'yi maksimum sıkıştırma ile kaydettim. Daha sonra python'un bir klasörü veya zip dosyasını bağımsız değişken olarak alabilmesi gerçeğinden yararlanmak için python yeniden yapılandırma komut dosyasını (aynı işlemi tersine), png, chatacter şablonunu ve karakter konumu listesini bir zip dosyasına paketledim ve en üst düzeydeki herhangi bir dosyada yürütülmeye başlayacaktır __main__.py
. En iyi sıkıştırmayı elde etmek için 7z ile oynadım, bu da 1M dict ve 32bit kelimelerle LZMA olduğu ortaya çıktı.
İşte kod çözücü komut dosyası (golf ama yorumlarla hala)
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()
zip dosyası için indirme bağlantısı ...
0
, boş Salyangoz programı yazdırılır1
ve boş GolfScript programı yeni bir satır yazdırır . Birisi 0 bayt, 373888 programlı bir cevap gönderebilir :)