Terminals sind heutzutage so langweilig . Früher sahen sie so aus:
Jetzt sind sie nur langweilig und langweilig und schwarz-weiß. Ich möchte, dass Sie mir ein Programm schreiben, das mein Terminal wieder bunt macht!
Beschreibung
Nehmen Sie dieses Beispiel Ruby-Code:

Die meisten Linux-Terminals unterstützen diese Escape-Sequenzen ( \esteht für das Escape-Zeichen), und Windows kann sie mit ANSICON unterstützen . Hier ist die Syntax der spezifischen Escape-Sequenz, die den Text oder die Hintergrundfarbe einer Zeichenfolge ändern kann:
\e[{{COLOR}}m
Dabei \esteht das Escape-Zeichen ( 0x1Bin ASCII) und {{COLOR}}wird durch die Nummer der Farbe ersetzt, die Sie verwenden möchten (dazu später mehr Details). Text, der nach dieser Escape-Sequenz kommt, wird wie angegeben formatiert, und ein Wert von 0setzt alle Formatierungen zurück.
Ihre Herausforderung besteht darin, eine Zeichenfolge zu verwenden, die einen Text angibt, der möglicherweise Farbe enthält, und eine farbenfrohe Version davon auszugeben.
Input-Output
Normaler Text funktioniert genauso wie normal und wird buchstäblich gedruckt. Beispielsweise wafflesliefert die Eingabe dieselbe Ausgabe ohne spezielle Farbe.
Die Syntax zum Festlegen einer Farbe ähnelt der Wikipedia-Syntax . Um beispielsweise die Wörter "die Farbe Rot" im Satz in Rot zu färben This is the color red!, wäre die Eingabe:
This is {{red|the color red}}!
Hintergrundfarben funktionieren auch. Wenn Sie schwarze Buchstaben auf weißem Hintergrund möchten, würden Sie Folgendes verwenden:
{{black|white|This text is black on white}}
Lassen Sie den Vordergrund weg, um nur eine Hintergrundfarbe zu erhalten:
{{|red|This text has a red background}}
Spezifikation
Zwei offene geschweifte Klammern geben immer den Beginn einer Farbanweisung an . Zwei schließende geschweifte Klammern geben das Ende an. Die Klammern stimmen immer überein. es wird niemals ein {{ohne ein entsprechendes geben }}, und ein }}wird niemals vor seinem korrespondierenden kommen {{. Diese Farbanweisungen werden nicht verschachtelt, und a {{wird niemals in einer Farbanweisung angezeigt.
Innerhalb einer Farbanweisung gibt es immer entweder ein oder zwei |Symbole. Wenn es eine gibt, ist der Text davor die Vordergrundfarbe und der Text danach die Zeichenfolge, die in dieser Farbe angezeigt werden soll. Wenn es zwei gibt, ist der Text vor dem ersten die Vordergrundfarbe, der Text nach dem ersten, aber vor dem zweiten die Hintergrundfarbe und der Text nach dem zweiten die anzuzeigende Zeichenfolge. Diese vertikalen Balken können außerhalb einer Farbrichtlinie vorhanden sein und sollten wörtlich gedruckt werden.
Die Vordergrund- oder Hintergrundfarbe (aber nicht beide) ist möglicherweise leer. In diesem Fall sollten Sie sie als Standard beibehalten. Die letzte Zeichenfolge (die auszugebende) wird niemals leer sein.
Hier sind die Anweisungen zum Ausgeben von Text einer bestimmten Farbe:
Eine Farbsequenz wird im Abschnitt "Beschreibung" definiert. Zum Beispiel wäre eine Farbsequenz von 42
"\e[42m".Um eine Farbe festzulegen, drucken Sie die Farbsequenz der unten angegebenen Nummer:
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 / 107Farbnamen unterscheiden zwischen Groß- und Kleinschreibung, und ein ungültiger Farbname wird niemals angegeben. Sie müssen nicht mit Dingen wie
REDoderlightgrey(geschrieben mit eineme) umgehen .Nachdem Sie eine Farbsequenz gedruckt haben, gilt sie für den gesamten darauf folgenden Text. Geben Sie eine Farbsequenz von
0("\e[0m") aus , um eine Farbsequenz zu beenden (auf die Standardfarbe zurücksetzen ).
Testfall
{{|yellow| }}
{{|yellow| }} {{|yellow| }}
{{|yellow| }} {{red|'}} {{red|'}} {{|yellow| }}
{{|yellow| }} \_/ {{|yellow| }}
{{|yellow| }} {{|yellow| }}
{{|yellow| }}
Dies sollte ein Smiley-Gesicht ausgeben ... mit bösen roten Augen.
Regeln
Sie dürfen keine Bibliotheken oder Funktionen Ihrer Programmiersprache verwenden, um eine Farbe automatisch zu analysieren. Dies bedeutet, dass Sie derjenige sein müssen, der bestimmt, was
"red"bedeutet; Eine Bibliothek kann das nicht automatisch für Sie erledigen.Dies ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
\n\[\e[32m\]\w\n\[\e[0m\]> (grüner Verzeichnisname, einfache Eingabeaufforderung in der nächsten Zeile), aber ich kann sie nicht über ein Programm zum Laufen bringen (bisher Python und Java ausprobiert). Irgendwelche Ideen?
echo -e "\e[31mtest\e[0m".
youer damit im übertragenen Sinne meint your program(im Gegensatz zu einem Aufruf einer Bibliotheksfunktion) und dass er determineim Sinne von figure out, nicht wie in choose. Das heißt, es ist Ihr Programm, das die Zuordnung handhaben sollte: String ("rot") | -> Integer (31). redNur 31weil er es so sagt, müssen Informationen in das Programm integriert werden. Obwohl genau argumentiert werden kann, worauf es ankommt your program- können wir universelle String-Manipulationsfunktionen verwenden? - nicht offen betrügen / missbrauchen.


