งาน
เขียนโปรแกรมหรือฟังก์ชั่นที่ต้องใช้ภาพของความกว้างw
และความสูงh
และสองจำนวนเต็มa <= w/2
และb <= h/2
, และผลการแสดงศิลปะ ASCII ของภาพที่มีมิติxa
b
ascii art ควรสร้างผ่านขั้นตอนต่อไปนี้ (หรือกระบวนการอื่นที่มีเอาต์พุตเดียวกัน):
ปรับขนาด
w
xh
ภาพเพื่อx2a
2b
สีของพิกเซล(x, y)
ในภาพที่ปรับขนาดควรเท่ากับค่าเฉลี่ยของสีของพิกเซลทั้งหมดจากภาพต้นฉบับภายในสี่เหลี่ยมที่มีมุมต่อไปนี้:(floor[x * w/2a], floor[y * h/2b]) (ceil[(x+1) * w/2a], ceil[(y+1) * h/2b])
รูปภาพที่ถูกปรับขนาดควรถูกทำให้เสื่อมสภาพโดยการใช้ค่าเฉลี่ยของส่วนประกอบสีแดงสีเขียวและสีน้ำเงินของสีและตั้งค่าองค์ประกอบแต่ละส่วนเป็นค่าเฉลี่ยนี้
ควรแสดงอักขระสำหรับบล็อก 2x2 แต่ละพิกเซลโดยทำตามกฎด้านล่าง:
- อนุญาต
e = 3 - floor[color/64]
, ที่ซึ่งสีหมายถึงส่วนประกอบสีแดงของสีของพิกเซลซ้ายบน (ในช่วง 0..255) อนุญาตf
,g
และh
อ้างถึงค่านี้ แต่สำหรับพิกเซลบนขวา, ซ้ายล่างและพิกเซลล่างขวา - อนุญาต
z
เป็นค่าเฉลี่ยของe
,f
, ,g
h
- เอาท์พุทตัวละครที่สอดคล้องกับต่อไปนี้ (สีขาวหมายถึงพิกเซลที่
3 - floor[color/64]
มีศูนย์และสีเทาหมายถึงไม่ใช่ศูนย์) - = ส่งออกช่องว่าง (
)
- หรือ= เอาท์พุท
"
ถ้าe (or f) >= 2
และ'
เป็นอย่างอื่น - หรือ= เอาท์พุท
,
ถ้าg (or h) >= 2
และ.
เป็นอย่างอื่น - หรือ= เอาท์พุท
-
- หรือ= เอาท์พุท
;
- = เอาต์พุต
\
- = เอาต์พุต
/
- = เอาต์พุต
J
- = เอาต์พุต
L
- = เอาต์พุต
7
- = เอาต์พุต
P
-
z = 1
:*
เอาท์พุทz = 2
:C
เอาท์พุทz = 3
:#
เอาท์พุท
- อนุญาต
หมายเหตุอื่น ๆ : ค่าเฉลี่ยทั้งหมดที่ดำเนินการในขั้นตอนข้างต้นควรใช้การหารจำนวนเต็ม (เช่นการปัดเศษเป็น 0)
คุณอาจใช้ห้องสมุดเพื่ออ่านภาพ แต่อาจไม่ใช้ห้องสมุดสำหรับขั้นตอนการปรับขนาดและ desaturation
อินพุต
โปรแกรมของคุณใช้ข้อมูลสามส่วน:
- รูปภาพ ภาพนี้อาจอยู่ในรูปแบบที่คุณต้องการ (เช่น PNG, PPM)
- ความกว้างของศิลปะ ASCII (จำนวนตัวอักษร)
- ความสูงของศิลปะ ASCII (จำนวนตัวอักษร)
อินพุตอาจถูกอ่านผ่าน STDIN ส่งผ่านเป็นอาร์กิวเมนต์บรรทัดคำสั่งเก็บไว้เป็นตัวแปร ฯลฯ
เอาท์พุต
โปรแกรมของคุณจะแสดงผล ASCII ที่สร้างขึ้นจากภาพและผ่านกระบวนการที่อธิบายไว้ข้างต้น แต่ละบรรทัดจะต้องมีความกว้างเท่ากัน (ความกว้างที่ผ่านเป็นอินพุต) และไม่มีการเพิ่มหรือลบช่องว่างเพิ่มเติม บรรทัดสุดท้ายอาจมีการขึ้นบรรทัดใหม่ต่อท้าย แต่ไม่บังคับ ต้องไม่เว้นบรรทัดว่าง (บรรทัดที่มีช่องว่างเท่านั้น)
ตัวอย่าง
ภาพทั้งหมดนำมาจาก Wikipedia และเผยแพร่สู่สาธารณสมบัติ โปรแกรมของคุณคาดว่าจะใช้งานได้กับภาพทั้งหมดและอินพุตที่ถูกต้อง
ความกว้าง = 52, ความสูง = 25:
.-- *** - ---- - ********** L .-- .-- 7 ---- P- .J **************** . ********* \ , ****************** L \ J ********** ' - ******************** J *********** L / J *********************; ./*************.L ; ********************* PJ **************; 7; . ********************** '. ***************** ;; * ; **********************; ***************; J * *********************** ******* P ******** '**; C ********************* C ******* P; *******. **; C ********************** J ***************; **; ค*********************; **************** **. ********************** '*************** P; ** J ********************* P *************** / *** . ********************** 7 J ************* 'J **; ; ******************** C "'P *********** PJ ***' "7 ****************** C" '********** P. ** C; '* C *************'; ********* - J ** CP '* C ********** P 7 ** 7 ** P / - **** P - * CCCCC * P- '7 ******** P' '---' --- '
ความกว้าง: 70, ความสูง: 3:
--------------------------- .---------------- J ******************************* P-J ******************* *** / J **; ---------- ********* P --------- '-------------------- -'
ความกว้าง: 50, ความสูง: 25:
.J --- .J * P --- J * L-- J *** 'L -J *********** - J ****; **************** L ; ***** '.J ******************** J **** 7 ************************ P ** CC *; . ********* LJ *********** P- ** C * P 'J ********************** - 7 * C * L **********************; J * C **; **********************; JC ** ** C ; ; ******** CCC C * ** ** CCCC "7 ***** L. 7 ***** CCCCCC **** CC ** ' - ***** -J - ** C * C * CC ****** CC * ' ** CC ***; ** ***** CCC CCCC *; '- **** - - *** CCCCC *** - '------'
ความกว้าง: 26, ความสูง: 17:
-, L J - ** L .C # J '; * PL, C # " .PP 7. JC7P ;; * J ;; , C'C; J; CC; L C "# * L 7-P; *; PC 7CL *** J * PC '# '7 # C * C # P'; P JC # C- J # CCC # L .JC # CJCC ## C; ; # - - #, CCC # CCCCCCCC ;*.- -.ค; ; CCCCCCCCCCCC ; **** J ** L; CCCCCCCCCCCC ; *******; 'CCCCCCCCCCCP '*******' CCCCCCCCCCC ' '* P-7 *' "CCCCP '- '---
นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุดชนะ