Pojedynczy piksel poruszający się po okrągłej ścieżce


45

Jest to graficzne wyzwanie wyjściowe, w którym zadaniem jest podanie najkrótszego kodu dla każdego języka.

Zadanie

Twój kod powinien wykreślić pojedynczy purpurowy piksel (wartość szesnastkowa # 800080 lub rgb (128, 0, 128)), poruszając się po okręgu wokół wskazówek zegara. Pełna podróż dookoła koła powinna zająć dokładnie 60 sekund i powinna trwać w nieskończoność. Nic innego nie powinno być wyświetlane na ekranie ani w oknie oprócz piksela. Szerokość koła powinna wynosić 0,75 (odpowiednio zaokrąglając) szerokość ekranu lub okna, a tło powinno być białe. Aby zapobiec niemądrym rozwiązaniom, ekran lub okno powinny mieć szerokość co najmniej 100 pikseli.

Twój kod powinien być pełnym programem .

Języki i biblioteki

Możesz użyć dowolnego języka lub biblioteki. Chciałbym jednak móc przetestować Twój kod, jeśli to możliwe, więc jeśli możesz podać jasne instrukcje dotyczące uruchamiania go w Ubuntu, byłoby to bardzo mile widziane.

Brakuje dwudziestu najlepszych języków. Pomoc potrzebna.

W poniższych dwudziestu najpopularniejszych językach programowania w ogóle brakuje jakiegokolwiek rozwiązania.

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

Katalog

Fragment kodu na dole tego postu generuje katalog na podstawie odpowiedzi a) jako listy najkrótszych rozwiązań według języka oraz b) jako ogólnej tabeli wyników.

Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:

## Language Name, N bytes

gdzie Njest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:

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

Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:

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

Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:

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


1
jaki promień powinien mieć okrąg?
Timothy Groote

19
Dlaczego piksel powinien być fioletowy? Zakładam, że niektóre języki, takie jak TI-Basic, nie mają możliwości kolorowania, co oznacza, że ​​nie można ich użyć do wyzwania z dość
aberracyjnego

1
@Fatalize to nie znaczy, że nie możesz wprowadzić koloru do programu w jakiś sprytny, kreatywny sposób, aby zaoszczędzić bajty.
Timothy Groote

3
@TimothyGroote TI-BASIC ma głównie tylko jeden kolor: czarny. Wszystko inne jest poza pikselem. Istnieją kalkulatory C (SE), które mają kolory, ale nie każdy je ma.
Conor O'Brien

10
Jestem pewien, że umieszczenie fioletowego celofanu na ekranie nie zwiększy rozmiaru kodu w bajtach. mam na myśli, że zadziałało vectrex;)
Timothy Groote

Odpowiedzi:


23

Przetwarzanie , 101 97 96 bajtów

4 bajty dzięki Flambino.

1 bajt dzięki Kritixi Lithos.

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

Spowoduje to utworzenie domyślnego okna 100 na 100 pikseli z wymaganą animacją.

okno wyjściowe

Uwaga: ten obraz nie jest plikiem GIF. Nie gap się na to przez minutę.


2
Czy to implementuje zasadę 60 sekund?

