На сьогодні термінали такі нудні . Вони раніше виглядали так:
Тепер вони просто м'які та тьмяні та чорно-білі. Я хочу, щоб ви написали мені програму, яка зробить мій термінал знову всім барвистим!
Опис
Візьмемо цей приклад код 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"означає; ви не можете автоматично мати бібліотеку, щоб зробити це за вас.Це код-гольф , тому найкоротший код у байтах виграє!
\n\[\e[32m\]\w\n\[\e[0m\]> (зелена назва каталогів, звичайна підказка в наступному рядку), але я не можу змусити його працювати з програми (пробував python та Java поки що). Будь-які ідеї?
echo -e "\e[31mtest\e[0m".
youвін образно означає your program(на відміну від заклику до функції бібліотеки), і що він приймає determineв сенсі figure out, а не як в choose. Тобто саме ваша програма повинна обробляти відображення: String ("червоний") | -> Integer (31). redце лише 31тому, що він говорить так, що інформацію потрібно інтегрувати в програму. Хоча, можливо, можна стверджувати, що саме вважатиметься your program- чи можемо ми використовувати функції маніпулювання рядком загального призначення? - не нахабно обманюйте / не зловживайте.


