Satu piksel bergerak di jalur melingkar


45

Ini adalah tantangan keluaran grafis di mana tugasnya adalah memberikan kode terpendek per bahasa.

Tugas

Kode Anda harus memplot satu piksel ungu (nilai hex # 800080 atau rgb (128, 0, 128)), bergerak searah jarum jam mengitari lingkaran. Seharusnya tepat 60 detik untuk melakukan perjalanan penuh mengitari lingkaran dan akan berlanjut tanpa batas. Tidak ada lagi yang harus ditampilkan di layar atau jendela kecuali untuk pixel. Lebar lingkaran harus 0,75 (pembulatan yang sesuai) lebar layar atau jendela dan latar belakang harus putih. Untuk mencegah solusi konyol, layar atau jendela harus memiliki lebar minimal 100 piksel.

Kode Anda harus merupakan program lengkap .

Bahasa dan perpustakaan

Anda dapat menggunakan bahasa atau perpustakaan apa pun yang Anda suka. Namun, saya ingin dapat menguji kode Anda jika memungkinkan jadi jika Anda dapat memberikan instruksi yang jelas tentang cara menjalankannya di Ubuntu yang akan sangat dihargai.

Dua puluh bahasa teratas tidak ada. Butuh bantuan.

Dua puluh bahasa pemrograman berikut ini saat ini tidak memiliki solusi sama sekali.

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

Katalog

Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

## Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Misalnya:

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

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

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

Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:

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


1
radius apa yang seharusnya menjadi lingkaran?
Timothy Groote

19
Mengapa pikselnya menjadi ungu? Saya akan berasumsi beberapa bahasa seperti TI-Basic tidak memiliki kemampuan warna, yang berarti mereka tidak dapat digunakan untuk tantangan karena alasan yang cukup jelas
Fatalize

1
@Fatalize bukan berarti Anda tidak dapat memasukkan warna ke dalam program dengan cara kreatif dan cerdas untuk menghemat byte.
Timothy Groote

3
@TimothyGroote TI-BASIC hanya memiliki satu warna: hitam. Yang lainnya adalah pixel off. Ada kalkulator C (SE) yang memiliki warna, tetapi tidak semua orang memilikinya.
Conor O'Brien

10
Saya yakin menempatkan cellofane ungu di layar Anda tidak menambah ukuran kode Anda dalam byte. maksud saya itu bekerja untuk vectrex;)
Timothy Groote

Jawaban:


23

Memproses , 101 97 96 byte

4 byte terima kasih kepada Flambino.

1 byte terima kasih kepada Kritixi Lithos.

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

Ini menciptakan jendela 100 x 100 piksel default dengan animasi yang diperlukan.

jendela keluaran

Penafian: gambar itu bukan GIF. Jangan menatapnya sebentar.


2
Apakah ini menerapkan aturan 60 detik?

2
@Lembik Ya. Framerate default adalah 60 fps , dan saya menambah sudut π/1800radian sekaligus. (Itu π/360010 detik yang lalu karena kentut otakku.)
PurkkaKoodari

5
@ Pietu1998 Brainfart itu disebabkan oleh fakta bahwa pi salah
Cruncher

2
@Cruncher harus cinta vi hart!
Tim

17
Hei, GIF Anda tidak berfungsi, saya menatapnya sebentar tetapi tidak ada yang terjadi
Beta Decay

16

QB64, 79 byte

QB64 adalah emulator QBasic yang menambahkan beberapa fitur bagus. Program ini menggunakan satu ( CLS,15) yang tidak didukung oleh vanilla QBasic.

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

Ini sangat keras. Ini menggunakan PLAYperintah untuk menghentikan eksekusi untuk sementara waktu sebelum membersihkan layar; jika tidak, piksel akan berkedip dan menjadi tidak terlihat.

Unduh QB64 , muat file ini, klik Runlalu Start.

Ini dia sedang beraksi:

program

Aku mengambil beberapa trik ( SCREEN 7bukan SCREEN 13, dan PSETbukan POKE) dari @ jawaban DLosc, sehingga kredit sudah jatuh tempo. Seperti dalam jawabannya, magenta saya sebenarnya #8B008B, yang dianggap dapat diterima oleh OP.

