Estoy publicando descaradamente una solicitud de algo que realmente me resultaría útil. La tarea es tomar un dibujo de cuadro ascii arbitrario como este
|
+----+----+
| state A +---+
+---------+ |
|
+----v----+
| state B |
+---------+
... y conviértalo en algo más hermoso usando caracteres de dibujo de caja Unicode, por ejemplo
│
╭────┴────╮
│ state A ├───╮
╰─────────╯ │
│
╭────v────╮
│ state B │
╰─────────╯
Con más detalle:
- convertir solo + - | caracteres: otros caracteres no deben modificarse
utilizar
- DIBUJOS DE CAJA LUZ VERTICAL (U + 2502) │
- DIBUJOS DE CAJA LUZ HORIZONTAL (U + 2500) ─
- DIBUJOS DE LA CAJA ARCO DE LUZ ABAJO Y DERECHA (U + 256D) ╭
- DIBUJOS DE LA CAJA ARCO DE LUZ ABAJO E IZQUIERDA (U + 256E) ╮
- DIBUJOS DE LA CAJA ARCO DE LUZ ARRIBA E IZQUIERDA (U + 256F) ╯
- DIBUJOS DE LA CAJA ARCO DE LUZ ARRIBA Y DERECHA (U + 2570) ╰
- DIBUJOS DE CAJA LUZ VERTICAL E IZQUIERDA (U + 2524) ┤
- DIBUJOS DE CAJA LUZ VERTICAL Y DERECHA (U + 251C) ├
- DIBUJOS DE CAJA LUZ ABAJO Y HORIZONTAL (U + 252C) ┬
- DIBUJOS DE LA CAJA SE ILUMINAN Y HORIZONTALES (U + 2534) ┴
DIBUJOS DE CAJA LUZ VERTICAL Y HORIZONTAL (U + 253C) ┼
- siempre reemplazado con U + 2500
- El | siempre reemplazado con U + 2502
- + se reemplaza con un carácter unicode que depende de los 4 caracteres norte, sur, este y oeste (si existen)
- <y> se tratan como segmentos de pared verticales si están al norte o al sur de un + (para que pueda tener flechas que terminen en las paredes verticales de una caja)
- v y ^ se tratan como segmentos de pared horizontales si están al este o al oeste de a + (para que pueda tener flechas que terminen en las paredes horizontales de una caja)
- + se trata como un segmento de muro si está al norte, sur, este u oeste de un + (para que las líneas puedan conectarse al lado de una esquina de la caja)
Casos de prueba
+-+ +---+ +---+ |
| +-- |ABC| -+ | +++
+-+ ++--+ +---+ +-+
|
+--->
| +--+
+-v+ +---+ | | +-----+
|Hi| -> | +^-+ |world<-----+
+--+ +---+ | +-----+ |
| +--
|
---+---
|
Se convierte
╭─╮ ╭───╮ ╭───╮ │
│ ├── │ABC│ ─┤ │ ╭┴╮
╰─╯ ╰┬──╯ ╰───╯ ╰─╯
│
╰───>
│ ╭──╮
╭─v╮ ╭───╮ │ │ ╭─────╮
│Hi│ ─> │ ╰^─╯ │world<─────╮
╰──╯ ╰───╯ │ ╰─────╯ │
│ ╰──
│
───┼───
│
¡El código más corto gana!
Probablemente te refieres a Unicode en lugar de UTF-8
—
Luis Mendo
¿Podríamos tener algunos casos de prueba? Particularmente para casos extremos como donde dos cajas se tocan en un borde o esquina (o aclaración de que esto nunca sucederá).
—
Trichoplax
Sería bueno publicar los resultados requeridos para esos casos de prueba.
—
manatwork
Ugh, estaba componiendo una respuesta :-(
—
Neil
+
tiene líneas a su alrededor en todas partes?