Voici un bonhomme de neige art ASCII simple :
_===_
(.,.)
( : )
( : )
Faisons-lui des amis. Ce sera le modèle général pour nos snowpeople art ASCII:
HHHHH
HHHHH
X(LNR)Y
X(TTT)Y
(BBB)
Les espaces et les parenthèses sont toujours les mêmes pour tous les snowpeople. Les différentes lettres représentent des sections du motif pouvant être modifiées individuellement. Chaque section a exactement quatre préréglages pour quels caractères ASCII peuvent la remplir. En mélangeant et en faisant correspondre ces préréglages pour les huit sections, nous pouvons créer une variété de snowpople.
Tous les préréglages
(Notez que les espaces sont placés sur des lignes vides pour que la forme de la section soit toujours correcte.)
H est pour chapeau
Chapeau de paille
_===_
Chapeau mexicain
___ .....
Fez
_ /_\
-
___ (_*_)
N est pour nez / bouche
Ordinaire
,
Point
.
Ligne
_
Aucun
L est pour l'oeil gauche
Point
.
Plus gros point
o
Le plus gros point
O
Fermé
-
R est pour l'oeil droit
(Même liste que l'œil gauche.)
X est pour le bras gauche
Bras normal
<
Bras vers le haut
\
Bras vers le bas
/
Aucun
Y comme bras droit
Bras normal
>
Bras vers le haut
/
Bras vers le bas
\
Aucun
T est pour le torse
Boutons
:
Gilet
] [
Armes intérieures
> <
Aucun
B est pour Base
Boutons
:
Pieds
" "
Plat
___
Aucun
Défi
Ecrivez un programme qui prend une chaîne de huit caractères (via stdin ou une ligne de commande) dans le format HNLRXYTB
où chaque lettre est un chiffre de 1 à 4 indiquant le préréglage à utiliser pour la section correspondante du motoneige. Imprimez le snowperson complet sur la sortie.
Par exemple, l'entrée 11114411
est le bonhomme de neige en haut de la page. (Premièrement 1
: il a un chapeau de paille, deuxièmement 1
: il a un nez normal, etc.)
Un autre exemple, le snowperson pour la saisie 33232124
:
_
/_\
\(o_O)
(] [)>
( )
Détails
Toutes les quantités et les combinaisons d'espaces de début / fin et de nouvelle ligne sont autorisées tant que ...
- le snowperson a toutes ses sections correctement disposées les unes par rapport aux autres, et
- il n'y a jamais plus de 64 caractères d'espaces blancs au total (le modèle général n'est que de 7 × 5, vous n'allez donc probablement pas atteindre cette limite).
Vous n'avez pas besoin d'imprimer les lignes / colonnes du motif si elles ne contiennent que des espaces. par exemple, la ligne vide du chapeau de paille n'est pas requise.
Vous devez utiliser la commande des pièces telles qu'elles sont données ci-dessus.
Au lieu d'un programme, vous pouvez écrire une fonction qui prend la chaîne de chiffres en argument. La sortie doit être imprimée normalement ou renvoyée sous forme de chaîne.
- Vous pouvez traiter l'entrée comme un entier au lieu d'une chaîne si vous le préférez.
Notation
Le code le plus court en octets gagne.
Question bonus: Lequel des 65 536 snowpopers différents est votre préféré?
Réponses:
CJam,
135134132130126125 octetsPour créer le fichier sur votre machine, exécutez
xxd -r > snowman.cjam
, collez le fichier hexadécimal réversible à partir du haut, appuyez sur Enteret enfin sur Ctrl+ D.Vous pouvez également essayer le code en ligne à l'aide de l' interpréteur CJam .
Prime
Mon bonhomme de neige préféré est Olaf:
L'hiver est un bon moment pour rester et se câliner, mais mets-moi en été et je serai un… bonhomme de neige heureux!
Idée
La chaîne hexagonale
code les choix possibles pour toutes les parties du bonhomme de neige, y compris celles fixes. Appelons cette chaîne P .
Pour le décoder, convertissons P (ici traité comme un tableau d’entiers) de la base 256 en base 20 et remplaçons chacun des entiers résultants par le caractère correspondant de la chaîne M :
Cela se traduit par la chaîne T :
La première ligne code tous les choix de chapeaux, la dernière toutes les parties du corps fixes. Les autres lignes contiennent les 28 parties du corps variables.
Nous séparons T aux sauts de ligne et divisons les chaînes du tableau résultant en quatre parties de longueur égale. Ensuite, nous lisons l’entrée de STDIN, poussons le tableau de ses chiffres en base 10 et sélectionnons les éléments correspondants des chaînes scindées. Nous tirons parti du fait que les tableaux sont enveloppés dans CJam, de sorte que l'élément d'indice 4 d'un tableau de longueur 4 est en fait le premier élément. La dernière chaîne divisée ne correspond à aucune entrée, elle sera donc entièrement sélectionnée.
Nous manipulons le chapeau en déplaçant le premier élément du tableau résultant. L'index dans M du premier caractère, lu comme un nombre en base 4, révèle le nombre d'espaces et de traits de soulignement dans la première ligne du chapeau. Nous imprimons ces caractères, un saut de ligne, un espace et le reste de la chaîne décalée. Ensuite, nous poussons un saut de ligne supplémentaire au bas de la pile.
Pour les parties du corps, nous concaténons la chaîne correspondant à chacune d’elles. Appelons cette chaîne S . Pour assembler les parties du corps, nous réalisons translittération: nous prenons chaque caractère de la chaîne M , calculer son indice de tri (M) et le remplacer par le caractère correspondant de S . Nous profitons du fait que l’opérateur de translittération remplit automatiquement S pour qu’il corresponde à la longueur du tri (M) en répétant le dernier caractère de S autant de fois que nécessaire.
Enfin, nous divisons la chaîne résultante en sous-chaînes de longueur 7 et plaçons un saut de ligne entre chaque paire de sous-chaînes.
Code
Supposons que les variables
M
etP
contiennent les chaînes M et P .la source
JavaScript ES6,
210208202 octetsC'est une fonction anonyme. vous l'utilisez en exécutant
([function code])('42232124')
. La partie la plus agaçante de ce problème était les bras, qui occupent deux lignes. J'ai donc dû inclure du code pour le haut et le bas.L'extrait de pile ci-dessous contient du code commenté et non-lié à ES6. Et vous pouvez l'utiliser pour tester facilement le code et essayer différentes combinaisons. Edit: Je m'amuse beaucoup trop avec ça. J'ai ajouté plusieurs nouvelles fonctionnalités, notamment un moyen de générer un bonhomme de neige aléatoire.
Merci à Yair Rand d'avoir économisé six octets.
la source
1 1
->11
) et en ajoutant||' '
à la fin.CJam, 164 octets
Génère le bonhomme de neige de gauche à droite et de haut en bas. Cela élimine le besoin de tout type d’assemblage ou de repositionnement des cordes, car je laisse tout le bonhomme de neige sur la pile. Et puis, en raison du dump de pile automatique à la fin des programmes:
♫ CJam veut construire un bonhomme de neige! ♫
Essayez-le en ligne.
Prime
Sortir des sentiers battus!
32443333
donne une mariée (wo) homme. Vous devez essayer un peu pour le voir, mais il y a les bras intérieurs, fez + bras bas = voile, et la tête est en réalité dans le fez / voile. La forme généralement large est la robe ample, et les "yeux" et le "nez" sont des plis dans la robe.D'autres choix "yeux" sont un peu risqués ...
la source
Python,
276289 octetsCe code a 8 octets supplémentaires (
\
* 4) pour la lisibilité.Construit petit à petit le bonhomme de neige.
Prime
F("44444432")
donne "ours russe endormi":la source
Python 2,
354280241261 octetsL'appel
s('33232124')
donne:Mais mes favoris sont
44242123
et41341144
:la source
s('33232124')
les barres obliques de fez ne sont pas dessinées. En fait, la moitié inférieure du chapeau manque dans de nombreux cas. En outre,0
n'est pas l'une des options.CJam,
150145 octetsBase convertir toutes les choses!
SE modifie les fichiers non imprimables, voici donc une copie sur Pastebin. Assurez-vous de copier la partie "RAW Paste Data", et non la partie à côté des numéros de ligne. Vous pouvez l' essayer en ligne , mais le lien permanent peut ne pas fonctionner dans certains navigateurs.
Explication
La
"b8li'U9gN;|"125:Kb8bp
partie génère le tableauqui mappe chaque chiffre de l'entrée à l'endroit où le chiffre est utilisé. Tout ce qui est commun à toutes les entrées (par exemple, les espaces et les espaces
()
) est arbitrairement attribué un 0, sauf le premier auquel on attribue 1 afin que la conversion de base puisse fonctionner.l:~f=
convertit ensuite chaque chiffre en int et mappe en conséquence, par exemple, pour14441133
obtenir"G.HMtNY7VM=BM@$^$dX8a665V"KbFb"=_./ <[(*-oO,\":"f=
donne la ficelleaprès quoi nous dupliquons, remplaçons
/<[(
par\>])
et ajoutons pour donner une longue chaîne. Ensuite, nous divisons la chaîne en groupes de 4 et mappons selon un autre tableau"r pL|P3{cR`@L1iT"Kb21b
, obtenant ainsi un tableau de chaînes de longueur 4 décrivant toutes les options possibles dans chaque cellule (par exemple,_=./
toutes les options possibles pour le deuxième caractère de la deuxième ligne, en partant du début). Chapeau russe).Enfin, nous mappons les options sur les entrées en conséquence
.=
, scindées en rangées de longueur 77/
et alternées dans certaines nouvelles lignesN*
.Essais
la source
TI-BASIC, 397 octets
Important: si vous souhaitez tester ceci, téléchargez-le à partir d’ ici et envoyez le fichier à votre calculatrice. N'essayez pas de copier le code ci-dessous dans l'éditeur de programme de TI-Connect CE, dans SourceCoder 3 ou dans un autre logiciel à construire et à envoyer à votre calculatrice. dans le cas de TI-Connect, il est indiqué que le jeton est invalide. SC3 utilise la barre oblique inversée comme délimiteur de commentaire (
//
commence un commentaire dans SC3;,/\/
mais exportera en tant que//
) et ne exportera donc pas les bras, le bonnet, etc., ce qui obligera le programme à afficher les ERREUR: DOMAIN de temps en temps. Truc amusant!Important # 2: Je suis trop paresseux pour réparer le téléchargement pour le moment, donc quand vous le transférez sur votre calcul, changez le
7
sur la troisième ligne en partant du basX+6
. Le code ci-dessous est corrigé si vous devez comparer.Bonus: J'aime particulièrement
12341214
.Quelques notes:
[2ND] → [0]CATALOG → [3]θ → scroll down, it's between ﹢ (small plus) and · (interpunct)
) par opposition à un point afin que les yeux ne s'alignent pas avec la virgule, car cela a l'air bizarre.la source
length(Ans
devrait êtrelength(Str9
; deuxièmement, avez-vous essayé de combiner Str3 à Str6 en une seule chaîne?C,
280 272264 octetsSeulement partiellement joué au golf à ce stade, mais c'est un défi amusant.
(Avec un peu plus de \ n pour plus de lisibilité.) Je pense que le
define
golf devrait disparaître.Une version plus lisible est
la source
C, 212 octets
Une version lisible:
J'ai repris l'idée de la réponse de Reto Koradi . J'ai apporté plusieurs améliorations amusantes qui mériteraient peut-être une réponse distincte:
\"
(-3)t[i++]
par*t++
(-4)while
parfor
; enlevé{}
(-4)\0
(-9)t[...],t+=4
en(...)[t+=4]
pour éliminer l'opérateur de virgule (-1)Pourquoi tout ce problème? Pour partager mon préféré, fantôme de neige:
la source
d
dans les parens derrièremain
JavaScript, 489 (sans nouvelles lignes et sans onglets)
courir avec
node snowman.js 33232124
la source
parseInt
appel, car la soustraction essaie automatiquement de convertir les opérandes de chaîne en nombres. En outre, vous pouvez vous débarrasser de l’function
emballage et le diriger aveci=process.argv[2]
, à moins que vous ne l’utilisiez pour la récursion ou la portée variable. De plus, vous pouvez vous en débarrassers
entièrement et simplement faireconsole.log([ ... ].join('\n'))
.,
caractères, mais il vous permet d'en supprimer plus de 50. Enfin, une optimisation très pointilleuse consisterait à utiliser à laq=j[4]-1
place deq=j[4]==1
(puis à inverser votre utilisation deq
et!q
). Cela entraîneraq
être0
(une valeur de Falsey) quandj[4]
est1
, et par ailleurs une valeur non nulle truthy. Ceci est l'exact opposé de vos valeurs vraies / fausses actuelles, vous devez donc simplement basculerq
et!q
.Pyth, 203 octets
Lol. Essayez-le en ligne: Compilateur / Exécuteur Pyth
Explication
Je définis d'abord une fonction d'assistance
g
, qui prend une liste et un caractère en entrée, convertit le caractère en sa valeur ASCII et prend l'élément correspondant (wrapping modulaire).Les autres choses ne font qu'imprimer ligne par ligne. Par exemple, la première ligne est:
Btw. J'ai expérimenté un peu avec
.F"{:^7}"
, ce qui centre une chaîne. En l'utilisant, je pourrais économiser quelques espaces dans mon code, mais cela ne sauvegardera aucun octet à la fin.la source
R,
436437 octetsVoici mon premier essai sur le code-golf , en utilisant R qui n'est pas le plus court mais qui reste amusant. Au moins, je bat JavaScript (pour l'instant) ...
Essai:
En fait , je débattais avec
X
etY
être multilined mais avec des choses entre les deux, a fini par séparer chaque ligne (X
,S
) et (Y
,U
).function
et la conversion de chaîne en entier sont également très prolifiques.Éditer 436 => 437
A dû réparer un espace vide manquant remarqué par @OganM
Je pourrais réduire à 428 en remplaçant les sauts de ligne entre les variables par
;
, mais le code "à une ligne" a un look tellement mauvais et illisible que je ne serai pas si gourmand.la source
Haskell,
361306289 octetsUsage:
Comment ça marche: indexez chaque élément de la liste
[hat options, left upper arm options, left eye options, ..., base options]
avec le numéro d’entrée correspondant et concaténez-le en une seule liste. J'ai divisé le bras gauche et le bras droit en une partie supérieure et inférieure afin de pouvoir construire le bonhomme de neige ligne par ligne.Mon préféré est le classique
11112211
.Edit: est passé de la liste des chaînes aux chaînes des parties (chapeau, oeil, ...). Nécessite un deuxième paramètre, la longueur de la sous-chaîne à prendre.
Edition II: sous-chaînes communes extraites
la source
C,
233230 octetsAvec des nouvelles lignes et des espaces pour une meilleure lisibilité:
Le tout est une force assez brute. Il utilise une table qui contient une entrée pour chacun des 35 caractères (5 lignes de longueur 7). Chaque entrée dans la table est soit:
,
(
,)
. La longueur de la table est de 1 caractère.Le code parcourt ensuite les 35 caractères et recherche la valeur dans la table.
la source
R 414 octets
Version légèrement modifiée de la version de Molx
Vient de fusionner les variables distinctes en une seule. Shawing de l'espace qui a été utilisé pour la
X=c(
routine.la source
CJam,
200191 octetsCela peut sûrement être joué au golf beaucoup. (Surtout si je base l'encodage). Mais voici pour commencer:
L'entrée va dans STDIN. Par exemple, input
23232223
donne:Essayez-le en ligne ici
la source
Haskell, 333 octets
Ma première soumission! Construit le bonhomme de neige de haut en bas, de gauche à droite. Je divise les bras en deux fonctions pour chaque bras, la partie à côté de la tête et la partie à côté du corps.
La fonction s prend une liste d’entiers et concatène la sortie des fonctions qui produisent les parties du corps avec des sous-listes correctes de l’entrée.
Il s'appuie sur la fonction
qui retourne le nième élément de la liste qui lui est donnée. Cela permet la liste des chapeaux dans un, ainsi que des choses comme
toutes ces fonctions utilisent une réduction bêta de sorte que leur argument est passé comme index à la fonction y.
Sortie:
la source
Python 3,
349336254251 octetsVoilà pour ma thèse.
Voici le contenu du fichier snowman.py :
Et voici comment je conjure mon bonhomme de neige préféré:
Explication
la source
[int(i)]
etfor
. De même, vous pouvez supprimer l'espace de la ligne 7 entref(int(i))
etfor
. De plus, dans votreprint()
déclaration, vous n'avez pas besoin d'imprimer l'espace final - cela ne fait pas partie du bonhomme de neige. Enfin, changez votreprint()
appel en une seule ligneprint("{}\n{}({}{}{}){}\n{}({}){}\n ({})".format(*c))
. Chacune de ces opérations devrait vous faire économiser 1 octet, soit un total de 4 octets :)n
, vous pouvez définir un attribut de fonctionf
. Vous pouvez donc remplacer les lignes 5 à 6 par:def f(m):f.n+=1;return l[4*m+int(b[f.n])-1]
<nouvelle ligne>f.n=-1
. Cela réduit 3 octets supplémentaires.PowerShell , 199 octets
Inspiré par Reto Koradi et anatolyg .
Essayez-le en ligne!
Remarque: la ligne 3 a 2 espaces de sentier, la ligne 4 a un espace de sentier.
Mon préféré est
44444444
"garde russe endormi":la source
JavaScript (ES6), 247
Pas aussi bon annonce @ NinjaBearMonkey's :(
Test en extrait (avec Firefox)
la source
05AB1E ,
137135128122 octets-6 octets grâce à @Grimy .
Essayez-le en ligne ou vérifiez quelques autres cas de test .
Explication:
Nous créons d'abord le template-string:
Qui ressemble à ceci:
Ensuite, je boucle sur les chiffres de l'entrée:
Et procédez comme suit:
Appuyez sur l'index (indexé 0)
N
de la liste:Poussez toutes les parties possibles en tant que liste de listes de caractères:
Utilisez l'index de boucle
N
pour obtenir la liste de caractères de la partie avec laquelle nous travaillons actuellement:Ensuite, divisez la liste de caractères en quatre parties égales et utilisez le chiffre d'entrée
y
(indexé 1) pour l'indexer. (REMARQUE:. Comme 05AB1E est 0 indexées, mais l'entrée est 1-indexé, il serait logique de réduire le chiffre de 1 avant l' indexation Cependant, depuis 05AB1E a wraparound automatique ( par exemple l' indexation3
dans la liste[1,3,5]
entraînera1
), je simplement Une fois les pièces tournées, les pièces avec le numéro 4 dans la description du défi se trouvent en tête des listes.)Et puis remplacez l'index 0-indexé de la boucle que nous avons d'abord poussée, un par un, avec les caractères de la pièce:
Et à la fin, le résultat est généré implicitement.
Consultez cette astuce 05AB1E (section Comment compresser de grands entiers? Et Comment compresser des listes d’entiers? ) Pour comprendre le fonctionnement des éléments de compression.
Quant à mon préféré, c'est toujours le même "lapin de neige" qu'il y a un an et demi lorsque j'ai posté ma solution Java :
la source
0
entre ses yeux. :)Java 8,
548545432401399 octetsEssayez ici.
Explication:
Mon préféré:
Je ne sais pas pourquoi, mais ça a l'air plutôt mignon. Comme un lapin avec un chapeau russe à la place des oreilles.
la source
F #, 369 octets
Essayez-le en ligne!
Parce que
g
utilise un accesseur de tableau, je dois spécifier explicitement le type dans la définition de fonction en tant questring
, ce qui explique pourquoi la définition de fonction a(g:string)
.En dehors de cela, il s'agit généralement d'un tableau d'
strings
index auquel on a accès. Le chapeau, les bras gauche et droit qui iraient sur des lignes séparées sont divisés en rangées supérieure et inférieure séparées. Lai
fonction change un nombre dans l'argumentg
dans l'index du tableau. Et la lettreb
remplace les chaînes d'un espace dans les tableaux.Grand défi! Mon bonhomme de neige préféré est probablement
242244113
:je te surveille
la source
PHP, 378 octets
Essayez-le en ligne!
J'aime les sages M. Chouette
31333342
la source
Python 2.7, 257 octets (je pense)
où 'i' est l'entrée sous forme de chaîne (par exemple "13243213")
la source
i
pourinput()
un total de 262 octetsDart , 307 octets
Essayez-le en ligne!
la source
Zsh, 247 octets
essayez-le en ligne !!
bonhomme de neige fav:
la source