Un seul pixel se déplaçant dans une trajectoire circulaire

45

Il s’agit d’un défi de sortie graphique où la tâche consiste à donner le code le plus court par langue.

Tâche

Votre code doit tracer un seul pixel violet (valeur hexadécimale n ° 800080 ou rgb (128, 0, 128)) en effectuant un mouvement de rotation dans le sens des aiguilles d'une montre. Cela devrait prendre exactement 60 secondes pour faire un tour complet du cercle et devrait se poursuivre indéfiniment. Rien d’autre ne doit apparaître sur l’écran ou la fenêtre, à l’exception du pixel. La largeur du cercle doit être de 0,75 (arrondi de manière appropriée), la largeur de l'écran ou de la fenêtre et l'arrière-plan doivent être blancs. Pour éviter des solutions idiotes, la largeur de l’écran ou de la fenêtre doit être d’au moins 100 pixels.

Votre code devrait être un programme complet .

Langues et bibliothèques

Vous pouvez utiliser n'importe quelle langue ou bibliothèque que vous aimez. Cependant, j'aimerais pouvoir tester votre code si possible. Si vous pouviez fournir des instructions claires sur la façon de l'exécuter dans Ubuntu, cela serait très apprécié.

Top vingt langues manquantes. Besoin d'aide.

Les vingt principaux langages de programmation suivants manquent actuellement de solution.

  • C , C ++, C # , Python , PHP , Visual Basic .NET , Perl, Delphi / Object Pascal, Assemblage , Objective-C , Swift, Pascal, Matlab / Octave , PL / SQL, ABE OpenEdge, R

Catalogue

Le fragment de pile au bas de cet article génère le catalogue à partir des réponses a) sous forme de liste des solutions les plus courtes par langue et b) sous forme de classement global.

Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:

## Language Name, N bytes

Nest la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:

## Perl, 43 + 2 (-p flag) = 45 bytes

Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


la source
1
quel rayon doit être le cercle?
Timothy Groote
19
Pourquoi le pixel devrait-il être violet? Je suppose que certaines langues telles que TI-Basic ne disposent pas de fonctionnalités de couleur, ce qui signifie qu'elles ne peuvent pas être utilisées pour le défi pour une raison assez arbitraire
Fatalize
1
@Fatalize ne signifie pas que vous ne pouvez pas intégrer la couleur dans le programme de manière créative et astucieuse pour économiser des octets.
Timothy Groote
3
@ TimothyGroote TI-BASIC a principalement une seule couleur: le noir. Tout le reste est un pixel off. Il y a des calculatrices C (SE) qui ont des couleurs, mais tout le monde n'en a pas.
Conor O'Brien
10
Je suis sûr que mettre un cellofane violet sur votre écran n’ajoute pas la taille de votre code en octets. Je veux dire que cela a fonctionné sur le vectrex;)
Timothy Groote

Réponses:

23

Traitement , 101 97 96 octets

4 octets grâce à Flambino.

1 octet grâce à Kritixi Lithos.

float d;void draw(){background(-1);stroke(#800080);d+=PI/1800;point(50+cos(d)*38,50+sin(d)*38);}

Cela crée une fenêtre par défaut de 100 x 100 pixels avec l'animation requise.

fenêtre de sortie

Avertissement: cette image n'est pas un GIF. Ne la regarde pas une minute.

PurkkaKoodari
la source
2
Cela met-il en œuvre la règle des 60 secondes?
2
@ Lembik Oui. Le nombre d'images par défaut est 60 ips et j'incrémente l'angle en π/1800radians à la fois. (C'était il y a π/360010 secondes à cause de mon cerveau.)
PurkkaKoodari
5
@ Pietu1998 Ce brainfart était dû au fait que pi est faux
Cruncher
2
@Cruncher dois aimer vi hart!
Tim
17
Hé, votre GIF ne fonctionne pas, je l'ai regardé pendant une minute, mais rien ne s'est passé
Beta Decay
16

QB64, 79 octets

QB64 est un émulateur QBasic qui ajoute quelques fonctionnalités intéressantes. Ce programme utilise one ( CLS,15) non pris en charge par QBasic de vanille.

SCREEN 7
DO
T=TIMER/9.55
PSET(COS(T)*75+99,SIN(T)*75+99),5
PLAY"c8"
CLS,15
LOOP

C'est très fort. Il utilise la PLAYcommande pour arrêter l'exécution pendant un court instant avant d'effacer l'écran. sinon, le pixel scintille et devient invisible.

Télécharger QB64 , charger ce fichier, cliquez sur Runpuis Start.

Ici c'est en action:

le programme

J'ai pris quelques astuces ( SCREEN 7au lieu de SCREEN 13, et PSETau lieu de POKE) de la réponse de @ DLosc, donc le crédit est dû. Comme dans sa réponse, mon magenta est en fait #8B008B, ce qui a été jugé acceptable par le PO.

(La constante 9.55est une approximation de 30/π = 9.54929658551. Est-ce assez proche?)

Lynn
la source
Ha! Jamais pensé à utiliser PLAYpour un délai. J'aurais juré qu'il y avait un code de repos, mais je ne le vois pas maintenant dans le fichier d'aide. J'ai envisagé d'utiliser (une fonction de) TIMERcomme paramètre, mais je n'ai jamais essayé de voir s'il était plus court. Gloire!
DLosc
4
Remercier! Je me suis levé sans vergogne PSET, donc bravo au dos :) On dirait qu'un repos n0est plus long que c. De plus, j'aime bien cela, c'est un peu bousculer les règles: l'OP disait que rien ne pouvait être montré dans la fenêtre, mais jamais mon programme ne pouvait pas aller fort BEEP BEEP BEEP BEEP .
Lynn
1
Je n'ai rien contre les bips sonores mais je ne peux pas réellement voir un pixel se déplacer autour d'un cercle lorsque j'essaie sous Linux.
1
Ici, il est en action sur ma machine, ce qui devrait être une preuve suffisante.
Lynn
12
J'ai regardé l'image pendant un moment, parce que vous avez dit "la voici en action ".
mbomb007
14

Java, 449 443 439 octets

Parce que j'ai toujours eu des idées stupides. Comme au golf à Java;).

