J, 126 124 121 121 119 116 115 113 105 116 115 115 112 caractères
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1[(s=:[,.~,.)9!:7'\=/<=>/=\|='
Prend l'entrée du clavier. Exemple:
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1[(s=:[,.~,.)9!:7'\=/<=>/=\|='
6302715408
|\==============================================================/|
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|| || (__) (__) (__) || (__) || (__) (__) || ||
|| || || || || || || || || || || ||
|| (__) || || || (__) || (__) || || (__) ||
|<==============================================================>|
|| (__) (__) || (__) (__) (__) || (__) || (__) ||
|| || (__) || (__) (__) || || (__) || (__) ||
|| || (__) || || || || || (__) || (__) ||
|| || || || || || || || (__) || || ||
|| || || || || || || || || || || ||
|| || || (__) || || || (__) || (__) || ||
|| (__) || (__) || || (__) (__) || (__) || ||
|| (__) || (__) (__) (__) (__) (__) || (__) || ||
|| (__) (__) (__) (__) (__) (__) (__) || (__) (__) ||
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|/==============================================================\|
L'astuce principale ici est l'abus de la boxe de J en redéfinissant les personnages qu'il utilise. Il utilise un paramètre global - 9!:7
- pour ce faire. Il y a peut-être de la place pour jouer au golf, mais pour être honnête, j'étais simplement heureux de faire fonctionner quelque chose qui devrait compenser ma dernière tentative à cette question .
Convient à un tweet avec suffisamment de caractères pour dire 'Gaz a fait ça' :-).
Edit: 3 caractères d'économies sont dus à l'emprunt 2 6$' || (__)'
de la réponse de Jesse Millikan .
Édition supplémentaire: perdu 11 personnages ajoutant des espaces supplémentaires de chaque côté que je n'avais pas remarqué n'étaient pas présents.
Explication:
Le code est divisé en trois sections principales:
1) Configuration
[(s=:[,.~,.)9!:7'\=/<=>/=\|='
C'est lui-même en deux parties.
9!:7'\=/<=>/=\|='
redéfinit les caractères que J utilisera pour afficher les cases. La boxe de J ressemble normalement à ceci:
2 2$<"0[1 2 3 4
┌─┬─┐
│1│2│
├─┼─┤
│3│4│
└─┴─┘
mais après avoir redéfini cela ressemble à ceci:
2 2$<"0[1 2 3 4
\===/
|1|2|
<===>
|3|4|
/===\
(s=:[,.~,.)
définit un verbe que je vais utiliser quelques fois plus tard. Cela s'avère être le meilleur endroit pour le déclarer. Il prend un caractère à gauche et un tableau de caractères à droite et prend en sandwich le tableau entre les caractères. Par exemple:
3 5$'abcdefghijklmno'
abcde
fghij
klmno
'-' s 3 5$'abcdefghijklmno'
-abcde-
-fghij-
-klmno-
La finale [
sert juste à séparer la configuration de la partie suivante.
2) Entrée et représentation
,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
".,.1!:1[1
prend l'entrée du clavier et la sépare en chiffres individuels:
".,.1!:1[1
314159
3 1 4 1 5 9
((i.5)</5|])
crée une représentation des zéros et des uns de la partie inférieure de l'abaque:
((i.5)</5|]) 3 1 4 1 5 9
1 1 1 1 0 1
1 0 1 0 0 1
1 0 1 0 0 1
0 0 1 0 0 1
0 0 0 0 0 0
|:@(1,.<&5)
crée une représentation des zéros et des uns de la partie supérieure de l'abaque:
|:@(1,.<&5) 3 1 4 1 5 9
1 1 1 1 1 1
1 1 1 1 0 0
Ces deux parties sont regroupées en utilisant ;
:
(|:@(1,.<&5);((i.5)</5|])) 3 1 4 1 5 9
\=======================/
|1 1 1 1 1 1|1 1 1 1 0 1|
|1 1 1 1 0 0|1 0 1 0 0 1|
| |1 0 1 0 0 1|
| |0 0 1 0 0 1|
| |0 0 0 0 0 0|
/=======================\
Ensuite, les boîtes sont placées les unes sur les autres pour former la base de l'abaque, donnant:
,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\===========/
|1 1 1 1 1 1|
|1 1 1 1 0 0|
<===========>
|1 1 1 1 0 1|
|1 0 1 0 0 1|
|1 0 1 0 0 1|
|0 0 1 0 0 1|
|0 0 0 0 0 0|
/===========\
3) Sortie
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>
&.>
signifie que ce qui suit fonctionnera successivement sur les deux boîtiers.
(,-.)
c'est un crochet qui annulera l'entrée puis l'ajoutera à la fin de l'original:
2 5$1 0 1 0 1
1 0 1 0 1
1 0 1 0 1
(,-.) 2 5$1 0 1 0 1
1 0 1 0 1
1 0 1 0 1
0 1 0 1 0
0 1 0 1 0
Cela fait vraiment partie de la représentation, mais pour le golf, il est préférable de l'avoir dans cette section. Appliqué à l'entrée précédente:
(,-.)&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\===========/
|1 1 1 1 1 1|
|1 1 1 1 0 0|
|0 0 0 0 0 0|
|0 0 0 0 1 1|
<===========>
|1 1 1 1 0 1|
|1 0 1 0 0 1|
|1 0 1 0 0 1|
|0 0 1 0 0 1|
|0 0 0 0 0 0|
|0 0 0 0 1 0|
|0 1 0 1 1 0|
|0 1 0 1 1 0|
|1 1 0 1 1 0|
|1 1 1 1 1 1|
/===========\
[:,.(_6[\' || (__)'){~
Les zéros et les uns sont maintenant utilisés pour sélectionner une chaîne pour représenter une perle ou son absence:
([:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\====================================/
| (__) (__) (__) (__) (__) (__) |
| (__) (__) (__) (__) || || |
| || || || || || || |
| || || || || (__) (__) |
<====================================>
| (__) (__) (__) (__) || (__) |
| (__) || (__) || || (__) |
| (__) || (__) || || (__) |
| || || (__) || || (__) |
| || || || || || || |
| || || || || (__) || |
| || (__) || (__) (__) || |
| || (__) || (__) (__) || |
| (__) (__) || (__) (__) || |
| (__) (__) (__) (__) (__) (__) |
/====================================\
Mais maintenant, comme Howard me l'a fait remarquer, il y a un espace court de chaque côté des perles. Nous utilisons donc le s
verbe prédéfini pour prendre en sandwich le contenu de chaque boîte entre deux colonnes d'espaces:
(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\======================================/
| (__) (__) (__) (__) (__) (__) |
| (__) (__) (__) (__) || || |
| || || || || || || |
| || || || || (__) (__) |
<======================================>
| (__) (__) (__) (__) || (__) |
| (__) || (__) || || (__) |
| (__) || (__) || || (__) |
| || || (__) || || (__) |
| || || || || || || |
| || || || || (__) || |
| || (__) || (__) (__) || |
| || (__) || (__) (__) || |
| (__) (__) || (__) (__) || |
| (__) (__) (__) (__) (__) (__) |
/======================================\
Cela fait, tout ce qui reste est de le convertir en une chaîne en utilisant ":
afin que nous puissions le prendre en sandwich entre deux colonnes de |
:
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
|\======================================/|
|| (__) (__) (__) (__) (__) (__) ||
|| (__) (__) (__) (__) || || ||
|| || || || || || || ||
|| || || || || (__) (__) ||
|<======================================>|
|| (__) (__) (__) (__) || (__) ||
|| (__) || (__) || || (__) ||
|| (__) || (__) || || (__) ||
|| || || (__) || || (__) ||
|| || || || || || || ||
|| || || || || (__) || ||
|| || (__) || (__) (__) || ||
|| || (__) || (__) (__) || ||
|| (__) (__) || (__) (__) || ||
|| (__) (__) (__) (__) (__) (__) ||
|/======================================\|