골
LZMA2가 효과적으로 작동하지 못하게하기 위해 파일을 집합 적으로 방해하고 수정하는 프로그램 또는 프로그램 쌍을 만듭니다. 중단 및 수정 루틴은 역수 여야하므로 원본 파일을 정확하게 복구 할 수 있습니다.
목표
- 셰익스피어의 수집 된 작품은 일반 UTF-8 (5,589,891 바이트)입니다.
- Wikimedia Commons 2013 최고 해상도 의 올해의 그림 (1,659,847 바이트)
압축 방법
- 우분투 / 관련 :
xz -kz5 <infile>
- 윈도우 :
7z.exe a -txz -mx5 <outfile> <infile>
- 기타 : 셰익스피어의 작품을 1570550 바이트 ± 100 바이트로 압축하는 압축 레벨 5의 LZMA2 압축기를 사용하십시오.
채점; 합계 (모든 바이트에, ls -l
또는 dir
그것을) :
- 프로그램 크기 (파일을 가역적으로 "중단"/ 수정하기 위해 필요한 모든 것)
- 다음의 크기 차이 (절대) :
- 셰익스피어의 원본 수집 작품 및 수정 된 (압축되지 않은) 사본.
- 원본 사진 및 수정 된 (압축되지 않은) 사본.
- 크기의 차이 또는 0 중 큰 값 :
- 셰익스피어에서 수집 한 원본 작품에서 수정 된 LZMA2 압축 사본을 뺀 값.
- 원본 사진에서 수정 된 LZMA2 압축 사본을 뺀 값입니다.
예
불완전한 점수, 게 으르면서 골치 아픈 파이썬 2.x 예제 :
import sys
x = 7919 if sys.argv[1] == 'b' else -7919
i = bytearray(open(sys.argv[2], 'rb').read())
for n in range(len(i)):
i[n] = (i[n] + x*n) % 256
o = open(sys.argv[2]+'~', 'wb').write(i)
달리는...
$ python break.py b pg100.txt
$ python break.py f pg100.txt~
$ diff -s pg100.txt pg100.txt~~
Files pg100.txt and pg100.txt~~ are identical
$ python break.py b Glühwendel_brennt_durch.jpg
$ python break.py f Glühwendel_brennt_durch.jpg~
$ diff -s Glühwendel_brennt_durch.jpg Glühwendel_brennt_durch.jpg~~
Files Glühwendel_brennt_durch.jpg and Glühwendel_brennt_durch.jpg~~ are identical
$ xz -kz5 pg100.txt~
$ xz -kz5 Glühwendel_brennt_durch.jpg~
$ ls -ln
-rw-rw-r-- 1 2092 2092 194 May 23 17:37 break.py
-rw-rw-r-- 1 2092 2092 1659874 May 23 16:20 Glühwendel_brennt_durch.jpg
-rw-rw-r-- 1 2092 2092 1659874 May 23 17:39 Glühwendel_brennt_durch.jpg~
-rw-rw-r-- 1 2092 2092 1659874 May 23 17:39 Glühwendel_brennt_durch.jpg~~
-rw-rw-r-- 1 2092 2092 1646556 May 23 17:39 Glühwendel_brennt_durch.jpg~.xz
-rw-rw-r-- 1 2092 2092 5589891 May 23 17:24 pg100.txt
-rw-rw-r-- 1 2092 2092 5589891 May 23 17:39 pg100.txt~
-rw-rw-r-- 1 2092 2092 5589891 May 23 17:39 pg100.txt~~
-rw-rw-r-- 1 2092 2092 3014136 May 23 17:39 pg100.txt~.xz
점수
- = 194 + abs (5589891-5589891) + 최대 (5589891-3014136, 0) + abs (1659874-1659874) + 최대 (1659874-1646556, 0)
- = 194 + 0 + 2575755 + 0 + 13318
- 2,589,267 바이트 나쁘지만 파일에 아무것도 수행하지 않으면 4,635,153 바이트의 점수를 얻습니다.
설명
이것은 골프이므로 점수 를 최소화 하려고합니다 . 의견이 내 점수에 합법적 인 구멍을 지적하는지 또는 너무 복잡하게 만들 었는지 확실하지 않습니다. 어쨌든 가장 작은 것을 원합니다 .
- 소스 코드
- 압축되지 않은 수정 된 파일과 원본 파일의 차이 (예 : 끝에 1 조의 0을 추가하여 수정하면 점수는 1 조 바이트 증가)
- 압축 된 수정 된 파일과 원본 파일의 차이 (예 : 파일이 압축되지 않을수록 점수가 높아짐) 약간 커지거나 전혀 커지지 않는 완벽하게 압축 할 수없는 파일은 0 점을 얻습니다.