Dairesel bir yolda hareket eden tek bir piksel


45

Bu, görevin dil başına en kısa kodu vermesi gereken grafiksel bir çıkıştırmadır .

Görev

Kodunuz tek bir mor pikseli (onaltılık değer # 800080 veya rgb (128, 0, 128)) çizmeli ve saat yönünde bir daire etrafında hareket etmelidir. Dairenin etrafında tam bir yolculuk yapmak tam olarak 60 saniye sürmeli ve süresiz olarak devam etmelidir. Ekranda veya pencerede piksel dışında başka hiçbir şey gösterilmemelidir. Çemberin genişliği 0.75 (uygun şekilde yuvarlama) olmalıdır, ekran veya pencerenin genişliği ve arka plan beyaz olmalıdır. Aptalca çözümleri önlemek için, ekran veya pencerenin en az 100 piksel genişliğinde olması gerekir.

Kodunuz tam bir program olmalıdır .

Diller ve kütüphaneler

İstediğiniz herhangi bir dili veya kütüphaneyi kullanabilirsiniz. Ancak, eğer mümkünse kodunuzu test edebilmek istiyorum, bu yüzden Ubuntu'da nasıl çalıştırılacağına dair net talimatlar verebilirseniz çok memnun kalacaksınız.

En iyi yirmi dil eksik. Yardıma ihtiyaç var.

Aşağıdaki en iyi yirmi programlama dili şu anda herhangi bir çözümü eksik.

  • C , C ++, C # , Python , PHP , Visual Basic .NET , Perl, Delphi / Nesne Pascal, Montaj , Amaç-C , Swift, Pascal, Matlab / Oktav , PL / SQL, OpenEdge ABL, R

Katalog

Bu yazının altındaki Yığın Parçacığı, cevapları a) dil başına en kısa çözümün bir listesi olarak ve b) genel bir lider tablosu olarak oluşturur.

Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:

## Language Name, N bytes

Gönderinizin Nbüyüklüğü nerede ? Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra pasajda görünecek bir bağlantı da yapabilirsiniz:

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


1
daire hangi yarıçapta olmalıdır?
Timothy Groote

19
Piksel neden mor olmalı? TI-Basic gibi bazı dillerin renk yeteneklerinin olmadığını varsayardım, bu da oldukça keyfi bir sebepten dolayı meydan okuma için kullanılamazları anlamına geliyor
Fatalize

1
@Fatalize, baytları kurtarmak için zekice yaratıcı bir şekilde rengin programın içine giremeyeceği anlamına gelmez.
Timothy Groote

3
@TimothyGroote TI-BASIC temel olarak yalnızca bir renge sahiptir: siyah. Geriye kalan her şey kapalı bir pikseldir. Renkleri olan C (SE) hesap makineleri var, fakat herkesin bir rengi yok.
Conor O'Brien,

10
Ekranınıza mor bir viyolonsel koymak emin olun bayt cinsinden kod boyutuna eklenmez. vectrex için işe yaradığını kastediyorum;)
Timothy Groote

Yanıtlar:


23

İşlem , 101 97 96 bayt

Flambino sayesinde 4 bayt .

Kritixi Lithos sayesinde 1 bayt.

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

Bu, gerekli animasyonu içeren varsayılan 100 x 100 piksel bir pencere oluşturur.

çıkış penceresi

Yasal Uyarı: Bu görüntü bir GIF değil. Bir dakika ona bakma.


2
Bu 60 saniyelik kuralı uygular mı?

2
@Lembik Evet. Varsayılan kare hızı 60π/1800 fps'dir ve bir seferde açı radyanlarını artırıyorum . ( π/3600
Beynimde

5
@ Pietu1998 Beyin fırtınası pi'nin yanlış
Cruncher

2
@ Cruncher vi hart'ı sevmeli!
Tim,

17
Hey, GIF'iniz çalışmıyor, bir dakikalığına baktım ama hiçbir şey olmadı
Beta Decay

16

QB64, 79 bayt

QB64, bazı güzel özellikler ekleyen bir QBasic emülatörüdür. Bu program CLS,15vanilya QBasic tarafından desteklenmeyen bir ( ) kullanıyor .

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

