Voici un cracker salé ASCII :
_________________
| . . . |
| . . |
| . . . |
| . . |
| . . . |
|_________________|
Voici deux crackers empilés:
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Écrivez le programme le plus court possible qui prend un entier positif et dessine une pile de ce nombre de crackers salins ASCII.
L'entrée peut provenir de stdin, de la ligne de commande, ou vous pouvez simplement écrire une fonction. L'entrée sera toujours valide. La sortie doit aller à stdout ou à l'alternative la plus proche.
Chaque cracker empilé est toujours décalé de 2 caractères vers le bas et 7 caractères à droite du cracker en dessous. Il ne doit pas y avoir d'espaces de fin ni de nouvelles lignes superflues.
Le programme le plus court en octets gagne.
Exemples
Si l'entrée est 1
la sortie est
_________________
| . . . |
| . . |
| . . . |
| . . |
| . . . |
|_________________|
Si l'entrée est 2
la sortie est
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Si l'entrée est 3
la sortie est
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . __________|______
| . | . | . . . |
|______| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Etc.
code-golf
ascii-art
kolmogorov-complexity
Loisirs de Calvin
la source
la source
___|___
place_______
. Je suppose que ce serait bizarre si c'était ce dernierRéponses:
CJAM,
140125119116 octetsEssayez-le en ligne.
Une seule saline
L'extrait de code
laisse ce qui suit sur la pile:
Saltines empilées
Supposons que la saline d'en haut est enregistrée dans Z.
la source
JavaScript (E6) 249
259 289 304 345Pas si sûr de la compression des cordes.Trouvé une bonne compression pour les cordes.Le boîtier simple 1 cracker semble difficile à gérer. Il y a peut-être une meilleure façon ...Plus ou moins non golfé
C'est le code de base, avant de commencer à jouer au golf. Ce n'est pas exactement la même chose et ne fonctionne que pour n> 2
Test dans la console FireFox / FireBug
Sortie
la source
Python,
252241 caractèresMerci à FryAmTheEggman et Vincent d'avoir coupé 11 caractères.
Une prépondérance de crackers:
Ce code semble vraiment inefficace, mais d'autres réponses le diront. Il copie et colle simplement le cracker salé dans un tableau au bon endroit, explique que le cracker le plus bas est à 1 caractère, puis imprime le tout.
Je peux le réduire à 230 caractères si j'utilise un fichier externe (code 202 + 38 taille de fichier + 1 nom de fichier).
la source
n=1 upto 2^10
que nous puissions être sûrs que votre programme fait vraiment la bonne chose.list(' '*(7*N+12))
pourrait être[' ']*(7*N+12)
.G=[list(' '*(7*N+12))for _ in R(2*N+5)]
avecG=map(list,[' '*(7*N+12)]*(2*N+5))
Perl 189
Volant des idées de compression de cordes à Choroba, je l'ai résolu comme suit:
Pour une visualisation plus facile dans votre navigateur:
Pour le contexte, mon meilleur avant cela:
Perl 207
Ajout de nouvelles lignes et de retrait pour faciliter la lecture dans votre navigateur:
Vous pouvez remplacer "pop" par "<>" pour prendre le compte de STDIN au lieu d'un paramètre de ligne de commande et obtenir 206 octets. Aller à STDERR le ramènerait à 204 octets.
Si je pouvais activer la fonction «dire» sans pénalité d'octet, je pourrais atteindre 202.
invoqué comme:
la source
say
sans pénalité car cela revient à exécuter sur la ligne de commande avec-E
au lieu de-e
.perl -E''
ne compte pas pour le nombre total de vos personnages._|_
.Perl 201
(supprimez les sauts de ligne sauf le premier pour obtenir le #)
say
+<>
= 198.la source
Haskell, 215 octets
Celui-ci construit la pile de craquelins par induction, en tirant les pièces du craqueur et en les espaçant de quelques listes cycliques:
Le flux de contrôle est assez simple; la plus grande partie de la ruse consiste à réutiliser autant de pièces de cracker que possible.
Non golfé:
la source
Python, 299
Je pensais que j'étais intelligent, mais la solution s'est avérée trop compliquée et plus longue que toute approche directe, mais je n'ai pas pu résister à la publier. Le programme calcule explicitement quel caractère doit être tracé aux différentes positions de la chaîne de sortie, sans boucler sur les crackers individuels.
Et la dernière ligne s'est développée pour voir ce qui se passe:
la source
C, 284
Pour la fonction
f
et le#define
s, à l'exclusion des espaces inutiles etmain
. Conformément au commentaire d'edc65, j'ai inclus un type entier 128 bits (que j'allais faire de toute façon) mais j'ai mal calculé nouveau et je ne peux faire que 29 crackers avant que les sommets ne commencent à disparaître.Fonction complète et programme de test ci-dessous. Le commentera plus tard.
Il n'y a que quatre caractères différents dans la sortie. Ceux-ci sont décodés à partir des nombres binaires 0-3 par
" _.|"
. Le tableaus[]
contient un entier pour chaque colonne de la sortie, 2 bits par symbole, qui est intitulé pour contenir le pirate le plus à droite.La première
for
boucle copie le cracker précédent, le déplace à gauche pour le déplacer vers le haut, supprime le coin inférieur droit à l'aide de&
et l'OR avec le cracker précédent, 7 étapes vers la gauche.La deuxième
for
boucle décode la représentation sur 2 bits de chaque caractère en caractère réel et imprime le caractère. Il y a beaucoup de code ici juste pour supprimer les espaces inutiles dans la sortie. Je suis déçu que mon score ait augmenté au lieu de baisser par rapport à ma précédente révision.Sortie
C'est 29 crackers. J'ai remplacé l'espace par un
-
pour un look différent, et pour montrer qu'il n'y a pas d'espaces de fin ou de nouvelles lignes superflues dans la sortie.la source
JavaScript (ES6) HTML5 - 233
236octetsProbablement pas une réponse valide, mais je n'ai pas pu résister à la publication, désolé :-P
Test dans Firefox avec
F(1)
,F(2)
,F(3)
, etc.Exemple: http://jsfiddle.net/Lvmg9fe8/7/
la source
F(1)
ou tout autre numéro, après avoir entré ce code dans la console JS dans Firefox ...