Prenez deux listes d'entiers non négatifs et sortez une boîte ASCII telle que définie ci-dessous.
- Les coins et les intersections sont des atouts:
+
(code ASCII 43) - Les lignes verticales sont des barres
|
(code ASCII 124) - Les lignes horizontales sont des inconvénients
-
(code ASCII 45)
La première liste d'entrée spécifie le nombre de points négatifs entre chaque signe plus, dans le sens horizontal.
La deuxième liste d'entrée spécifie le nombre de barres entre chaque signe plus, dans le sens vertical.
C'est plus facile à expliquer avec quelques exemples:
0 // No minuses between each + sign
0 // No bars between + signs
++
++
------------------
1 2 // First a single minus, then two minuses
1 2 // First one bar, then two bars
+-+--+
| | |
+-+--+
| | |
| | |
+-+--+
------------------
1 0 3 0 2 0
2 1 0 0
+-++---++--++
| || || ||
| || || ||
+-++---++--++
| || || ||
+-++---++--++
+-++---++--++
+-++---++--++
Précisions:
- L'ordre et le format d'entrée sont facultatifs
- Seules les cases doivent être imprimées / affichées, mais un espace de fin ou des retours à la ligne sont acceptés.
- Vous pouvez éventuellement ajouter 1 à toutes les valeurs d'entrée si cela est plus pratique. Le deuxième exemple serait alors:
2 3; 2 3
.
C'est le golf de code, donc le code le plus court en octets gagne.
Réponses:
MATL ,
252221 octetsUtilise des entrées avec
1
ajout (autorisé par le défi).Essayez-le en ligne!
Explication
Le code crée initialement un tableau contenant
1
pour la colonne des indices de caractères non-espace dans le résultat final, et0
autrement. Donc, si la première entrée est[2 1 4 1 3 1]
(serait[1 0 3 0 2 0]
au format de base 0), ce tableau seraNotez comment la longueur des exécutions de zéros est liée à l'entrée. Plus précisément, ce tableau est construit comme suit:
1
.1
. Dans l'exemple, cela donne[3 4 8 9 12 13]
.1
aux entrées avec des indices (basés sur 1) donnés à l'étape 2. Les entrées intermédiaires sont automatiquement définies sur0
.Un tableau similaire est construit pour les lignes. La deuxième entrée
[3 2 1 1]
(ou[2 1 0 0 ]
) donneMaintenant, le deuxième tableau est multiplié par
2
, transposé et ajouté avec diffusion au premier. Cela donne le tableau 2DL'indexation dans la chaîne
'|-+ '
donne le résultat final sous la forme d'un tableau de caractères 2D. L'indexation étant modulaire et basée sur 1, l'index0
correspond au dernier élément (espace).la source
Python 2, 117 octets
Essayez-le sur ideone.
Ne pas trop en attendre. Vraiment simple, utilise simplement les jointures python et la multiplication de chaînes pour tout rassembler.
la source
JavaScript (ES6), 83 octets
La sortie comprend deux nouvelles lignes de fin.
la source
CJam, 50 octets
Essayez-le en ligne!
la source
Pyth, 45 octets
Un programme qui prend en entrée deux listes séparées par des virgules sur STDIN et imprime le résultat.
Il y a probablement encore du golf à faire ici.
Essayez-le en ligne
Explication à venir plus tard
la source
Haskell, 55 octets
Définit une fonction
g
qui prend les deux listes d'entrée et renvoie une liste contenant les lignes de la sortiela source
PowerShell v2 +, 89 octets
Dang, ne pense pas que je puisse tout à fait attraper JavaScript.
Prend des entrées
$a
et$b
des tableaux explicites. Définit variable$x
comme étant la ligne supérieure des cases en fonction de la boucle$a
et de la concaténation de chaînes. C'est encapsulé en parens donc il est placé sur le pipeline. Ensuite, nous bouclons$b
, chaque itération mettant deux chaînes sur le pipeline - la même chaîne de style mais avec des espaces et|
au lieu de tirets et+
, et$x
. Ces chaînes sont toutes collectées à partir du pipeline avec un impliciteWrite-Output
à la fin du programme, avec une nouvelle ligne par défaut entre elles.Exemples
la source
Rubis, 66 octets
la source
Gelée ,
3026 octetsTestez-le sur TryItOnline
Comment?
L'entrée prise est une liste des deux listes
[vertical, horizontal]
, et utilise l'option incrémentée- donc l'exemple 3 prend
[[3,2,1,1], [2,1,4,1,3,1]]
Chacune d'entre elles est ensuite convertie en un tableau booléen indiquant respectivement le rowType ou le rowCharacterType, par exemple.
[[1,0,0,1,0,1,1,1], [1,0,1,1,0,0,0,1,1,0,0,1,1]]
Les boîtes sont ensuite construites en créant les lignes à partir de les caractères identifiés par les combinaisons rowType et rowCharacterType - c'est-à-dire qu'un rowType identifie l'un
"+-"
ou l' autre"| "
et un rowCharacterType identifie l'un de ces deux caractères.la source