오늘날 터미널은 너무 지루 합니다. 그들은 다음과 같이 사용되었습니다 :
이제 그들은 단조롭고 둔하고 흑백입니다. 터미널을 다채롭게 만드는 프로그램을 작성해주세요!
기술
이 예제 Ruby 코드를 보자 :
대부분의 Linux 터미널은 이러한 이스케이프 시퀀스 ( \e
이스케이프 문자를 나타냄)를 지원하며 Windows는 ANSICON 을 사용하여 이스케이프 시퀀스 를 지원할 수 있습니다 . 다음은 문자열의 텍스트 또는 배경색을 변경할 수있는 특정 이스케이프 시퀀스의 구문입니다.
\e[{{COLOR}}m
어디 \e
이스케이프 문자 ( 0x1B
ASCII)를 나타내며 {{COLOR}}
사용하려는 색상 번호로 대체됩니다 (나중에 자세히 설명). 이 이스케이프 시퀀스 다음에 오는 텍스트는 지시 된대로 형식이 지정되고 값은 0
모든 형식을 재설정합니다.
당신의 도전은 색상을 포함 할 수있는 일부 텍스트를 지정하는 문자열을 가져 와서 다채로운 버전을 출력하는 것입니다.
입출력
일반 텍스트는 일반처럼 작동하며 문자 그대로 인쇄됩니다. 예를 들어, 입력waffles
은 특수한 색상없이 동일한 출력을 생성합니다.
색상을 지정하는 구문은 Wikipedia의 구문 과 비슷 합니다 . 예를 들어, 문장에서 단어 "빨간색"을 빨간색으로 색칠 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"
한다는 것을 의미합니다. 도서관에서 자동으로 그렇게 할 수는 없습니다.이것은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 이길 것입니다!
\n\[\e[32m\]\w\n\[\e[0m\]>
(녹색 디렉토리 이름, 다음 줄의 일반 프롬프트)을 도용 하지만 프로그램 (파이썬과 Java를 사용해 보았습니다)에서 작동시킬 수 없습니다. 어떤 아이디어?
echo -e "\e[31mtest\e[0m"
.
you
그는 비 유적 수단 your program
(라이브러리 함수에 대한 호출 반대), 그가 소요 determine
의 의미 figure out
하지 같이 choose
. 즉, 매핑을 처리해야하는 프로그램은 String ( "red") |-> Integer (31)입니다. red
아니라 31
그가 그렇게 말한다 때문에, 그 정보가 프로그램에 통합 될 필요가있다. 정확히 무엇으로 간주 될지 논쟁 할 수 있지만, your program
범용 문자열 조작 함수를 사용할 수 있습니까? -뻔뻔스럽게 속임수 / 남용하지 마십시오.