Lý lịch
PICASCII là một công cụ gọn gàng chuyển đổi hình ảnh thành nghệ thuật ASCII.
Nó đạt được các mức độ sáng khác nhau bằng cách sử dụng mười ký tự ASCII sau:
@#+';:,.`
Chúng ta sẽ nói rằng các charxels này (các yếu tố nhân vật) có độ sáng từ 1 (tại dấu) đến 10 (không gian).
Dưới đây, bạn có thể thấy kết quả của việc chuyển đổi một ít mã, cờ xứ Wales, một hình chữ thập quá tay, một con cá hồi lớn và một ít golf, được hiển thị với phông chữ chính xác:
Bạn có thể xem hình ảnh trong fiddle này và tải chúng từ Google Drive .
Bài tập
Mặc dù kết quả cuối cùng của PICASCII rất dễ chịu, nhưng tất cả năm hình ảnh được kết hợp có trọng lượng 153.559 byte. Những hình ảnh này có thể được nén bao nhiêu nếu chúng ta sẵn sàng hy sinh một phần chất lượng của chúng?
Nhiệm vụ của bạn là viết một chương trình chấp nhận hình ảnh nghệ thuật ASCII như các hình ảnh trên và chất lượng tối thiểu làm đầu vào và in một hình ảnh nén bị mất - dưới dạng một chương trình đầy đủ hoặc một hàm trả về một chuỗi - đáp ứng yêu cầu chất lượng.
Điều này có nghĩa là bạn không được viết một bộ giải nén riêng; nó phải được tích hợp vào mỗi hình ảnh nén.
Hình ảnh gốc sẽ bao gồm các charxels có độ sáng trong khoảng từ 1 đến 10, được phân tách bằng các đường kẻ thành các đường có cùng độ dài. Hình ảnh nén phải có cùng kích thước và sử dụng cùng một bộ ký tự.
Đối với hình ảnh không nén bao gồm n charxels, chất lượng của phiên bản nén của hình ảnh được xác định là
Trong đó c i là độ sáng của charxel thứ i của đầu ra của hình ảnh nén và u i độ sáng của charxel thứ i của hình ảnh không nén.
Chấm điểm
Mã của bạn sẽ được chạy với năm hình ảnh ở trên dưới dạng cài đặt chất lượng đầu vào và tối thiểu là 0,50, 0,60, 0,70, 0,80 và 0,90 cho mỗi hình ảnh.
Điểm của bạn là giá trị trung bình hình học của kích thước của tất cả các hình ảnh nén, nghĩa là gốc thứ hai mươi lăm của sản phẩm có độ dài của tất cả hai mươi lăm hình ảnh nén.
Điểm thấp nhất sẽ thắng!
Quy tắc bổ sung
Mã của bạn phải hoạt động đối với các hình ảnh tùy ý, không chỉ các hình ảnh được sử dụng để ghi điểm.
Dự kiến bạn sẽ tối ưu hóa mã của mình đối với các trường hợp thử nghiệm, nhưng một chương trình thậm chí không cố nén các hình ảnh tùy ý sẽ không nhận được sự hỗ trợ từ tôi.
Máy nén của bạn có thể sử dụng máy nén luồng byte tích hợp (ví dụ: gzip), nhưng bạn phải tự thực hiện chúng cho các hình ảnh nén.
Bulit-in thường được sử dụng trong bộ giải nén luồng byte (ví dụ: chuyển đổi cơ sở, giải mã độ dài chạy) được cho phép.
Máy nén và hình ảnh nén không phải ở cùng một ngôn ngữ.
Tuy nhiên, bạn phải chọn một ngôn ngữ cho tất cả các hình ảnh nén.
Đối với mỗi hình ảnh nén, áp dụng quy tắc golf mã tiêu chuẩn.
xác minh
Tôi đã tạo một tập lệnh CJam để dễ dàng xác minh tất cả các yêu cầu chất lượng và tính điểm của bài nộp.
Bạn có thể tải xuống trình thông dịch Java từ đây hoặc tại đây .
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
Thí dụ
Bash → PHP, điểm số 30344.0474
cat
Đạt 100% chất lượng cho tất cả các đầu vào.
$ 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