Bu çok gürültülü. PLAYEkranı temizlemeden önce yürütmeyi kısa bir süre durdurmak için komutu kullanır ; Aksi takdirde piksel titrer ve görünmez olur.

QB64'ü indirin , bu dosyayı yükleyin, tıklayın Runve ardından Start.

İşte eylemde:

program

@ DLosc'un cevabından bazı püf noktaları ( SCREEN 7yerine SCREEN 13ve PSETyerine POKE) aldım, bu yüzden krediden kaynaklanıyor. Cevabında olduğu gibi, macentam da aslında #8B008BOP tarafından kabul edilebilir sayıldı.

(Sabit 9.55, yaklaşık bir değerdir 30/π = 9.54929658551. Yeterince yakın mı?)


Ha! PLAYBir gecikme için kullanmayı asla düşünmedim . Dinlenmenin bir kodu olduğuna yemin edebilirdim, ama şimdi yardım dosyasında göremiyorum. TIMERParametre olarak (işlevini) kullanmayı düşündüm , ancak daha kısa olup olmadığını görmek için asla denemedim. Kudos!
DLosc

4
Teşekkür! Senden utanmadan kalktım PSET, bu yüzden kudos geri :) Bir dinlenme gibi görünüyor n0ki daha uzun c. Ayrıca, biraz kural bükmeyi sevdim: OP pencerede başka hiçbir şeyin gösterilemediğini söyledi, ama hiçbir zaman programımın yüksek sesle BEEP BEEP BEEP BEP olamayacağını söylemedi .
Lynn

1
Sesli uyarılara karşı hiçbir şeyim yok ama linux'da çalışırken bir dairenin etrafında hareket eden bir piksel göremiyorum.

1
İşte makinemde harekete geçiyor, ki bu da yeterince kanıt olmalı.
Lynn

12
Eğer "işte burada bulunduğunu söyleyen çünkü bir süre görüntü baktı eylem ".
mbomb007

14

Java, 449 443 439 bayt

Çünkü her zaman aptalca fikirlerim vardı. Java'da golf oynamak gibi;).

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

Düzenleme: 7 bayt golf oynamak için @Ypnypn için teşekkürler!

Edit2: @Franz D. için 3 bayt kaydettiğiniz için teşekkür ederiz!


7
Java şu ana kadarki en uzun kod yarışmasını kazanıyor :)

1
- Üye değişkenlerini sıfır olarak başlatmanız gerekmez, böylece "c = 0" ı "c" ye dönüştürerek iki bayt (~% 0,45) kaydedebilirsiniz.
Franz D.

1
Ayrıca, rengi onaltılık, yani yeni Renk (0x800080) olarak başlatarak bir bayttan tasarruf edebilirsiniz.
Franz D.

1
@FranzD. Daha da iyisi - sadece ondalık sayıyı kullanın 8388736.
Ypnypn

1
Kurtulun JFramekullanımı, Frame, sen javax içe kaldırmanızı sağlar.
Magic Octopus Urn

14

Mathematica, 102 101 94 bayt

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

Gizlenmiş ve kenarını 0 ila 2π arasında takip eden bir nokta yerleştiren beyaz bir daire oluşturur. Mathematica'nın DefaultDurationseçeneği, her 60 saniyede bir döngü tamamlayayım.

İşte çıktının hızlı bir sürümü:

EDIT: 2 karakter kaydetmek Circleiçin değiştirin Disk, tsaat yönünde ilerletmek için negatif bir işaret eklendi .

EDIT: ~Operatör kullanılarak 7 bayt kurtarıldı (Mauris sayesinde).


14
Mathematica’nın sadece ne demek istediğinizi kasten belirsiz İngilizce kelimeler yazdığınız, ardından noktalama işareti eklediğiniz bir programlama dili olduğunun kanıtı (Bunun a~f~byerine kullanabileceğinizi duydum f[a,b], bu Rotatedaha kısa kalmaz mı?)
Lynn

1
İçin önek notasyonunu da kullanabilirsiniz Point@{0,1}, listeye ihtiyacınız olmadığını düşünüyorum Purple,Point....
Martin Ender

