Les entrées pour ce défi afficheront une figure animée Lissajous en rotation . L'apparition d'une rotation 3D se produit lorsque le paramètre x est successivement déphasé dans chaque image.
Contribution:
Les paramètres a
et b
(selon l' article de wikipedia ) seront spécifiés sur la ligne de commande, ou lus depuis stdin.
Production:
C'est ascii-art , donc la sortie sera affichée dans une fenêtre d'émulateur de terminal ou équivalent. La taille de sortie peut être codée en dur, mais le chiffre Lissajous doit être au moins assez grand pour remplir une fenêtre de 80x24.
La fréquence d'images d'animation sera d'environ 50 images par seconde. Dormir pendant 20 ms entre chaque image est bien, tant que le temps de calcul de chaque image est petit par rapport au temps de sommeil fixe. Si votre choix de langue ne peut pas calculer assez rapidement sur la plate-forme que vous avez choisie, vous devrez calculer le temps de sommeil de manière dynamique.
Chaque cadre ne sera affiché que lorsque tous les calculs pour ce cadre seront terminés. Il n'est pas nécessaire d'effacer l'écran entre chaque image.
La figurine effectuera une 2*Pi
rotation complète toutes les 4 secondes environ.
Pour chaque image, une courbe fermée complète doit être générée. Au moins 1 000 points doivent être calculés le long de la courbe. Le dessin au trait entre les points n'est pas nécessaire.
Les points de la courbe seront tracés sous forme de #
caractères. Le reste de la zone d'affichage sera vide / blanc.
Il s'agit de code-golf , donc la réponse la plus courte en octets (jugée acceptable par moi) sera le gagnant accepté une semaine après cette publication.
Réponse de référence non golfée .
Réponses:
Perl - 177
Les coefficients sont transmis via des arguments. Le gif ci-dessus est produit à partir de
perl % 2 3
la source
C (réponse de référence - pas joué au golf)
Sortie avec
./lissajous 2 3
:C, 257 octets
D'accord, je n'ai pas pu résister un peu au golf moi-même. Je pense qu'il y a encore beaucoup de golf à faire à ce sujet:
la source
usleep
à 20000 ms, pourquoi pas seulementsleep
à 20 ans?usleep(2e4);
?Python 3 - 280
N'ayez pas l'un de ces gifs animés fantaisie pour vous, désolé. La console Windows est lente à imprimer: P
Je ne suis pas sûr que cela réponde à l'exigence de 50 images par seconde, mais je ne suis pas sûr que ce soit vraiment possible avec Python. Vous pouvez ajuster le 1000 sur la deuxième ligne pour la quantité de points à calculer (la liste est la largeur de sortie, la hauteur de sortie, les points à trouver, la progression par image (pi * 2 / n) et le point de départ). Vous pouvez également les supprimer et les spécifier également dans l'entrée.
MODIFICATION PLUS IMPORTANTE: Entrée via stdin, espace séparé, fin de ligne. Attendra votre entrée.
EDIT: Capture d'écran. Changé la hauteur à 40 pour celui-ci.
la source
lissajous.py
, puis exécuterpython3 lissajous.py 2 3
devrait être suffisant, non?stdin
, pas les arguments (n'a pas pu spécifier que ... oups). Séparé de l'espace.input()
et deviner cela. Fonctionne bien maintenant pour moi avec 3.2.3. +1C # -
360352 (multiplateforme - 332 pour Windows uniquement)Modifié après correction d'un bug de micro-golf et d'arrondi + suggestion par Ypnypn
Pas exactement un concurrent à cette longueur - et c'est à peu près une copie textuelle de la référence - mais eh bien. :)
Hog de mémoire, créant un nouveau tableau pour chaque rafraîchissement - à l'origine (ré) utilisé un StringBuilder, mais sacrifié pour la brièveté. Mais au moins le rafraîchissement prend moins de 1 ms sur mon ancien Core2.
Après avoir supprimé un peu de golf ancien - qui fait mal à la longueur, le réduisant ainsi de 8 caractères, j'ai essayé de le ramener au 360 "poétique" en revenant au double plutôt qu'à l'analyse syntaxique, et en revenant à 80 * 24 au lieu de 1920. Ce n'est toujours que 359, cependant - et aucun autre ajout de caractère unique auquel je peux penser n'apporte vraiment de valeur au code. Nous allons donc nous contenter de 352. :-)
Déroulé (perdu le code pré-golf):
La console Windows accepte en fait la sortie d'un grand nombre de caractères nuls, ce qui donne une sortie (graphiquement) identique à l'utilisation d'un caractère d'espace réel - ce qui permet à quelques caractères de moins d'initialiser le tableau de caractères.
la source
using C = Console
Enregistre- t-il vraiment des personnages?Python 2.7 - 214
Je pense que je vais revoir cela. J'ai le sentiment que cela peut être réduit encore plus, mais il sera difficile d'atteindre le nombre d'octets Perl. Les mathématiques semblent être ma plus grande limitation ici.
Avertissement: peut planter le terminal que vous utilisez. J'ai testé cela sur l'invite de commande Windows avec
lissajous.py 2 3
. En raison de l'écriture rapide dans l'invite de commandes, attendez-vous à ce que les cadres sautent un peu. Cela peut être principalement résolu (au prix de la vitesse) en utilisant un plus grands
dans lerange(s)
ett=2*pi*i
.Je n'utilise pas
\r
ou\b
ici à dessein parce que je l'exécute sur Windows et cela coûterait des caractères supplémentaires.la source