Défi
Compte tenu de la phase de la lune, dessinez-la en utilisant l'art ASCII.
Votre programme doit gérer la nouvelle lune, le croissant croissant, le premier trimestre, le gibbeux croissant, la pleine lune, le gibbeux décroissant, le dernier trimestre et le croissant décroissant. Votre entrée sera un entier.
0 -> new moon
1 -> waxing crescent
2 -> first quarter
3 -> waxing gibbous
4 -> full moon
5 -> waning gibbous
6 -> last quarter
7 -> waning crescent
L'art ASCII est tout placé sur une grille 16x8 (parce que les ratios de dimension des caractères). Vous pouvez remplacer .
par n'importe quel caractère et #
par tout autre caractère non blanc.
La sortie pour la nouvelle lune devrait être:
................
................
................
................
................
................
................
................
Pour croître le croissant:
..........######
............####
.............###
.............###
.............###
.............###
............####
..........######
Pour le premier trimestre:
........########
........########
........########
........########
........########
........########
........########
........########
Pour épilation gibbeuse:
......##########
....############
...#############
...#############
...#############
...#############
....############
......##########
Et pour la pleine lune:
################
################
################
################
################
################
################
################
Le croissant décroissant est juste le croissant croissant avec chaque ligne inversée, comme avec le gibbeux décroissant et le gibbeux croissant, et le premier et le dernier trimestre.
Règles
- Les échappatoires standard s'appliquent
- Vous pouvez choisir de sortir l'épilation / décroissance dans le sens opposé si vous le souhaitez, bien que cela ne fasse aucune différence (les graphiques montrés dans cette question sont pour l'hémisphère nord)
- Votre sortie doit être exactement comme spécifié. Vos sauts de ligne peuvent être n'importe quel séparateur de ligne raisonnable, et vous pouvez avoir un saut de ligne de fin si vous le souhaitez.
MoonPhase["Icon"]
est de 17 octets dans Mathematica…Réponses:
Gelée ,
4332 octets-7 octets passant du masque de bits au masque de comparaison
-2 octets avec quelques améliorations de programmation tacites
-1 octet se déplaçant vers l'hémisphère sud
-1 octet - utilisez le tout nouveau
ɓ
séparateur de chaîne ... sa toute première utilisation!Utilise les caractères
0
pour.
et1
pour#
.Tous les cas dans une suite de tests sur Essayez-le en ligne!
Comment?
Construit un masque capturant les quatre premières phases, et plutôt que d'inverser les lignes, complète les valeurs résultantes du résultat de la phase modulo-4 lorsque la phase div-4 n'est pas nulle.
Je construit à l' origine un masque de bits, mais les valeurs de masque étaient
0
,8
,12
et14
-0000
,1000
,1100
et1110
- ceux - ci ont plusphase
grands ceux - donc une comparaison masque pourrait être utilisé à la place.la source
JavaScript (ES6),
121...10392 octetsDémo
Afficher l'extrait de code
la source
Haskell ,
9890 octetsIl parcourt les lignes et les colonnes à l'aide de la liste monad (un
do
bloc pour les lignes et une compréhension de la liste pour les colonnes) et détermine quel caractère pour chaque cellule en utilisant une expression de l'entrée (i
), une valeur de décalage pour la ligne (a
) et un index de colonne (x
).8 octets enregistrés en simplifiant la sous-expression pour le vrai décalage.
la source
Python 2 ,
144142127 127 octetsEssayez-le en ligne!
Peut certainement être joué plus loin, les conseils sont appréciés :)
Golfé 1 octet grâce au métro souterrain!
Golfé de nombreux octets grâce à ovi et Mego car je suis un imbécile qui oublie de ne pas utiliser 4 espaces pour codegolf :)
la source
if i>2:y=16-y
pourrait être changé eny=[16-y,y][i>2]
, ce qui est plus long, mais avec une utilisation libérale des points-virgules, cela permettrait à votre boucle d'être une ligne pour économiser plusieurs octets.PHP, 105 octets
Essayez-le en ligne!
la source
$a/4
? L'indexation fera la coupe. :)Mathematica, 125 octets
Renvoie une grille en utilisant
1
et0
au lieu de.
et#
respectivement.Il fonctionne en utilisant deux masques, un circulaire et un demi-ombré, et en les combinant logiquement pour obtenir les formes appropriées.
Les deux masques sont réalisés avec
1-{3.4,5}~DiskMatrix~{8,16}
pour le circulaire, etTable[Boole[i>8],8,{i,16}]
pour le demi. La logique est la suivante:La logique est simulée avec
1
s et0
s en utilisant la multiplication pourAND
etx -> 1-x
pourNOT
.Une solution bonus (non ASCII), pour 28 octets:
IconData["MoonPhase",#/4-1]&
la source