2
@Lembik Tak. Domyślna liczba klatek na sekundę to 60 fps , a ja zwiększam kąt w π/1800radianach naraz. (To było π/360010 sekund temu z powodu
pierdzenia

5
@ Pietu1998 Ten fart mózgowy był spowodowany tym, że pi jest źle
Cruncher

2
@Cruncher muszę kochać vi hart!
Tim

17
Hej, twój GIF nie działa, patrzyłem na niego przez minutę, ale nic się nie stało
Beta Decay

16

QB64, 79 bajtów

QB64 to emulator QBasic, który dodaje kilka fajnych funkcji. Ten program używa jednego ( CLS,15), który nie jest obsługiwany przez waniliowy QBasic.

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

To jest bardzo głośne. Używa PLAYpolecenia, aby zatrzymać wykonanie na krótki czas przed wyczyszczeniem ekranu; w przeciwnym razie piksel będzie migotał i stał się niewidoczny.

Pobierz QB64 , załaduj ten plik, kliknij, Runa następnie Start.

Oto jest w akcji:

program

Wziąłem kilka sztuczek ( SCREEN 7zamiast SCREEN 13i PSETzamiast POKE) z odpowiedzi @ DLosc, więc należy się uznanie. Tak jak w jego odpowiedzi, moja magenta jest faktycznie #8B008B, co zostało uznane przez OP za dopuszczalne.

(Stała 9.55jest przybliżeniem 30/π = 9.54929658551. Czy jest wystarczająco blisko?)


Ha! Nigdy nie myślałem o użyciu PLAYz opóźnieniem. Mógłbym przysiąc, że był kod do odpoczynku, ale nie widzę go teraz w pliku pomocy. Rozważałem użycie (funkcji) TIMERjako parametru, ale nigdy nie próbowałem tego, aby sprawdzić, czy jest krótszy. Sława!
DLosc

4
Podziękować! Bezwstydnie podniosłem się PSETod ciebie, więc chwała z powrotem :) Wygląda na to, że odpoczynek n0jest dłuższy niż c. Podoba mi się też trochę gięcia reguł: OP powiedział, że nic więcej nie może być pokazane w oknie, ale nigdy nie powiedział, że mój program nie może głośno przejść BEEP BEEP BEEP BEEP .
Lynn

1
Nie mam nic przeciwko sygnałom dźwiękowym, ale nie widzę piksela poruszającego się po okręgu, gdy próbuję w systemie Linux.

1
Tutaj działa na moim komputerze, co powinno być wystarczającym dowodem.
Lynn

12
Przez chwilę wpatrywałem się w obraz, ponieważ powiedziałeś „tutaj jest w akcji ”.
mbomb007,

14

Java, 449 443 439 bajtów

Ponieważ zawsze miałem głupie pomysły. Jak gra w golfa w Javie;).

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();}}

Edycja: Dzięki za @Ypnypn za grę w golfa 7 bajtów!

Edit2: Dzięki za @Franz D. za zapisanie 3 bajtów!


7
Java wygrywa jak dotąd najdłuższy konkurs na najkrótszy kod :)

1
- Nie musisz inicjować zmiennych składowych na zero, więc możesz zapisać dwa bajty (~ 0,45%), konwertując „c = 0” na „c”.
Franz D.

1
I możesz zapisać jeszcze jeden bajt, inicjując kolor szesnastkowy, tj. Nowy Kolor (0x800080).
Franz D.

1
@FranzD. Jeszcze lepiej - wystarczy użyć liczby dziesiętnej 8388736.
Ypnypn

1
Pozbądź się JFrame, użyj Frame, pozwala usunąć import javax.
Magic Octopus Urn

14

Mathematica, 102 101 94 bajty

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

Tworzy biały okrąg, który jest ukryty i umieszcza punkt podążający za jego krawędzią od 0 do 2π. DefaultDurationOpcja Mathematiki pozwól mi ustawić, aby wypełniała pętlę co 60 sekund.

Oto przyspieszona wersja wyjścia:

EDYCJA: Zmień, Circleaby Diskzapisać 2 znaki, dodano znak ujemny, taby poruszał się zgodnie z ruchem wskazówek zegara.

EDYCJA: Zaoszczędzono 7 bajtów za pomocą ~operatora (dzięki Mauris).


14
Kolejny dowód na to, że Mathematica jest tylko językiem programowania, w którym piszesz niejasne angielskie słowa, które w pewnym sensie oznaczają, co chcesz, a następnie dodajesz znaki interpunkcyjne. (I usłyszeć można używać a~f~bzamiast f[a,b], nie które sprawiają, że Rotatekrótsza?)
Lynn

1
Możesz także użyć notacji przedrostkowej dla Point@{0,1}i nie sądzę, że potrzebujesz tej listy Purple,Point....
Martin Ender

1
@Mauris. Dla niedoświadczonego oka Mathematica może rzeczywiście wyglądać jak niewyraźne angielskie słowa i interpunkcja. W rzeczywistości są to nazwy określonych, dobrze zdefiniowanych funkcji, ustawień i operatorów. Prawdopodobieństwo, że osoba niebędąca programistą może wydzielić wykonalny kod, to Zilch.
DavidC