(Konstanta 9.55adalah perkiraan 30/π = 9.54929658551. Apakah cukup dekat?)


Ha! Tidak pernah terpikir PLAYuntuk menggunakan penundaan. Bisa bersumpah ada kode untuk istirahat, tapi aku tidak melihatnya sekarang di file bantuan. Saya memang mempertimbangkan menggunakan (fungsi) TIMERsebagai parameter, tetapi tidak pernah mencobanya untuk melihat apakah itu lebih pendek. Pujian!
DLosc

4
Terima kasih! Tanpa malu-malu aku terangkat PSETdarimu, jadi kudos kembali :) Sepertinya istirahat adalah n0yang lebih panjang dari c. Juga, saya suka sebagai sedikit aturan-bending: OP berkata apa-apa lagi yang bisa ditampilkan di jendela, tetapi tidak pernah mengatakan program saya tidak bisa keras pergi BIP BIP BIP BIP .
Lynn

1
Saya tidak memiliki masalah dengan bunyi bip tetapi saya tidak dapat benar-benar melihat piksel bergerak di sekitar lingkaran ketika saya mencoba di linux.

1
Ini sedang beraksi di komputer saya, yang seharusnya cukup bukti.
Lynn

12
Saya menatap gambar untuk sementara waktu, karena Anda berkata "ini dia beraksi ".
mbomb007

14

Java, 449 443 439 byte

Karena aku selalu punya ide bodoh. Seperti golf di Jawa;).

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

Sunting: Terima kasih atas @Ypnypn untuk bermain golf 7 byte!

Sunting2: Terima kasih atas @Franz D. karena telah menghemat 3 byte!


7
Java memenangkan kompetisi kode terpendek sejauh ini :)

1
- Anda tidak perlu menginisialisasi variabel anggota menjadi nol, sehingga Anda dapat menyimpan dua byte (~ 0,45%) dengan mengonversi "c = 0" menjadi "c".
Franz D.

1
Dan Anda dapat menyimpan satu byte lagi dengan menginisialisasi warna dalam hex, yaitu Warna baru (0x800080).
Franz D.

1
@ FranzD. Lebih baik lagi - cukup gunakan angka desimal 8388736.
Ypnypn

1
Singkirkan JFrame, gunakan Frame, memungkinkan Anda untuk menghapus impor javax.
Guci Gurita Ajaib

14

Mathematica, 102 101 94 byte

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

Membuat lingkaran putih yang tersembunyi dan menempatkan titik yang mengikuti ujungnya dari 0 hingga 2π. DefaultDurationOpsi Mathematica mari saya atur untuk menyelesaikan loop setiap 60 detik.

Berikut ini adalah versi keluaran yang dipercepat:

EDIT: Ubah Circleke Diskuntuk menyimpan 2 karakter, menambahkan tanda negatif tuntuk membuatnya bergerak searah jarum jam.

EDIT: Disimpan 7 byte dengan menggunakan ~operator (terima kasih kepada Mauris).


14
Bukti lebih lanjut bahwa Mathematica hanyalah bahasa pemrograman di mana Anda menulis beberapa kata bahasa Inggris yang samar-samar yang berarti apa yang Anda inginkan, lalu tambahkan tanda baca. (Saya dengar Anda dapat menggunakan a~f~bsebagai ganti f[a,b], bukankah itu akan membuat Anda Rotatelebih pendek?)
Lynn

1
Anda juga dapat menggunakan notasi awalan untuk Point@{0,1}dan saya pikir Anda tidak perlu daftar di sekitar Purple,Point....
Martin Ender

1
@Mauris. Bagi mata yang tidak terlatih, Mathematica mungkin memang tampak seperti kata-kata dan tanda baca bahasa Inggris yang tidak jelas. Pada kenyataannya, mereka adalah nama-nama fungsi, pengaturan dan operator yang spesifik dan terdefinisi dengan baik. Kemungkinan bahwa non-programmer bisa mengeluarkan kode yang bisa diterapkan adalah nihil.
DavidC

