배경
PICASCII 는 이미지를 ASCII 아트로 변환하는 깔끔한 도구입니다.
다음과 같은 10 개의 ASCII 문자를 사용하여 다른 정도의 밝기를 얻습니다.
@#+';:,.`
우리는이 charxels (문자 요소)가 1 (부호)에서 10 (공간)까지의 밝기를 가지고 있다고 말할 것입니다.
아래에서는 작은 글꼴, 웨일스 어 깃발, 넘친 프랙탈, 큰 송어 및 작은 골프를 올바른 글꼴로 표시 한 결과를 볼 수 있습니다.
이 바이올린 에서 이미지를보고 Google 드라이브 에서 이미지를 다운로드 할 수 있습니다 .
태스크
PICASCII의 최종 결과는 시각적으로 만족 스럽지만 결합 된 5 개의 이미지는 모두 153,559 바이트입니다. 품질의 일부를 기꺼이 희생하려는 경우 이러한 이미지를 얼마나 압축 할 수 있습니까?
당신의 임무는 위와 같은 ASCII 아트 이미지와 최소 품질을 입력으로 받아들이고 전체 프로그램 또는 단일 문자열을 반환하는 함수의 형태로 이미지의 손실 압축을 인쇄하는 프로그램을 작성하는 것입니다. 품질 요구 사항.
즉, 별도의 압축 해제기를 작성하지 않아도됩니다. 압축 된 각 이미지에 내장되어 있어야합니다.
원본 이미지는 밝기가 1에서 10 사이 인 charxels로 구성되며 줄 바꿈으로 같은 길이의 줄로 구분됩니다. 압축 된 이미지는 크기가 동일해야하며 동일한 문자 세트를 사용해야합니다.
n 개의 charxels 로 구성된 압축되지 않은 이미지 의 경우 이미지의 압축 버전 품질은 다음과 같이 정의됩니다.
여기서 c를 난 의 밝기이다 내가 번째 압축 영상의 출력과 charxel U I 의 밝기 I 번째의 압축되지 않은 이미지 charxel.
채점
코드는 각 이미지에 대해 0.50, 0.60, 0.70, 0.80 및 0.90의 입력 및 최소 품질 설정으로 위의 5 개 이미지로 실행됩니다.
점수는 압축 된 모든 이미지의 크기, 즉 25 개의 압축 된 이미지의 길이에 대한 곱의 근이 25입니다.
최저 점수가 이깁니다!
추가 규칙
스코어링에 사용 된 이미지 만이 아니라 임의의 이미지에 대해 코드가 작동해야합니다.
테스트 사례에 맞게 코드를 최적화 할 것으로 예상되지만 임의의 이미지를 압축 하려고 시도 하지 않는 프로그램 은 나에게 찬성하지 않습니다.
컴프레서는 내장 바이트 스트림 컴프레서 (예 : gzip)를 사용할 수 있지만 압축 된 이미지를 위해 직접 구현해야합니다.
바이트 스트림 압축 해제 기 (예를 들어, 기본 변환, 런-길이 디코딩)에서 일반적으로 사용되는 Bulit-in이 허용됩니다.
압축기와 압축 이미지는 동일한 언어 일 필요는 없습니다.
그러나 모든 압축 이미지에 대해 단일 언어를 선택해야합니다.
각 압축 이미지에 표준 코드 골프 규칙이 적용됩니다.
확인
모든 품질 요구 사항을 쉽게 확인하고 제출 점수를 계산하기 위해 CJam 스크립트를 만들었습니다.
여기 또는 여기 에서 Java 인터프리터를 다운로드 할 수 있습니다 .
e# URLs of the uncompressed images.
e# "%s" will get replaced by 1, 2, 3, 4, 5.
"file:///home/dennis/codegolf/53199/original/image%s.txt"
e# URLs of the compressed images (source code).
e# "%s-%s" will get replaced by "1-50", "1-60", ... "5-90".
"file:///home/dennis/codegolf/53199/code/image%s-%s.php"
e# URLs of the compressed images (output).
"file:///home/dennis/codegolf/53199/output/image%s-%s.txt"
e# Code
:O;:C;:U;5,:)
{
5,5f+Af*
{
C[IQ]e%g,X*:X;
ISQS
[U[I]e%O[IQ]e%]
{g_W=N&{W<}&}%
_Nf/::,:=
{
{N-"@#+';:,.` "f#}%z
_::m2f#:+\,81d*/mq1m8#
_"%04.4f"e%S
@100*iQ<"(too low)"*
}{
;"Dimension mismatch."
}?
N]o
}fQ
}fI
N"SCORE: %04.4f"X1d25/#e%N
예
배쉬 → PHP, 30344.0474
cat
모든 입력에 대해 100 % 품질을 달성합니다.
$ java -jar cjam-0.6.5.jar vrfy.cjam 1 50 1.0000 1 60 1.0000 1 70 1.0000 1 80 1.0000 1 90 1.0000 2 50 1.0000 2 60 1.0000 2 70 1.0000 2 80 1.0000 2 90 1.0000 3 50 1.0000 3 60 1.0000 3 70 1.0000 3 80 1.0000 3 90 1.0000 4 50 1.0000 4 60 1.0000 4 70 1.0000 4 80 1.0000 4 90 1.0000 5 50 1.0000 5 60 1.0000 5 70 1.0000 5 80 1.0000 5 90 1.0000 SCORE: 30344.0474