3
@David: Haha, oczywiście, że jestem świadomy - tylko żartowałem :)
Lynn

@Mauris, oszukałeś mnie!
DavidC

14

HTML, 235 290 295 354 347 bajtów

<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

Zapisz jako .htmlplik i otwórz w przeglądarce, która nie potrzebuje prefiksów dostawcy, takich jak Chrome lub Firefox. Lub spróbuj tego skrzypce .


To nowa wersja, która jest o wiele krótsza niż moja pierwsza próba, którą napisałem 5 minut przed spotkaniem. Nowy rozmiar płótna jest kwadratem opartym na wysokości rzutni. Działa to całkiem dobrze i nie jest ograniczone do określonej określonej wysokości. Jestem bardzo dokładny co do ustawień w wyzwaniu (75% rozmiaru jego rodzica, fioletowy i 1px). Dlatego potrzebuję i nie mogę odrzucić ani uprościć następujących zasad:

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

Bez golfa

To jest wersja bez golfa z czystym znacznikiem:

<!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>

Edycje

  • Dodano 7 bajtów . Myślałem, że nikt nie zauważy, że animacja jest domyślnie złagodzona. ;) Ustawiłem to linearteraz.
  • Zaoszczędzono 59 bajtów , wyrzucając wszystko, co przerwie automatycznie przeglądarka.
  • Zapisano 3 bajty , usuwając końcowe )}}. Dzięki szczoteczce do zębów .
  • Zapisano 2 bajty , używając 12%zamiast tego 12pxtej samej wartości odpowiadającej wielkości elementu nadrzędnego.
  • Zaoszczędzono 55 bajtów z powodu ogromnego refaktoryzacji, wzięto również pod uwagę wiele komentarzy. Wielkie dzięki za wszystkie wkłady.

1
Chciałem tylko skomentować post, chciałbym zobaczyć czyste rozwiązanie HTML / CSS (ty za przesłanie jednego)
dwana

1
Używając skrzypce prędkość poruszającego się piksela jest bardzo nierównomierna. Prawie się zatrzymuje, gdy piksel jest po lewej stronie. Jakieś pomysły dlaczego?

1
@insertusernamehere :) Wydaje mi się, że wersja bez golfa również wymaga aktualizacji.

5
Powinieneś wybrać najmniejszy działający kod, niezależnie od jego ważności. Rzeczy takie jak zanieczyszczenie globalnej przestrzeni nazw są na równi z polem golfowym.
John Dvorak

2
Możesz upuścić )}}od końca (parser CSS automatycznie zakończy bloki)
Szczoteczka do zębów

14

TI-BASIC, 44 bajty

Dla kalkulatorów TI-84 + CSE / CE, które obsługują niektóre ograniczone kolorowe grafiki w języku BASIC.

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

Kolor tutaj to magenta lub kolor 13 (można również użyć MAGENTAtokena).

Używam randzamiast 1warunku nieskończonej pętli, aby zapewnić odrobinę opóźnienia (~ 15 ms) między momentem wyświetlenia piksela a jego ponownym wyłączeniem.

Przed uruchomieniem tego programu ustaw kalkulator w tryb radian; Nie liczę tego w rozmiarze, ponieważ jest to stan domyślny. Ustaw także Ansna 0, wpisując 0 przed programem; jest to również ustawienie domyślne.

Dzięki @quartata za testowanie tego programu (nie posiadam kalkulatora kolorów).


Naiwny pomysł: czy możesz wywołać sam program zamiast używać pętli while i czy byłby to krótszy?
Lynn

@Mauris pętla while ma 3 tokeny, a nazwa programu jest zwykle dłuższa
TheDoctor

1
@Mauris Pętla While ma w rzeczywistości 4 bajty i możliwe jest powtórzenie w 3, ale stos wyczerpuje się bardzo szybko, po mniej niż 300 wywołaniach.
lirtosiast

@Lembik Ponieważ nie masz nic przeciwko [ codegolf.stackexchange.com/a/62203/39328] , nie zmienię tego na płynniejszy.
lirtosiast

13

Java, 339 308 289 287 bajtów

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();}}

Dzięki @Peter Lenkefi, którego świetne rozwiązanie dało mi początek, i którego bezwstydnie skopiowałem!