3
@ David: Haha, tentu saja saya sadar - Saya hanya bercanda :)
Lynn

@Mauris, Anda menipu saya!
DavidC

14

HTML, 235 290 295 354 347 byte

<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

Simpan sebagai .htmlfile dan buka di browser, yang tidak memerlukan awalan vendor, seperti Chrome atau Firefox. Atau coba biola ini .


Ini adalah versi baru yang jauh lebih pendek daripada upaya pertama saya, yang saya tulis 5 menit sebelum rapat. Ukuran kanvas yang baru adalah bujur sangkar berdasarkan ketinggian viewport. Itu bekerja cukup baik dan tidak terbatas pada ketinggian tertentu yang ditentukan. Saya sangat akurat tentang pengaturan dalam tantangan (ukuran 75% dari induknya, ungu dan 1px). Karenanya saya perlu dan tidak bisa membuang atau menyederhanakan aturan berikut:

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

Tidak disatukan

Ini adalah versi yang tidak dipisahkan dengan markup bersih:

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

Suntingan

  • Menambahkan 7 byte . Saya pikir tidak ada yang akan memperhatikan, bahwa ada pelonggaran default pada animasi. ;) Saya sudah mengaturnya linearsekarang.
  • Disimpan 59 byte dengan membuang semua yang dibatalkan yang akan ditangani browser secara otomatis.
  • Disimpan 3 byte dengan menghapus trailing )}}. Berkat sikat gigi .
  • Disimpan 2 byte dengan menggunakan 12%bukannya 12pxyang memiliki nilai yang sama sesuai dengan ukuran elemen induk.
  • Disimpan 55 byte karena refactoring besar-besaran, juga banyak komentar. Terima kasih banyak untuk semua kontribusinya.

1
Saya hanya ingin mengomentari kiriman, saya ingin melihat solusi html / css murni (ty untuk mengirim satu)
dwana

1
Menggunakan biola kecepatan piksel bergerak sangat tidak merata. Hampir terhenti ketika pixel berada di paling kiri. Ada ide mengapa?

1
@insertusernamehere :) Saya pikir versi ungolfed perlu diperbarui juga sekarang.

5
Anda harus menggunakan kode kerja terkecil terlepas dari validitasnya. Hal-hal seperti mencemari namespace global setara dengan kursus saat bermain golf.
John Dvorak

2
Anda dapat menjatuhkan )}}dari ujung (parser CSS akan secara otomatis mengakhiri blok)
Sikat Gigi

14

TI-BASIC, 44 byte

Untuk kalkulator TI-84 + CSE / CE, yang mendukung beberapa grafis warna BASIC terbatas.

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

Warna di sini adalah magenta, atau warna 13 (satu juga dapat menggunakan MAGENTAtoken).

Saya menggunakan randbukannya 1untuk kondisi loop tak terbatas untuk memberikan sedikit keterlambatan (~ 15 ms) antara saat piksel ditampilkan dan ketika dimatikan lagi.

Setel kalkulator Anda ke mode radian sebelum menjalankan program ini; Saya tidak menghitung ini dalam ukuran karena ini adalah keadaan default. Juga atur Anske 0 dengan memasukkan 0 sebelum program; ini juga standarnya.

Terima kasih kepada @quartata untuk menguji program ini (saya tidak memiliki kalkulator warna).


Gagasan naif: bisakah Anda membuat panggilan program itu sendiri daripada menggunakan loop sementara, dan apakah itu lebih pendek?
Lynn

@Maur adalah loop sementara adalah 3 token, sedangkan nama program lebih panjang biasanya
TheDoctor

1
@Mauris Loop Sementara sebenarnya 4 byte, dan dimungkinkan untuk berulang dalam 3, tetapi tumpukan berjalan sangat cepat, setelah kurang dari 300 panggilan.
lirtosiast

@Lembik Karena Anda baik-baik saja dengan [ codegolf.stackexchange.com/a/62203/39328] , saya tidak akan mengubahnya menjadi lebih halus.
lirtosiast

