J , 82 72 66 octets
(ucp' #───│┌┐┬│└┘┴│├┤┼'){~]+]*3 3((2#.1 7 3 5{,);._3)0,.~0,.0,~0,]
L'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
f =: (ucp' #───│┌┐┬│└┘┴│├┤┼'){~]+]*3 3((2#.1 7 3 5{,);._3)0,.~0,.0,~0,]
m =: 1 0 1 1 1 1 0 1 1 0 1 , 1 1 0 1 0 0 1 1 0 0 1 ,: 0 0 0 1 1 1 1 0 0 1 1
m { ' #'
# #### ## #
## # ## #
#### ##
f m
│ ─┬── ┌─ │
└─ │ ┌┘ │
└──┘ ─┘
' #' {~ m =: 5 5 $ 1
f m
┌┬┬┬┐
├┼┼┼┤
├┼┼┼┤
├┼┼┼┤
└┴┴┴┘
' #' {~ m =: 5 9 $ 1 0
# # # # #
# # # #
# # # # #
# # # #
# # # # #
f m
# # # # #
# # # #
# # # # #
# # # #
# # # # #
Explication
D'abord, l'entrée est complétée par des 0 de tous les côtés.
] m =: 1 0 1 1 1 1 0 1 1 0 1 , 1 1 0 1 0 0 1 1 0 0 1 ,: 0 0 0 1 1 1 1 0 0 1 1
1 0 1 1 1 1 0 1 1 0 1
1 1 0 1 0 0 1 1 0 0 1
0 0 0 1 1 1 1 0 0 1 1
(0,.~0,.0,~0,]) m
0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 1 1 1 1 0 1 1 0 1 0
0 1 1 0 1 0 0 1 1 0 0 1 0
0 0 0 0 1 1 1 1 0 0 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0
Ensuite, chaque sous-réseau de taille 3 est sélectionné
3 3 <;._3 (0,.~0,.0,~0,]) m
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│0 0 0│0 0 0│0 0 0│0 0 0│0 0 0│0 0 0│0 0 0│0 0 0│0 0 0│0 0 0│0 0 0│
│0 1 0│1 0 1│0 1 1│1 1 1│1 1 1│1 1 0│1 0 1│0 1 1│1 1 0│1 0 1│0 1 0│
│0 1 1│1 1 0│1 0 1│0 1 0│1 0 0│0 0 1│0 1 1│1 1 0│1 0 0│0 0 1│0 1 0│
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│0 1 0│1 0 1│0 1 1│1 1 1│1 1 1│1 1 0│1 0 1│0 1 1│1 1 0│1 0 1│0 1 0│
│0 1 1│1 1 0│1 0 1│0 1 0│1 0 0│0 0 1│0 1 1│1 1 0│1 0 0│0 0 1│0 1 0│
│0 0 0│0 0 0│0 0 1│0 1 1│1 1 1│1 1 1│1 1 0│1 0 0│0 0 1│0 1 1│1 1 0│
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│0 1 1│1 1 0│1 0 1│0 1 0│1 0 0│0 0 1│0 1 1│1 1 0│1 0 0│0 0 1│0 1 0│
│0 0 0│0 0 0│0 0 1│0 1 1│1 1 1│1 1 1│1 1 0│1 0 0│0 0 1│0 1 1│1 1 0│
│0 0 0│0 0 0│0 0 0│0 0 0│0 0 0│0 0 0│0 0 0│0 0 0│0 0 0│0 0 0│0 0 0│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
Alors seulement 5 des valeurs de chaque sous-tableau sont considérées
┌───┐
│xAx│
│CED│
│xBx│
└───┘
Les valeurs ABCD
sont sélectionnées en aplatissant chaque sous-tableau et en sélectionnant des indices 1 7 3 5
. Ces valeurs sont multipliées par E
ce qui est à l'index 4. Il est ensuite converti à partir d'une liste de chiffres binaires en une décimale et incrémenté de E
. Les x
valeurs ne sont pas nécessaires.
3 3 (4&{([+2#.*)1 7 3 5&{)@,;._3 (0,.~0,.0,~0,]) m
5 0 2 8 4 3 0 6 3 0 5
10 3 0 13 0 0 6 11 0 0 13
0 0 0 10 4 4 11 0 0 2 11
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.
0 (space) 0
1 # 1
2 ┌ 6
3 ┬ 8
4 ┐ 7
5 ├ 14
6 ┼ 16
7 ┤ 15
8 └ 10
9 ┴ 12
10 ┘ 11
11 │ 5, 9, 13
12 ─ 2, 3, 4
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 le ucp
convertit en caractères 16 bits, ce qui lui permet d'avoir une longueur de 17.