Główna oszczędność wynikała z przejścia na czystą AWT i renderowania bezpośrednio w ramce - bez potrzeby JPanel (lub Canvas). Zrobiłem też licznik zmienną całkowitą, aktualizowaną przez prosty przyrost, i zapisałem kilka bajtów, zmieniając stałe, aby móc usunąć cyfrę tu i tam.

EDYCJA: Podziękowania dla @Peter Lenkefi i @tobii za sugestie w komentarzach. Pokonanie HTML byłoby fajne - czy ktoś wie, jak niezawodnie wstrzymywać wykonywanie w Javie bez korzystania z funkcji sleep () i wychwytywania wyjątków?

EDYCJA 2: JAVA BEATS HTML (obecnie 290 bajtów!): D Czas jest teraz zależny od maszyny, ale ~ 60 sekund dla pełnego koła na mojej maszynie, co jest zgodne z @Lembik. Jeszcze raz dziękuję @PeterLenkefi za jego sugestię - moja odpowiedź to ponad połowa jego :)

EDYCJA 3: @Ajay zasugerował usunięcie „re” z „odmalowania”. Dwa bajty mniej. Dojeżdżamy tam :)


1
Musimy pobrać go pod HTML (więc <290 teraz)
Peter Lenkefi

1
@PeterLenkefi: Niestety nie mogę uratować aparatów ortodontycznych; rzutowanie wyniku sin / cos bezpośrednio przerywa obliczenia. Twoja odmalowana farba wewnątrz () jest niesamowicie brudna :)
Franz D.

1
@Troyseph Miałem na myśli golfa;) Nie używam Java do niczego.
Peter Lenkefi

1
Używanie int c,ii pomijanie intw for(int i=..powinno zaoszczędzić trochę więcej.
Marco13

1
Nie trzeba nawet deklarację klasy dla F, można po prostu rozszerzyć ramy klasy inline: new Frame(){...}.
Magic Octopus Urn

9

Haskell, 143 136 bajtów

To używa pakietu połysku :

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

Najładniejsza wersja to

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

Możesz usunąć trochę białych znaków.
prawej

@Elyse Rzeczywiście, dzięki. Usunąłem również dwa niepotrzebne .0.
Frerich Raabe

8

HTML (CSS?), 167 bajtów

Zainspirowany odpowiedzią 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

Nie golfowany:

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);
    }
}


Po prostu informacja FYI, HTML + CSSzwykle nie jest uważana za język programowania, jednak zależy to od PO.
GamrCorps

1
W przeglądarce Firefox 41.0.2 nic nie robi.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨d̷̰̀ĥ̷̳

1
Właśnie przetestowany na Firefox 41.0.2, Win 10. Działa dobrze dla mnie.
Lachlan Arthur

1
Działa dla mnie w 41.0.2 w Ubuntu.

1
+1 Dobre myślenie, aby ożywić bodysamą siebie. :)
inserttusernamehere

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

Testowany na QB64 , który mówi, że ma wersję Linuksa (chociaż próbowałem go tylko w systemie Windows).

  • SCREEN 7 ustawia tryb grafiki.
  • COLOR 5,15 ustawia ciemną purpurę jako kolor pierwszego planu i jasną biel jako kolor tła.
  • DO ... LOOPjest nieskończoną pętlą. Zwykle widzisz to jako DO WHILE ... LOOP(lub możesz LOOP WHILEzamiast tego użyć lub użyć UNTILdo zanegowanego warunku), ale możesz również pominąć warunek, w którym to przypadku zapętla się na zawsze.
  • TIMER to liczba sekund od północy, jako wartość zmiennoprzecinkowa.
  • CLS = Ekran CLear.
  • PSET Domyślnie ustawia punkt na kolor, kolor pierwszego planu.
  • izaczyna się od zera i liczy się za każdym razem przez pi / 300 przez pętlę, kończąc tym samym pełne koło po 600 powtórzeniach. Obliczamy pi jako 4 * arctan (1).
  • Ostatnia linia czeka, aż upłynie 0,1 sekundy. Idiomem, którego nauczyłem się z moich książek QBasic, był t# = TIMER: WHILE TIMER < t# + 0.1: WEND. Ale nie potrzebujemy liczb podwójnej precyzji (oznaczonych #) dla różnicy 0,1 sekundy i okazuje się, że IF cond THEN [GOTO] lineskładnia jest o 1 znak krótsza niż WHILE ... WENDpętla.