13

Java, 339 308 289 287 byte

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

Terima kasih kepada @Peter Lenkefi, yang solusi hebatnya membuat saya mulai, dan untuk-loop yang saya salin tanpa malu-malu!

Penghematan utama adalah karena beralih ke AWT murni dan rendering langsung di Frame - tidak perlu untuk JPanel (atau Kanvas). Saya juga membuat counter variabel integer, diperbarui dengan kenaikan sederhana, dan menyimpan beberapa byte memutar-mutar konstanta untuk dapat menghapus angka di sana-sini.

EDIT: Terima kasih kepada @Peter Lenkefi dan @tobii untuk saran mereka di komentar. Mengalahkan HTML akan menyenangkan - apakah ada yang tahu cara menghentikan sementara eksekusi di Java tanpa menggunakan sleep () dan harus menangkap pengecualian?

EDIT 2: JAVA BEATS HTML (saat ini di 290 byte!): D Waktu sekarang tergantung pada mesin, tetapi ~ 60 detik untuk lingkaran penuh pada mesin saya, yang OK menurut @Lembik. Terima kasih lagi kepada @PeterLenkefi atas sarannya - jawaban saya lebih dari setengahnya :)

EDIT 3: @Ajay menyarankan untuk menghapus "re" dari "repaint". Dua byte lebih sedikit. Kami sampai di sana :)


1
Kita harus mendapatkannya di bawah HTML (jadi <290 sekarang)
Peter Lenkefi

1
@PeterLenkefi: Sayangnya, saya tidak bisa menyelamatkan kawat gigi para pemain; casting hasil dosa / cos langsung mematahkan perhitungan. Pengecatan ulang di dalam cat Anda () sangat kotor :)
Franz D.

1
@Troyseph yang saya maksudkan untuk bermain golf;) Saya tidak menggunakan java untuk apa pun.
Peter Lenkefi

1
Menggunakan int c,idan menghilangkan intdi for(int i=..harus menyimpan lebih banyak.
Marco13

1
Anda bahkan tidak perlu deklarasi kelas untuk F, Anda hanya dapat memperpanjang Bingkai kelas inline: new Frame(){...}.
Magic Gurita Guci

9

Haskell, 143 136 byte

Ini menggunakan paket 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

Versi yang lebih cantik adalah

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

Anda dapat menghapus beberapa spasi putih.
dibuka kembali

@Elyse Memang, terima kasih. Saya juga menghapus dua yang tidak dibutuhkan .0.
Frerich Raabe

8

HTML (CSS?), 167 byte

Terinspirasi oleh insertusername, di sini ada jawaban

<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

Tidak Disatukan:

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


Hanya FYI, HTML + CSSbiasanya tidak dianggap sebagai bahasa pemrograman, namun terserah OP.
GamrCorps

1
Itu tidak melakukan apa pun di Firefox 41.0.2.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
Baru diuji pada Firefox 41.0.2, Win 10. Bekerja dengan baik untuk saya.
Lachlan Arthur

1
Bekerja untuk saya di 41.0.2 di ubuntu.

1
+1 Pemikiran yang bagus untuk hanya menghidupkannya bodysendiri. :)
masukkan nama pengguna di sini

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

Diuji pada QB64 , yang mengatakan itu memiliki versi Linux (meskipun saya baru mencobanya di Windows).

  • SCREEN 7 mengatur mode grafis.
  • COLOR 5,15 mengatur magenta gelap sebagai warna latar depan dan putih terang sebagai warna latar belakang.
  • DO ... LOOPadalah loop tak terbatas. Biasanya Anda akan melihatnya sebagai DO WHILE ... LOOP(atau Anda dapat meletakkannya LOOP WHILE, atau menggunakan UNTILuntuk kondisi yang dinegasikan), tetapi Anda juga dapat membiarkan kondisi tersebut keluar, dalam hal ini loop selamanya.
  • TIMER adalah jumlah detik sejak tengah malam, sebagai nilai titik-mengambang.
  • CLS = Layar CLear.
  • PSET SETs a Point to a color, foreground color secara default.
  • imulai dari nol dan dihitung dengan pi / 300 setiap kali melalui loop, sehingga menyelesaikan lingkaran penuh setelah 600 pengulangan. Kami menghitung pi sebagai 4 * arctan (1).
  • Baris terakhir menunggu hingga 0,1 detik telah berlalu. Ungkapan yang saya pelajari dari buku-buku QBasic saya adalah t# = TIMER: WHILE TIMER < t# + 0.1: WEND. Tetapi kita tidak membutuhkan angka presisi ganda (ditandai dengan #) untuk perbedaan 0,1 detik, dan ternyata IF cond THEN [GOTO] linesintaksnya 1 karakter lebih pendek dari satu WHILE ... WENDloop.

