Quand j'écris de la documentation, des commentaires, etc. J'adore créer des tableaux ASCII. Ils finissent généralement par être assez beaux, mais j'ai toujours l'impression qu'ils pourraient être encore meilleurs - d'autant plus que UTF-8 / Unicode inclut les personnages de dessin de boîte . Cependant, ces caractères sont très lourds à utiliser, nécessitant plusieurs appuis sur les touches pour être insérés. Ta tâche? Écrivez un programme ou une fonction qui peut convertir automatiquement les tables ASCII en équivalent UTF-8 / Unicode.
Ce défi a été mis en bac à sable .
Défi
Écrire un programme, qui, étant donné une table ASCII en tant que chaîne d'entrée, génère la table redessinée avec les caractères de dessin de boîte Unicode / UTF-8. Plus précisément, les caractères qui font partie du tableau doivent être traduits comme suit:
(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)
Détails
E / S:
- Les E / S par défaut sont autorisées
- Vous pouvez prendre des entrées dans n'importe quel format raisonnable, y compris la table sous forme de chaîne ou un chemin d'accès à un fichier contenant la table.
- Vous pouvez exporter vers un fichier et prendre le nom de fichier comme argument supplémentaire.
- Cependant, vous ne pouvez pas modifier le fichier d'entrée . (Il doit être conservé pour faciliter la modification future)
Contribution:
- Vous pouvez supposer que chaque ligne d'entrée a été complétée pour avoir la même longueur avec
. - Vous ne pouvez pas supposer que le premier caractère après une nouvelle ligne fait partie des bordures du tableau (car il peut s'agir d'espaces).
- L'entrée est considérée comme une table valide si tous les caractères (qui font partie de la table)
-=|sont connectés à exactement deux caractères et+sont connectés à au moins un caractère à la fois horizontalement et verticalement. - Votre programme peut ne produire aucune erreur avec des entrées valides.
- Si l'entrée n'est pas valide, le comportement n'est pas défini et vous pouvez produire n'importe quelle sortie.
- L'entrée peut contenir tous les caractères UTF-8, y compris les caractères de dessin de boîte.
Production:
- N'importe lequel des personnages
-=|+qui ne font pas partie du tableau doivent être laissés tels quels. - De même, tous les autres caractères doivent être laissés tels quels.
- Une seule nouvelle ligne de début et / ou de fin est autorisée.
Autre:
- Failles standard sont interdites, comme d'habitude.
- Si votre langue préférée a une fonction intégrée qui résout ce problème, vous ne pouvez pas l'utiliser.
- Cela signifie des programmes, des fonctions, des sous-programmes ou des instructions qui seraient des soumissions valides pour ce défi sans ajouts.
- Chacun des caractères nécessaires à ce défi fait trois octets de long lorsqu'ils sont encodés en UTF-8.
Personnages connectés :
Un personnage est connecté à un autre si:
- Il est
|et est directement au-dessus ou en dessous+ou|; - Il est
-et est directement avant ou après+ou-; - Il est
=et est directement avant ou après+ou=; - Il est
+et est directement au-dessus ou au-dessous de|ou+, ou est directement avant ou après-,=ou+.
Un caractère est considéré comme faisant partie de la table s'il est connecté à n'importe quel caractère faisant partie de la table. Par définition, le premier +de l'entrée fait partie du tableau.
Exemples
Exemples disponibles ici en version copiable-collable.
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>
+--+
Finalement...
Il s'agit de code-golf , donc le moins d'octets gagne. Bon golf!
Hello Worldtableau, les tableaux intérieurs ne sont pas considérés comme formant un tableau car le texte à l'intérieur du tableau doit rester inchangé et ils ne sont pas considérés comme faisant partie des bordures extérieures du tableau car ils ne sont pas correctement connectés.
+----+exemple, ce serait parce que la direction des coins serait ambiguë.
+-+extraits consécutifs ne sont-ils pas considérés comme formant une table connectée?