1
@Mauris. Eğitimsiz göze göre, Mathematica gerçekten belirsiz İngilizce kelimeler ve noktalama işaretleri gibi görünebilir. Gerçekte, bunlar özel, iyi tanımlanmış işlevlerin, ayarların ve operatörlerin adlarıdır. Programcı olmayanların uygulanabilir kodları döndürme olasılığı zildir.
DavidC

3
@David: Haha, elbette farkındayım - şaka yapıyordum :)
Lynn

@Mauris, beni kandırdın!
DavidC

14

HTML, 235 290 295 354 347 bayt

<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

.htmlDosya olarak kaydedin ve bir tarayıcıda açın; Chrome veya Firefox gibi satıcı öneklerine gerek duymaz. Ya da bu kemanı dene .


Bu benim ilk denememden çok daha kısa olan ve toplantıdan 5 dakika önce yazdığım yeni bir versiyon. Tuvalin yeni boyutu, görüntü yüksekliğine göre bir karedir. Bu oldukça iyi çalışıyor ve belirli bir yükseklikle sınırlı değil. Mücadeledeki ayarlar konusunda çok haklıyım (ebeveyni% 75, mor ve 1 piksel). Bu nedenle, aşağıdaki kuralları atmam veya basitleştirmem gerekiyor:

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

Ungolfed

Bu temiz işaretlemeli ungolfed versiyonudur:

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

Düzenlemeler

  • 7 bayt eklendi . Kimsenin farketmeyeceğini düşündüm, animasyonda varsayılan bir gevşeme olduğunu. ;) linearŞimdi onu ayarladım .
  • Tarayıcının otomatik olarak işleyeceği her şeyi iptal ederek 59 bayt kurtarıldı .
  • İzi kaldırarak 3 byte kaydedildi)}} . Diş fırçası sayesinde .
  • Ana öğenin boyutuna karşılık gelen aynı değer olan yerine kullanılarak 2 bayt kaydedildi .12%12px
  • Büyük yeniden yapılandırma nedeniyle 55 bayt kurtarıldı , ayrıca birçok yorum yapıldı. Tüm katkılarınız için çok teşekkürler.

1
Sadece yazı üzerine yorum yapmak istedim, saf bir html / css çözümü görmek istiyorum (birini göndermek için ty)
dwana

1
Keman kullanarak hareketli pikselin hızı çok dengesiz. Piksel en solda olduğunda neredeyse durma noktasına gelir. Neden bir fikrin var mı?

1
@ insertusernamehere :) Bence eski sürüm versiyonunun da güncellenmesi gerekiyor.

5
Geçerlilikten bağımsız olarak en küçük çalışma koduna gitmelisiniz. Golf oynarken, küresel isim alanını kirletmek gibi şeyler elbette aynı.
John Dvorak

2
Sonundan düşebilirsiniz )}}(CSS ayrıştırıcısı blokları otomatik olarak sonlandırır)
Diş Fırçası

14

TI-BASIC, 44 bayt

Bazı sınırlı BASIC renkli grafiklerini destekleyen TI-84 + CSE / CE hesap makineleri için.

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

Buradaki renk macenta veya renk 13'tür (biri MAGENTAbelirteci de kullanabilir ).

Kullanmak randyerine 1piksel görüntülendiğinde ve tekrar kapatıldığında arasındaki gecikme (~ 15 ms) bir nebze sağlamak için sonsuz bir döngü durum için.

Bu programı çalıştırmadan önce hesap makinenizi radyan moda ayarlayın; Bunu varsayılan sayı olarak saymıyorum. Ayrıca Ansprogramdan önce 0 girerek 0'a ayarlayın ; bu aynı zamanda varsayılandır.

Bu programı test ettiği için @quartata'ya teşekkür ederim (Renk hesaplayıcım yok).


Naif fikir: Bir süre döngüsü kullanmak yerine programın kendisini çağırmasını sağlayabilir misiniz?
Lynn

@Mauris süre döngü 3 belirteç, bir program adı genellikle daha uzun iken
TheDoctor

1
@ Mauris The While döngüsü aslında 4 byte'tır ve 3'te tekrarlamak mümkündür, ancak yığın 300'den az çağrıdan sonra çok hızlı bir şekilde tükenir.
lirtosiast