Pętla powtarza się 600 razy w ciągu 60 sekund, tworząc pełne koło.

Ostrzeżenia

  • Kolor 5, ciemna magenta, jest #8B008Bzamiast żądanego #800080(usuwany za pomocą OP).
  • Tryb ekranu 7 ma wymiary 320 x 200, a zatem okrąg ma średnicę 198, która nie jest> = 0,75 szerokości, ale wynosi> = 0,75 wysokości (również usuwane za pomocą OP).
  • Jeśli uruchomisz to na DOS QBasic, będzie pełnoekranowy, więc „piksel” nie jest tak naprawdę pojedynczym pikselem na monitorze (chyba że masz monitor 320x200). Ale powinno być wystarczająco blisko. QB64 działa w oknie, które używa dokładnych wymiarów, a zatem piksel jest dosłowny.
  • Co najmniej w QB64, pełna rewolucja zajmuje więcej niż 65 sekund. Naprawdę nie wiem dlaczego; muszą to być albo błędy zaokrąglania, albo narzut w pętli, chociaż próbowałem złagodzić oba bez powodzenia. Teoretycznie kod powinien działać poprawnie w obecnej postaci. W praktyce można modyfikować wielkość, o którą izwiększa się, dopóki obroty nie zbliży się do 60 sekund. (Wypróbuj mianownik 69 lub 68.)
  • Żadnego ładnego zdjęcia tutaj. :( Jakość LICEcap nie była wystarczająco dobra, aby dokładnie uchwycić pojedynczy piksel.

Ten kod działa idealnie dla mnie w systemie Linux. Dziękuję Ci.

To faktycznie działa w QBasic 4.5, ale tło nie jest tak naprawdę białe :). Oto GIF jego kompilacji i uruchamiania: codegolf.square7.ch/altqb.gif
mınxomaτ

@ mınxomaτ Dziwne, kolor 15 powinien dawać biały lub jasnoszary zgodnie ze wszystkim, co myślałem, że wiedziałem ... że wygląda jak jasnobłękitny (kolor 11). Co robi SCREEN 8zamiast 7?
DLosc

To samo zielonkawe tło. Ale masz rację, zgodnie ze specyfikacją powinien być biały. Próbowałem także kolor 7 (szary) i wyszedł jako szary. Więc twoje rozwiązanie jest absolutnie w porządku, ale coś jest nie tak z moim DOS-em.
mınxomaτ

7

skrypt mIRC, 184 bajty

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
}

Jest to zoptymalizowane dla mIRC w Wine. Uruchom mIRC, naciśnij, Alt + Ra następnie wklej to, zamknij edytor i uruchom go/g

Zapowiedź

Czas w gifie może być wyłączony.


To jest dla mnie nowy! Byłoby wspaniale, gdybyś mógł zrobić animowany gif.

To był jeden z pierwszych języków, których użyłem / zainteresowałem się kodowaniem!
Varis

6

R, 170 bajtów

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()}

To zależy od pakietu animation. A oto gif, aby pokazać, że działa:

W oknie

Niepoprawne zapisywanie rozwiązania do gif (139 bajtów):

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")}})

Ten wymaga zainstalowania ImageMagick. Wynik zostanie zapisany do gif.

! [W kółko


Jest to jednak świetne ... wyzwanie wymaga kodu do napisania na ekranie / oknie.

Och, nie zrozumiałem tego.
plannapus

2
Oto jest w oknie.
plannapus

6

Rubin z butami, 159 bajtów

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}}

Piksel jest tak naprawdę wierzchołkiem wskazówki sekundowej zegara analogowego. Więc ten jest absolutnie precyzyjny.

Rubin z butami, 134 bajty

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}}

Jest to alternatywa oparta na liczbie klatek na sekundę, zainspirowana innymi odpowiedziami. Chociaż dokumentacja mówi, że domyślna liczba klatek na sekundę to 10, testy praktyczne pokazują, że to faktycznie 12.

