Je déteste le ballonnement de code!
J'ai donc décidé de remplacer mon système Windows 7 par une version golfée. Cependant, je sais que ce n'est pas facile, alors construisons d'abord un prototype. Il prendra une liste de fenêtres de l'utilisateur et les montrera en utilisant un affichage pseudo-graphique sur la sortie standard.
Par exemple: entrée utilisateur:
0,0,15,10 15,10,20,15 10,13,15,15 9,1,16,3 17,5,20,7 11,2,17,4 15,4,19,6 13,3,18,5
Le Code Golf® Window Manager ™ produit:
┌──────────────┐ │ :::::::: ┌─────┴┐┴┐ │ :::::::: │: ┌────┴┐ │ :::::::: └─┤: ┌───┴┐ │ :::::::::: └─┤ :::: ├┐ │ :::::::::::: └─┬──┘├┐ │ ::::::::::::::: ├─┬─┘│ │ ::::::::::::::: │ └──┘ │ ::::::::::::::: │ │ ::::::::::::::: │ └──────────────┼────┐ │ :::: │ │ :::: │ ┌────┤ :::: │ │ :::: │ :::: │ └────┴────┘
Contribution:
- Extrait d'une entrée standard (ou, si votre système n'en a pas
stdin
, de toute méthode pouvant fournir plusieurs lignes d'entrée) - Chaque ligne contient 4 chiffres, délimités par des virgules - coordonnées d'une fenêtre
- Deux premiers chiffres: coin supérieur gauche; deux derniers chiffres: coin inférieur droit
- En utilisant la
x,y
notation
Production:
- Écrivez-le sur la sortie standard (ou, si votre système n'en a pas
stdout
, tout ce qui affiche du texte à espacement fixe) - Utiliser des caractères de dessin de boîte unique de la page de codes 437 pour dessiner les limites des fenêtres
- Les fenêtres spécifiées plus tard en entrée masquent celles spécifiées plus tôt
- Remplissez les fenêtres avec le caractère deux-points:
:
- Les espaces de début et de fin sont OK, tant qu'ils ne cassent pas l'alignement des fenêtres
Remarques:
- Résolution maximale que je souhaite prendre en charge: 76 (horizontal) par 57 (vertical)
- Pas besoin de supporter une mauvaise entrée
- Nombre maximum de fenêtres: 255 (si vous avez besoin d'une limite)
- Mon
cmd
shell Windows 7 affiche la page de codes 437 caractères par défaut; si quelqu'un a un moyen de le faire sur linux (en utilisantxterm
ou autre), veuillez le décrire ici
Pour référence, les codes de caractères sont:
┌da ─c4 ┬c2 ┐bf
│b3 :3a │b3 │b3
├c3 ─c4 ┼c5 ┤b4
└c0 ─c4 ┴c1 ┘d9
Total: 12 personnages différents.
javascript:$('pre').css('line-height','1em')
Réponses:
Python, 397 caractères
Remplacez
C="...
parC=u"...
et il s'imprimera à la place en unicode! Il peut être difficile d'obtenir le fichier à enregistrer correctement car les caractères de la page de codes 437 ne sont pas échappés (la première ligne de commentaire de «codage» est requise).L'approche consiste à construire progressivement une carte à l'aide d'opérateurs bit à bit. Version moins golfée avec commentaires:
la source
JavaScript ES6 (FF ≥ 31.0), 404 caractères
Sans ES6:
w('0,0,15,10\n15,10,20,15\n10,13,15,15\n9,1,16,3\n17,5,20,7\n11,2,17,4\n15,4,19,6\n13,3,18,5');
affiche correctement l'exemple de l'OP.Les bords des fenêtres sont construits à l'aide d'opérateurs au niveau du bit (Haut = 8, Bas = 4, Gauche = 2, Droite = 1).
la source
function w(s){...}
devientw=(s)=>{...}
(et comme pour tous vos autres littéraux de fonction). Et la table de recherche de caractères peut probablement être remplacée par une chaîne avec les mêmes caractères.Array.fill()
pour initialiser sur «bureau».[].fill([].fill(0,0,76),0,57)
, dommage que ça ne marche pas. Puis-je écrire plus court quenew Array(57).fill(new Array(76).fill(0))
?new
opérateurs:Array(57).fill(Array(76).fill(0))
.Python, 672 caractères
La version la moins lisible:
Commencé à partir de la version ci-dessous:
la source