@Lembik [ codegolf.stackexchange.com/a/62203/39328] ile iyi olduğunuz için , bunu daha yumuşak olacak şekilde değiştirmeyeceğim.
lirtosiast

13

Java, 339 308 289 287 bayt

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

Büyük çözümü benim için başlattığım ve döngüsünü utanmadan kopyaladığım @Peter Lenkefi'ye teşekkürler!

Ana tasarruf, saf AWT'ye geçiş yapmak ve doğrudan Çerçevede görüntülemekten kaynaklanıyordu - bir JPanel'e (ya da Tuvale) gerek yok. Ayrıca sayacı basit bir artışla güncellenen bir tamsayı değişkeni yaptım ve burada ve orada bir rakamı kesmek için sabitleri dolaştırarak birkaç bayt kurtardım.

EDIT: Yorumlardaki önerileri için @Peter Lenkefi ve @tobii'ye teşekkürler. HTML'yi yenmek iyi olurdu - herhangi biri Java'da yürütmeyi sleep () kullanmadan ve istisnalar yakalamak zorunda kalmadan güvenli bir şekilde duraklatmayı bilen var mı?

2 EDIT: JAVA BEATS HTML (şu anda 290 byte'da!): D Zamanlama şimdi makineye bağlıdır, ancak makinemde tam bir daire için ~ 60 saniyedir, @Lembik'e göre tamamdır. @PeterLenkefi'ye önerisi için tekrar teşekkürler - cevabım yarısından fazlası :)

EDIT 3: @Ajay, "re" yi "repaint" den çıkarmayı önerdi. İki bayt daha az. Oraya gidiyoruz :)


1
HTML altına almalıyız (şu anda <290)
Peter Lenkefi

1
@PeterLenkefi: Maalesef, alçı diş tellerini kurtaramam; günah / cos sonucunu yayınlamak doğrudan hesaplamayı bozar. Boya içerisindeki boyamanız () inanılmaz derecede kirli :)
Franz D.

1
@Troyseph Golf oynamak istiyordum;) Java'yı hiçbir şey için kullanmıyorum.
Peter Lenkefi

1
Kullanılması int c,ive ihmal intin for(int i=..biraz daha tasarruf gerekir.
Marco 13

1
Hatta F sınıfı beyanı gerekmez, sadece Çerçeve sınıfı satır içi uzatabilirsiniz: new Frame(){...}.
Sihirli Ahtapot Urn

9

Haskell, 143 136 bayt

Bu, parlak paketi kullanır :

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

Güzel versiyonu

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

Bazı boşlukları kaldırabilirsiniz.
sağa doğru

@Elyse Gerçekten, teşekkürler. Ayrıca gereksiz iki tane aldım .0.
Frerich Raabe

8

HTML (CSS?), 167 bayt

İnsertusernamehere'nin yanıtından ilham aldı

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


Sadece bir FYI, HTML + CSSgenellikle bir programlama dili olarak kabul edilmez, ancak OP'ye bağlıdır.
GamrCorps

1
Firefox 41.0.2'de hiçbir şey yapmaz.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
Sadece Firefox 41.0.2, Win 10 üzerinde test edildi. Benim için iyi çalışıyor.
Lachlan Arthur

1
41.0.2'de Ubuntu'da benim için çalışıyor.

1
+1 bodyKendini sadece canlandırmak için iyi bir düşünce . :)
insertusernamehere 30:15

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

Linux sürümüne sahip olduğunu söyleyen QB64'te test edilmiştir (yalnızca Windows'ta denedim).

  • SCREEN 7 grafik modunu ayarlar.
  • COLOR 5,15 koyu macenta'yı ön plan rengi, parlak beyazı arka plan rengi olarak ayarlar.
  • DO ... LOOPsonsuz bir döngüdür. Genellikle bunu DO WHILE ... LOOP(ya da LOOP WHILEyerine koyabilir ya da UNTILolumsuz bir durum için kullanabilirsiniz) olarak görürdünüz , ancak koşulu dışarda bırakabilirsiniz, bu durumda sonsuza dek döngüde kalır.
  • TIMER kayar nokta değeri olarak gece yarısından beri geçen saniye sayısıdır.
  • CLS = CLear Ekranı.
  • PSET Varsayılan olarak bir renge bir Nokta, ön plan rengi ayarlar.
  • isıfırdan başlar ve döngü boyunca her seferinde pi / 300 ile sayar, böylece 600 tekrardan sonra tam bir daire tamamlar. Pi'yi 4 * arctan (1) olarak hesapladık.
  • Son satır 0,1 saniye geçene kadar bekler. Benim QBasic kitaplardan öğrendiği deyim oldu t# = TIMER: WHILE TIMER < t# + 0.1: WEND. Ancak #0,1 saniyelik bir fark için çift ​​duyarlıklı sayılara (ile işaretlenmiş ) ihtiyacımız yok ve IF cond THEN [GOTO] linesözdiziminin bir WHILE ... WENDdöngüden 1 karakter daha kısa olduğu ortaya çıktı .

