Étant donné un texte comme celui-ci:
# #### ## #
## # ## #
#### ##
Produisez le même texte mais en reliant les pixels aux caractères ─│┌┐└┘├┤┬┴┼
. Si un pixel n'a pas de voisins, ne le changez pas.
La sortie du dernier texte est donc:
│ ─┬── ┌─ │
└─ │ ┌┘ │
└──┘ ─┘
- Vous pouvez prendre une entrée comme un tableau booléen.
- L'entrée contiendra toujours au moins 1 pixel.
- Vous pouvez compter les caractères de dessin de boîte comme 1 octet.
- Vous pouvez supposer que l'entrée est complétée d'espaces.
Cas de test
## #
=>
── #
###
#
=>
─┬─
│
##### ##
# # #
########
=>
─┬─┬─ ┌─
│ │ │
─┴─┴──┴─
# #
#####
# #
=>
│ │
─┼─┼─
│ │
# # # # #
# # # #
# # # # #
# # # #
# # # # #
=>
# # # # #
# # # #
# # # # #
# # # #
# # # # #
#####
#####
#####
#####
#####
=>
┌┬┬┬┐
├┼┼┼┤
├┼┼┼┤
├┼┼┼┤
└┴┴┴┘
Puisqu'il s'agit de code-golf , le code le plus court l'emporte.
-|r7LJE3TW+
est un remplacement approprié d'un caractère sur 1 octet pour les caractères de bloc.Réponses:
Jelly ,
605251504948 octetsEnregistré un octet grâce à @ Dennis.
L'entrée est un tableau booléen de 1 et de 0. Itère sur chaque colonne et chaque ligne en convertissant la tête et la queue de chaque infixe de taille 3 d'une paire de chiffres binaires en une décimale, et les multiplie par le centre de chaque infixe. Ensuite, il résume avec lui-même pour trouver l’index
'#───│┌┐┬│└┘┴│├┤┼ '
.Essayez-le en ligne! ( cas 2 ) ( cas 3 ) ( cas 4 )
Explication
Cela repose sur la même idée que ma réponse en J mais au lieu de traiter sur chaque sous-tableau 3x3, je traite chaque ligne et chaque colonne tout en obtenant le même tableau d'indices.
Plus de la moitié des octets sont utilisés pour générer la liste des caractères de la boîte
'#───│┌┐┬│└┘┴│├┤┼ '
. Les littéraux de chaîne commencent par“
Jelly et ont différentes significations en fonction de leur terminateur. Ici, le terminateur’
signifie que la chaîne sera analysée en tant que points de code de chaque caractère conformément à la page de code Jelly et convertie à partir d'une liste de 250 chiffres de base en un nombre décimal.Convertissez ensuite cette décimale en une liste de chiffres de la base bijective 61 et incrémentez-les de 9471 pour les déplacer dans la plage des caractères de la boîte et convertissez-les chacun à l'aide de caractères Python
chr
. Puis”#
ajoutez-y un caractère littéral et ajoutez un espace⁶
.la source
J ,
827266 octetsL'entrée est une table booléenne de 1 et de 0. Les règles indiquent que les caractères de la boîte comptent chacun pour un octet et non pour trois, et cela a été appliqué ici.
Usage
Explication
D'abord, l'entrée est complétée par des 0 de tous les côtés.
Ensuite, chaque sous-réseau de taille 3 est sélectionné
Alors seulement 5 des valeurs de chaque sous-tableau sont considérées
Les valeurs
ABCD
sont sélectionnées en aplatissant chaque sous-tableau et en sélectionnant des indices1 7 3 5
. Ces valeurs sont multipliées parE
ce qui est à l'index 4. Il est ensuite converti à partir d'une liste de chiffres binaires en une décimale et incrémenté deE
. Lesx
valeurs ne sont pas nécessaires.Ceci est utilisé comme index pour sélectionner le personnage à dessiner selon le tableau ci-dessous (réorganisé un peu pour jouer au golf). La dernière colonne correspond à la valeur de sortie de chaque sous-tableau à un caractère de zone.
De plus, en J, la chaîne
' #───│┌┐┬│└┘┴│├┤┼'
utilise des caractères de 8 bits, ce qui lui donne une longueur de 47 (pour chaque octet) pour les 17 caractères nécessaires. La commande leucp
convertit en caractères 16 bits, ce qui lui permet d'avoir une longueur de 17.la source
JavaScript (ES6),
155121103102 caractèresEdit: sauvegardé 18 octets à l’aide de ETHproductions
Edit: sauvegardé 1 octet en utilisant le 1er paramètre de replace () en tant que
'#'
Comment ça marche
Nous itérons sur tous les
#
caractères trouvés dans la chaîne d'entrée. Pour chacun d'eux, nous testons si ses voisins sont aussi des#
personnages en utilisant lat()
fonction:Le paramètre
x
de lat()
fonction est le décalage du voisin par rapport à la position actuellep
. Nous utilisons -1 / + 1 pour tester les voisins gauche / droit et -w / + w pour les voisins haut / bas (oùw
est la largeur d'une ligne, c'est-à-dire la position du premier saut de ligne + 1).Chaque voisin se voit attribuer un poids différent (1, 2, 4 ou 8) selon le compas suivant:
Chaque combinaison de poids conduit à une valeur unique dans [0 .. 15]. Par exemple, si le voisin du haut et le voisin de droite sont définis, la somme sera de 1 + 4 = 5, ce qui se traduit par l'
└
utilisation de cette table:Par conséquent,
'#│─┘─└─┴││┐┤┌├┬┼'[weight_sum]
mène au caractère attendu.la source
s=>(w=s[0].length+1,s=s.join`\n`).replace(/#/g,(_,p)=>'#│─┘─└─┴││┐┤┌├┬┼'[t=x=>s[p+x]>' ',t(-w)+2*t(-1)+4*t(1)+8*t(w)])
s=>s.replace(/#/g,(_,p)=>'#│─┘─└─┴││┐┤┌├┬┼'[t=x=>s[p+x]>' ',t(-w)+2*t(-1)+4*t(1)+8*t(w)],w=s.indexOf`\n`+1)
Python 2.7,
318315 octets (270267 caractères)Je suis sûr que cela peut être joué plus loin (en particulier j'aimerais beaucoup me débarrasser de ce commentaire de première ligne ennuyeux), mais voici mon entrée:
Voici une explication de la façon dont tout cela fonctionne:
EDIT: Supprimé quelques espaces avant
for ... in ...
la source
JavaScript (ES6),
150139133131 caractèresPrend l'entrée comme un tableau de chaînes, par exemple
f(["###", " # "])
.Extrait de test
Afficher l'extrait de code
la source
ALPACA , 414 + 2 = 416 octets
Nécessite les
-fI
drapeaux.Cette solution utilise un très grand nombre d'octets, mais elle est unique en ce qu'elle utilise un automate cellulaire. ALPACA est généralement utilisé comme métalangage, mais ici, je l’utilise comme langage de programmation.
Version non-golfée:
la source
PHP, 203 octets
Cela peut probablement être fait de manière plus courte.
lit l'entrée de STDIN. courir avec
-r
.la source
Python 3, 149 octets
Prend les entrées comme
##\n #\n
et retourne les sorties comme['─', '┐', '\n', ' ', '│', '\n']
.la source
R,
199212 octetsEDIT: C'est maintenant une fonction, plutôt qu'un extrait de code.
L'entrée est une matrice
m
de 1 et de 0. C'est assez moche et hacky.Quelques tests:
la source
x = "┼"
fonctionne très bien pour moi.Perl,
8988 octetsComprend +2 pour
-0p
. Les caractères spéciaux sont comptés pour 1 octet, mais pour les afficher en tant que caractères uniques, il est préférable d’ajouter également l’option -C.Donnez une entrée sur STDIN avec les lignes espacées de manière à ce qu'elles aient toutes la même longueur:
connect.pl
:la source
MATL, 102 caractères
J'attribue une valeur à un voisin (1, 2, 4 ou 8); leur somme correspondra à un caractère d'une chaîne contenant les caractères de dessin. Je pense qu'il y a encore beaucoup de place pour des améliorations, mais pour un brouillon:
Améliorations à apporter:
Essayez-le en ligne! (peut ne pas prendre en charge les caractères de dessin de boîte)
la source