Loop berulang 600 kali dalam 60 detik, sehingga melengkapi lingkaran penuh.

Peringatan

  • Warna 5, magenta gelap, #8B008Bbukan yang diminta #800080(dibersihkan dengan OP).
  • Mode layar 7 adalah 320x200, dan lingkaran memiliki diameter 198, yang bukan> = 0,75 lebar tetapi> = 0,75 dari tinggi (juga dibersihkan dengan OP).
  • Jika Anda menjalankan ini pada DOS QBasic, ini adalah layar penuh, jadi "piksel" sebenarnya bukan satu piksel pada monitor (kecuali jika Anda memiliki monitor 320x200). Tetapi harus cukup dekat. QB64 berjalan di jendela yang menggunakan dimensi yang tepat, dan pikselnya adalah piksel literal.
  • Setidaknya dalam QB64, ini membutuhkan lebih dari 65 detik untuk membuat revolusi lengkap. Saya tidak benar-benar tahu mengapa; itu harus berupa kesalahan pembulatan atau overhead pada loop, meskipun saya sudah mencoba mengurangi keduanya tanpa hasil. Secara teori, kode harus bekerja dengan benar apa adanya. Dalam praktiknya, seseorang dapat mengubah jumlah yang iditambahkan hingga revolusi cukup dekat hingga 60 detik. (Coba denominator 69 atau 68.)
  • Tidak ada gambar cantik di sini. :( Kualitas LICEcap tidak cukup baik untuk menangkap satu piksel secara akurat.

Kode ini sangat cocok untuk saya di Linux. Terima kasih.

Ini sebenarnya berjalan di QBasic 4.5, tetapi latar belakangnya tidak terlalu putih :). Berikut ini adalah GIF yang dikompilasi dan dijalankannya: codegolf.square7.ch/altqb.gif
mınxomaτ

@ mınxomaτ Aneh, warna 15 harus memberikan putih atau abu-abu terang sesuai dengan semua yang saya tahu saya tahu ... yang terlihat seperti cyan terang (warna 11). Apa yang SCREEN 8bukannya 7dilakukan?
DLosc

Latar belakang kehijauan yang sama. Tapi Anda benar, menurut spec itu harus putih. Saya juga mencoba warna 7 (abu-abu) dan keluar sebagai abu-abu. Jadi solusi Anda benar-benar baik-baik saja, tetapi ada yang salah dengan DOS saya.
mınxomaτ

7

skrip mIRC, 184 byte

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
}

Ini dioptimalkan untuk mIRC dalam Wine. Mulai mIRC, tekan Alt + Rlalu tempel ini, tutup editor dan jalankan dengan/g

Pratinjau

Pengaturan waktu pada gif mungkin tidak aktif.


Ini yang baru pada saya! Akan lebih bagus jika Anda bisa membuat animasi gif agar berjalan.

Itu adalah salah satu bahasa pertama yang saya gunakan / membuat saya tertarik pada pengkodean!
Varis

6

R, 170 byte

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

Itu bergantung pada paket animation. Dan inilah gif untuk menunjukkannya berfungsi:

Di jendela