Oba rozwiązania przyjmują „szerokość koła powinna wynosić 0,75 (odpowiednio zaokrąglając) szerokość ekranu lub okna” dosłownie: oblicz na podstawie szerokości okna, aby piksel czasami mógł opuścić dolną krawędź nie kwadratowego okna. Nie jestem pewien, jak ma być traktowany taki przypadek. (Użyj minimalnej szerokości i wysokości? Chodzić po owalnej ścieżce?) Okno zaczyna się od domyślnego rozmiaru 600 x 500 i można zmienić jego rozmiar.


Bardzo miło zobaczyć rozwiązanie Ruby! Teraz potrzebujemy Pythona, Perla, ...

5

D, 286 280 bajtów

(392, jeśli napisane normalnie)

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;});}

Lub sposób, w jaki to napisałem bez gry w golfa:

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;
        });
}

Zależy od simpledisplay.d i color.d znajdujących się tutaj: https://github.com/adamdruppe/arsd

Wystarczy pobrać te dwa pojedyncze pliki i umieścić je w tym samym katalogu, co powyższy kod, a następnie: dmd yourfile.d simpledisplay.d color.daby skompilować, a następnie po prostu uruchomić.

Moja mała biblioteka została napisana z myślą o szybkich animacjach, takich jak ta, dość prosta, dzięki czemu dobrze się spisuje! Niestety, trochę lubię długie nazwy identyfikatorów i nie dostarczyłem Pointkonstruktora, który bierze floattak, że dodaje rzutowanie 18 bajtów i ... idk kilkadziesiąt wypowiada moje nazwy metod.


1
Pierwszym argumentem dla eventLoop btw jest licznik milisekund. Jeśli jest niezerowy, automatycznie tworzy dla ciebie licznik czasu i wywołuje funkcję z zerowymi argumentami podanymi w tym przedziale czasowym. (eventLoop może również przyjmować funkcje z argumentami MouseEvent lub KeyEvent do obsługi danych wejściowych użytkownika). Tak więc interwał 50 milisekund = 20 klatek na sekundę, więc 20 * 60 = cykl w 60 sekund.
Adam D. Ruppe

Myślę, że sposób, w jaki napisałeś odpowiedź, kod tabeli liderów podnosi 392 zamiast 280.

5

C #, 379 365 bajtów

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);}}}

Zależy System.Windows.Formsi System.Drawinguruchomić. Dane wyjściowe znajdują się w oknie 1000 x 1000.


Można zapisać niektóre bajty przy użyciuvar
pinkfloydx33

Zapisz kolejny bajt, używając importu statycznego do matematyki systemowej
pinkfloydx33

możesz zadeklarować swój kod w przestrzeni nazw Systemu i usunąć wszystkie inne odniesienia do systemu i zapisać, myślę, że 10 bajtów
Phaeze

5

SVG, 177 bajtów

<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

Nieprawidłowy znacznik od piekła do śniadania, ale działa (przynajmniej w Chrome). Podobnie jak obszar roboczy HTML5, domyślny rozmiar pliku SVG wydaje się wynosić 300 x 150, więc to założenie.

Edycja: Ups, przypadkowo odszedłem na czas 6 zamiast 60. Naprawiłem to, ale również stwierdziłem, że 0.5działa tak samo .5, więc nie ma zmiany liczby bajtów.


5

X86 Kod maszynowy - 150 146 149 133 127 127 bajtów

Wersja golfowa:

        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”, wersja źródłowa:

; 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

Do pobrania, wersja zakodowana w standardzie base64

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

Skopiuj i wklej ten adres do przeglądarki. Zmień nazwę pliku wynikowego golfcrcl.comi uruchom w środowisku DOS, tj. DosBox.


To jest świetne! Testowany i działa idealnie.

