Contexte
Voici un défi lié à Halloween.
Comme vous avez pu le constater lors de mon dernier défi, j'aime beaucoup ce que j'appelle des animations artistiques ascii. Il ne s'agit pas simplement de dessiner un motif, mais de dessiner un motif qui progresse. Cette idée m'est venue après qu'on m'a demandé, il y a quelques années, d'agrémenter une présentation (plutôt ennuyeuse) en faisant voler des chauves-souris ascii au hasard sur l'écran à l'Halloween. Inutile de dire que je suis obligé (on me payait pour cela) mais cela me faisait penser qu'il y a plus dans la vie que des chauves-souris aléatoires. Inspiré par cela, je voudrais proposer ce défi.
Défi
Faites voler une chauve-souris autour de la lune.
Voici une batte:
^o^
Voici la lune:
mmm
mmmmmmm
mmmmmmmmm
mmmmmmm
mmm
Vous devez montrer chaque étape du vol des chauves-souris (voir le résultat).
Contribution
Aucun
Sortie
^o^
mmm
mmmmmmm
mmmmmmmmm
mmmmmmm
mmm
mmm^o^
mmmmmmm
mmmmmmmmm
mmmmmmm
mmm
mmm
mmmmmmm^o^
mmmmmmmmm
mmmmmmm
mmm
mmm
mmmmmmm
mmmmmmmmm^o^
mmmmmmm
mmm
mmm
mmmmmmm
mmmmmmmmm
mmmmmmm^o^
mmm
mmm
mmmmmmm
mmmmmmmmm
mmmmmmm
mmm^o^
mmm
mmmmmmm
mmmmmmmmm
mmmmmmm
mmm
^o^
mmm
mmmmmmm
mmmmmmmmm
mmmmmmm
^o^mmm
mmm
mmmmmmm
mmmmmmmmm
^o^mmmmmmm
mmm
mmm
mmmmmmm
^o^mmmmmmmmm
mmmmmmm
mmm
mmm
^o^mmmmmmm
mmmmmmmmm
mmmmmmm
mmm
^o^mmm
mmmmmmm
mmmmmmmmm
mmmmmmm
mmm
^o^
mmm
mmmmmmm
mmmmmmmmm
mmmmmmm
mmm
Règles
- Pas de lecture de fichiers externes ou de sites Web
- Vous pouvez soumettre un programme complet ou une fonction
- Les espaces supplémentaires et / ou les nouvelles lignes me conviennent
- Lacunes standard interdites comme d'habitude
- La chauve-souris doit finir au sommet de la lune
- N'hésitez pas à vider l'écran entre les images si vous le souhaitez, mais ceci n'est pas obligatoire. Comme indiqué ci-dessus, la sortie est bonne
- S'agissant d'un code de golf, le gagnant sera la réponse avec le nombre d'octets le plus faible, bien que toute réponse soit la bienvenue.
Échantillon
Implémentation de référence en Python 2 totalement non-golfé (620 octets mais juste pour prouver que cela est possible. Pourrons le jouer plus tard).
b='^o^'
m=[' ',
' mmm ',
' mmmmmmm ',
' mmmmmmmmm ',
' mmmmmmm ',
' mmm ',
' ']
p=[(9,12),(12,15),(14,17),(15,18),(14,17),(12,15),(9,12),(6,9),(4,7),(3,6),(4,7),(6,9),(9,12)]
d=0
for z in range(7):
x=map(str,m[z])
c="".join(x[:p[z][0]]) + b + "".join(x[p[z][1]:])+"\n"
print "\n".join(m[:z]) + "\n" + c+"\n".join(m[z+1:])
for z in range(6)[::-1]:
x=map(str,m[z])
c="".join(x[:p[z+6][0]]) + b + "".join(x[p[z+6][1]:])+"\n"
print "\n".join(m[:z]) + "\n" + c+"\n".join(m[z+1:])
Résultat
Bien que @Jonathan gagne évidemment sur le nombre d'octets avec Jelly, je vais marquer la réponse Brainfuck de @Oyarsa comme la réponse acceptée, tout simplement parce que je pense que quiconque peut réellement faire quelque chose comme cela dans un langage aussi fou mérite +15 représentants peu importe combien d'octets cela prend. Ce n'est pas parce que j'ai aucun problème avec les langues de golf. Voir ma réponse à une question à ce sujet sur la méta si vous avez des doutes. Merci beaucoup et respect à tous ceux qui ont contribué dans n'importe quelle langue.
Réponses:
Brainfuck, 690 octets
C'est la première fois que je joue au golf, alors je suis sûr qu'il y a encore beaucoup à faire.
Essayez-le en ligne
Ungolfed certains pour la lisibilité:
Je voulais utiliser le fait qu'en ajoutant une nouvelle ligne au début, chaque étape peut être lue dans les deux sens pour obtenir deux étapes différentes, mais je ne pouvais pas trouver un moyen de le faire sans générer les six étapes et demie complètes. immediatement.
la source
05AB1E ,
696260 octetsSauvegardé 2 octets grâce à Adnan .
Essayez-le en ligne!
Explication
3ð×…^o^)U
stocke la liste[" ","^o^"]
dans X pour une utilisation ultérieure.13FNV
des boucles au cours des 13 étapes [0 .. 12] et stocke l'indice d'itération actuelle Y .0379730v
des boucles sur les lignes de chaque étage,où N est l'indice de ligne et y est le nombre actuel de m de .
Nous commençons par ajouter des
floor(5/(y+1))-(y==0)
espaces à chaque ligne avecð5y>;ï-y_+×
.Nous déterminons ensuite s'il doit y avoir une chauve-souris ou 3 espaces avant les m .
Si
(-N-Y)%12 == 0
est vrai, nous ajoutons une batte, sinon 3 espaces.Cette expression (
N(Y-12%_Xè
) placera les chauves-souris par étapes0,6-12
.Ensuite, nous plaçons y m avec
'my×
.Maintenant, nous déterminons s'il doit y avoir une chauve-souris ou 3 espaces après les m .
Le code
NY-12%_y&Xè
placera une batte si((N-Y)%12 == 0) and y!=0
est vrai, sinon 3 espaces.Cela placera les chauves-souris sur les scènes
1-5
.Enfin , nous joignons la ligne entière dans une chaîne et imprimer avec une nouvelle ligne:
J,
.la source
3ð×…^o^)
au lieu de" ^o^"2ä
devrait sauver deux octets.3ð×
.JavaScript (ES6),
109144140138 octetsVersion animée
Afficher l'extrait de code
la source
HTML + JS,
153149 octetsEdit: Sauvegardé un tas d'octets grâce à @RickHitchcock. La version ennuyeuse qui ne retourne que les 13 chaînes multilignes d'un tableau est de
132 à131 octets:la source
setInterval
, qui est toujours le même sur mon navigateur, mais peut varier pour les autres navigateurs.innerHTML
place detextContent
. Et un autre octet en changeantrepeat(+c)
àrepeat(c)
.1000
peut devenir1e3
.)Gelée ,
76 6958 octetsTryItOnline
Comment?
la source
Python 2,
146 144138 octets-2 octets grâce à @Willem (utilisez la variable
c
plutôt que de boucler amap
)repl.it
'6643466'
est le nombre d'espaces avant la lune (avec 6 sur les première et dernière lignes vides, car la chauve-souris y ira).'0379730'
est le nombre de'm'
s dans la lune sur chaque ligne.Le
zip
déballe ces personnages dansa
etb
fait la lune dans le cielm
, avec 3 espaces de fuite sur chaque ligne.La dernière ligne traverse ensuite les positions de la chauve-souris dans la lune et est effectivement:
mais le tuple de positions est codé comme les ordinaux des caractères imprimables, avec un 23 ajouté (puisque 9 n'est pas imprimable). Cela sort
" -;L[hrbQ@2' "
etc=ord(b)-23
sert à extraire les valeurs.la source
for b in" -;L[hrbQ@2' ":c=ord(b)-23;print(m[:c-3]+'^o^'+m[c:])
Autovim ,
8581 octetsPas d'animation, probablement encore golfable ... Pourtant, pas mal pour le nouveau venu! (autovim)
Pour l'exécuter:
Explication
En bref, nous dessinons la lune, la copions et la collons 12 fois, et utilisons deux macros: l’une pour ajouter la chauve-souris sur les 7 premières lunes, l’autre pour préfixer les 6 dernières.
la source
PHP, 167 octets
J'ai fait un petit programme en PHP:
Voici une version plus verbeuse:
Ceci est mon premier codegolf, si vous avez une suggestion, je suis heureux de l'entendre :)
la source
Python 2, 112 octets
Imprimez la photo. Chaque ligne a trois parties
m
pour la luneCes pièces sont concaténées et centrées dans une boîte de taille 15 pour les espacer. Pour éviter que les chauves-souris ne se déplacent au centre, une chauve-souris manquante a trois espaces, la même longueur. Pour les chauves-souris situées au-dessus ou au-dessous de la lune, la fente à gauche est omise et la fente à droite est occupée.
Il y a 91 lignes: une image de 7 lignes pour chacune des 13 images. Celles-ci sont comptées via divmod: Comme
k
compte de0
à91
,(k/7, k%7)
vaEn prenant la première valeur
k/7
pour être l'image et la seconde valeurr=k%7
comme numéro de ligne dans l'image, cela compte d'abord par image, puis par numéro de ligne dans chaque image, les deux indexés à 0.Le nombre de
m
dans la lune change avec le numéro de ligner=k%7
comme[0,3,7,9,7,3,0]
. Plutôt que d'indexer dans ceci, une formule était plus courte. Un degré de liberté commode consiste en ce que le0
'peut être n'importe quelle valeur négative, car cela donne toujours la chaîne vide multipliée parm
. Le fait de jouer avec une parabole et de diviser le sol a donné une formuler*(6-r)*8/5-5
.Nous allons maintenant choisir de dessiner une batte ou un espace vide de chaque côté. Le tableau
b=[' ','^o^']
contient les options.La chauve-souris de la ligne 0 de la photo 0 (en haut), de la ligne 1 de la photo 1 (à droite) et de la ligne 6 de la photo 6 (en haut). Il est donc facile de vérifier si le numéro de ligne et le numéro d’image sont égaux
k/7==r
. Mais nous avons aussi besoin de l'image 12 pour ressembler à l'image 0, nous prenons donc d'abord le numéro d'image modulo 12.A gauche c'est pareil. La chauve-souris apparaît à gauche en lignes
r=5,4,3,2,1
dans les images7,8,9,10,11
. Donc, nous vérifions si le nombre de lignes et d’images est égal à 12. Nous nous assurons également de ne rien dessiner au lieu de trois espaces sur les lignes0
et6
- le logement de batte droit dessinera le bâton, et nous ne devons pas gâcher son centrage.la source
C #
615582337 octetsC’est ma première tentative (encore trop lisible) de l’une d’entre elles. C’est pourquoi je me ferai un plaisir d’apprécier toute suggestion visant à supprimer quelques centaines d’octets! En ce moment, le haut de ma liste est un moyen plus rapide de créer le tableau lunaire.
Ungolfed (comprend la boucle!)
Modifier:
A supprimé 21 octets en supprimant les espaces de fin dans la déclaration de tableau. Au lieu d'une grille de 15 caractères de large, chaque ligne est seulement assez large pour que la batte puisse tenir. Suppression d'un autre 12 pour la chaîne inutile [] args dans la
Main()
déclaration.Edit 2:
Réécrit l'essentiel de la logique en supprimant 245 octets! Inclut les modifications suggérées à partir des commentaires. Merci!
D'après les commentaires, cela est devenu une fonction
M()
au lieu de laMain()
méthode précédente - alors maintenant, il faut l'appeler de manière externe.la source
new string[]
dem
et en le mettant simplementstring[]m={...}
.var
des fichiers dans des endroits tels questring[]w=(string[])m.Clone();
-var w=(strin[])m.Clone();
Python 2,
299300290270 octetsGolfé à 270 ayant acquis un peu plus d'expérience de golf.
Implémentation de référence modifiée par
321320330 octets. Pas joli ou élégant. Utilise simplement une chaîne de force brute et le découpage de liste C'était amusant de compter le nombre d'octets, mais je pense que l'approche était complètement fausse pour commencer avec un concurrent sérieux.Je ne m'attends pas à ce que cette réponse soit prise au sérieux, alors s'il vous plaît, pas de votes négatifs. Dans la question, j’ai dit que j’essaierais d’incorporer la mise en œuvre de référence et c’est exactement cela. Juste posté pour le plaisir.
Essayez-le en ligne!
la source
Ruby,
164156 octetsProgramme très simple. Peut être travaillé sur plus. S'il vous plaît laissez des conseils dans les commentaires.
la source
base64
etzlib
le plus rapidement possible, et les ajouter au nombre d'octets?puts
etsay
? Je ne connais pas Ruby./// , 205 octets
Essayez-le en ligne!
Seulement si je n'avais pas besoin de tonnes d'espaces de fuite ...
la source
Oreillons, 223 octets
Cela utilise InterSystems Cache Mumps - il permet des accolades autour des boucles, ce qui le rend pratique pour les boucles imbriquées sur une seule ligne.
Je pourrais probablement jouer davantage au golf, et je pourrais jouer avec cela quand j'ai plus de temps. Ajoutez 9 autres octets et il sera animé [[en raison de l'ajout du 'H 1 W #' -> qui s'arrête une seconde et efface l'écran:
Voici une version non expliquée / expliquée (de la version animée), avec les instructions correctes 'do' et les boucles de points:
J'ai essayé de faire du jazz "compresser puis encoder en Base-64" juste pour voir ce qui se passerait, mais la chaîne encodée s'est avérée un peu plus longue que le programme lui-même! Cela, et les appels système de Cache pour la compression et l'encodage en base64 sont assez longs ... par exemple, voici l'appel système pour décoder en base64: $ System.Encryption.Base64Decode (STRING)
Cette méthode "gonflerait" le programme à plus de 300 caractères, je pense ...
la source