Terminale są teraz tak nudne . Kiedyś wyglądały tak:
Teraz są po prostu nijakie, nudne i czarno-białe. Chcę, żebyś napisał mi program, który sprawi, że mój terminal znów będzie kolorowy!
Opis
Weźmy przykładowy kod Ruby:

Większość terminali Linuksa obsługuje te sekwencje specjalne ( \eoznacza znak zmiany znaczenia), a system Windows może je obsługiwać za pomocą ANSICON . Oto składnia określonej sekwencji zmiany znaczenia, która może zmienić kolor tekstu lub tła łańcucha:
\e[{{COLOR}}m
gdzie \eoznacza znak zmiany znaczenia ( 0x1Bw ASCII) i {{COLOR}}jest zastępowany numerem koloru, którego chcesz użyć (więcej szczegółów na ten temat później). Tekst pojawiający się po tej sekwencji ucieczki zostanie sformatowany zgodnie z zaleceniami, a wartość 0spowoduje zresetowanie całego formatowania.
Twoim wyzwaniem jest pobranie ciągu określającego tekst, który może zawierać kolor, i wydrukowanie jego kolorowej wersji.
Wejście wyjście
Normalny tekst działa tak jak normalnie i jest drukowany dosłownie. Na przykład dane wejściowe wafflesdają taką samą moc wyjściową, bez specjalnego koloru.
Składnia określania koloru jest podobna do składni Wikipedii . Na przykład, aby w zdaniu pokolorować słowa „kolor czerwony” na czerwono This is the color red!, dane wejściowe byłyby następujące:
This is {{red|the color red}}!
Kolory tła też działają. Jeśli chcesz czarne litery na białym tle, skorzystaj z tego:
{{black|white|This text is black on white}}
Aby uzyskać tylko kolor tła, pomiń pierwszy plan:
{{|red|This text has a red background}}
Specyfikacja
Dwa otwarte nawiasy klamrowe zawsze określają początek dyrektywy w sprawie kolorów . Dwa zamykające nawiasy klamrowe określają koniec. Nawiasy zawsze będą pasować; nigdy nie będzie {{bez odpowiednika }}, a }}nigdy nie przyjdzie przed jego odpowiednikiem {{. Te dyrektywy dotyczące kolorów nie zostaną zagnieżdżone i {{nigdy nie pojawią się w dyrektywie kolorów.
W dyrektywie kolorów zawsze będzie jeden lub dwa |symbole. Jeśli istnieje, tekst przed nim ma kolor pierwszego planu, a tekst po nim to ciąg znaków, który ma być wyświetlany w tym kolorze. Jeśli są dwa, tekst przed pierwszym jest kolorem pierwszego planu, tekst po pierwszym, ale przed drugim kolorem tła, a tekst po drugim to ciąg znaków do wyświetlenia. Te pionowe paski mogą istnieć poza dyrektywą dotyczącą kolorów i powinny być drukowane dosłownie.
Kolor pierwszego planu lub kolor tła (ale nie oba) mogą być puste, w takim przypadku należy pozostawić je jako domyślne. Ostatni ciąg (ten, który ma zostać wyprowadzony) nigdy nie będzie pusty.
Oto wskazówki, jak wydrukować tekst określonego koloru:
Sekwencji kolorów jest zdefiniowana w sekcji „Opis”. Na przykład sekwencja kolorów 42
"\e[42m".Aby ustawić kolor, wydrukuj sekwencję kolorów liczby określonej poniżej:
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 / 107W nazwach kolorów rozróżniana jest wielkość liter i nigdy nie zostanie podana nieprawidłowa nazwa koloru. Nie trzeba obsłużyć rzeczy jak
REDlublightgrey(pisany ze związkieme).Po wydrukowaniu sekwencji kolorów będzie ona obowiązywać dla całego tekstu po niej. Aby zakończyć sekwencję kolorów (przywróć domyślny kolor), wypisz sekwencję kolorów
0("\e[0m").
Przypadek testowy
{{|yellow| }}
{{|yellow| }} {{|yellow| }}
{{|yellow| }} {{red|'}} {{red|'}} {{|yellow| }}
{{|yellow| }} \_/ {{|yellow| }}
{{|yellow| }} {{|yellow| }}
{{|yellow| }}
To powinno wywołać uśmiechniętą twarz ... ze złymi czerwonymi oczami.
Zasady
Nie można używać żadnych bibliotek ani funkcji języka programowania do automatycznego analizowania koloru. Oznacza to, że musisz być tym, który określa, co
"red"oznacza; nie możesz mieć biblioteki, która zrobi to automatycznie.To jest golf golfowy , więc wygra najkrótszy kod w bajtach!
\n\[\e[32m\]\w\n\[\e[0m\]> (zielona nazwa katalogu, zwykły monit w następnym wierszu), ale nie mogę go uruchomić z programu (jak dotąd wypróbowałem Python i Javę). Jakieś pomysły?
echo -e "\e[31mtest\e[0m".
youprzenośni oznacza on your program(w przeciwieństwie do wywołania funkcji bibliotecznej) i że determinerozumie to figure out, a nie jak choose. Tj. To twój program powinien obsługiwać mapowanie: String („red”) | -> Integer (31). dzieje się tak redtylko 31dlatego, że tak mówi, informacja ta musi zostać włączona do programu. Chociaż można argumentować, co by się liczyło your program- czy możemy używać funkcji manipulacji ciągami ogólnego przeznaczenia? - nie rażąco oszukiwać / nadużywać.