1
O rany! Właśnie zdałem sobie sprawę, że określiłeś kolor do użycia i całkowicie go zignorowałem. : oops: Naprawię to trochę później. Indeks kolorów powinien wynosić 0x5C zamiast 0x09 (przy założeniu, że dosbox ustawia paletę poprawnie, w przeciwnym razie po prostu
zmienię

4

Mathematica 208 185 139 bajtów

Przesuwa purpurowy piksel wokół tablicy używanej jako obraz.

Metoda 1 139 bajtów

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

Metoda 2 154 bajtów

Rysuje piksel wzdłuż okrągłej ścieżki w 60 sekund.

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

Metoda 3 193 bajtów

To rysuje zegar z paskami i etykietami w kolorze białym, dla których sekundnik to piksel.

Dynamic@Refresh[ClockGauge[AbsoluteTime[],TicksStyle->White, 
GaugeMarkers->{None,None,Graphics[{White,Disk[],Purple, 
AbsolutePointSize[.01],Point@{3,0}}]},PlotTheme->"Minimal"],UpdateInterval->1]

Rozumiem, podstawowe zamieszanie w LTR ... Ale w każdym razie możesz usunąć odstęp między 30i t.
LegionMammal978

4

Obj-C ++ / Cocoa, 777 678 668 657 643 628 bajtów

#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;}

Jest to prawdopodobnie najgorszy sposób na zrobienie czegokolwiek, ale pomyślałem, że spróbuję.

Można go skompilować na komputerze Mac (w każdym razie moim) g++ -framework Cocoa file.mmi uruchomić z terminala ( ctrl-Caby wyjść, ponieważ nie jest to aplikacja).

zrzut ekranu

Edycja: Zapisano 99 bajtów: Naprawiono main()działanie w systemie OS X 10.10 (1. wersja działała tylko w wersji 10.8), pomijano translację / obrót na korzyść prostych obliczeń wyzwalaczy, przestał męczyć się z rozmieszczeniem okien i innymi drobnymi sprawami.

Edycja: Zapisano kolejne 10 bajtów: Zmieniono orderFrontna wyświetlanie tylko okna. Ale orderFrontAndMakeKeytak naprawdę nie jest to okno frontowe, ale też nie , więc ...

Edycja: Zapisano kolejne 11 bajtów: Pominięto NSMakeRecti znalazłem cyfrę, która właśnie musiała zniknąć.

Edycja: Zapisano kolejne 14 bajtów: Nie musiałem przypisywać NSTimerinstancji do niczego i najwyraźniej może pominąć inicjalizację rna zero.

Edycja: Zapisałem kolejne 15 bajtów: Nie mogę przestać. Wyślij pomoc.


Dziękuję Ci. Obj-C ++ jest wyraźnym zwycięzcą w najdłuższym konkursie na najkrótszy kod!

14
+1 za wygraną w najbardziej animowanym konkursie nie-animowanych obrazów .
Lynn

4

JavaScript / Processingjs, 175 173 156 153 152 bajtów

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);}

Aby uruchomić: odwiedź stronę http://www.openprocessing.org/sketch/226733, aby zobaczyć, jak działa przy użyciu processing.js, lub pobierz przetwarzanie 2.0 z processing.org , wklej kod do IDE przetwarzania, wybierz tryb Javascript i obejrzyj to idzie.


Lol, wysłałeś Przetwarzanie 20 sekund przede mną.
PurkkaKoodari

Czy nagłówek jest nieprawidłowy w tej odpowiedzi? Nie pojawia się w tabeli wyników.

1
Tęskniłem za tym, jestem teraz na tym.
Timothy Groote

1
powinien teraz spełniać wymagania 60 sekund
Timothy Groote

1
background(-1)jest o jeden bajt krótszy niżbackground(255)
Kritixi Lithos

3

Wiąz , 274 bajty

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))

Spróbuj lub edytuj w przeglądarce:

Zauważ, że jeśli pozbyjemy się importu i narysujemy kontur na płótnie, mamy do 149 bajtów, ale to chyba oszustwo!


Ups, naprawione! Niecierpliwiłem się podczas testów
jmite

1
To bardzo miłe i świetnie jest dostać coś w funkcjonalnym języku. Teraz potrzebujemy tylko Haskella i Scali!

2
@Lembik Właśnie dodałem wersję Haskell
Frerich Raabe

3

C #, 301 bajtów

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();};}}

Zależy od domyślnych wskaźników wielkości; rozmiar i pozycja mogą być nieco wyłączone, w zależności od wielu czynników. Może migotać okropnie; aby rozwiązać ten problem, dodaj:

