เทอร์มินัลน่าเบื่อมากในวันนี้ พวกเขาเคยเป็นแบบนี้:
ตอนนี้พวกเขากำลังอ่อนโยนและน่าเบื่อและสีดำและสีขาว ฉันต้องการให้คุณเขียนโปรแกรมที่จะทำให้เทอร์มินัลของฉันมีสีสันอีกครั้ง!
ลักษณะ
ใช้โค้ด Ruby ตัวอย่างนี้:

ขั้วลินุกซ์ส่วนใหญ่สนับสนุนเหล่านี้ลำดับหนี ( \eย่อมาจากตัวหนี) และ Windows สามารถรองรับพวกเขาด้วยANSICON นี่คือไวยากรณ์ของลำดับ escape เฉพาะที่สามารถเปลี่ยนข้อความหรือสีพื้นหลังของสตริง:
\e[{{COLOR}}m
โดยที่\eย่อมาจากอักขระเลี่ยง ( 0x1Bใน ASCII) และ{{COLOR}}ถูกแทนที่ด้วยจำนวนสีที่คุณต้องการใช้ (รายละเอียดเพิ่มเติมในภายหลัง) ข้อความที่อยู่หลังลำดับ escape นี้จะถูกจัดรูปแบบตามที่กำหนดและค่า0จะรีเซ็ตการจัดรูปแบบทั้งหมด
ความท้าทายของคุณคือการใช้สตริงที่ระบุข้อความบางอย่างที่อาจมีสีและส่งออกเวอร์ชันที่มีสีสันของมัน
อินพุต / เอาต์พุต
ข้อความปกติใช้งานได้เหมือนปกติ ตัวอย่างเช่นอินพุตwafflesให้เอาต์พุตเดียวกันโดยไม่มีสีพิเศษ
ไวยากรณ์สำหรับการระบุสีคล้ายกับไวยากรณ์วิกิพีเดีย ตัวอย่างเช่นในการระบายสีคำว่า "สีแดง" เป็นสีแดงในประโยคThis is the color red!อินพุตจะเป็น:
This is {{red|the color red}}!
สีพื้นหลังก็ใช้ได้เช่นกัน หากคุณต้องการตัวอักษรสีดำบนพื้นหลังสีขาวคุณจะใช้สิ่งนี้:
{{black|white|This text is black on white}}
ในการรับเฉพาะสีพื้นหลังให้ตัดส่วนหน้า:
{{|red|This text has a red background}}
สเปค
วงเล็บปีกกาเปิดสองชุดจะระบุจุดเริ่มต้นของคำสั่งสีเสมอ วงเล็บปีกกาปิดสองตัวระบุจุดสิ้นสุด วงเล็บจะจับคู่เสมอ จะไม่มีจะเป็น{{โดยไม่ต้องสอดคล้องกัน}}และจะไม่มาก่อนที่จะสอดคล้องกัน}} คำสั่งสี{{เหล่านี้จะไม่ซ้อนกันและจะไม่ปรากฏในคำสั่งสี{{
ภายในคำสั่งสีจะมี|สัญลักษณ์หนึ่งหรือสองสัญลักษณ์เสมอ หากมีหนึ่งข้อความก่อนหน้านั้นจะเป็นสีพื้นหน้าและข้อความหลังจากนั้นเป็นสตริงที่จะแสดงในสีนั้น หากมีสองข้อความก่อนหน้าสีแรกคือสีพื้นหน้าข้อความหลังสีแรก แต่ก่อนสีที่สองคือสีพื้นหลังและข้อความหลังสีที่สองคือสตริงที่จะแสดง แถบแนวตั้งเหล่านี้อาจมีอยู่นอกคำสั่งสีและควรพิมพ์อย่างแท้จริง
สีพื้นหน้าหรือสีพื้นหลัง (แต่ไม่ใช่ทั้งคู่) อาจว่างเปล่าซึ่งในกรณีนี้คุณควรปล่อยให้เป็นค่าเริ่มต้น สตริงสุดท้าย (สตริงที่ส่งออก) จะไม่ว่างเปล่า
ต่อไปนี้เป็นคำแนะนำในการส่งข้อความสีที่ต้องการ:
ลำดับสีที่กำหนดไว้ในส่วน "คำอธิบาย" ยกตัวอย่างเช่นลำดับสี 42
"\e[42m"จะเป็นหากต้องการตั้งค่าสีให้พิมพ์ลำดับสีตามจำนวนที่กำหนดด้านล่าง:
Color name | Color sequence number (foreground / background) --------------+---------- black | 30 / 40 red | 31 / 41 green | 32 / 42 yellow | 33 / 43 blue | 34 / 44 magenta | 35 / 45 cyan | 36 / 46 lightgray | 37 / 47 darkgray | 90 / 100 lightred | 91 / 101 lightgreen | 92 / 102 lightyellow | 93 / 103 lightblue | 94 / 104 lightmagenta | 95 / 105 lightcyan | 96 / 106 white | 97 / 107ชื่อสีจะต้องตรงตามตัวพิมพ์ใหญ่ - เล็กและจะไม่มีการระบุชื่อสีที่ไม่ถูกต้อง คุณไม่ต้องจัดการกับสิ่งที่ชอบ
REDหรือlightgrey(สะกดด้วยe)หลังจากที่คุณพิมพ์ลำดับสีมันจะใช้กับข้อความทั้งหมดที่ตามมา หากต้องการสิ้นสุดลำดับสี (รีเซ็ตเป็นสีเริ่มต้น) ให้ส่งลำดับสีเป็น
0("\e[0m")
กรณีทดสอบ
{{|yellow| }}
{{|yellow| }} {{|yellow| }}
{{|yellow| }} {{red|'}} {{red|'}} {{|yellow| }}
{{|yellow| }} \_/ {{|yellow| }}
{{|yellow| }} {{|yellow| }}
{{|yellow| }}
นี่ควรจะเป็นใบหน้าที่ยิ้มแย้ม ... ด้วยดวงตาสีแดงที่ชั่วร้าย
กฎระเบียบ
คุณไม่สามารถใช้ไลบรารีหรือฟังก์ชั่นของภาษาโปรแกรมของคุณเพื่อแยกสีโดยอัตโนมัติ ซึ่งหมายความว่าคุณจะต้องเป็นคนที่จะกำหนดสิ่งที่
"red"หมายถึง; คุณไม่สามารถมีห้องสมุดให้ทำเพื่อคุณโดยอัตโนมัตินี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ!
\n\[\e[32m\]\w\n\[\e[0m\]> (ชื่อไดเรกทอรีสีเขียวพรอมต์ธรรมดาในบรรทัดถัดไป) แต่ฉันไม่สามารถใช้งานได้จากโปรแกรม (ลอง python และ Java จนถึงตอนนี้) ความคิดใด ๆ
echo -e "\e[31mtest\e[0m"ลอง
youเขาเปรียบเปรยหมายถึงyour program(เมื่อเทียบกับการเรียกร้องให้ฟังก์ชั่นห้องสมุด) และบอกว่าเขาจะใช้เวลาdetermineในความรู้สึกของการไม่เป็นในfigure out chooseนั่นคือโปรแกรมของคุณที่ควรจัดการการแมป: String ("red") | -> จำนวนเต็ม (31) redเป็นเพียง31เพราะเขาพูดอย่างนั้นข้อมูลจะต้องรวมเข้ากับโปรแกรม แม้ว่ามันอาจจะเป็นที่ถกเถียงกันอยู่ว่าอะไรจะนับเป็นyour program- เราสามารถใช้ฟังก์ชั่นการจัดการสตริงเอนกประสงค์ได้หรือไม่? - อย่าโกง / ทำทารุณอย่างโจ๋งครึ่ม


