พื้นหลัง
PICASCIIเป็นเครื่องมือที่เรียบร้อยที่จะแปลงรูปภาพให้เป็น ASCII art
มันให้ระดับความสว่างที่ต่างกันโดยใช้อักขระ ASCII สิบตัวต่อไปนี้:
@#+';:,.`
เราจะบอกว่า charxels (องค์ประกอบตัวอักษร) เหล่านี้มีความสว่างตั้งแต่ 1 (เครื่องหมาย -) ถึง 10 (เว้นวรรค)
ด้านล่างคุณสามารถเห็นผลลัพธ์ของการแปลงรหัสเล็กน้อยธงชาติเวลส์เศษส่วน overhanded, เทราต์ขนาดใหญ่และสนามกอล์ฟขนาดเล็กแสดงด้วยแบบอักษรที่ถูกต้อง:
คุณสามารถดูภาพในซอนี้และดาวน์โหลดได้จากGoogle ไดรฟ์
งาน
ในขณะที่ผลลัพธ์สุดท้ายของ PICASCII เป็นที่ชื่นชอบในการมองเห็นภาพทั้งห้าภาพรวมกันมีน้ำหนัก 153,559 ไบต์ รูปภาพเหล่านี้สามารถบีบอัดได้เท่าใดหากเราเต็มใจเสียสละส่วนหนึ่งของคุณภาพ
งานของคุณคือการเขียนโปรแกรมที่รับภาพ ASCII เช่นภาพด้านบนและคุณภาพขั้นต่ำเป็นอินพุตและพิมพ์การบีบอัดภาพที่สูญเสียไป - ในรูปแบบของโปรแกรมเต็มรูปแบบหรือฟังก์ชั่นที่ส่งกลับสตริงเดียว - ความต้องการคุณภาพ
ซึ่งหมายความว่าคุณไม่ต้องเขียนตัวแยกความแตกต่าง มันจะต้องมีอยู่แล้วภายในแต่ละรูปภาพที่ถูกบีบอัด
ภาพต้นฉบับจะประกอบด้วย charxels ที่มีความสว่างระหว่าง 1 ถึง 10 โดยคั่นด้วย linefeeds เป็นเส้นที่มีความยาวเท่ากัน รูปภาพที่บีบอัดต้องมีขนาดเท่ากันและใช้ชุดอักขระเดียวกัน
สำหรับรูปภาพที่ไม่มีการบีบอัดประกอบด้วยn charxels คุณภาพของรุ่นที่บีบอัดของรูปภาพจะถูกกำหนดเป็น
เมื่อc iคือความสว่างของi th charxel ของเอาต์พุตของรูปภาพที่บีบอัดและu iความสว่างของi th charxel ของรูปภาพที่ไม่บีบอัด
เกณฑ์การให้คะแนน
รหัสของคุณจะถูกเรียกใช้ด้วยภาพห้าภาพจากด้านบนเป็นการตั้งค่าอินพุตและคุณภาพขั้นต่ำ 0.50, 0.60, 0.70, 0.80 และ 0.90 สำหรับแต่ละภาพ
คะแนนของคุณคือค่าเฉลี่ยทางเรขาคณิตของขนาดของรูปภาพที่ถูกบีบอัดทั้งหมดเช่นรากที่ยี่สิบห้าของผลิตภัณฑ์ที่มีความยาวของรูปภาพที่ถูกบีบอัดทั้งหมดยี่สิบห้า
คะแนนต่ำสุดชนะ!
กฎเพิ่มเติม
รหัสของคุณต้องใช้กับภาพที่กำหนดเองไม่ใช่เฉพาะรหัสที่ใช้สำหรับให้คะแนน
คาดว่าคุณจะปรับโค้ดของคุณให้เหมาะสมกับกรณีทดสอบ แต่โปรแกรมที่ไม่ได้พยายามบีบอัดรูปภาพตามอำเภอใจจะไม่ได้รับการอัปเกรดจากฉัน
คอมเพรสเซอร์ของคุณอาจใช้ตัวบีบอัดข้อมูลไบต์ในตัว (เช่น gzip) แต่คุณต้องปรับใช้เองเพื่อรับภาพที่ถูกบีบอัด
หัวกระสุนใช้ตามปกติในตัวถอดรหัสสตรีมไบต์ (เช่นการแปลงฐานการถอดรหัสการรันความยาว) ได้รับอนุญาต
รูปภาพของคอมเพรสเซอร์และรูปภาพที่บีบอัดไม่จำเป็นต้องเป็นภาษาเดียวกัน
อย่างไรก็ตามคุณต้องเลือกภาษาเดียวสำหรับรูปภาพที่ถูกบีบอัดทั้งหมด
สำหรับแต่ละอิมเมจที่ถูกบีบอัดจะใช้กฎมาตรฐานของกอล์ฟ
การตรวจสอบ
ฉันได้สร้างสคริปต์ 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
ตัวอย่าง
Bash → 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