SetStyle(ControlStyles.OptimizedDoubleBuffer|ControlStyles.AllPaintingInWmPaint,true);

3

Lua + Löve, 189 znaków

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()odbiera jako parametr czas, który upłynął od poprzedniej ramki. Rysuje w domyślnym oknie 800 x 600 przy ustalonych współrzędnych, ponieważ i tak nie można zmienić rozmiaru okna.


Pierwsza odpowiedź lua! Dziękuję Ci.

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()

1
Pythontastycznie niesamowite!

Teraz potrzebujemy również rozwiązania python + żółw.

3

C (przy użyciu SDL 1.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);}}

Kompiluje i uruchamia za pomocą gcc -I/usr/include/SDL snippet.c -lSDL -lm && ./a.out


Wspaniale świetnie! Myślałem, że nikt tego nie zrobi.

2

ActionScript 2.0, 151 bajtów

Niestety, Adobe Flash nie jest darmowy, a Google informuje, że nie działa w systemie Linux bez maszyny wirtualnej lub Wine (a nawet z Wine, to działa głównie ). Chciałem jednak zobaczyć, jak dobrze poradzi sobie z tym zadaniem. Okazuje się, że całkiem nieźle.

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}

Podstawowa idea: utwórz nowy obiekt klipu filmowego, ustaw go w pozycji (200, 200), a następnie narysuj w nim kropkę 2 200 pikseli dalej w prawo. Teraz klip filmowy ma szerokość 200 pikseli i wysokość 1 piksela. Punkt obrotu to oryginalne współrzędne, od których zaczęliśmy, więc po zmodyfikowaniu _rotationwłaściwości kropka porusza się w kółko wokół punktu (200, 200). Dogodnie _rotationjest w stopniach; 0,25 stopnia / ramkę * 24 klatki / sekundę * 60 sekund / minutę = 360 stopni / minutę.

Aby uruchomić od zera, jeśli masz Flash, utwórz nowy dokument Flash 1 , otwórz panel Operacje i wklej powyższy kod. Nie jest wymagana dalsza personalizacja, zakładając domyślne białe tło, płótno 550x400 i 24 fps. Naciśnij Ctrl-Enter i patrz, jak to działa.

Jeśli nie masz samego Flasha, nadal możesz przeglądać wyniki za pomocą bezpłatnego Flash Playera, który powinien być dostarczany z większością nowoczesnych przeglądarek. Pobierz plik SWF tutaj . Jeśli nie możesz go odtworzyć, spróbuj pobrać tę stronę HTML i otworzyć ją, z plikiem SWF w tym samym katalogu.

1 Przetestowano na Adobe Flash CS4 Professional, wybierając „Plik Flash (ActionScript 2.0)”, gdy zostaniesz zapytany, jaki typ nowego pliku chcesz utworzyć.

2 Właściwie mały trójkąt, bo zobaczysz, czy wystarczająco go powiększysz. To był najbardziej golfowy sposób, w jaki udało mi się narysować kropkę.


2

JavaScript w / jQuery, 205 bajtów

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 , fragment poniżej

To może nie do końca książka. Domyślny rozmiar płótna (przynajmniej w Chrome) to 300 x 150, więc wyśrodkowałem koło na 75 x 75. Mógłbym wyśrodkować go na 150x75 i uzyskać jego promień 113px (~ 75% szerokości), ale przez jakiś czas będzie poza płótnem, więc zamiast tego wybrałem ~ 75% wysokości.

Ale i tak nie jest szczególnie krótki, więc…


2

Blitz 2D / 3D , 126 bajtów

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

Niestety ten język jest obsługiwany tylko w systemie Windows (choć może działać w Wine).


2

JavaScript ES6, 202 bajty

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)

Testowane w przeglądarce Firefox 41.

Podobnie jak w przypadku innej (prawie) czystej odpowiedzi Javascript, okrąg jest wyśrodkowany na 75 x 75, ponieważ domyślny rozmiar elementów obszaru roboczego to 300 x 150 zgodnie ze specyfikacją HTML.


2

Matlab, 141 136

Po prostu przesyłam to dla ciebie, Lembik, aby mieć pełną listę.

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

Stara wersja:

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.