Regardez! C'est un labyrinthe ASCII! Soo coolzors, amazeballs et tout ça.
+-+-----+---+
| | | |
| | ++ | |
| | ++ +-+ |
| | |
+-------+ | |
| | |
+---------+-+
Mais, mais, mais ... c'est pénible de savoir dans quelle direction vont toutes les parties du labyrinthe. Je veux juste dessiner la mise en page et le labyrinthe se fait kul sans trop de temps.
Et si je pouvais juste dessiner ça ...
#############
# # # #
# # ## # #
# # ## ### #
# # #
######### # #
# # #
#############
Ce serait tellement doux!
Les règles (Parce que les règles sont cool):
- Écrivez du code pour convertir une chaîne en un labyrinthe ascii et affichez le résultat.
- Tout caractère non blanc sera lu comme un mur.
- Chaque personnage du mur décidera quel personnage doit être basé sur ses voisins (uniquement dans les directions Nord, Sud, Est et Ouest).
- Si un caractère n'a pas de voisins non blancs, ce sera un signe plus (+).
- Si un omble chevalier a des voisins dans les directions verticale (Nord-Sud) et horizontale (Est-Ouest), ce sera un signe plus (+).
- Si un caractère a des voisins uniquement dans une direction verticale (Nord-Sud), ce sera un symbole de tuyau (|).
- Si un omble chevalier n'a de voisins que dans une direction horizontale (Est-Ouest), ce sera un signe moins (-).
- L'entrée peut être une seule chaîne (avec des lignes séparées par des caractères de nouvelle ligne ou un tableau de chaînes).
- Tous les caractères saisis seront des caractères ASCII imprimables, vous n'avez pas besoin de gérer les jeux de caractères étendus.
- Utilisez n'importe quelle langue ancienne qui vous plaît.
- S'il y a un espace blanc avant une ligne, il doit être identique sur chaque ligne. Tout espace blanc après chaque ligne de sortie est correct.
- Essayez de le résoudre avec le plus petit nombre d'octets.
Cas de test:
1: cadre
Contribution:
##########
# #
# #
# #
##########
Production:
+--------+
| |
| |
| |
+--------+
2: Labyrinthe classique
Contribution:
#################
# #
# ##### # ##### #
# # # # # #
# # # # ##### # #
# # # # #
### # ####### # #
# # # # # #
# ### # ## # ##
# # ## #
#################
Production:
--------+-------+
| |
| --+-+ | ----+ |
| | | | | |
| + | | +---- | |
| | | | |
+-- | +----+- | |
| | | | | |
| --+ | ++ | -+
| | ++ |
+-----+-++----+--
3: Oeufs verts, mec.
Contribution:
I do not like green eggs and ham.
I do not like them, sam I am.
Would you like them here or there?
I would not like them anywhere!
Production:
| ++ +++ ++++ +++++ +++- -++ ----
| ++ +++ ++++ +++++ +++ + +++
+-+++ +++ ++++ ++++ ++++ ++ +++---
| +++-+ +++ ++++ ++-+ +++++++++
4: Glaçons
Contribution:
Word Icicle!
Word Icicle
Word cicle
ord cicle
ord icle
ord i le
or i le
or i l
or l
or
r
Production:
++++ ++++++-
++++ ++++++
++++ +++++
+++ +++++
+++ ++++
+++ | ++
++ | ++
++ | |
++ |
++
|
---
?-
s ou pourquoi le labyrinthe classique n'a pas quatre+
s sur la rangée du bas.smallest number of characters
, pas d'octets?+
au milieu de la 1ère rangée 2) le!
de Icicles devrait être remplacé par un-
. Pourriez-vous s'il vous plaît revérifier ceux-ci?whitespace
, tu veux dire juste l'espace? Je ne veux pas avoir à prendre en charge les onglets et vous ne voulez probablement pas non plus que je transforme les nouvelles lignesRéponses:
APL (Dyalog Unicode) ,
5735 octets SBCS–22 grâce à une nouvelle solution de ngn .
Fonction tacite anonyme prenant comme argument une matrice de caractères.
Essayez-le en ligne!
{
…}⌺3 3
Sur chaque quartier 3 par 3, appliquez la fonction suivante:,⍵
défiler (aplatir)' '≠
Booléen où non-espace⍱∘⌽⍨
que NON c'est inversé (incl. ni haut NI bas, ni gauche NI droite)5 4 2⊃¨⊂
choisissez le 5 e , le 4 e et le 2 e élément de cette liste entière,c.-à-d. vide libre, pas vertical, pas horizontal
2⊥
évaluer en base 2 (binaire)ie ≥4: soi vide; 3: aucun voisin; 2: aucun voisin horizontal; 1: pas de vertical; 0: a les deux
'+-|+'↓⍨
supprimez autant d'éléments de cette chaîne,c'est-à-dire vide self
:; seul
+
:; voisin (s) vertical (s) seulement|+
:; horizontal-|+
:; tous les deux:+-|+
⊃
choisissez le premier élément (pad avec espace si non disponible)c'est-à-dire vide auto
+
:; voisin (s) vertical (s) seulement|
:; horizontal-
:; tous les deux:+
Ancienne solution
Fonction tacite anonyme prenant comme argument une matrice de caractères.
Essayez-le en ligne!
{
…}⌺3 3
Sur chaque quartier 3 par 3, appliquez la fonction suivante:,⍵
défiler (aplatir)(
…)/
Filtre à l'aide du masque suivant:9⍴0 1
remodeler cycliquement[0,1]
à la longueur 9 (sélectionne N, W, E, S)' '≠
Booléen où non-espace1⌽
tourner d'un pas vers la gauche;[W,E,S,N]
2 2⍴
remodeler en matrice 2 par 2;[[W,E],[S,N]]
∨/
réduction OU par ligne:[horizontal,vertical]
(
…)
Appliquez la fonction tacite suivante:⊢
l'identité;[horizontal,vertical]
∧/,
précédé de sa réduction ET;[both,horizontal,vertical]
(
…),
Ajoutez ce qui suit:,⍵
défoncer (aplatir) le quartier5⊃
choisissez le 5 ème élément (lui-même)' '=
Booléen si espace (c'est-à-dire vide)Maintenant nous avons
[empty,both,horizontal,vertical]
1⍳⍨
indice de 1 le plus à gauche (donne 5 si aucun voisin du tout)' +-|+'⊃⍨
utiliser cela pour choisir le symbolela source
JavaScript (ES6), 110 octets
Format d'E / S: tableau de chaînes.
Essayez-le en ligne!
Ou 108 octets en utilisant une matrice de caractères à la place.
la source
Python 2 ,
181168 octetsmerci à Leaky Nun pour -13 octets
Essayez-le en ligne!
la source
MATLAB,
113110101 octetsConvertit l'entrée en logique, applique une convolution horizontale et verticale et combine les sorties pour créer les caractères correspondants.
3 octets enregistrés par @Adriaan pour m'avoir dit que vous pouvez obstruer la sortie dans PPCG: P
9 octets économisés grâce aux nombreux commentaires @flawr!
la source
J ,
4947 octetsMerci à FrownyFrog pour -2 octets!
Essayez-le en ligne!
la source
Retina 0.8.2 , 92 octets
Essayez-le en ligne! Nécessite une entrée rectangulaire. Le lien inclut des cas de test. Explication:
Remplacez tous les non-espaces par
0
s.Recherchez tous les
0
s avec un autre0
immédiatement au-dessus ou en dessous dans la même colonne et changez-les en 1. Les1
s sont maintenant les endroits avec des voisins verticaux, tandis que les0
s n'ont pas de voisins verticaux.Recherchez tous les chiffres sans voisins horizontaux. Les
0
s n'ont pas non plus de voisins verticaux, ils deviennent donc+
s, tandis que les1
s ont des voisins verticaux, ils deviennent donc|
s.Les chiffres restants ont des voisins horizontaux. Les
1
s ont aussi des voisins verticaux, donc ils deviennent+
s, tandis que les0
s n'ont que des voisins horizontaux, donc ils deviennent-
s.la source
Python 3 , 336 octets
Essayez-le en ligne!
J'ai dû utiliser beaucoup de code pour traiter les erreurs de cas de bord.
la source
C (gcc) , 143 octets
Essayez-le en ligne!
La fonction f modifie un tableau de chaînes en place. La zone autour du tableau doit être complétée par des espaces (un peu contraints). Même si cela ne répond pas exactement aux exigences que la plupart des solutions utilisent, il est conforme aux règles si nous disons que nous représentons une nouvelle ligne avec deux espaces (et prenons un tableau de chaînes se terminant par des nouvelles lignes).
Non golfé
C'était un défi amusant de l'arithmétique des pointeurs. En utilisant l'itération du pointeur de style C, il est facile d'obtenir les voisins horizontaux, mais les verticaux étaient plus difficiles. Heureusement, le pointeur y est toujours là (ce qui pointe vers la valeur initiale de z), donc je peux en déduire mon index et l'utiliser pour accéder au même élément sur une ligne différente. Cela semblait très mal d'écrire
y[-1][z-*y]
car il va à l'encontre de tout style raisonnable!la source