import java.awt.*;import javax.swing.*;class F extends JFrame{F()throws Exception{setContentPane(new P());setSize(400,400);setVisible(0<1);for(;;Thread.sleep(100))repaint();}class P extends JPanel{double c;public void paintComponent(Graphics g){g.setColor(new Color(8388736));c=(c-0.1)%60;double t=0.104*c;g.fillRect((int)(180+Math.sin(t)*120),(int)(180+Math.cos(t)*120),1,1);}}public static void main(String[]x)throws Exception{new F();}}

Edit: Merci pour @Ypnypn pour jouer au golf 7 octets!

Edit2: Merci pour @Franz D. d'avoir économisé 3 octets!

Peter Lenkefi
la source
7
Java remporte à ce jour le plus long concours de code qui soit :)
1
- Vous n'avez pas besoin d'initialiser les variables de membre à zéro. Vous pouvez donc économiser deux octets (~ 0,45%) en convertissant "c = 0" en "c".
Franz D.
1
Et vous pouvez enregistrer un octet supplémentaire en initialisant la couleur au format hexadécimal, c’est-à-dire la nouvelle couleur (0x800080).
Franz D.
1
@FranzD. Encore mieux - utilisez simplement le nombre décimal 8388736.
Ypnypn
1
Débarrassez-vous de JFrame, utilisez Frame, vous permet de supprimer l'importation javax.
Urne magique Octopus
14

Mathematica, 102 101 94 octets

Animate[Graphics[{White,Disk[],{Purple,Point[{0,1}]}}~Rotate~-t],{t,0,2π},DefaultDuration->60]

Crée un cercle blanc masqué et place un point qui suit son bord de 0 à 2π. L' DefaultDurationoption de Mathematica me permet de définir une boucle toutes les 60 secondes.

Voici une version accélérée de la sortie:

EDIT: changer Circlepour Disksauvegarder 2 caractères, ajouter un signe négatif tpour le faire avancer dans le sens des aiguilles d'une montre.

EDIT: Sauvegardé 7 octets en utilisant l' ~opérateur (merci à Mauris).

tjq
la source
14
Preuve supplémentaire que Mathematica est juste un langage de programmation où vous écrivez des mots anglais vagues qui signifient ce que vous voulez, puis ajoutez de la ponctuation. (J'ai entendu dire que vous pouviez utiliser à la a~f~bplace de f[a,b], ne serait-il pas Rotateraccourci?)
Lynn
1
Vous pouvez également utiliser la notation préfixe pour Point@{0,1}et je ne pense pas que vous ayez besoin de la liste Purple,Point....
Martin Ender
1
@Mauris. Pour les non-initiés, Mathematica peut en effet ressembler à des mots anglais vagues et à la ponctuation. En réalité, il s’agit des noms de fonctions, de paramètres et d’opérateurs spécifiques et bien définis. La probabilité qu'un non-programmeur puisse générer du code exploitable est très faible.
DavidC
3
@ David: Haha, bien sûr que je suis au courant - je rigolais :)
Lynn
@Mauris, vous m'avez dupé!
DavidC
14

HTML, 235 290 295 354 347 octets

<a><style>*{position:absolute;margin:0;box-sizing:border-box}body{height:100vh;width:100vh}a{left:12.5%;top:50%;width:75%;height:1px;border-left:1px solid purple;animation:r 60s infinite linear}@keyframes r{100%{transform:rotate(360deg

Enregistrez en tant que .htmlfichier et ouvrez-le dans un navigateur, sans préfixes de fournisseur, tels que Chrome ou Firefox. Ou essayez ce violon .


Il s’agit d’une nouvelle version bien plus courte que ma première tentative, que j’avais écrite 5 minutes avant une réunion. La nouvelle taille de la toile est un carré basé sur la hauteur de la fenêtre. Cela fonctionne plutôt bien et ne se limite pas à une certaine hauteur définie. Je suis très précis sur les paramètres dans le défi (taille de 75% de son parent, violet et 1px). Par conséquent, j’ai besoin et je ne peux pas supprimer ou simplifier les règles suivantes:

* { margin: 0; box-sizing:border-box; }
a { left: 12.5%; }

Ungolfed

Ceci est la version sans golf avec un balisage propre:

<!DOCTYPE html>
<html>

<head>
    <style>
        * {
            position: absolute;
        }

        body {
            margin: 0;
            height: 100vh;
            width: 100vh;
        }

        a {
            left: 12.5%;
            top: 50%;
            width: 75%;
            height: 1px;
            border-left: 1px solid purple;
            box-sizing: border-box;
            animation: r 60s infinite linear;
        }

        @keyframes r {
            100%{
                transform: rotate(360deg)
            }
        }
    </style>    
</head>
<body>
    <a></a>
</body>

Édite

  • 7 octets ajoutés . Je pensais que personne ne remarquerait qu'il y a un assouplissement par défaut de l'animation. ;) Je l'ai mis à linearmaintenant.
  • Sauvegardé 59 octets en lançant tout ce que le navigateur gérera automatiquement.
  • Sauvegardé 3 octets en supprimant la fin )}}. Merci à la brosse à dents .
  • Enregistré 2 octets en utilisant à la 12%place de 12pxqui est la même valeur correspondant à la taille de l'élément parent.
  • Sauvé 55 octets en raison de refactoring massif, a également pris en compte beaucoup de commentaires. Merci beaucoup pour toutes les contributions.