Hemat Solusi Tidak Valid ke gif (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")}})

Yang ini membutuhkan ImageMagick untuk diinstal. Hasilnya disimpan ke gif.

! [Berputar-putar ia pergi


Ini bagus namun .. tantangannya membutuhkan kode untuk menulis ke layar / jendela.

Oh, aku tidak mengerti itu.
plannapus

2
Ini dia, di jendela.
plannapus

6

Ruby with Shoes, 159 byte

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

Pixel sebenarnya adalah ujung jarum detik jam analog. Jadi yang ini sangat tepat.

Ruby with Shoes, 134 byte

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

Ini adalah alternatif berbasis frame per detik, terinspirasi oleh jawaban lain. Meskipun dokumentasi mengatakan fps default adalah 10, tes praktis menunjukkan itu sebenarnya 12.

Kedua solusi mengambil "Lebar lingkaran harus 0,75 (pembulatan yang sesuai) lebar layar atau jendela" secara harfiah: menghitung berdasarkan lebar jendela, sehingga piksel sesekali dapat meninggalkan bagian bawah jendela non-persegi. Tidak yakin bagaimana kasus seperti itu diharapkan ditangani. (Gunakan minimum lebar dan tinggi? Berjalan di jalur oval?) Jendela dimulai dengan ukuran standar 600 x 500 dan dapat diubah ukurannya.


Sangat senang melihat solusi Ruby! Sekarang kita membutuhkan Python, Perl, ....

5

D, 286 280 byte

(392 jika ditulis secara normal)

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

Atau cara saya awalnya menulisnya tanpa bermain 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;
        });
}

Bergantung pada simpledisplay.d dan color.d yang terletak di sini: https://github.com/adamdruppe/arsd

Cukup unduh kedua file tersebut dan letakkan di direktori yang sama dengan kode di atas, lalu: dmd yourfile.d simpledisplay.d color.dkompilasi dan jalankan saja.

Perpustakaan kecil saya ditulis untuk membuat animasi cepat seperti ini cukup sederhana sehingga ini memainkan kekuatannya! Sayangnya, saya agak suka nama pengidentifikasi panjang dan tidak menyediakan Pointkonstruktor yang membutuhkan waktu floatsehingga menambahkan 18 byte casting dan .... idk beberapa lusin mengeja nama metode saya.


1
Argumen pertama ke eventLoop btw adalah timer milidetik. Jika bukan nol, maka secara otomatis membuat timer untuk Anda dan memanggil fungsi dengan nol arg yang disediakan pada interval itu. (EventLoop juga dapat mengambil fungsi dengan argumen MouseEvent atau KeyEvent untuk menangani input pengguna). Jadi 50 milidetik interval = 20 frame per detik, jadi 20 * 60 = siklus dalam 60 detik.
Adam D. Ruppe

Saya pikir cara Anda telah menulis jawaban kode leaderboard mengambil 392 bukannya 280.

5

C #, 379 365 byte

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

Tergantung System.Windows.Formsdan System.Drawingdijalankan. Output dalam jendela 1000x1000.


Dapat menyimpan beberapa byte menggunakanvar
pinkfloydx33

Simpan byte lain menggunakan impor statis pada sistem matematika
pinkfloydx33

Anda dapat mendeklarasikan kode Anda di System namespace dan menghapus semua referensi lain ke sistem dan menyimpan saya pikir 10 byte
JustinM - Reinstate Monica

5

SVG, 177 byte

<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

Markup tidak valid dari neraka untuk sarapan, tetapi berjalan (setidaknya di Chrome). Seperti kanvas HTML5, ukuran default untuk SVG tampaknya 300x150, jadi itulah asumsinya.

Sunting: Whoops, saya tidak sengaja meninggalkan dalam durasi 6 bukannya 60. Memperbaiki itu, tetapi juga menemukan yang 0.5berfungsi sebagai adil .5, jadi tidak ada perubahan dalam jumlah byte.


5

Kode Mesin X86 - 150 146 149 133 127 byte

Versi golf:

        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.

'Tidak Digubah', versi sumber:

; 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

Versi enkode base64 yang dapat diunduh

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

Salin dan tempel alamat ini ke browser Anda. Ganti nama file yang dihasilkan golfcrcl.comdan jalankan di lingkungan DOS, yaitu DosBox.


