Cuando escribo documentación, comentarios, etc. Me encanta hacer tablas ASCII. Por lo general, terminan viéndose bastante bien, pero siempre siento que podrían verse aún mejor, especialmente porque UTF-8 / Unicode incluye los caracteres de dibujo de caja . Sin embargo, estos caracteres son muy pesados de usar y requieren varias pulsaciones de teclas para insertar. ¿Tu tarea? Escriba un programa o una función que pueda convertir automáticamente tablas ASCII al equivalente UTF-8 / Unicode.
Este desafío fue sandboxed .
Desafío
Escriba un programa que, dada una tabla ASCII como una cadena de entrada, muestre la tabla redibujada con los caracteres de dibujo de cuadro Unicode / UTF-8. Específicamente, los caracteres que forman parte de la tabla deben traducirse de la siguiente manera:
(Unicode, 3 bytes each in UTF-8)
- to ─ (\u2500)
| to │ (\u2502)
= to ═ (\u2550)
and + to one of:
┌ (\u250C), ┐ (\u2510), └ (\u2514), ┘ (\u2518),
├ (\u251C), ┤ (\u2524), ┬ (\u252C), ┴ (\u2534),
┼ (\u253C)
or, if '=' on either side:
╒ (\u2552), ╕ (\u2555), ╘ (\u2558), ╛ (\u255D),
╞ (\u255E), ╡ (\u2561), ╤ (\u2564), ╧ (\u2567),
╪ (\u256A)
Detalles
E / S:
- Se permite E / S predeterminada
- Puede tomar la entrada en cualquier formato razonable, incluida la tabla como una cadena, o una ruta a un archivo que contiene la tabla.
- Puede generar un archivo y tomar el nombre del archivo como argumento adicional.
- Sin embargo, no puede modificar el archivo de entrada . (Debe conservarse para facilitar la edición futura)
Entrada:
- Puede suponer que cada fila de entrada se ha rellenado para tener la misma longitud
. - No puede suponer que el primer carácter después de una nueva línea es parte de los bordes de la tabla (ya que puede ser un espacio en blanco).
- La entrada se considera una tabla válida si todos los caracteres (que forman parte de la tabla)
-=|están conectados a exactamente dos caracteres y+están conectados a al menos un carácter tanto horizontal como verticalmente. - Su programa puede no producir ningún error con entradas válidas.
- Si la entrada no es válida, el comportamiento es indefinido y puede producir cualquier salida.
- La entrada puede contener caracteres UTF-8, incluidos los caracteres de dibujo de recuadro.
Salida:
- Cualquiera de los caracteres
-=|+que no forman parte de la tabla debe dejarse como está. - Del mismo modo, cualquier otro personaje debe dejarse como está.
- Se permite una nueva línea inicial y / o final.
Otro:
- Las lagunas estándar están prohibidas, como de costumbre.
- Si su idioma preferido tiene una función integrada que resuelve este problema, no puede usarlo.
- Esto significa programas, funciones, subrutinas o instrucciones que serían presentaciones válidas para este desafío sin adiciones.
- Cada uno de los caracteres necesarios en este desafío tiene una longitud de tres bytes cuando están codificados en UTF-8.
Personajes conectados :
Un personaje está conectado a otro, si:
- Está
|y está directamente arriba o abajo+o|; - Es
-y es directamente antes o después+o-; - Es
=y es directamente antes o después+o=; - Está
+y está directamente arriba o abajo|o+, o está directamente antes o después-,=o+.
Un personaje se considera parte de la tabla, si está conectado a algún personaje que sea parte de la tabla. Por definición, el primero +en la entrada es una parte de la tabla.
Ejemplos
Ejemplos disponibles aquí como una versión copiable y pastable.
Input: Output:
+------------------+ ┌──────────────────┐
| Hello+World! | │ Hello+World! │
+==================+ ╞══════════════════╡
| This is+my first | -> │ This is+my first │
|+-+ code|golf +-+| │+-+ code|golf +-+│
|+-+chall|enge! +-+| │+-+chall|enge! +-+│
+------------------+ └──────────────────┘
+===+===+===+ ╒═══╤═══╤═══╕
| 1 | 2 | 3 | │ 1 │ 2 │ 3 │
+---+===+===+===+ ┌───╪═══╪═══╪═══╡
| 1 | 1 | 2 | 3 | │ 1 │ 1 │ 2 │ 3 │
+---+---+---+---+ -> ├───┼───┼───┼───┤
| 2 | 2 | 4 | 6 | │ 2 │ 2 │ 4 │ 6 │
+---+---+---+---+ ├───┼───┼───┼───┤
|-3 |-3 |-6 |-9 | │-3 │-3 │-6 │-9 │
+===+---+---+---+ ╘═══╧───┴───┴───┘
+-----+ -> <Undefined>
+-----+ -> ┌─────┐
+-----+ └─────┘
+-----------------+
| Hello, World! |
| This is invalid | -> <Undefined>
| input |
-----------------+
++++ ┌┬┬┐
++++ -> ├┼┼┤
++++ └┴┴┘
+--+
++++ -> <Undefined>
+--+
Finalmente...
Este es el código de golf , por lo que gana la menor cantidad de bytes. ¡Feliz golf!
Hello Worldtabla, no se considera que las tablas internas formen una tabla porque el texto dentro de la tabla debe permanecer sin cambios, y no se consideran parte de los bordes de la tabla externa ya que no están conectadas a ellas correctamente.
+-+no se considera que los extractos consecutivos forman una tabla conectada?