Voici un art ASCII d'une intersection à 4 voies:
| | |
| |
| | |
| |
| | |
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
(Notez que les routes horizontales mesurent 3 rangées, tandis que les routes verticales ont 5 colonnes de large. C'est pour des raisons esthétiques, en raison de la police rectangulaire.)
Votre défi est de produire cet art ASCII. Cependant, comme vous le savez sûrement tous, toutes les intersections n'ont pas de route qui part dans toutes les directions. Cette intersection va NESW
, mais certaines intersections pourraient aller, par exemple NW
,:
| | |
| |
| | |
| |
| | |
-----+-----+
| |
- - -| |
| |
-----+-----+
Ou cela pourrait aller SWE
:
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
Ou il peut même aller E
dans une seule direction (même si vous pouvez difficilement appeler cela une intersection , mais essayez d'éviter d'être trop pédant):
+-----+-----
| |
| |- - -
| |
+-----+-----
Vous devez écrire un programme ou une fonction qui peut facilement générer n'importe laquelle de ces combinaisons. Plus précisément, votre défi consiste à écrire un programme ou une fonction qui prend une chaîne de directions, consistant NESW
en entrée et qui renvoie ou renvoie cet art ASCII d'une intersection avec des routes pointant dans ces directions. Ces instructions peuvent apparaître dans un ordre quelconque, mais l'entrée ne contiennent aucun caractère à l' exception N
, E
, S
ou W
. Si vous le souhaitez, vous pouvez demander que les entrées soient en minuscules à la place, mais vous devez le spécifier dans votre réponse. Vous pouvez également supposer que toutes les entrées contiendront au moins une direction.
Le dernier exemple avait des espaces de tête sur chaque ligne, car il n'y a pas de route vers l'ouest. Si vous n'avez pas de route vers l'ouest, ces espaces de tête sont facultatifs. Cette:
+-----+-----
| |
| |- - -
| |
+-----+-----
Serait également une sortie acceptable. De même, si N
ou S
est parti, les lignes vides à cet endroit sont facultatives. Une nouvelle ligne de fin est autorisée et les espaces de fin sont autorisés tant que la sortie est visuellement la même.
Vous pouvez prendre des entrées et des sorties dans n'importe quel format raisonnable, tel que STDIN / STDOUT, les arguments de ligne de commande, les fichiers, les arguments de fonction / valeurs de retour, etc.
Comme d'habitude, il s'agit de code-golf , alors essayez d'obtenir la réponse la plus courte possible dans la langue que vous utilisez!
Exemple d'E / S:
NESW:
| | |
| |
| | |
| |
| | |
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
NS:
| | |
| |
| | |
| |
| | |
+-----+
| |
| |
| |
+-----+
| | |
| |
| | |
| |
| | |
S:
+-----+
| |
| |
| |
+-----+
| | |
| |
| | |
| |
| | |
EW:
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
SE:
+-----+-----
| |
| |- - -
| |
+-----+-----
| | |
| |
| | |
| |
| | |
E
, par exemple)? Les lignes vides de début et de fin sont-elles autorisées s'il n'y a pas deN
ouS
?Réponses:
Javascript (ES6),
190187185 octetsIl s'agit d'une tentative de construction de ce personnage d'art ASCII par personnage en itérant sur une matrice 17x15. Par conséquent, la sortie est toujours composée de 15 lignes de 17 colonnes avec l'intersection des routes centrée au milieu.
Non golfé et commenté
Matrice
Ci-dessous se trouve la matrice avec les coordonnées utilisées dans le code.
Démo
L'extrait suivant permet d'essayer n'importe quelle configuration de route.
la source
PowerShell v3 +,
226204192191 octetsPrend l'entrée comme une chaîne de lettres majuscules, la transforme explicitement en
char
tableau. Construit le segment "Nord" via une boucle de0
à4
. Chaque boucle, construit une chaîne de 5 espaces (siW
/87
est présent dans l'entrée), le stocke dans$x
, puis soit| |
(stocké dans$w
) ou| | |
, selon que nous sommes actuellement pairs ou impairs. Ce tableau de chaînes est stocké dans$n
, et multiplié par siN
/78
est-in
l'entrée. Cela déterminera si$n
est placé sur le pipeline ou non.Ensuite, nous construisons la partie médiane. La première ligne,
$z
est le "haut" de la route est-ouest, utilisant la même logique pourW
etE
/69
et entourée de parens pour placer également une copie sur le pipeline. Nous utilisons la variable d'assistance$y
pour enregistrer un octet sur les-----
sections.La ligne suivante est juste le nombre approprié d'espaces (c'est-à-dire
$x
) concaténé en chaîne avec les tuyaux de bonne largeur (c'est-à-dire$w
). Ensuite, la ligne rayée du milieu, encore une fois avecW
et laE
logique et le$w
remplissage au milieu. Ensuite ,$x+$w
et à$z
nouveau.Enfin, comme la route Sud est la même que le nord, mettez
$n
le pipeline siS
/83
est-in
$a
.Toutes ces chaînes résultantes sont collectées à partir du pipeline et la sortie est implicite à la fin de l'exécution du programme. Abuse le
Write-Output
délimiteur par défaut pour insérer une nouvelle ligne entre les éléments.Exemples
la source
C ++
317280276 octetsNon golfé:
la source
strchr
parindex
en rasera quelques autres. Définissezx
ety
ensemble lesfor
boucles extérieures .Python 3, 186 octets
Un lambda anonyme appelé avec une chaîne de directions, par exemple 'NWS'
Explication à suivre
la source
sed 234
Il construit simplement les différentes parties si le caractère approprié est sur la ligne.
Utilise à la
@
place de\n
et s'abonne\n
à la fin.Les parties nord et sud sont identiques, donc j'utilise ce qui est essentiellement une fonction pour les insérer.
la source
Lot,
351344341 octetsRemarque: la ligne
set t=
se termine par cinq espaces et la ligneif "%i:e=%"=="%i%" set r=
se termine par un espace. Prend une entrée insensible à la casse de STDIN. Edit: enregistré 7 octets en éliminant lad
variable. Enregistré 3 octets en utilisant unefor
boucle pour imprimer la section centrale. Si on me permet des paramètres de ligne de commande séparés à la place, alors pour326319316 octets:la source
Python 2, 290 octets
la source
m,t,s=[],[],[]
pourrait êtrem=t=s=[]
.range(5)
pourrait être enregistré dans une variable et utilisé deux fois, au lieu de taperrange(5)
deux fois.m
?t=s=[]
tout gâchém=t=s=[]
, ils pointent tous vers la même référence.GolfScript, 154 octets
Essayez-le en ligne!
la source
Pyth (
385380373353 octets)Golfé:
Non golfé:
Bien sûr, s'il y a des améliorations, veuillez me le dire.
5 octets enregistrés grâce à Maltysen
Vous pouvez l'essayer ici
la source
K
place deN
puis lors de la première affectation, vous n'avez pas besoin d'utiliser un=
, vous économisant un octetN[:-1]
estP
Groovy (274 octets)
Non golfé
Golfé
Essayez-le: https://groovyconsole.appspot.com/script/5082600544665600
la source