Döngü 60 saniyede 600 kez tekrarlanır, böylece tam bir daire tamamlanır.

Uyarılar

  • Renk 5, koyu macenta #8B008Bistenen yerine #800080(OP ile siliniyor).
  • Ekran modu 7, 320x200'dür ve bu nedenle dairenin çapı 198'dir, bu genişliğin> = 0.75'i değildir, ancak> = 0.75'idir (OP ile de temizlenir).
  • Bunu DOS QBasic üzerinde çalıştırırsanız, tam ekrandır, yani "piksel" aslında monitörde tek bir piksel değildir (320x200 bir monitörünüz olmadıkça). Fakat yeterince yakın olmalı. QB64, kesin boyutları kullanan bir pencerede çalışır ve bu nedenle piksel, değişmez bir pikseldir.
  • En azından QB64'te bu, tam bir devrim yapması için 65 saniye kadar sürüyor. Nedenini gerçekten bilmiyorum; her ikisini de başarılı olmadan hafifletmeyi denedim, ancak ya yuvarlama hataları ya da döngü üzerinde ek yük olmalı. Teoride, kod olduğu gibi doğru çalışmalıdır. Uygulamada, ibir devrim 60 saniyeye yeterince yaklaşıncaya kadar artırılan miktar ince ayar yapılabilir . (69 veya 68 değerinde bir payda deneyin.)
  • Burada güzel bir resim yok. :( LICEcap'in kalitesi tek bir pikseli tam olarak yakalamak için yeterince iyi değildi.

Bu kod Linux'ta benim için mükemmel çalışıyor. Teşekkür ederim.

Bu aslında QBasic 4.5 ile çalışır, ancak arka plan gerçekten beyaz değil :). İşte derleme ve çalıştırma bir GIF: codegolf.square7.ch/altqb.gif
mınxomaτ

@ mınxomaτ Tuhaf, renk 15, açık camgöbeği gibi görünen ... sandığım her şeye göre beyaz veya açık gri vermeli. Bunun SCREEN 8yerine ne yapar 7?
DLosc

Aynı yeşilimsi arka plan. Ama haklısın, özelliklerine göre beyaz olmalı. Ben de renk 7'yi (gri) denedim ve gri renkte çıktı. Demek çözümün kesinlikle iyi, ama benim DOS'umda bir sorun var.
mınxomaτ

7

mIRC betiği, 184 bayt

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
}

Bu Wine in mIRC için optimize edilmiştir. MIRC'yi başlatın, Alt + Rardından yapıştırın, düzenleyiciyi kapatın ve birlikte çalıştırın./g

Ön izleme

GIF üzerindeki zamanlama kapalı olabilir.


Bu benim için yeni bir tane! Eğer hareketli bir gif çalıştırabilir olsaydı harika olurdu.

Kodlama ile ilgilendiğim / kullandığım ilk dillerden biriydi!
Varis

6

R, 170 bayt

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

Pakete dayanır animation. Ve işte işe yaradığını göstermek için bir gif:

Bir pencerede

Bir gif'e geçersiz Çözüm tasarrufu (139 byte):

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

Bu, ImageMagick'in kurulmasını gerektirir. Sonuç bir gif'e kaydedilir.

