最近の端末は退屈です。以前は次のようでした。
今、彼らはただ当たり障りのない鈍い、白黒です。私の端末を再びカラフルにするプログラムを書いてほしい!
説明
このRubyコードの例をご覧ください。

ほとんどのLinux端末はこれらのエスケープシーケンス(\eエスケープ文字の略)をサポートし、WindowsはANSICONでこれらをサポートできます。文字列のテキストまたは背景色を変更できる特定のエスケープシーケンスの構文は次のとおりです。
\e[{{COLOR}}m
ここ\eで、エスケープ文字(0x1BASCII)を表し、{{COLOR}}使用する色の番号に置き換えられます(これについては後で詳しく説明します)。このエスケープシーケンスの後に来るテキストは指示どおりにフォーマットされ、値が0すべてのフォーマットをリセットします。
あなたの課題は、色を含む可能性のあるテキストを指定する文字列を取得し、そのカラフルなバージョンを出力することです。
入出力
通常のテキストは通常と同様に機能し、文字通り印刷されます。たとえば、入力wafflesは同じ出力を生成し、特別な色はありません。
色を指定するための構文は、Wikipediaの構文に似ています。たとえば、文の赤の単語「the color red」に色を付けるには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}}
仕様
2つの開いた中括弧は、常にカラーディレクティブの始まりを指定します。2つの閉じ中括弧で終了を指定します。ブラケットは常に一致します。{{対応することなくa が決してなく、対応する前に}}a }}が決して来ないでしょう{{。これらのカラーディレクティブはネストされず、a {{はカラーディレクティブ内に表示されません。
カラーディレクティブ内には、常に1つまたは2つの|シンボルがあります。ある場合、前のテキストは前景色であり、後のテキストはその色で表示する文字列です。2つある場合、最初のテキストの前のテキストが前景色であり、最初のテキストの後2番目のテキストが背景色であり、2番目の後のテキストが表示する文字列です。これらの垂直バーは、カラーディレクティブの外側に存在する場合があり、文字どおりに印刷する必要があります。
前景色または背景色(両方ではない)が空の場合があります。その場合は、デフォルトのままにしておく必要があります。最終的な文字列(出力する文字列)が空になることはありません。
特定の色のテキストを出力する方法は次のとおりです。
色配列は、「説明」セクションで定義されています。たとえば、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\]> (緑色のディレクトリ名、次の行のプレーンプロンプト)が、プログラムから動作させることができません(これまでにPythonとJavaを試しました)。何か案は?
echo -e "\e[31mtest\e[0m"。
you彼は比your programlibrary的に(ライブラリ関数の呼び出しとは対照的に)をdetermine意味し、のようにでfigure outはなく、という意味で解釈すると思いますchoose。つまり、マッピングを処理するのはプログラムです:String( "red")|-> Integer(31)。redだけで31、彼はそう言うので、その情報がプログラムに統合する必要があります。カウントされるものと正確に議論されるかもしれませんがyour program、汎用の文字列操作関数を使用できますか?-露骨にチート/乱用しないでください。