Ini bagus! Diuji dan bekerja dengan sempurna.

1
Oh snap! Baru menyadari bahwa Anda menentukan warna yang akan digunakan dan saya benar-benar mengabaikannya. : oops: Saya akan memperbaikinya nanti. Indeks warna harus 0x5C, bukan 0x09 (dengan asumsi dosbox mengatur palet dengan benar, jika tidak, saya hanya akan memetakan ulang warna 1)
enhzflep

4

Mathematica 208 185 139 bytes

Memindahkan piksel ungu di sekitar array yang digunakan sebagai Gambar.

Metode 1 139 byte

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

Metode 2 154 byte

Plot piksel sepanjang jalur melingkar dalam 60 detik.

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

Metode 3 193 byte

Ini menggambar jam, dengan kutu dan label berwarna putih, di mana jarum detik adalah piksel.

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

Saya mengerti, kebingungan LTR dasar ... Tapi bagaimanapun, Anda dapat menghapus ruang antara 30dan t.
LegionMammal978

4

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

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

Jadi ini mungkin cara terburuk untuk melakukan apa pun, tetapi saya pikir saya akan mencoba.

Dapat dikompilasi di Mac (milik saya) dengan g++ -framework Cocoa file.mmdan dijalankan dari terminal ( ctrl-Cuntuk berhenti, karena itu bukan aplikasi).

tangkapan layar

Sunting: Disimpan 99 byte: Tetap main()berjalan pada OS X 10.10 (versi 1 hanya berjalan pada 10.8), melewatkan terjemahan / putar demi perhitungan kalkulasi trigonometri, berhenti mengganggu penempatan jendela, dan hal-hal kecil lainnya.

Sunting: Disimpan 10 byte lagi: Diubah menjadi hanya orderFrontuntuk menampilkan jendela. Tidak benar-benar membuatnya menjadi jendela depan, tetapi tidak juga orderFrontAndMakeKey, jadi ...

Sunting: Menyimpan 11 byte lainnya: Dilewati NSMakeRectdan menemukan digit yang baru saja pergi.

Sunting: Disimpan 14 byte lagi: Tidak perlu menetapkan NSTimerinstance untuk apa pun, dan tampaknya dapat melewatkan inisialisasi rke nol.

Sunting: Disimpan 15 byte lagi: Saya tidak bisa berhenti. Kirim bantuan.


Terima kasih. Obj-C ++ adalah pemenang yang jelas dalam kompetisi kode terpendek saat ini!

14
+1 untuk juga memenangkan kompetisi gambar non-animasi paling animasi .
Lynn

4

Javascript / Pemrosesan, 175 173 156 153 152 byte

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

Untuk menjalankan: kunjungi http://www.openprocessing.org/sketch/226733 untuk melihatnya beraksi menggunakan processing.js, atau unduh pemrosesan 2.0 dari processing.org , tempel kode ke IDE pemrosesan, pilih mode Javascript dan tonton itu pergi.


Lol, Anda memposting Pemrosesan 20 detik sebelum saya.
PurkkaKoodari

Apakah header salah dalam jawaban ini? Itu tidak muncul di leaderboard.

1
Merindukan itu, saya di sana sekarang.
Timothy Groote

1
sekarang harus memenuhi persyaratan 60 detik
Timothy Groote

1
background(-1)lebih pendek satu byte daribackground(255)
Kritixi Lithos

3

Elm , 274 byte

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

Coba atau edit di browser Anda:

Perhatikan bahwa jika kita menyingkirkan impor dan menggambar garis di sekitar kanvas, kita turun ke 149 byte, tapi itu mungkin curang!


Aduh, diperbaiki! Saya menjadi tidak sabar selama pengujian
jmite

1
Ini sangat bagus dan bagus untuk mendapatkan sesuatu dalam bahasa fungsional. Kami hanya perlu Haskell dan Scala sekarang!

2
@Lembik Saya baru saja menambahkan versi Haskell
Frerich Raabe

3

C #, 301 byte

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

