Photo de moi qui rédige ce défi avec mes compétences avancées en dessin.
Contexte
Les guerres Stickman se sont produites il y a longtemps, lorsque l'espèce dominante de la Terre n'était constituée que de bâtons. Les historiens regrettent le fait qu'il n'y avait pas de peintres ou d'appareils photo à l'époque, nous pourrions utiliser quelques images de cette guerre dans les livres d'histoire d'aujourd'hui. C'est là que vos pouvoirs de codage deviennent utiles. Les stickmen sont très facilement dessinés et les historiens ont réussi à trouver des données sur le nombre de stickmen qui ont mené les guerres¹. À vous maintenant de recréer une image du moment juste avant le début de la guerre!
Voici les braves stickmen impliqués dans la guerre:
O / | / | \ / | | / \ Swordsman OA / | \ | | | / \ | Lancier . . ' *. «O * '\ | /. . | * «./ \ *. mage O / | \ | / \ Villageois O / | \ / \ Bébé
Contribution
Recevez via stdin ou équivalent une représentation de chaque stickman apparu de chaque côté du champ de bataille. Par exemple, si deux épéistes se sont battus sur le côté droit et deux lanciers sur le côté gauche, votre entrée peut être {Sword: 2}, {Spear: 2}
, [2,0,0,0,0], [0,2,0,0,0]
ou a "WW", "SS"
.
Production
Une représentation de tous les braves stickmen sur un champ de bataille, selon les règles ci-dessous. Il peut être affiché sur stdout ou enregistré dans un fichier, tout ce qui bouge votre bateau.
Règles
- Sur le côté gauche se trouvent tous les stickmen du premier tableau / chaîne / objet que votre programme a reçu.
- Ces stickmen doivent ressembler exactement à ceux montrés précédemment sur cette question.
- L'ordre de l'armée de gauche doit être
Infants Villagers Mages Swordsmen Spearmen
. - L'armée de droite se comportera de la même façon, mais avec les personnages et l'ordre en miroir.
- Chaque stickman sera séparé par 1 espace.
- Chaque classe sera séparée par 3 espaces.
- Les armées seront séparées par 8 espaces.
- Étant donné que les stickmen ne volent pas, vous devez dessiner le sol à l'aide de tirets moins
-
. - Le terrain doit se terminer sur la même colonne que le dernier stickman de l'armée de droite se termine.
Exemple
Supposons que mon programme attend deux tableaux de longueur 5 et que chaque valeur du tableau représente, dans l'ordre Infants Villagers Mages Swordsmen Spearmen
,.
Entrée: [1,1,2,3,1] [0,0,1,1,1]
. . . . ' *. . ' *. . * '. O 'O *' O * O / O / O / OAAO \ O * O ' O / | \ '\ | /. '\ | /. | / | \ / | / | \ / | / | \ / / | \ | | / | \ \ / | \ | . \ | / ' / | \ | . | *. | * | | | | | | | | | | | | * | . / \ / \ './ \ *. «./ \ *. / \ / \ / \ / \ | | / \ / \. * / \ '. -------------------------------------------------- -------------------------------------
Considérations finales
Veuillez noter que les failles standard s'appliquent et que le mage est complètement asymétrique juste parce que.
Le résultat de la réponse la plus votée sera «l'image de couverture» de ce défi. La réponse la plus courte d'ici la fin du mois (31/08/2014) sera sélectionnée comme gagnante.
C'est le code-golf , donc le code le plus court, en octets, gagne.
¹Citation nécessaire
la source
IVMMWWWS SWM
serait-elle également dans la limite de «tout ce qui peut vous aider»?Réponses:
JavaScript (E6) 336
344 356 369 424 478 522 570Edit 6 Le dernier montage était buggé. Correction d'un bug et raccourci. C'est tout ce que j'espère.
Edit 5 Enfin trouvé un moyen de se débarrasser de multiplier par 23 - m'a dérangé depuis le début. Plus un autre changement à l'entrée (@William crie quand c'est trop). Maintenant, la fonction attend un paramètre de tableau, contenant 2 sous-réseaux. Sans ce changement, c'est 349 - toujours une amélioration
Edit 4 Rasé quelques octets de plus et un petit changement au format d'entrée. Avec le nouveau format d'entrée, une classe manquante est représentée comme un élément de tableau vide. Donc
D([1,,2,3,1],[,3,1,1,2])
au lieu deD([1,0,2,3,1],[0,3,1,1,2])
. Je pense qu'il obéit toujours aux règles.Edit 3 Golfed more. Aucune modification de l'algorithme, mais abusant de beaucoup de fonctions array.map et locales pour éviter les boucles.
Modifier la compression de 2 cordes, la bonne façon ...
Edit Ajout d'une compression de chaîne, beaucoup de travail et pas beaucoup gagné. Maintenant, les stickmen miroir sont générés à partir d'un modèle, non stockés.
A fait quelques essais, la première fois.
Pour être joué au golf.NB Kolmogorow-business doit encore être abordé.Testez dans la console FireFox.
Changez 'return' avecAdd 'alert (...)' pour avoir une instruction de sortie (bien que ce ne soit pas du tout utile)console.log(D([[1,,2,3,1],[,3,1,1,2]]))
Production
Golfed Code
Code (modifier 2)
Code non golfé (1ère version)
la source
Python
362353Edit: la suppression d'une boucle for et l'utilisation de l'instruction exec ont permis d'économiser 9 octets
Contribution:
Production:
la source
C,
418414Exemple d'entrée:
Exemple de sortie:
Code golfé (les sauts de ligne sont uniquement à des fins de lisibilité; il doit s'agir d'une longue ligne de code):
La largeur maximale du champ de bataille est de 999 (je pourrais enregistrer 2 caractères en le limitant à 99). J'ai utilisé une structure de contrôle de 1 octet par caractère de sortie (sans espace), en dessinant les chiffres de bas en haut.
Il y a 5 décalages dans la structure de contrôle.
Quelques autres morceaux obscurs:
f%27%5
traduit les caractèresVWSMI
en chiffres0, 1, 2, 3, 4
t*3%12%5+4
calcule la largeur du stickman de typet
t^3|~o||(s=d[5]+p,*s--=46,*s=39)
explique l'asymétrie gauche / droiteargc=3
pour générer des drapeaux de direction de dessin1
et-1
Code non golfé:
la source
*a
en virgule? Cela supprime un avertissement et a le même nombre d'octets.f=*a
comme condition d'arrêt; le compilateur peut se plaindre mais je le pense. Je ne peux pas le supprimer car il devrait y avoir deux points-virgules dans lafor
syntaxe -loop.Haskell, 556
Format d'entrée
Ordre: [Nourrisson, villageois, mage, épéiste, lancier], [Lancier, épéiste, mage, villageois, nourrisson]
Exemple de sortie
Code
Non golfé
la source
Haskell (
736733720 octets)Appeler avec ./stickmanwars 2 3 1 3 4 -1 3 2 4 1 0 4 2 1 . Le -1 marque le délimiteur pour les deux tableaux. J'espère que ça va.
Eh bien, mon premier défi de golf de code et la première fois que j'ai utilisé haskell pour une vraie application après l'avoir appris ce semestre à mon université. Probablement même pas près d'être la meilleure ou la plus courte solution, mais je me suis amusé à la créer et c'était un bon exercice :) La critique et les commentaires sont très appréciés.
Golfé hors de cela:
la source
Haskell, 450
Défi cool! Je pourrais peut-être jouer un peu plus au golf. En gros, je stocke les chiffres dans la colonne afin de pouvoir les ajouter facilement, puis retourner tout le tableau de
String
s à l'aide de Haskelltranspose
.Le format d'entrée est
([Infants,Villagers,Mages,Swordsmen,Spearmen],[Infants,Villagers,Mages,Swordsmen,Spearmen])
Voici l'exemple de l'OP:
Et voici ma représentation préférée de l'infâme infanticide rituel de la deuxième ère!
la source
Python (
612,522,460, 440)Chaque "ligne" est rognée de remplissage à droite, et celle-ci est ajoutée lors de la reconstruction.
J'ai pré-inversé les stickmen dans mon encodage interne car cela m'a évité d'avoir à les inverser individuellement lors du rendu dans le code.
Exemple d'exécution:
Code:
la source
Python (476)
Un solveur différent de mon précédent; plus long, mais plus fonctionnel.
Code:
la source