Python 2.7 - 10971 8077 byte
cập nhật:
LZMA thực sự vì một số lý do không phù hợp với tôi, vì vậy tôi đã quay trở lại Deflate.
Tôi đã tìm thấy một công cụ trực tuyến để nén PNG hơn nữa (họ nói rằng họ sử dụng nén mất dữ liệu, nhưng mảng vẫn không thay đổi)
- Tôi đánh gôn
__main__.py
kịch bản thêm một chút ...
- Tôi thấy tôi đã bỏ qua một bước (trích xuất các tệp dữ liệu từ kho lưu trữ zip)
- Đã thêm liên kết DL (xem phía dưới)
Hầu hết các thuật toán nén xem dữ liệu là mảng 1 chiều và do đó không thể chụp các ký tự 2 chiều lặp lại được hiển thị trong lệnh gọi vũ trụ (IMO cũng khiến người ngoài hành tinh khó hiểu hơn: P).
Đầu tiên, tôi chọn mỗi ký tự là một mảng 7 * 5 và lập danh sách tất cả các ký tự duy nhất (101 nếu tôi nhớ lại). Sau đó, tôi lặp lại hình ảnh, và khi tìm thấy một nhân vật, vị trí và chỉ số của nhân vật đó (trong danh sách nhân vật) đã được ghi lại.
Các vị trí đó có thể được biểu diễn bằng một int int, tuy nhiên với hơn 2K ký tự được tìm thấy và các vị trí nằm trong khoảng 0-370966 (dạng divmod) yêu cầu tối đa 3 byte mỗi ký tự. Tuy nhiên, tôi đã thu thập các vị trí ký tự theo thứ tự, vì vậy thay vào đó tôi đã chuyển đổi vị trí tuyệt đối sang vị trí bù, làm cho hầu hết các số nhỏ hơn 1 byte. Tôi đã mã hóa danh sách này trong utf-8 để tính đến một vài số lớn hơn 1 byte
Sau khi ghi và xóa tất cả các ký tự trùng khớp, tôi đã lưu png với mức nén tối đa. Sau đó, tôi đã đóng gói tập lệnh tái tạo python (quy trình ngược lại), png, mẫu chatacter và danh sách vị trí ký tự tất cả vào một tệp zip để lợi dụng thực tế là python có thể lấy một thư mục hoặc tệp zip làm đối số và nó sẽ bắt đầu thực thi ở bất kỳ tập tin nào ở cấp cao nhất có tên __main__.py
. Tôi đã chơi xung quanh với 7z một chút để có được độ nén tốt nhất, hóa ra là LZMA với một từ 1M và các từ 32 bit.
đây là kịch bản giải mã (được đánh gôn nhưng vẫn có ý kiến)
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()
liên kết để tải xuống cho tệp zip ...
0
trống , bản in chương trình Snails trống1
và chương trình GolfScript trống in một dòng mới . Ai đó có thể gửi câu trả lời 0 byte, 373888 chương trình :)