Python 2.7- 10971 8077バイト
更新:
ほとんどの圧縮アルゴリズムはデータを1次元配列と見なすため、宇宙の呼び出しで表示される繰り返しの2次元文字をキャプチャできません(IMOにより、エイリアンも理解しにくくなります:P)。
最初に、各文字を7 * 5配列として選択し、すべての一意の文字のリストを作成しました(覚えている場合は101)。その後、画像を反復処理し、文字が見つかったときに、その文字の位置とインデックス(文字リスト内)を記録しました。
これらの位置は1つのintで表すことができますが、2K以上の文字が見つかり、0〜370966(divmod形式)の範囲の位置にはそれぞれ最大3バイトが必要です。ただし、文字の位置は順番に収集したため、代わりに絶対位置をオフセット位置に変換し、ほとんどの数字を1バイト未満にしました。utf-8でこのリストをエンコードして、1バイトを超える数個の数字を説明しました。
一致するすべての文字を記録して削除した後、最大の圧縮でpngを保存しました。次に、python再構築スクリプト(逆プロセス)、png、chatacterテンプレート、および文字位置リストをすべてzipファイルにパッケージ化して、pythonがフォルダーまたはzipファイルを引数として取得できるという事実を活用します。という名前の最上位のファイルで実行を開始します__main__.py
。最高の圧縮を得るために7zを少し試してみましたが、これは1Mの辞書と32ビットワードのLZMAでした。
これがデコーダースクリプトです(ゴルフはされていますが、まだコメントがあります)
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バイトの373888プログラムの回答を送信する可能性があります:)