insertusernamehere
la source
1
Je voulais juste commenter le post, je voudrais voir une solution pure html / css (ty pour soumettre un)
Dwana
1
En utilisant du violon, la vitesse du pixel en mouvement est très inégale. Il s'arrête presque lorsque le pixel est à l'extrême gauche. Des idées pourquoi?
1
@insertusernamehere :) Je pense que la version non-golfée doit également être mise à jour.
5
Vous devriez opter pour le plus petit code de travail, indépendamment de sa validité. Des choses comme polluer l’espace de nommage global sont équivalentes au parcours en golf.
John Dvorak
2
Vous pouvez abandonner )}}à la fin (l'analyseur CSS mettra automatiquement fin aux blocs)
Brosse à dents
14

TI-BASIC, 44 octets

Pour les calculatrices TI-84 + CSE / CE, qui prennent en charge certains graphiques couleur BASIC limités.

AxesOff
ZSquare
While rand
Pt-Off(imag(Ans),real(Ans
7.5e^(-i6startTmr°
Pt-On(imag(Ans),real(Ans),13
End

La couleur ici est le magenta ou la couleur 13 (on peut également utiliser le MAGENTAjeton).

J'utilise randplutôt que 1pour la condition de boucle infinie un court délai (~ 15 ms) entre le moment où le pixel est affiché et le moment où il est éteint à nouveau.

Réglez votre calculatrice en mode radian avant d'exécuter ce programme. Je ne compte pas cela dans la taille parce que c'est l'état par défaut. Également mis Ansà 0 en entrant un 0 avant le programme; c'est aussi la valeur par défaut.

Merci à @quartata pour avoir testé ce programme (je ne possède pas de calculatrice de couleurs).

lirtosiast
la source
Idée naïve: pouvez-vous appeler le programme lui-même au lieu d'utiliser une boucle while, et est-ce que ce serait plus court?
Lynn
@Mauris la boucle while est de 3 jetons, alors qu'un nom de programme est généralement plus long
TheDoctor
1
@Mauris La boucle While est en réalité de 4 octets et il est possible de recurse en 3, mais la pile s'épuise très rapidement, après moins de 300 appels.
lirtosiast
@Lembik Parce que ça va pour [ codegolf.stackexchange.com/a/62203/39328] , je ne changerai pas cela pour que ce soit plus fluide.
lirtosiast
13

Java, 339 308 289 287 octets

import java.awt.*;class F extends Frame{{setSize(200,200);show();}int c;public void paint(Graphics g){g.setColor(new Color(8388736));g.fillRect((int)(99+Math.sin(--c*.01)*75),(int)(99+Math.cos(c*.01)*75),1,1);for(int i=0;++i<62864;)paint();}public static void main(String[] x){new F();}}

Merci à Peter Lenkefi, dont l'excellente solution m'a permis de démarrer et dont j'ai copié sans vergogne la boucle!

L'économie principale est due au passage à AWT pur et au rendu directement dans Frame - aucun besoin de JPanel (ou de Canvas). J'ai également fait du compteur une variable entière, mise à jour par simple incrément, et sauvegardé quelques octets en tournant les constantes pour pouvoir effacer un chiffre ici et là.

EDIT: Merci à Peter Lenkefi et @tobii pour leurs suggestions dans les commentaires. Battre le langage HTML serait une bonne chose - est-ce que quelqu'un sait comment mettre en pause l'exécution de manière fiable en Java sans utiliser sleep () et devoir intercepter des exceptions?

EDIT 2: JAVA BEATS HTML (actuellement à 290 octets!): D Le temps dépend maintenant de la machine, mais environ 60 secondes pour un cercle complet sur ma machine, ce qui est OK selon @Lembik. Merci encore à PeterLenkefi pour sa suggestion - ma réponse est plus de la moitié de sa :)

EDIT 3: @Ajay a suggéré de supprimer le "re" de "repaint". Deux octets de moins. Nous y arrivons :)

Franz D.
la source
1
Nous devons l'obtenir sous HTML (donc <290 pour le moment)
Peter Lenkefi
1
@PeterLenkefi: Malheureusement, je ne peux pas sauver les accolades du casting. jeter le résultat sin / cos interrompt directement le calcul. Votre peinture à l'intérieur de la peinture () est incroyablement sale :)
Franz D.
1
@Troyseph je voulais dire pour jouer au golf;) Je n'utilise java pour rien.
Peter Lenkefi
1
En utilisant int c,iet en omettant le intdans for(int i=..devrait économiser un peu plus.
Marco13
1
Vous ne même pas besoin de la déclaration de classe F, vous pouvez simplement étendre la classe Cadre en ligne: new Frame(){...}.
Urne magique Octopus
9

Haskell, 143 136 octets

Ceci utilise le paquet gloss :

import Graphics.Gloss
main=animate(InWindow""(100,100)(0,0))white$ \t->color(makeColor 0.5 0 0.5 1).rotate(t*6).translate 38 0$circle 1

La version la plus jolie est

import Graphics.Gloss

purple :: Color
purple = makeColor 0.5 0.0 0.5 1.0

main :: IO ()
main = animate (InWindow "" (100,100) (0,0)) white $ \t ->
    color purple . rotate (t * 6) . translate 38 0 $ circle 1
Frerich Raabe
la source
Vous pouvez supprimer des espaces.
Droitier
@ Else En effet, merci. J'ai aussi enlevé deux inutiles .0.
Frerich Raabe
8

HTML (CSS?), 167 octets

Inspiré par la réponse de insertusernamehere

<style>body{position:fixed;left:50%;top:12%;width:1px;height:75vmin;border-top:1px solid #800080;animation:r 60s infinite linear}@keyframes r{to{transform:rotate(1turn

Ungolfed:

body {
    position: fixed;
    left: 50%;
    top: 12%;
    width: 1px;
    height: 75vmin;
    border-top: 1px solid #800080;
    animation: r 60s infinite linear;
}
@keyframes r {
    to {
        transform: rotate(1turn);
    }
}

Lachlan Arthur
la source
Juste un FYI, HTML + CSSn’est généralement pas considéré comme un langage de programmation, mais il appartient au PO.
GamrCorps
1
Il ne fait rien sur Firefox 41.0.2.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
1
Vient de tester sur Firefox 41.0.2, Win 10. Fonctionne bien pour moi.
Lachlan Arthur
1
Fonctionne pour moi dans 41.0.2 à Ubuntu.
1
+1 Bonne réflexion pour simplement animer le bodymême. :)
insertusernamehere
7

QBasic, 106

SCREEN 7
COLOR 5,15
DO
t=TIMER
CLS
PSET(99+99*COS(i),99+99*SIN(i))
i=i+ATN(1)/75
1IF TIMER<t+.1THEN 1
LOOP

Testé sur QB64 , ce qui indique qu'il a une version Linux (même si je ne l'ai essayé que sous Windows).

  • SCREEN 7 définit le mode graphique.
  • COLOR 5,15 définit le magenta foncé comme couleur de premier plan et le blanc brillant comme couleur de fond.
  • DO ... LOOPest une boucle infinie. Habituellement, vous le voyez comme DO WHILE ... LOOP(ou vous pouvez le LOOP WHILEremplacer, ou utiliser UNTILpour une condition annulée), mais vous pouvez également laisser la condition de côté, auquel cas elle est en boucle pour toujours.
  • TIMER est le nombre de secondes écoulées depuis minuit, sous forme de valeur à virgule flottante.
  • CLS = Écran clair.
  • PSET Définit un point sur une couleur, couleur de premier plan par défaut.
  • icommence à zéro et compte par incréments de 300 pi à chaque passage dans la boucle, complétant ainsi un cercle complet après 600 répétitions. Nous calculons pi en tant que 4 * arctan (1).
  • La dernière ligne attend jusqu'à ce que 0,1 seconde se soit écoulée. L'idiome que j'ai appris de mes livres QBasic était t# = TIMER: WHILE TIMER < t# + 0.1: WEND. Mais nous n’avons pas besoin de nombres à double précision (marqués d’un #) pour une différence de 0,1 seconde, et il s’avère que la IF cond THEN [GOTO] linesyntaxe est inférieure d’un caractère à une WHILE ... WENDboucle.

La boucle se répète 600 fois en 60 secondes, complétant ainsi un cercle complet.

Mises en garde

  • La couleur 5, magenta foncé, est à la #8B008Bplace de la couleur demandée #800080(effacée avec l'OP).
  • Le mode d’écran 7 est 320x200; le cercle a donc un diamètre de 198. Ce diamètre ne correspond pas à> = 0,75 de la largeur mais à> = 0,75 de la hauteur (également effacé avec OP).
  • Si vous exécutez ceci sur DOS QBasic, il est en plein écran, le "pixel" n'est donc pas un pixel sur le moniteur (sauf si vous possédez un moniteur 320x200). Mais cela devrait être assez proche. QB64 s'exécute dans une fenêtre qui utilise les dimensions exactes. Le pixel est donc un pixel littéral.
  • En QB64 au moins, cela prend plus de 65 secondes pour faire une révolution complète. Je ne sais pas vraiment pourquoi; il doit s'agir soit d'erreurs d'arrondis, soit de temps système sur la boucle, bien que j'aie essayé de les atténuer sans succès. En théorie, le code devrait fonctionner correctement tel quel. En pratique, on peut modifier le montant iincrémenté jusqu'à ce qu'une révolution soit suffisamment proche de 60 secondes. (Essayez un dénominateur de 69 ou 68.)
  • Pas de jolie photo ici. :( La qualité de LICEcap n'était pas assez bonne pour capturer un pixel unique avec précision.
DLosc
la source
Ce code fonctionne parfaitement pour moi sous Linux. Merci.
Cela fonctionne réellement dans QBasic 4.5, mais l’arrière-plan n’est pas vraiment blanc :). Voici un fichier GIF compilant et en cours d'exécution: codegolf.square7.ch/altqb.gif
mınxomaτ
@ mınxomaτ Odd, la couleur 15 devrait donner le blanc ou le gris clair selon tout ce que je pensais savoir ... qui ressemble à du cyan clair (couleur 11). Que fait-on SCREEN 8au lieu de 7faire?
DLosc
Même fond verdâtre. Mais vous avez raison, selon les spécifications, il devrait être blanc. J'ai aussi essayé la couleur 7 (gris) et elle est sortie en gris. Donc, votre solution est tout à fait correcte, mais il y a quelque chose qui ne va pas avec mon DOS.
mınxomaτ
7

script mIRC, 184 octets

alias g {
window -p @m -1 -1 100 128
f
}
alias f {
inc %s 1
set %o $calc(%s *38/360)
clear @m
drawdot -r @m $rgb(128,0,128) 1 $calc($cos(%o)*38+50) $calc($sin(%o)*38+52)
.timer 1 1 f
}

Ceci est optimisé pour mIRC dans Wine. Lancez mIRC, appuyez Alt + Rdessus puis collez ceci, fermez l'éditeur et lancez-le avec/g

Aperçu

Le timing sur le gif pourrait être éteint.

Varis
la source
C'est un nouveau sur moi! Ce serait génial si vous pouviez créer un gif animé en cours d'exécution.
C’est l’une des premières langues que j’ai utilisées / qui m’a intéressé au codage!
Varis
6

R, 170 octets

library(animation);for(i in 1:60){par(mar=rep(0,4));plot.new();t=2*pi*(1-i)/60;points(3*cos(t)/8+.5,3*sin(t)/8+.5,pch=19,col="#800080");ani.record()};repeat{ani.replay()}

Il repose sur le package animation. Et voici un gif pour montrer que cela fonctionne:

Dans une fenetre

Solution invalide enregistrant dans un gif (139 octets):

animation::saveGIF({for(i in 1:60){par(mar=rep(0,4));plot.new();t=2*pi*(1-i)/60;points(3*cos(t)/8+.5,3*sin(t)/8+.5,pch=19,col="#800080")}})

Celui-ci nécessite l'installation d'ImageMagick. Le résultat est enregistré dans un gif.

! [Tout ça tourne

planificateur
la source
C’est formidable cependant… le défi a besoin du code pour écrire sur l’écran / la fenêtre.
Oh je n'ai pas compris ça.
Plannapus
2
Le voici dans une fenêtre.
Plannapus
6

Rubis avec chaussures, 159 octets

Shoes.app{animate{background stroke white
fill purple
r=0.75*c=self.width/2
t=Time.now
m=Math
rect c+r*m.sin(a=(t.sec+t.usec*1e-6)*m::PI/30),c-r*m.cos(a),2,2}}

Le pixel est en réalité la pointe de l'aiguille des secondes d'une horloge analogique. Donc, celui-ci est absolument précis.

Rubis avec chaussures, 134 octets

m=Math
Shoes.app{animate{|f|r=0.75*c=self.width/2
background stroke white
fill purple
rect c+r*m.sin(a=f*m::PI/360),c-r*m.cos(a),2,2}}

Il s’agit d’une alternative basée sur le nombre d’images par seconde, inspirée des autres réponses. Bien que la documentation indique que le nombre de fps par défaut est de 10, des tests pratiques indiquent qu’il en est effectivement 12.

Les deux solutions prennent “La largeur du cercle doit être de 0,75 (en arrondissant de manière appropriée) la largeur de l’écran ou de la fenêtre” littéralement: calculez en fonction de la largeur de la fenêtre, de sorte que le pixel puisse parfois quitter le bas d’une fenêtre non carrée. Pas sûr de savoir comment un tel cas devrait être traité. (Utilisez un minimum de largeur et de hauteur? Marchez sur un chemin ovale?) La fenêtre commence par une taille par défaut de 600 x 500 et est redimensionnable.

homme au travail
la source
Très heureux de voir une solution Ruby! Nous avons maintenant besoin de Python, Perl, ....
5

D, 286 280 octets

(392 si écrit normalement)

import simpledisplay,std.math;void main(){auto w=new SimpleWindow(100,100);auto c=50;auto r=c*2/3;int t;auto y=600/PI;w.eventLoop(50,{auto p=w.draw();p.clear;p.outlineColor=Color(128,0,128);p.drawPixel(Point(c+cast(int)(r*cos(t/y)),c+cast(int)(r*sin(t/y))));if(++t==1200)t=0;});}

Ou comme je l'ai écrit à l'origine sans jouer au golf:

import simpledisplay, std.math;

void main() {
        auto window = new SimpleWindow(100, 100);
        auto c = window.width/2;
        auto r = c*2/3;
        int t;
        float cycle = 20*60/(PI*2);
        window.eventLoop(50, {
                auto p = window.draw();
                p.clear;
                p.outlineColor = Color(128, 0, 128);
                p.drawPixel(Point(c + cast(int) (r*cos(t/cycle)), c + cast(int) (r*sin(t/cycle))));
                if(++t == 20*60)
                        t = 0;
        });
}

Dépend de simpledisplay.d et color.d situés ici: https://github.com/adamdruppe/arsd

Il suffit de télécharger ces deux fichiers individuels et de les placer dans votre même répertoire que le code ci-dessus, puis: dmd yourfile.d simpledisplay.d color.dde compiler et de simplement l'exécuter.

Ma petite bibliothèque a été écrite pour faire des animations rapides comme celle-ci assez simple, donc cela joue bien à ses points forts! Hélas, j'aime bien les noms d'identifiant longs et je n'ai pas fourni de Pointconstructeur qui prenne floatdonc 18 octets de transtypage et .... idk une douzaine de noms en épelant mes noms de méthodes.

Adam D. Ruppe
la source
1
Le premier argument de eventLoop btw est un timer de la milliseconde. S'il est différent de zéro, il crée automatiquement une minuterie et appelle la fonction avec zéro argument fourni à cet intervalle. (eventLoop peut également prendre des fonctions avec les arguments MouseEvent ou KeyEvent pour gérer les entrées utilisateur). Donc, intervalle de 50 millisecondes = 20 images par secondes, donc 20 * 60 = cycle en 60 secondes.
Adam D. Ruppe
Je pense que la façon dont vous avez écrit la réponse indique que le code de classement prend 392 au lieu de 280.
5

C #, 379 365 octets

using System.Windows.Forms;using static System.Math;class P:Form{static void Main(){var f=new P();var p=new PictureBox();f.SetBounds(0,0,1000,1000);f.Controls.Add(p);f.Show();for(var i=0d;;i+=PI/3000){p.SetBounds((int)(Cos(i)*375+500),(int)(Sin(i)*375+500),1,1);p.CreateGraphics().Clear(System.Drawing.Color.FromArgb(-8388480));System.Threading.Thread.Sleep(10);}}}

Dépend de System.Windows.Formset System.Drawingà courir. La sortie est dans une fenêtre 1000x1000.

LegionMammal978
la source
Peut économiser des octets en utilisantvar
pinkfloydx33
Enregistrez un autre octet à l'aide de l'importation statique sur les mathématiques système
pinkfloydx33
vous pouvez déclarer votre code dans l'espace de noms système et supprimer toutes les autres références au système et le sauvegarder, je pense. 10 octets
JustinM - Rétablir Monica
5

SVG, 177 octets

<svg><g transform=translate(75,75)><circle id=x r=.5 cx=56 fill=#800080><animateTransform xlink:href=#x attributeName=transform type=rotate to=360 dur=60s repeatCount=indefinite

Balisage non valide de l'enfer au petit-déjeuner, mais il fonctionne (au moins sous Chrome). Comme un canevas HTML5, la taille par défaut d'un fichier SVG semble être de 300 x 150. C'est donc ce que cela suppose.

Edit: Oups, je suis parti accidentellement dans une durée de 6 au lieu de 60. Corrigé cela, mais aussi constaté que cela 0.5fonctionne comme .5, donc pas de changement dans le nombre d'octets.

Flambino
la source
5

Code machine X86 - 150 146 149 133 127 octets

Version golfée:

        00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
        --------------------------------------------------------------------
0000    B0 13 CD 10 BA C9 03 88 F1 BE 76 01 F3 6E B0 0F - °.Í.ºÉ.ˆñ¾v.ón°.
0010    49 68 00 A0 07 F3 AA 64 66 A1 6C 04 66 A3 80 01 - Ih. .óªdf¡l.f£€.
0020    64 66 A1 6C 04 66 2B 06 80 01 66 50 89 E5 D9 EB - df¡l.f+.€.fP‰åÙë
0030    D8 C0 DA 4E 00 DE 34 D9 FB BB 7D 01 DE 0F DE 47 - ØÀÚN.Þ4Ùû»}.Þ.ÞG
0040    FE DF 5E 02 DE 0F DE 47 FE DF 5E 00 5F 69 FF 40 - þß^.Þ.ÞGþß^._iÿ@
0050    01 58 01 C7 BB 88 01 8B 0F 39 CF 74 C3 30 C0 AA - .X.Ç»ˆ.‹.9ÏtÃ0Àª
0060    4F 89 3F 89 CF B0 0F AA 31 C0 FE C4 CD 16 74 B0 - O‰?‰Ï°.ª1ÀþÄÍ.t°
0070    B8 03 00 CD 10 C3 20 00 20 44 04 64 00 4B 00    - ¸..Í.Ã . D.d.K.

'Ungolfed', version source:

; golfCrcl.asm
;
; - 16 bit implementation of an animated pixel that circumscribes a circle.
; - 127 bytes .COM file
;
;   - enhzflep -
;   31 Oct 2015 - initial
;               - set closest colour to desired #800080
;    2/3 Nov 2015 - removed unnecessary instuctions, used BX register to index mem by fpu
;               - removed .data section alignment, better register use in curPixel/lastPixel compares and calcs, reusing value of si after palette setting
[section .text]
[bits 16]
[org 0x100]
EntryPoint:
;   mov     fs, bx          ; bx is 0 on entry. Set fs seg register to this

    ; set graphics mode 320x200
    mov     al, 0x13
    int     0x10

    ; set colour #0 to be as close to the desired one as possible
    ; the vga palette registers are 6 bits by default (some models allow switching to 8 bits)
    ; therefore, we cant represent all of the 16.7m colours that we can in 24bit modes
    ; we're limited to 'just' 64*64*64 = 262,144 (256k) colours. Unfortunately, #800080 is not
    ; a colour we can represent exactly in mode13 or any other mode with 6 bit regs.
    mov     dx, 0x3c9
    mov     cl, dh
    mov     si, desiredCol
    rep     outsb                           ; cx now=0 and si now points to totalTicksNeeded

    ; clear the screen to white
    mov     al, 0x0f                        ; index of a colour thats already FF,FF,FF
;   xor     cx, cx                          ; cx = 0 - its zeroed by the rep outsb instruction above.
    dec     cx                              ; cx = FFFF
    push    word 0xA000                     ; segment of video memory
    pop     es                              ; pop it into es
    rep     stosb                           ; es:[di] = 0F, inc di, dec cx. If cx != 0 then repeat.

    ; setup the timing stuff
    mov     eax, [fs:0x046C]                ; 32 bit value updated at 18.2Hz by bios
    mov     [initialTicks], eax

.drawLoop:
    mov     eax, [fs:0x046C]                ; 32 bit value updated at 18.2Hz by bios
    sub     eax, [initialTicks]             ; eax = curTime-startTime (in increments of 1/18.2 of a second --- 182 = 10 seconds)

    push    eax                             ; number of elapsed clock ticks - ready to be loaded by fpu. Also stack space for calc result
    mov     bp, sp                          ; get pointer to last element pushed onto the stack
    fldpi                                   ; st0 = pi
    fadd    st0                             ; st0 = 2pi
    fimul   long [bp]                       ; (currentTick/requiredTicks) * 2pi
;   fidiv   word [totalTicksNeeded]
    fidiv   word [si]                       ; si still points to totalTicksNeeded after setting the palette earlier
    fsincos                                 ; st0 = cos(old_st0), st1 = sin(old_st0)

    mov     bx, radius
    fimul   word [bx]                       ;   fimul word [radius] -  cos(angle)*radius
    fiadd   word [bx-2]                     ;   fiadd word [origin] -  origin + cos(angle)*radius
    fistp   word [bp+2]                     ; ---- X-coord -------

    fimul   word [bx]                       ;   fimul   word [radius]
    fiadd   word [bx-2]                     ;   fiadd   word [origin]
    fistp   word [bp+0]                     ;  ---- Y-coord -------

    ;---------------
    pop     di                              ; calculated Y-coord
    imul    di, 320                         ; multiply it by the screen width
    pop     ax                              ; calculated X-coord
    add     di, ax                          ; di = x + (pixels_per_row * y_coord)

    mov     bx, lastIndex
    mov     cx, [bx]                        ; get the mem index for the last pixel
    cmp     di, cx                          ; check if we're indexing the same pixel as last time through the loop
    je      .drawLoop                       ; if so, return to start of loop - no need to delete and redraw the pixel in the same spot.

    xor     al, al                          ; col index 0
    stosb                                   ; draw our purple pixel
    dec     di                              ; stosb advanced di to the next pixel, undo this (stosb followed by dec di is still shorter than mov es:[di], al)
    mov     [bx], di                        ; save the pixel's mem address
    mov     di, cx                          ; restore index of pixel drawn last time through the loop
    mov     al, 0x0f                        ; pal index of white
    stosb                                   ; erase the last pixel

    ; check for a keystroke
    xor     ax, ax
    inc     ah
    int     0x16
    jz      .drawLoop                           ; loop if no keys pressed

.drawingDone:
    ; set text mode 80x25
    mov     ax, 0x3
    int     0x10

    ; program exit
    ret                                     ; Dos pushes a 0000 onto the stack and copies CD 20 to offset 0 of our code-seg
                                            ; before it invokes our program. ret jumps back to that CD 20 (int 0x20) instruction

; Since this is a .COM file, all program, data and stack exist in the same segment. 
; Using .text and .data sections only improves program readability - doing so only has minor effects on the binary produced.
;
; In this case, the assembler word aligns anything in the data section. This may have the effect of adding a padding byte,
; which we really dont need/want here. Data is machine-word aligned to improve the speed of access for the hardware. Machine-word
; is used to refer to the size of an int. In the case of 16 bit code, this will generally be 16 bits, 32 bit code has 32 bit words
; and so on. This code is 16 bit, so things should be aligned to word boundaries for maximum execution speed
;
;[section .data]
desiredCol          db  0x80/4, 0x00, 0x80/4        ; palette registers are only 6 bit.
totalTicksNeeded    dw  1092
origin              dw  100
radius              dw  75

; ticks/second = 18.2
; totalTime = 60 seconds
; totalTicks = 1092 (18.2 * 60)
; degreesPerTick = 360 / 1092 = 0.3296703
; timerTicksAddr = 0040:006C (0000:046C) dword
[section .bss]
initialTicks    resd    1
lastTickValue   resd    1
lastIndex       resw    1

Téléchargeable, version encodée base64

data:application/octet-stream;base64,sBPNELrJA4jxvnYB826wD0loAKAH86pkZqFsBGajgAFkZqFsBGYrBoABZlCJ5dnr2MDaTgDeNNn7u30B3g/eR/7fXgLeD95H/t9eAF9p/0ABWAHHu4gBiw85z3TDMMCqT4k/ic+wD6oxwP7EzRZ0sLgDAM0QwyAAIEQEZABLAA==

Copiez et collez cette adresse dans votre navigateur. Renommez le fichier obtenu golfcrcl.comet exécutez-le dans un environnement DOS, c’est-à-dire DosBox.

enhzflep
la source
C'est bien! Testé et fonctionne parfaitement.
1
Oh snap! Je viens de me rendre compte que vous avez spécifié une couleur à utiliser et je l'ai totalement ignorée. : oops: Je vais arranger ça un peu plus tard. L'indice de couleur devrait être 0x5C, au lieu de 0x09 (en supposant que dosbox définisse la palette correctement, sinon, je vais simplement remapper la couleur 1)
enhzflep
4

Mathematica 208 185 139 octets

Déplace un pixel violet autour d'un tableau utilisé en tant qu'image.

Méthode 1 139 octets

n=900;Dynamic@Refresh[t=DateValue@"Second";ReplacePixelValue[Image@Array[1&,{n,n}],
400{Cos[z=Pi/30t],Sin@z}+450->Purple],UpdateInterval->1]

Méthode 2 154 octets

Trace un pixel sur une trajectoire circulaire en 60 secondes.

Dynamic@Refresh[t=DateValue@"Second";Graphics[{[email protected],Purple, 
Point[{Cos[z=Pi/30t],Sin@z}]},PlotRange->1,ImageSize->Full],UpdateInterval->1]

Méthode 3 193 octets

Cela dessine une horloge, avec des graduations et des étiquettes en blanc, pour laquelle la trotteuse est un pixel.

Dynamic@Refresh[ClockGauge[AbsoluteTime[],TicksStyle->White, 
GaugeMarkers->{None,None,Graphics[{White,Disk[],Purple, 
AbsolutePointSize[.01],Point@{3,0}}]},PlotTheme->"Minimal"],UpdateInterval->1]
DavidC
la source
Je vois, confusion de base LTR ... Mais de toute façon, vous pouvez supprimer l'espace entre 30et t.
LegionMammal978
4

Obj-C ++ / Cocoa, 777 678 668 657 643 628 octets

#include <Cocoa/Cocoa.h>
float r;@implementation V:NSView-(void)drawRect:(NSRect)d{CGContext*c=(CGContext*)NSGraphicsContext.currentContext.graphicsPort;CGContextSetRGBFillColor(c,.5,0,.5,1);CGContextFillRect(c,(CGRect){cos(r)*38+50,sin(r-=pi/300)*38+50,1,1});[NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(x)userInfo:0 repeats:0];}-(void)x{self.needsDisplay=1;}@end
int main(){NSRect b={0,0,100,100};NSWindow*w=[[NSWindow alloc]initWithContentRect:b styleMask:1 backing:2 defer:0];[w orderFront:0];w.backgroundColor=[NSColor whiteColor];w.contentView=[[V alloc]initWithFrame:b];[NSApp run];return 0;}

C'est donc probablement la pire façon de faire quoi que ce soit, mais je me suis dit que j'essaierais.

Peut être compilé sur un Mac (le mien de toute façon) avec g++ -framework Cocoa file.mmet exécuter à partir du terminal ( ctrl-Cpour quitter, car ce n'est pas une application).

capture d'écran

Édition: 99 octets enregistrés: correction main()pour fonctionner sous OS X 10.10 (la première version ne fonctionnait que sous 10.8), saute la traduction / rotation en faveur des calculs trigonométriques simples, arrêtait de se préoccuper du placement de la fenêtre et d'autres petites choses.

Edit: Sauvegardé 10 autres octets: Changé juste orderFrontpour afficher la fenêtre. Ne fait pas réellement la fenêtre avant, cependant, mais n'a pas fait orderFrontAndMakeKey, alors ...

Édition: 11 autres octets enregistrés: sauté NSMakeRectet trouvé un chiffre qui devait simplement disparaître.

Edit: Sauvegardé 14 autres octets: n'a pas eu besoin d'attribuer l' NSTimerinstance à quelque chose, et peut apparemment sauter l'initialisation rà zéro.

Edit: Sauvegardé 15 autres octets: Je ne peux pas arrêter. Envoyer de l'aide.

Flambino
la source
Merci. Obj-C ++ est le grand gagnant du plus long concours de code actuellement en vigueur!
14
+1 pour remporter également le concours le plus animé d'images non animées .
Lynn
4

Javascript / Processingjs, 175 173 156 153 152 octets

var s=256,e,h,m;void setup(){size(s,s);h=s/2;}void draw(){background(-1);m=-millis()*(PI/36000);stroke(h,0,h);e=s/2*0.75;point(h+sin(m)*e,h+cos(m)*e);}

Pour le lancer: visitez http://www.openprocessing.org/sketch/226733 pour le voir en action à l’aide de processing.js, ou téléchargez le traitement 2.0 de processing.org , collez le code dans l’EDI de traitement, sélectionnez le mode Javascript et regardez ça va.

Timothy Groote
la source
Lol, tu as posté Traitement 20 secondes avant moi.
PurkkaKoodari
L'en-tête est-il faux dans cette réponse? Cela n'apparaît pas dans le classement.
1
J'ai raté ça, je suis dessus maintenant.
Timothy Groote
1
il devrait maintenant respecter l'exigence de 60 secondes
Timothy Groote
1
background(-1)est un octet plus court quebackground(255)
Kritixi Lithos
3

Orme , 274 octets

import Color exposing (..)
import Graphics.Collage exposing (..)
import Time exposing (..)
main=Signal.map((\t->collage 200 200 [move(75*cos(-2*pi*t/60),75*sin(-2*pi*t/60))(filled(rgb 128 0 128)(circle 2)),outlined(solid black)(square 200)])<<inSeconds)(every(0.01*second))

Essayez ou modifiez-le dans votre navigateur:

Notez que si nous éliminons les importations et dessinons le contour autour du canevas, il ne reste plus que 149 octets, mais c'est probablement de la triche!

jmite
la source
Oups, réparé! Je suis impatient pendant les essais
jmite
1
C’est très agréable et c’est génial d’obtenir quelque chose dans un langage fonctionnel. Nous avons juste besoin de Haskell et Scala maintenant!
2
@Lembik Je viens d'ajouter une version Haskell
Frerich Raabe
3

C #, 301 octets

using System.Windows.Forms;using System.Drawing;class P:Form{static void Main(){Application.Run(new P());}P(){Paint+=(o,e)=>{var g=e.Graphics;g.Clear(Color.White);g.TranslateTransform(150,150);g.RotateTransform(System.DateTime.Now.Second*6);g.FillRectangle(Brushes.Purple,105,0,1,1);Invalidate();};}}

Dépend des mesures de taille par défaut. La taille et la position peuvent être un peu différentes en fonction d'un certain nombre de facteurs. Peut ou ne peut pas scintiller horriblement; pour résoudre cela, ajoutez ce qui suit:

SetStyle(ControlStyles.OptimizedDoubleBuffer|ControlStyles.AllPaintingInWmPaint,true);
utilisateur12864
la source
3

Lua + Löve, 189 caractères

t=0
m=math
l=love
g=l.graphics
function l.update(d)t=t+d end
function l.draw()a=t*m.pi/30
g.setBackgroundColor(255,255,255)g.setColor(127,0,127)g.point(400+225*m.cos(a),300+225*m.sin(a))end

love.update()reçoit en paramètre le temps écoulé depuis la trame précédente. Dessine dans la fenêtre par défaut 800 x 600 à des coordonnées fixes, car la fenêtre n’est quand même pas redimensionnable.

homme au travail
la source
La première lua répond! Merci.
3

Python 2 + Pygame, 221 198 193

exec'from %s import*;'*3%('math','pygame','time')
_,p,D=[255],128,display
S=D.set_mode(_*2)
while 1:S.fill(_*3);S.set_at(map(lambda f:int(p+f(pi*(time()%60)/30)*96),(cos,sin)),(p,0,p));D.flip()
dieter
la source
1
Pythontastiquement génial!
Maintenant, nous avons juste besoin d’une solution python + tortue.
3

C (utilisant SDL1.2), 237 233

#include <SDL.h>
#define P(f)(int)(128+96.0*f(3.14*((int)(.001*SDL_GetTicks())%60)/30))
main(){SDL_Surface*s=SDL_SetVideoMode(255,255,32,0);while(1){int*p=s->pixels;memset(p,255,260100);p[P(cos)+s->w*P(sin)]=0x800080FF;SDL_Flip(s);}}

Compile et exécute en utilisant gcc -I/usr/include/SDL snippet.c -lSDL -lm && ./a.out

dieter
la source
Génialement génial! Je pensais que personne ne le ferait.
2

ActionScript 2.0, 151 octets

Malheureusement, Adobe Flash n'est pas un logiciel gratuit et Google informe que cela ne fonctionne pas sous Linux sans VM ni Wine (et même avec Wine, cela ne fonctionne que dans la plupart des cas ). Pourtant, je voulais voir comment cela se passerait bien sur cette tâche. Assez bien, il s'avère.

createEmptyMovieClip("p",0)
p._x=p._y=r=200
p.beginFill(0x800080)
p.moveTo(r,0)
p.lineTo(r-1,0)
p.lineTo(r,1)
onEnterFrame=function(){p._rotation+=.25}

L'idée de base: créez un nouvel objet de clip, positionnez-le sur (200, 200), puis tracez un point 2 à l'intérieur de 200 pixels plus à droite. Désormais, le clip a une largeur de 200 pixels et une hauteur de 1 pixel. Le point de pivot est la coordonnée d'origine à laquelle nous avons commencé. Ainsi, lorsque nous modifions la _rotationpropriété, le point se déplace en cercle autour du point (200, 200). Commodément, _rotationest en degrés; 0,25 degré / image * 24 images / seconde * 60 secondes / minute = 360 degrés / minute.

Pour exécuter à partir de zéro si vous avez Flash, créez un nouveau document Flash 1 , ouvrez le panneau Actions et collez le code ci-dessus. Aucune autre personnalisation n'est requise, en supposant que l'arrière-plan blanc, le canevas 550x400 et 24 ips soient définis par défaut. Appuyez sur Ctrl-Entrée et regardez-le aller.

Si vous ne possédez pas Flash, vous pouvez toujours afficher les résultats avec le logiciel gratuit Flash Player, qui devrait être fourni avec la plupart des navigateurs modernes. Téléchargez le fichier SWF ici . Si vous ne pouvez pas le lire, essayez également de télécharger cette page HTML et de l’ouvrir en plaçant le fichier SWF dans le même répertoire.

1 Testé sur Adobe Flash CS4 Professional, en choisissant "Fichier Flash (ActionScript 2.0)" lorsqu'on lui a demandé quel type de nouveau fichier créer.

2 En fait, il s’agit d’un petit triangle que vous verrez si vous faites un zoom avant suffisant. C’était la façon la plus amusante de dessiner un point.

DLosc
la source
2

JavaScript avec jQuery, 205 octets

y=75;with($('<canvas/>').appendTo(document.body)[0].getContext('2d')){fillStyle='#800080';translate(y,y);(f=function(){clearRect(-y,-y,y*2,y*2);fillRect(0,56,1,1);rotate(Math.PI/300);setTimeout(f,100)})()}

jsfiddle , extrait ci-dessous

Ce n'est peut-être pas tout à fait dans le livre. La taille par défaut d'un canevas (au moins dans Chrome) est 300x150. J'ai donc centré le cercle sur 75x75. Je pouvais le centrer sur 150x75 et faire en sorte que son rayon atteigne 113px (~ 75% de la largeur), mais ce serait parfois en dehors de la toile. J'ai donc choisi ~ 75% de la hauteur.

Mais ce n'est pas particulièrement court, alors

Flambino
la source
2

Blitz 2D / 3D , 126 octets

Graphics 180,180
ClsColor 255,255,255
Color 128,0,128
While 1
Cls
ang#=ang+3
Plot 90+67*Cos(ang),90+67*Sin(ang)
Delay 500
Wend

Malheureusement, cette langue n'est prise en charge que sous Windows (bien qu'elle puisse s'exécuter dans Wine).

El'endia Starman
la source
2

Javascript ES6, 202 octets

a=0;with((D=document).body.appendChild(D.createElement`canvas`).getContext`2d`)with(Math)setInterval((f=t=>t(a+=PI/6e3)*60+75)=>fillRect(f(cos,clearRect(0,0,150,150),fillStyle=`#800080`),f(sin),1,1),10)

Testé dans Firefox 41.

Comme pour les autres réponses Javascript (presque) pures, le cercle est centré à 75x75 puisque la taille par défaut des éléments de la toile est de 300x150, comme défini par les spécifications HTML.

Dendrobium
la source
2

Matlab, 141 136

Je soumets simplement ceci pour que vous, Lembik, ayez une liste complète.

v=-100:100;
[y,x,m]=ndgrid(v,v,0);
n=75;
while 1;
    pause(1);
    c=m;
    c(x+i*y==round(n))=1;
    imshow(c);
    colormap([1,1,1;.5,0,.5]);
    n=n*exp(pi*i/30);
end

Ancienne version:

v=-100:100;
[x,y,m]=ndgrid(v,v,0);
while 1;
c=m;
c(x+i*y==round(75*(-1)^(s/30)))=1;
imshow(c);
colormap([1,1,1;.5,0,.5]);
s=mod(s-1,60);
pause(1);
end
flawr
la source