! [Yuvarlak ve yuvarlak gider


Ancak bu harika .. meydan okuma ekrana / pencereye yazmak için kod gerekiyor.

Bunu anlamadım.
plannapus

2
İşte, bir pencerede.
plannapus

6

Ayakkabı ile Ruby, 159 bayt

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 aslında bir analog saatin saniye ibresinin ucudur. Yani bu kesinlikle kesin.

Ayakkabı ile Ruby, 134 bayt

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

Bu, diğer cevaplardan esinlenerek saniye başına kare bazlı bir alternatiftir. Belgelendirme varsayılan fps'nin 10 olduğunu söylese de, pratik testler aslında 12 olduğunu gösteriyor.

Her iki çözüm de “Çemberin genişliği 0,75 olmalıdır (uygun şekilde yuvarlanır) ekran veya pencerenin genişliği” tam anlamıyla hesaplanır: pencere genişliğine göre hesaplar, böylece piksel bazen kare olmayan bir pencerenin dibinden ayrılabilir. Böyle bir durumun nasıl ele alınması beklendiğinden emin değilsiniz. (En az genişlik ve yükseklik kullanılsın mı? Oval yolda yürüyün?) Pencere varsayılan 600 x 500 boyutunda başlar ve yeniden boyutlandırılabilir.


Ruby çözümünü görmek çok memnun! Şimdi Python, Perl'e ihtiyacımız var ....

5

D, 286 280 bayt

(Normal şekilde yazılmışsa 392)

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

Ya da aslında golf oynamadan yazdığım şekilde:

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

Burada bulunan simpledisplay.d ve color.d'ye bağlıdır: https://github.com/adamdruppe/arsd

Sadece bu iki dosyayı indirin ve yukarıdaki kodla aynı dizine yerleştirin, ardından: dmd yourfile.d simpledisplay.d color.dderleyin ve daha sonra çalıştırın.

Benim küçük kütüphanem bu kadar basit animasyonları yapmak için yazılmıştı, bu yüzden güçlü yanlarına iyi geliyor! Ne yazık ki, uzun tanımlayıcı isimlerinden hoşlandım ve 18 baytlık döküm ekleyen bir Pointkurucu sağlamadım floatve .... bir kaç düzine metod ismimi heceleyerek yazdı.


1
EventLoop btw için ilk argüman bir milisaniye zamanlayıcısıdır. Sıfır değilse, sizin için otomatik olarak bir zamanlayıcı yapar ve bu aralıkta verilen sıfır argümanlarla fonksiyonu çağırır. (eventLoop ayrıca, kullanıcı girişini işlemek için MouseEvent veya KeyEvent args ile de işlev alabilir). 50 milisaniye aralık = saniye başına 20 kare, yani 20 * 60 = 60 saniye içinde döngü.
Adam D. Ruppe

Sanırım cevabı yazma şekliniz afiş kodunun 280 yerine 392 olduğunu gösteriyor.

5

C #, 379 365 bayt

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

Bağlıdır System.Windows.Formsve System.Drawingrun. Çıktı 1000x1000 penceresindedir.


Kullanarak bazı baytları kurtarabilir miyimvar
pinkfloydx33

Sistem matematiğine statik aktarımı kullanarak başka bir bayttan
tasarruf edin

Sistem ad kodunuzu beyan ve sisteme tüm diğer başvuruları kaldırın ve ben 10 bayt düşünmek tasarruf edebilirsiniz
Phaeze

5

SVG, 177 bayt

<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

Cehennemden kahvaltıya geçersiz işaretleme var, ancak çalışıyor (en azından Chrome'da) Bir HTML5 tuvali gibi, bir SVG için varsayılan boyut 300x150 gibi görünüyor, bu nedenle varsayım buydu.

Düzenleme: Hata, 60 yerine 6 süre içinde yanlışlıkla bıraktım. Düzeltildi, ancak bunun da 0.5işe yaradığı bulundu .5, bayt sayısında bir değişiklik olmadı.


5

X86 Makine kodu - 150 146 149 133 127 bayt

Golf versiyonu:

        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', kaynak versiyon:

; 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

İndirilebilir, base64 kodlu sürüm

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

Bu adresi kopyalayıp tarayıcınıza yapıştırın. Sonuçta ortaya çıkan dosyayı yeniden adlandırın golfcrcl.comve bir DOS ortamında çalıştırın, yani DosBox.


Bu harika! Test edildi ve mükemmel çalışıyor.

1
Ah çıtçıt! Sadece kullanacağınız bir renk belirlediğinizi farkettim ve ben bunu tamamen görmezden geldim. : oops: Bunu daha sonra tamir edeceğim. Renk indeksi, 0x09 yerine 0x5C olmalıdır (dosbox'ın paleti doğru ayarladığı varsayılırsa, aksi takdirde, sadece renk 1'i yeniden eşleştiririm)
enhzflep

4

Mathematica 208 185 139 bayt

Görüntü olarak kullanılan bir dizinin etrafında mor bir piksel taşır.

Yöntem 1 139 bayt

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

Yöntem 2 154 bayt

60 saniye içinde dairesel bir yol boyunca bir piksel çizer.

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

Yöntem 3 193 bayt

Bu, ikinci elin piksel olduğu beyaz renkte keneler ve etiketlerden oluşan bir saat çizer.

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

Görüyorum, temel LTR karmaşası ... Ama yine de, 30ve arasındaki boşluğu kaldırabilirsiniz t.
LegionMammal978

4

Obj-C ++ / Kakao, 777 678 668 657 643 628 bayt

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

Bu muhtemelen bir şey yapmanın en kötü yoludur, ama deneyeceğimi düşündüm.

Bir Mac'ta (yine de benimki) derlenebilir g++ -framework Cocoa file.mmve terminalden çalıştırılabilir ( ctrl-Cbir uygulama olmadığı için çıkmak için).

ekran görüntüsü

Düzenleme: Kaydedilen 99 bayt: main()OS X 10.10'da çalışması düzeltildi (1. sürüm yalnızca 10.8'de çalıştı), düz trig hesaplamaları lehine çevirme / döndürme, pencere yerleşimi ile rahatsız etmeyi bıraktı ve diğer küçük şeyler.

Düzenleme: Başka bir 10 bayt kaydedildi: Yalnızca orderFrontpencereyi görüntülemek için değiştirildi . Aslında onu ön cam yapmaz, ama aynı zamanda orderFrontAndMakeKey...

Düzenleme: 11 bayt daha kaydedildi: Atlandı NSMakeRectve sadece gitmek zorunda olan bir rakam buldu.

Düzenleme: Başka bir 14 bayt kaydedildi: Örneği NSTimerherhangi bir şeye atamanıza gerek yoktu ve görünüşte sıfırlama rişlemini atlayabilir .

Düzenleme: Başka bir 15 bayt kaydedildi: Duramıyorum. Yardım gönder.


Teşekkür ederim. Obj-C ++ şu anda en uzun kod yarışmasında en açık kazanan!

14
Ayrıca animasyonlu olmayan en çok animasyonlu resim yarışmasını kazanmak için +1 .
Lynn

4

Javascript / Processingjs, 175 173 156 153 152 bayt

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

Çalıştırmak için: ya ziyaret http://www.openprocessing.org/sketch/226733 processing.js kullanarak veya indirme gelen 2.0 işleme nasıl kullanıldığını görmek için processing.org , işleme IDE yapıştırın, JavaScript modunu ve saati seçin o gider.


Lol, benden 20 saniye önce işleme yolladın.
PurkkaKoodari

Bu cevapta başlık yanlış mı? Büyük tahtada görünmüyor.

1
Bunu özledim, şimdi yaşıyorum.
Timothy Groote

1
şimdi 60 saniye şartını yerine getirmeli
Timothy Groote

1
background(-1)bir bayt daha kısadırbackground(255)
Kritixi Lithos

3

Elm , 274 bayt

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

Tarayıcınızda deneyin veya düzenleyin:

İçe aktarma işleminden kurtulup anahatları tuvalin etrafına çizersek, 149 byte'a düştüğümüzü unutmayın, ancak bu muhtemelen hile!


Hata! Sabit! Test sırasında sabırsızlandım
jmite

1
Bu çok hoş ve işlevsel bir dilde bir şeyler elde etmek harika. Şimdi sadece Haskell ve Scala'ya ihtiyacımız var!

2
@Lembik Yeni bir Haskell sürümü ekledim
Frerich Raabe

3

C #, 301 bayt

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

Varsayılan boyut metriklerine bağlıdır; boyut ve konum, çeşitli faktörlere bağlı olarak biraz kapalı olabilir. Korkunç şekilde titreyebilir veya olmayabilir; Bunu çözmek için aşağıdakileri ekleyin:

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

3

Lua + Löve, 189 karakter

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()önceki kareden bu yana geçen süreyi parametre olarak alır. Pencere zaten yeniden boyutlandırılamadığından, varsayılan 800 x 600 penceresini sabit koordinatlarda çizer.


İlk lua cevabı! Teşekkür ederim.

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

Şimdi sadece bir python + kaplumbağa çözümüne ihtiyacımız var.

3

C (SDL1.2 kullanılarak), 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);}}