Tergantung pada metrik ukuran standar; ukuran dan posisi mungkin sedikit berbeda tergantung pada sejumlah faktor. Mungkin atau mungkin tidak berkedip dengan buruk; untuk mengatasinya, tambahkan berikut ini:

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()menerima sebagai parameter waktu yang berlalu sejak frame sebelumnya. Menarik di jendela standar 800 x 600 pada koordinat tetap, karena jendela toh tidak resizable.


Jawaban lua pertama! Terima kasih.

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
Sangat luar biasa!

Sekarang kita hanya perlu solusi python + turtle juga.

3

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

Kompilasi & jalankan menggunakan gcc -I/usr/include/SDL snippet.c -lSDL -lm && ./a.out


Sangat luar biasa! Saya pikir tidak ada yang akan melakukannya.

2

ActionScript 2.0, 151 byte

Sayangnya, Adobe Flash tidak freeware, dan Google menginformasikan bahwa itu tidak bekerja di Linux tanpa VM atau Wine (dan bahkan dengan Wine, itu hanya sebagian besar berfungsi). Tetap saja, saya ingin melihat seberapa baik hal itu dalam tugas ini. Cukup bagus, ternyata.

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}

Ide dasarnya: buat objek klip video baru, posisikan di (200, 200), lalu gambar titik 2 di dalamnya 200 piksel lebih jauh ke kanan. Sekarang klip video adalah lebar 200 piksel dan tinggi 1 piksel. Titik pivot adalah koordinat asli tempat kami memulai, jadi ketika kami memodifikasi _rotationproperti, titik bergerak dalam lingkaran di sekitar titik (200, 200). Nyaman, _rotationdalam derajat; 0,25 derajat / bingkai * 24 bingkai / detik * 60 detik / menit = 360 derajat / menit.

Untuk menjalankan dari awal jika Anda memiliki Flash, buat dokumen Flash baru 1 , buka panel Tindakan, dan rekatkan kode di atas. Tidak diperlukan penyesuaian lebih lanjut, dengan asumsi latar belakang putih default, kanvas 550x400, dan 24 fps. Tekan Ctrl-Enter dan tontonlah.

Jika Anda tidak memiliki Flash itu sendiri, Anda masih dapat melihat hasilnya dengan Flash Player gratis, yang seharusnya datang dengan sebagian besar browser modern. Unduh file SWF di sini . Jika Anda tidak dapat memainkannya, coba unduh halaman HTML ini juga dan buka, dengan file SWF di direktori yang sama.

1 Diuji pada Adobe Flash CS4 Professional, memilih "Flash File (ActionScript 2.0)" ketika ditanya jenis file apa yang akan dibuat.

2 Sebenarnya segitiga kecil, karena Anda akan melihat apakah Anda cukup memperbesarnya. Itu cara golf yang bisa kutemukan untuk menggambar titik.


2

JavaScript dengan jQuery, 205 byte

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 , cuplikan di bawah

Ini mungkin tidak sesuai dengan buku. Ukuran default sebuah kanvas (setidaknya di Chrome) adalah 300x150, jadi saya memusatkan lingkaran pada 75x75. Saya dapat memusatkannya pada 150x75, dan membuat jari-jarinya 113px (~ 75% lebar), tapi itu akan berada di luar kanvas beberapa waktu, jadi saya memilih ~ 75% tinggi sebagai gantinya.

Tapi toh itu tidak terlalu pendek, jadi meh '


2

Blitz 2D / 3D , 126 byte

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

Sayangnya, bahasa ini hanya didukung di Windows (meskipun dapat berjalan di Wine).


2

Javascript ES6, 202 byte

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)

Diuji di Firefox 41.

Seperti jawaban Javascript murni lainnya (hampir), lingkaran dipusatkan pada 75x75 karena ukuran default elemen kanvas adalah 300x150 sebagaimana ditentukan oleh spesifikasi HTML.


2

Matlab, 141 136

Saya hanya mengirimkan ini untuk Anda, Lembik, untuk memiliki daftar lengkap.

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

Versi lama:

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.