Las terminales son muy aburridas en estos días. Solían verse así:
Ahora son simplemente sosos, aburridos y en blanco y negro. ¡Quiero que me escribas un programa que hará que mi terminal vuelva a ser colorida!
Descripción
Tome este ejemplo de código Ruby:

La mayoría de los terminales de Linux admiten estas secuencias de escape ( \esignifica el carácter de escape), y Windows puede admitirlas con ANSICON . Aquí está la sintaxis de la secuencia de escape específica que puede cambiar el texto o el color de fondo de una cadena:
\e[{{COLOR}}m
donde \erepresenta el carácter de escape ( 0x1Ben ASCII) y {{COLOR}}se reemplaza por el número del color que desea usar (más detalles sobre eso más adelante). El texto que viene después de esta secuencia de escape se formateará como se indica y un valor de 0restablecerá todo el formato.
Su desafío es tomar una cadena que especifique algún texto que pueda contener color, y generar una versión colorida del mismo.
De entrada y salida
El texto normal funciona igual que el normal y se imprime literalmente. Por ejemplo, la entrada wafflesproduce la misma salida, sin color especial.
La sintaxis para especificar un color es similar a la sintaxis de Wikipedia . Por ejemplo, para colorear las palabras "el color rojo" en rojo en la oración This is the color red!, la entrada sería:
This is {{red|the color red}}!
Los colores de fondo también funcionan. Si quisieras letras negras sobre un fondo blanco, usarías esto:
{{black|white|This text is black on white}}
Para obtener solo un color de fondo, omita el primer plano:
{{|red|This text has a red background}}
Especificación
Dos llaves abiertas siempre especifican el comienzo de una directiva de color . Dos llaves de cierre especifican el final. Los corchetes siempre coincidirán; nunca habrá un {{sin un correspondiente }}, y un }}nunca vendrá antes de su correspondiente {{. Estas directivas de color no estarán anidadas, y {{nunca aparecerá dentro de una directiva de color.
Dentro de una directiva de color, siempre habrá uno o dos |símbolos. Si hay uno, el texto anterior es el color de primer plano y el texto posterior es la cadena que se mostrará en ese color. Si hay dos, el texto antes del primero es el color de primer plano, el texto después del primero pero antes del segundo es el color de fondo, y el texto después del segundo es la cadena a mostrar. Estas barras verticales pueden existir fuera de una directiva de color y deben imprimirse literalmente.
El color de primer plano o el color de fondo (pero no ambos) pueden estar vacíos, en cuyo caso debe dejarlos como predeterminados. La cadena final (la que sale) nunca estará vacía.
Estas son las instrucciones para generar texto de un determinado color:
Una secuencia de color se define en la sección "Descripción". Por ejemplo, una secuencia de color de 42 sería
"\e[42m".Para establecer un color, imprima la secuencia de colores del número que se determina a continuación:
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 / 107Los nombres de color distinguen entre mayúsculas y minúsculas, y nunca se proporcionará un nombre de color no válido. No tiene que manejar cosas como
REDolightgrey(deletreadas con une).Después de imprimir una secuencia de colores, se aplicará a todo el texto que le sigue. Para finalizar una secuencia de color (restablecer el color predeterminado), envíe una secuencia de color de
0("\e[0m").
Caso de prueba
{{|yellow| }}
{{|yellow| }} {{|yellow| }}
{{|yellow| }} {{red|'}} {{red|'}} {{|yellow| }}
{{|yellow| }} \_/ {{|yellow| }}
{{|yellow| }} {{|yellow| }}
{{|yellow| }}
Esto debería mostrar una cara sonriente ... con malvados ojos rojos.
Reglas
No puede utilizar ninguna biblioteca o función de su lenguaje de programación para analizar automáticamente un color. Esto significa que debe ser usted quien determine qué
"red"significa; no puede hacer que una biblioteca lo haga automáticamente por usted.Este es el código de golf , ¡así que el código más corto en bytes ganará!
\n\[\e[32m\]\w\n\[\e[0m\]> (nombre de directorio verde, indicador simple en la siguiente línea), pero no puedo hacer que funcione desde un programa (hasta ahora he intentado con Python y Java). ¿Algunas ideas?
echo -e "\e[31mtest\e[0m".
you, en sentido figurado, quiere decir your program(en oposición a una llamada a una función de biblioteca), y que toma determineen el sentido de figure out, no como en choose. Es decir, es su programa el que debe manejar la asignación: Cadena ("rojo") | -> Entero (31). redes solo 31porque él lo dice, que la información debe integrarse en el programa. Aunque se puede argumentar exactamente lo que contaría como your program: ¿podemos usar funciones de manipulación de cadenas de propósito general? - no hagas trampa / abuso descaradamente.