Derler ve kullanarak çalıştır gcc -I/usr/include/SDL snippet.c -lSDL -lm && ./a.out


İnanılmaz derecede harika! Kimsenin yapmayacağını sanıyordum.

2

ActionScript 2.0, 151 bayt

Ne yazık ki, Adobe Flash ücretsiz değildir ve Google Linux'ta VM veya Wine olmadan çalışmadığını (ve hatta Wine ile birlikte, çoğunlukla çalıştığını) bildirir . Yine de, bu görevde ne kadar iyi olacağını görmek istedim. Oldukça iyi, çıkıyor.

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}

Temel fikir: yeni bir film klibi nesnesi oluşturun, onu (200, 200) konumuna getirin ve sonra içine doğru 200 piksellik bir nokta 2 çizin . Şimdi film klibi 200 piksel genişliğinde ve 1 piksel yüksekliğindedir. Pivot noktası, başladığımız yerdeki orijinal koordinatlardır, bu yüzden _rotationözelliği değiştirdiğimizde , nokta, noktanın etrafındaki bir dairede (200, 200) hareket eder. Uygun _rotationolarak derece cinsindendir; 0,25 derece / kare * 24 kare / saniye * 60 saniye / dakika = 360 derece / dakika.

Flash'ınız varsa sıfırdan çalıştırmak için yeni bir Flash belgesi oluşturun 1 , Eylemler panelini açın ve yukarıdaki kodu yapıştırın. Varsayılan beyaz arka plan, 550x400 tuval ve 24 fps varsayımıyla başka özelleştirme gerekmez. Ctrl-Enter'a basın ve izlemesini izleyin.

