Le Père Noël a pu reconditionner tous les cadeaux que les elfes ont volés pendant la nuit! Il doit maintenant les envoyer à la chaîne de montage pour l'emballage. Il a généralement une caméra pour superviser la chaîne de montage à la fois pour s'assurer que les elfes font du bon travail et parce que les photos de la chaîne de montage sont belles sur les affiches publicitaires [citation nécessaire]
Malheureusement, son appareil photo s'est cassé, alors il aimerait que vous dessiniez une simulation de ce à quoi ressemblerait la chaîne de montage!
Afin de maintenir le fonctionnement de la chaîne de montage avec une efficacité maximale et de réduire les risques d'erreur ou de défaillance, toutes les boîtes présentes ont la même largeur afin de s'adapter parfaitement à la bande transporteuse.
Défi
Étant donné une liste de cadeaux représentés par leurs dimensions, sortez un tapis roulant avec tous les cadeaux.
Un cadeau est dessiné comme tel:
+----+
/ /|
+----+ |
| | +
| |/
+----+
Ce cadeau a une largeur 1, une hauteur 2 et une longueur 4. Notez que les signes plus ne comptent pas pour la longueur du côté, donc un cadeau de longueur 4 s'étend sur 6 positions.
Tous les cadeaux sont dessinés les uns à côté des autres avec un espace entre les deux personnages les plus proches; c'est-à-dire que les coins en bas à gauche des cadeaux sont espacés de sorte que si une boîte présente a une longueur l
et une largeur w
, le coin en bas à gauche de la boîte présente sera exactement à la l + w + 4
droite du coin en bas à gauche de la boîte précédente.
Une fois toutes les boîtes présentes dessinées, la bande transporteuse est tirée en remplaçant l'espace entre les boîtes de chacune des dernières width + 2
lignes par des traits de soulignement.
Le résultat final pour les cases actuelles avec (l, w, h)
de [(4, 1, 2), (8, 1, 3), (1, 1, 1)]
serait:
+--------+
+----+ / /|
/ /| +--------+ | +-+
+----+ | | | | / /|
| | +_| | +_+-+ +
| |/__| |/__| |/
+----+___+--------+___+-+
Spécifications de formatage
Vous pouvez choisir de prendre une liste de 3-tuples où l'un des éléments est cohérent sur toute la liste (ce serait la largeur), ou vous pouvez prendre la largeur actuelle puis une liste de 2-tuples représentant la longueur et hauteur de chaque cadeau. Vous pouvez prendre les entrées dans n'importe quel ordre et dans n'importe quel format raisonnable, mais les cadeaux doivent être affichés dans le même ordre qu'ils sont donnés en entrée.
Vous pouvez choisir n'importe quel format de sortie raisonnable pour l'art ASCII (y compris le retour d'une fonction).
Cas de test
Ces cas de test sont donnés sous [(l, w, h), ...]
forme de format.
[(4, 1, 2), (8, 1, 3), (1, 1, 1)]:
+--------+
+----+ / /|
/ /| +--------+ | +-+
+----+ | | | | / /|
| | +_| | +_+-+ +
| |/__| |/__| |/
+----+___+--------+___+-+
[(5, 3, 4), (8, 3, 1), (1, 3, 7)]:
+-+
/ /|
/ / |
+-----+ / / |
/ /| +-+ |
/ / | | | |
/ / | +--------+ | | |
+-----+ | / /| | | |
| | +___/ / +_| | +
| | /___/ / /__| | /
| | /___+--------+ /___| | /
| |/____| |/____| |/
+-----+_____+--------+_____+-+
[(0, 0, 0)] (this is the most interesting test case ever :P)
++
+++
++
[(8, 3, 0), (0, 3, 8)] (more zero cases)
++
//|
// |
// |
++ |
|| |
|| |
|| |
+--------+ || |
/ /+_|| +
/ //__|| /
/ //___|| /
+--------+/____||/
+--------+_____++
Règles
- Les échappatoires standard s'appliquent
- Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte
- Aucune réponse ne sera acceptée
Remarque: je me suis inspiré de cette série de défis d' Advent Of Code . Je n'ai aucune affiliation avec ce site
Vous pouvez voir une liste de tous les défis de la série en consultant la section 'Linked' du premier défi ici .
Réponses:
Fusain ,
9681 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. L'entrée est la largeur sur la première ligne, puis les autres dimensions sur les lignes suivantes, se terminant par une ligne vierge. Explication:
Saisissez la largeur.
Faites une boucle sur les lignes restantes jusqu'à ce que la ligne vierge soit atteinte.
Tirez la ceinture entre les cadeaux. La
u
variable est prédéfinie sur une liste vide, qui ne fait donc rien lors de la première passe, tandis que plus tard elle se retrouve avec un seul élément, ce qui provoque l'exécution de ce code une seule fois. (Utiliser unif
serait moins golfique.)Divisez les dimensions de l'espace, convertissez-les en nombre entier et enregistrez-les
u
.Supprimez la dernière dimension et enregistrez-la
p
.Copiez la première dimension dans
r
, mais laissez-lau
afin que la ceinture soit tirée sur la boucle suivante.Effacez l'intérieur du présent, au cas où la ceinture le chevaucherait.
Dessinez les lignes intérieures du présent.
Dessinez à mi-chemin autour de l'extérieur du présent, puis répétez pour l'autre moitié.
la source
Pip ,
160154 octets153 octets de code, +1 pour l'
-l
indicateur.Il s'agit d'une fonction qui prend une liste de listes contenant
[width height length]
. Essayez-le en ligne!Comment?
Explication de haut niveau:
Laissez un commentaire et j'ajouterai une explication plus détaillée.
la source
Python 2 , 508 octets
Essayez-le en ligne!
Prend une liste de listes de
[height, width, length]
la source