Thiết bị đầu cuối rất nhàm chán những ngày này. Họ đã từng trông như thế này:
Bây giờ họ chỉ nhạt nhẽo và buồn tẻ và đen trắng. Tôi muốn bạn viết cho tôi một chương trình sẽ làm cho thiết bị đầu cuối của tôi trở nên đầy màu sắc một lần nữa!
Sự miêu tả
Lấy ví dụ này về mã Ruby:

Hầu hết các thiết bị đầu cuối Linux hỗ trợ các chuỗi thoát này ( \eviết tắt của ký tự thoát) và Windows có thể hỗ trợ chúng với ANSICON . Dưới đây là cú pháp của chuỗi thoát cụ thể có thể thay đổi văn bản hoặc màu nền của chuỗi:
\e[{{COLOR}}m
trong đó \eviết tắt của ký tự thoát ( 0x1Btrong ASCII) và {{COLOR}}được thay thế bằng số màu mà bạn muốn sử dụng (chi tiết hơn về điều đó sau). Văn bản xuất hiện sau chuỗi thoát này sẽ được định dạng theo chỉ dẫn và giá trị 0sẽ đặt lại tất cả định dạng.
Thách thức của bạn là lấy một chuỗi chỉ định một số văn bản có thể chứa màu và xuất ra phiên bản đầy màu sắc của nó.
Đầu ra đầu vào
Văn bản bình thường hoạt động giống như bình thường, và được in theo nghĩa đen. Ví dụ, đầu vào wafflesmang lại cùng một đầu ra, không có màu đặc biệt.
Cú pháp chỉ định màu tương tự cú pháp của Wikipedia . Ví dụ: để tô màu các từ "màu đỏ" bằng màu đỏ trong câu This is the color red!, đầu vào sẽ là:
This is {{red|the color red}}!
Màu nền cũng hoạt động. Nếu bạn muốn chữ màu đen trên nền trắng, bạn sẽ sử dụng:
{{black|white|This text is black on white}}
Để chỉ nhận được màu nền, hãy bỏ qua nền trước:
{{|red|This text has a red background}}
Sự chỉ rõ
Hai dấu ngoặc nhọn mở luôn chỉ định bắt đầu một lệnh màu . Hai dấu ngoặc nhọn đóng chỉ định kết thúc. Chân đế sẽ luôn khớp; sẽ không bao giờ có cái {{không có tương ứng }}, và }}sẽ không bao giờ đến trước cái tương ứng của nó {{. Các chỉ thị màu này sẽ không được lồng nhau và {{sẽ không bao giờ xuất hiện trong một chỉ thị màu.
Trong một chỉ thị màu, sẽ luôn có một hoặc hai |ký hiệu. Nếu có một, văn bản trước nó là màu nền trước và văn bản sau là chuỗi để hiển thị trong màu đó. Nếu có hai, văn bản trước cái thứ nhất là màu nền trước, văn bản sau cái thứ nhất nhưng trước cái thứ hai là màu nền và văn bản sau cái thứ hai là chuỗi để hiển thị. Các thanh dọc này có thể tồn tại bên ngoài một chỉ thị màu và nên được in theo nghĩa đen.
Màu nền trước hoặc màu nền (nhưng không phải cả hai) có thể trống, trong trường hợp đó bạn nên để chúng làm mặc định. Chuỗi cuối cùng (chuỗi đầu ra) sẽ không bao giờ trống.
Dưới đây là các hướng dẫn để xuất văn bản của một màu nhất định:
Một chuỗi màu được xác định trong phần "Mô tả". Ví dụ, một chuỗi màu 42 sẽ là
"\e[42m".Để đặt màu, hãy in chuỗi màu của số được xác định bên dưới:
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 / 107Tên màu phân biệt chữ hoa chữ thường và tên màu không hợp lệ sẽ không bao giờ được cung cấp. Bạn không phải xử lý những thứ như
REDhoặclightgrey(đánh vần là mộte).Sau khi bạn in một chuỗi màu, nó sẽ áp dụng cho tất cả các văn bản theo sau nó. Để kết thúc chuỗi màu (đặt lại về màu mặc định), hãy xuất chuỗi màu của
0("\e[0m").
Trường hợp thử nghiệm
{{|yellow| }}
{{|yellow| }} {{|yellow| }}
{{|yellow| }} {{red|'}} {{red|'}} {{|yellow| }}
{{|yellow| }} \_/ {{|yellow| }}
{{|yellow| }} {{|yellow| }}
{{|yellow| }}
Điều này sẽ tạo ra một khuôn mặt cười ... với đôi mắt đỏ ác.
Quy tắc
Bạn không được sử dụng bất kỳ thư viện hoặc chức năng nào của ngôn ngữ lập trình để tự động phân tích màu. Điều này có nghĩa là bạn phải là người xác định
"red"nghĩa là gì ; bạn không thể có một thư viện tự động làm điều đó cho bạn.Đây là mã golf , vì vậy mã ngắn nhất tính bằng byte sẽ giành chiến thắng!
\n\[\e[32m\]\w\n\[\e[0m\]> (tên thư mục màu xanh lá cây, dấu nhắc đơn giản trên dòng tiếp theo), nhưng tôi không thể làm cho nó hoạt động từ một chương trình (đã thử python và Java). Có ý kiến gì không?
echo -e "\e[31mtest\e[0m".
younghĩa bóng của anh ta your program(trái ngược với một cuộc gọi đến chức năng thư viện), và anh ta determinehiểu theo nghĩa figure out, không phải như trong choose. Tức là chương trình của bạn sẽ xử lý ánh xạ: Chuỗi ("đỏ") | -> Số nguyên (31). redchỉ 31bởi vì ông nói như vậy, thông tin đó cần được tích hợp vào chương trình. Mặc dù có thể lập luận chính xác những gì sẽ được tính là your program- chúng ta có thể sử dụng các hàm thao tác Chuỗi mục đích chung không? - đừng lừa dối / lạm dụng một cách trắng trợn.


