파이썬 2.7- 10971 8077 바이트
최신 정보:
대부분의 압축 알고리즘은 데이터를 1 차원 배열로 간주하므로 우주 호출에 표시되는 반복되는 2 차원 문자를 캡처 할 수 없습니다 (IMO는 외계인도 이해하기 어렵습니다 : P).
먼저 각 문자를 7 * 5 배열로 선택하고 모든 고유 문자 목록을 작성했습니다 (기억하면 101). 그런 다음 이미지를 반복하고 문자가 발견되면 해당 문자 (문자 목록에서)의 위치와 색인이 기록되었습니다.
이러한 위치는 단일 정수로 표시 될 수 있지만 2K 이상의 문자가 발견되며 0-370966 (divmod 형식) 범위의 위치는 각각 최대 3 바이트가 필요합니다. 그러나 문자 위치를 순서대로 수집했기 때문에 대신 절대 위치를 오프셋 위치로 변환하여 대부분의 숫자를 1 바이트 미만으로 만들었습니다. 1 바이트보다 큰 소수를 설명하기 위해이 목록을 utf-8로 인코딩했습니다.
일치하는 모든 문자를 기록하고 제거한 후 png를 최대 압축으로 저장했습니다. 그런 다음 파이썬 재구성 스크립트 (역순으로 동일한 프로세스), png, chatacter 템플릿 및 문자 위치 목록을 모두 zip 파일로 패키지하여 파이썬이 폴더 또는 zip 파일을 인수로 사용할 수 있다는 사실을 이용했습니다. 라는 최상위 레벨의 모든 파일에서 실행을 시작합니다 __main__.py
. 나는 최고의 압축을 얻기 위해 7z로 조금 놀았습니다 .1M dict와 32bit 단어를 가진 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
되고 빈 달팽이 프로그램이 인쇄1
되며 빈 GolfScript 프로그램이 줄 바꿈을 인쇄하는 것은 위험 합니다. 누군가가 0 바이트, 373888 프로그램 답변을 제출할 수도 있습니다 :)