Python 2.7 - 10971 8077 ไบต์
อัปเดต:
อัลกอริธึมการบีบอัดส่วนใหญ่มองข้อมูลเป็นอาเรย์ 1 มิติดังนั้นจึงไม่สามารถจับภาพตัวอักษร 2 มิติที่ซ้ำกันที่แสดงในการเรียกของจักรวาล (IMO ยังทำให้มนุษย์ต่างดาวเข้าใจยากเช่นกัน: P)
ก่อนอื่นฉันเลือกตัวละครแต่ละตัวเป็นอาร์เรย์ 7 * 5 และทำรายการของตัวละครที่ไม่ซ้ำกันทั้งหมด (101 ถ้าฉันจำได้) จากนั้นฉันวนซ้ำรูปภาพและเมื่อพบตัวละครตำแหน่งและดัชนีของตัวละครนั้น (ในรายการตัวละคร) จะถูกบันทึก
ตำแหน่งเหล่านั้นสามารถแสดงด้วย int เดียว แต่มีมากกว่า 2K ตัวอักษรและตำแหน่งตั้งแต่ 0-370966 (รูปแบบ divmod) ต้องการมากถึง 3 ไบต์ อย่างไรก็ตามฉันเก็บตำแหน่งอักขระตามลำดับดังนั้นฉันจึงเปลี่ยนตำแหน่งสัมบูรณ์เป็นตำแหน่งออฟเซ็ตแทนทำให้ตัวเลขส่วนใหญ่น้อยกว่า 1 ไบต์ ฉันเข้ารหัสรายการนี้ใน utf-8 เพื่อบัญชีสำหรับจำนวนน้อยที่มากกว่า 1 ไบต์
หลังจากบันทึกและลบตัวอักษรที่ตรงกันทั้งหมดฉันบันทึก png ด้วยการบีบอัดสูงสุด จากนั้นฉันก็บรรจุสคริปต์การสร้างใหม่ของไพ ธ อน (โพรเซสเดียวกัน), png, เทมเพลต chatacter และรายการตำแหน่งอักขระทั้งหมดลงในไฟล์ซิปเพื่อใช้ประโยชน์จากข้อเท็จจริงที่ว่าไพ ธ อนสามารถใช้โฟลเดอร์หรือไฟล์ซิปเป็นอาร์กิวเมนต์และ มันจะเริ่มดำเนินการที่ไฟล์ใด ๆ ในระดับบนสุดชื่อ__main__.pyในระดับบนสุดที่มีชื่อ ฉันเล่นกับ 7z นิดหน่อยเพื่อให้ได้การบีบอัดที่ดีที่สุดซึ่งกลายเป็น LZMA ด้วย 1M dict และ 32 บิตคำ
นี่คือสคริปต์ถอดรหัส (golfed แต่ยังมีความคิดเห็น)
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 ...
0ว่างเปล่าพิมพ์โปรแกรมSnails ที่ว่างเปล่าพิมพ์1และโปรแกรมGolfScript ที่ว่างเปล่าพิมพ์ขึ้นบรรทัดใหม่ . บางคนอาจจะส่งคำตอบ 0 ไบต์ 373,888 โปรแกรม :)