Flash’ın kendisi yoksa, sonuçları çoğu modern tarayıcıyla birlikte gelmesi gereken ücretsiz Flash Player ile görüntüleyebilirsiniz. SWF dosyasını buradan indirin . Oynatamıyorsanız, bu HTML sayfasını da indirmeyi ve SWF dosyasını aynı dizinde açmayı deneyin .

1 Adobe Flash CS4 Professional'da test edildi, ne tür yeni dosya oluşturulacağı sorulduğunda "Flash Dosyası (ActionScript 2.0)" seçildi.

2 Aslında küçük bir üçgen, göreceğiniz gibi yakınlaştırırsanız göreceksiniz. Bir nokta çizmek için bulabildiğim en golf yolu buydu.


2

JavaScript w / jQuery, 205 bayt

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 , aşağıdaki kod parçacığını

Bu belki de kitap tarafından değil. Tuvalin varsayılan boyutu (en az Chrome'da) 300x150'dir, bu nedenle daireyi 75x75'te ortaladım. 150x75 üzerinde merkezleyebilir ve yarıçapı 113 piksel (genişliğin ~% 75'i) yapabilirdim, ancak zaman zaman tuvalin dışında olacaktı, ben de bunun yerine ~% 75'i seçtim.

Ama zaten çok kısa değil, o yüzden


2

Blitz 2D / 3D , 126 bayt

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

Ne yazık ki, bu dil yalnızca (olsa Windows desteklenmektedir olabilir Şarap çalıştırmak).


2

Javascript ES6, 202 bayt

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)

Firefox 41'te test edilmiştir.

Diğer (neredeyse) saf Javascript cevabı gibi, daire 75x75'te ortalanmıştır;


2

Matlab, 141 136

Bunu tam bir listeye koymanız için Lembik'e gönderdim.

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

Eski versiyon:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.