Le défi
Votre programme ou votre fonction acceptera une seule chaîne d'entrée de STDIN ou un paramètre de fonction. Vous pouvez supposer que l'entrée ne contiendra que des caractères alphabétiques (a-zA-Z), des espaces et des points. La saisie est insensible à la casse, vous devez donc traiter "a" exactement de la même façon que vous traiteriez "A".
Pour chaque caractère de la chaîne, vous allez générer une représentation d'un bâtiment conformément à la spécification suivante.
Chaque bâtiment doit avoir un toit, désigné par un trait de soulignement sur la ligne supérieure, puis par une barre oblique, une espace, une barre oblique inverse sur la deuxième ligne.
_
/ \
Vous aurez alors un nombre d'étages, correspondant au numéro de lettre (a = 1, b = 2, c = 3, etc.) qui sont représentés par un mur (|) de chaque côté et un espace au milieu. Le plancher inférieur (et seulement le plancher inférieur) devrait avoir une fondation, qui est un soulignement entre les murs. Comme ça...
|_|
Ainsi, par exemple, 'b' ressemblerait à ceci
_
/ \
| |
|_|
Nous savons maintenant que les bâtiments très hauts et étroits ne peuvent pas subsister et doivent s'élargir à la base, de sorte qu'aucun bâtiment ne peut supporter plus de trois étages sans un soutien supplémentaire. Donc, tous les trois niveaux (pas moins), vous devriez ajouter un "calque élargissant". La couche d’élargissement consiste en une barre oblique et une barre oblique inverse directement au-dessus des murs de la section située en dessous, la section ci-dessous devant être plus large de deux espaces que la section ci-dessus. La couche supplémentaire ne compte pas pour la hauteur du bâtiment.
Les bâtiments ne doivent pas se chevaucher mais ne doivent pas comporter d'espaces inutiles, et le sol étant toujours plat, tous les bâtiments doivent avoir leur base au même niveau.
Par exemple, "abcdefga" ressemblera à ceci.
_
/ \
_ | |
_ / \ | |
_ / \ | | | |
/ \ | | | | / \
_ | | | | | | | |
_ / \ | | | | / \ | |
_ / \| | | | / \| | | | _
/ \| || |/ \| || |/ \/ \
|_||_||_||___||___||___||_____||_|
Les espaces dans l'entrée de chaîne doivent être représentés par un double espace.
Les arrêts complets dans l'entrée de chaîne doivent être représentés par des gravats comme celui-ci.
/\/\
Autres exemples
Entrée = Hello world.
Sortie =
_
/ \
| |
| |
| |
/ \
| |
| | _
| | / \
/ \ | |
| | | |
_ | | _ | |
/ \ | | / \ / \
| | / \ | | | |
| | | | | | | |
_ _ | | | | | | | | _
/ \ / \ / \ | | / \ / \ / \
| | | | | | / \ | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
_ / \ / \ / \ | | / \ / \ / \
/ \ | | | | | | / \ | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | _ / \ / \ / \ | | / \ / \ / \
/ \ / \ | | | | | | / \ | | | | | | _
| | | | | | | | | | | | | | | | | | / \
| | | | | | | | | | | | | | | | | | | |
| | | | / \/ \/ \ | | / \/ \/ \ | |
/ \/ \| || || | / \| || || | | |
| || || || || | | || || || |/ \
|_____||___||_______||_______||_________| |_______________||_________||___________||_______||___|/\/\
Entrée = lorem ipsum
_
/ \
_ | |
/ \ | |
_ | | | |
/ \ | | / \
| | _ | | | |
| | / \ / \ | |
_ | | | | | | | |
/ \ / \ | | | | / \
| | | | _ | | | | | | _
| | | | / \ / \ / \ | | / \
_ | | | | | | | | | | | | | |
/ \ / \ / \ | | | | | | / \ | |
| | | | | | | | | | | | | | | |
| | | | | | / \ / \ / \ | | / \
| | | | | | | | _ | | | | | | | |
/ \ / \ / \ | | / \ | | | | / \ | |
| | | | | | | | | | | | | | | | | |
| | | | | | / \ | | / \ / \ | | / \
| | | | | | | | | | | | | | | | | |
/ \ / \ / \ _ | | / \ | | | | / \ | |
| | | | | | / \ | | | | | | | | | | | |
| | | | | | | | / \ | | / \ / \ | | / \
| | | | | | | | | | | | | | | | | | | |
/ \/ \/ \ | | | | / \ | | | | / \ | |
| || || |/ \ | | | | | | | | | | | |
| || || || |/ \ | |/ \/ \| |/ \
|_______||_________||___________||___||_________| |_____||___________||_____________||_____________||_________|
Entrée = a.a.a.x.x.x.a.a.a
_ _ _
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
_ _ _ | | | | | | _ _ _
/ \ / \ / \ | | | | | | / \ / \ / \
|_|/\/\|_|/\/\|_|/\/\|_______________|/\/\|_______________|/\/\|_______________|/\/\|_|/\/\|_|/\/\|_|
Règles
- Bien sûr, c'est du golf de code, le score le plus bas en octets gagne
- Les règles standard relatives aux échappatoires s'appliquent
- N'importe quel nombre de lignes vides supplémentaires avant ou après la sortie est autorisé
- Vous pouvez choisir d'afficher le résultat entier dans une chaîne ou d'offrir la sortie sous forme de tableau dans lequel chaque élément représente une ligne de sortie, ou de l'envoyer à STDOUT.
Remarque
Ceci est mon premier message sur PPCG, alors je vous en prie, allez-y doucement. Il a traversé le bac à sable. Des points négatifs ou des améliorations possibles s'il vous plaît poster comme un commentaire et je ferai ce que je peux
[a,z]
, les [1.26]
parties ont mentionné le Mego. Le faire en option est souvent le meilleur (à moins que ce soit un élément clé du défi (ce n'est pas ici).
[a,z]
et[A,Z]
en[1,26]
semble être une exigence inutile. Il serait bien mieux d’utiliser simplement une liste de nombres entiers comme entrée (ayant0
été l’entrée pour les décombres). De plus, publier votre défi après seulement 21 heures de jeu dans le bac à sable , sans attendre d'obtenir des votes ou des commentaires de plus d'un utilisateur, n'est pas pris en compte, car il a été "passé par le bac à sable". Il est recommandé de laisser les défis dans le bac à sable pendant 48 à 72 heures au minimum, afin de donner aux gens suffisamment de temps pour les examiner.