Một pixel di chuyển trong một đường tròn


45

Đây là một thách thức đầu ra đồ họa trong đó nhiệm vụ là đưa ra mã ngắn nhất cho mỗi ngôn ngữ.

Bài tập, nhiệm vụ

Mã của bạn nên vẽ một pixel màu tím duy nhất (giá trị hex # 800080 hoặc rgb (128, 0, 128)), di chuyển theo chiều kim đồng hồ quanh một vòng tròn. Sẽ mất đúng 60 giây để thực hiện một hành trình đầy đủ vòng tròn và sẽ tiếp tục vô tận. Không có gì khác phải được hiển thị trên màn hình hoặc cửa sổ ngoại trừ pixel. Chiều rộng của vòng tròn phải là 0,75 (làm tròn phù hợp) chiều rộng của màn hình hoặc cửa sổ và nền phải là màu trắng. Để ngăn các giải pháp ngớ ngẩn, màn hình hoặc cửa sổ phải rộng tối thiểu 100 pixel.

Mã của bạn phải là một chương trình đầy đủ .

Ngôn ngữ và thư viện

Bạn có thể sử dụng bất kỳ ngôn ngữ hoặc thư viện nào bạn thích. Tuy nhiên, tôi muốn có thể kiểm tra mã của bạn nếu có thể vì vậy nếu bạn có thể cung cấp hướng dẫn rõ ràng về cách chạy mã trong Ubuntu sẽ được đánh giá rất cao.

Thiếu hai mươi ngôn ngữ hàng đầu. Cần sự giúp đỡ.

Hai mươi ngôn ngữ lập trình hàng đầu sau đây hiện đang thiếu bất kỳ giải pháp nào.

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

Mục lục

Đoạn trích Stack ở cuối bài đăng này tạo ra danh mục từ các câu trả lời a) dưới dạng danh sách các giải pháp ngắn nhất cho mỗi ngôn ngữ và b) dưới dạng bảng xếp hạng tổng thể.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

## Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

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

Nếu bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ của thông dịch viên), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

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

Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích:

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


1
bán kính nên là hình tròn nào?
Timothy Groote

19
Tại sao pixel phải có màu tím? Tôi cho rằng một số ngôn ngữ như TI-Basic không có khả năng màu sắc, điều đó có nghĩa là chúng không thể được sử dụng cho thử thách vì một lý do khá
gớm ghiếc

1
@Firthize điều đó không có nghĩa là bạn không thể đánh bóng màu vào chương trình theo một cách sáng tạo thông minh nào đó để tiết kiệm byte.
Timothy Groote

3
@TimothyGroote TI-BASIC chủ yếu chỉ có một màu: đen. Mọi thứ khác là một pixel tắt. Có máy tính C (SE) có màu sắc, nhưng không phải ai cũng có.
Conor O'Brien

10
Tôi chắc chắn đặt một cellofane màu tím trên màn hình của bạn không thêm kích thước mã của bạn theo byte. ý tôi là nó hoạt động tốt với vectrex;)
Timothy Groote

Câu trả lời:


23

Đang xử lý , 101 97 96 byte

4 byte nhờ Flambino.

1 byte nhờ Kritixi Lithos.

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

Điều này tạo ra một cửa sổ 100 x 100 pixel mặc định với hình ảnh động được yêu cầu.

cửa sổ đầu ra

Disclaimer: hình ảnh đó không phải là một GIF. Đừng nhìn chằm chằm vào nó trong một phút.


2
Điều này có thực hiện quy tắc 60 giây không?

2
@Lembik Vâng. Tốc độ khung hình mặc định là 60 khung hình / giây và tôi đang tăng các π/1800radian góc một lần. (Đó là π/360010 giây trước vì não tôi xì hơi.)
PurkkaKoodari

5
@ Pietu1998 Sự cố não đó là do thực tế là pi sai
Cruncher

2
@Cruncher phải yêu vi hart!
Tim

17
Xin chào, GIF của bạn không hoạt động, tôi nhìn chằm chằm vào nó trong một phút nhưng không có gì xảy ra
Beta Decay

16

QB64, 79 byte

QB64 là trình giả lập QBasic bổ sung một số tính năng hay. Chương trình này sử dụng một ( CLS,15) không được hỗ trợ bởi vanilla QBasic.

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

Điều này rất lớn. Nó sử dụng PLAYlệnh để tạm dừng thực thi trong một thời gian ngắn trước khi xóa màn hình; nếu không thì pixel sẽ nhấp nháy và trở nên vô hình.

Tải xuống QB64 , tải tệp này, nhấp Runvà sau đó Start.

Đây là hành động:

chương trình

Tôi đã thực hiện một số thủ thuật ( SCREEN 7thay vì SCREEN 13PSETthay vì POKE) từ câu trả lời của @ DLosc, vì vậy tín dụng đáo hạn. Như trong câu trả lời của anh ấy, màu đỏ tươi của tôi thực sự #8B008B, được OP coi là chấp nhận được.

(Hằng số 9.55là một xấp xỉ của 30/π = 9.54929658551. Nó có đủ gần không?)


Hà! Không bao giờ nghĩ đến việc sử dụng PLAYcho một sự chậm trễ. Có thể đã thề có một mã cho phần còn lại, nhưng bây giờ tôi không thấy nó trong tệp trợ giúp. Tôi đã xem xét sử dụng (một hàm của) TIMERlàm tham số, nhưng chưa bao giờ thử nó để xem nó có ngắn hơn không. Thanh danh!
DLosc

4
Cảm tạ! Tôi xấu hổ nhấc lên PSETkhỏi bạn, vì vậy kudos trở lại :) Có vẻ như phần còn lại n0dài hơn c. Ngoài ra, tôi thích nó như một chút bẻ cong quy tắc: OP cho biết không có gì khác có thể được hiển thị trong cửa sổ, nhưng không bao giờ nói rằng chương trình của tôi không thể lớn tiếng đi BEPNG BEPNG BEPNG .
Lynn

1
Tôi không có gì chống lại tiếng bíp nhưng tôi thực sự không thể thấy một pixel di chuyển xung quanh một vòng tròn khi tôi thử trong linux.

1
Đây là hoạt động trên máy của tôi, cần có đủ bằng chứng.
Lynn

12
Tôi nhìn chằm chằm vào hình ảnh một lúc, bởi vì bạn nói "đây là hành động ".
mbomb007

14

Java, 449 443 439 byte

Bởi vì tôi luôn có những ý tưởng ngu ngốc. Giống như chơi golf trong Java;).

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

Chỉnh sửa: Cảm ơn @Ypnypn vì đã chơi golf 7 byte!

Edit2: Cảm ơn @Franz D. vì đã lưu 3 byte!


7
Java đang chiến thắng trong cuộc cạnh tranh mã ngắn nhất dài nhất cho đến nay :)

1
- Bạn không cần phải khởi tạo các biến thành viên thành 0, vì vậy bạn có thể lưu hai byte (~ 0,45%) bằng cách chuyển đổi "c = 0" thành "c".
Franz D.

1
Và bạn có thể lưu thêm một byte bằng cách khởi tạo màu ở dạng hex, tức là Màu mới (0x800080).
Franz D.

1
@FranzD. Thậm chí tốt hơn - chỉ cần sử dụng số thập phân 8388736.
Ypnypn

1
Loại bỏ JFrame, sử dụng Frame, cho phép bạn loại bỏ nhập javax.
Bạch tuộc ma thuật Urn

14

Toán học, 102 101 94 byte

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

Tạo một vòng tròn màu trắng bị ẩn và đặt một điểm theo cạnh của nó từ 0 đến 2π. DefaultDurationTùy chọn của Mathicala hãy để tôi thiết lập nó để hoàn thành một vòng lặp cứ sau 60 giây.

Đây là phiên bản tăng tốc của đầu ra:

EDIT: Thay đổi Circleđể Disklưu 2 ký tự, thêm dấu âm tđể làm cho nó di chuyển theo chiều kim đồng hồ.

EDIT: Đã lưu 7 byte bằng cách sử dụng ~toán tử (nhờ Mauris).


14
Bằng chứng nữa là Mathematica chỉ là một ngôn ngữ lập trình nơi bạn viết một số từ tiếng Anh mơ hồ có nghĩa là những gì bạn muốn, sau đó thêm dấu câu. (Tôi nghe nói bạn có thể sử dụng a~f~bthay vì f[a,b], điều đó có làm cho bạn Rotatengắn hơn không?)
Lynn

1
Bạn cũng có thể sử dụng ký hiệu tiền tố cho Point@{0,1}và tôi không nghĩ bạn cần danh sách xung quanh Purple,Point....
Martin Ender

1
@Mauris. Đối với con mắt chưa được huấn luyện, Mathicala thực sự có thể trông giống như những từ và dấu chấm câu tiếng Anh mơ hồ. Trong thực tế, chúng là tên của các chức năng, cài đặt và toán tử cụ thể, được xác định rõ. Khả năng mà một người không lập trình có thể tạo ra mã khả thi là zilch.
DavidC

3
@David: Haha, tất nhiên tôi biết - Tôi chỉ nói đùa :)
Lynn

@Mauris, Bạn đã lừa tôi!
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

Lưu dưới dạng .htmltệp và mở trong trình duyệt, không cần tiền tố của nhà cung cấp, như Chrome hoặc Firefox. Hoặc thử fiddle này .


Đây là phiên bản mới ngắn hơn so với lần thử đầu tiên của tôi, mà tôi đã viết 5 phút trước cuộc họp. Kích thước mới của khung vẽ là một hình vuông dựa trên chiều cao khung nhìn. Điều đó hoạt động khá tốt và không bị giới hạn ở một độ cao xác định. Tôi rất chính xác về các cài đặt trong thử thách (kích thước 75% của bố mẹ, màu tím và 1px). Do đó, tôi cần và không thể loại bỏ hoặc đơn giản hóa các quy tắc sau:

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

Ung dung

Đây là phiên bản chưa được chỉnh sửa với đánh dấu sạch:

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

Chỉnh sửa

  • Đã thêm 7 byte . Tôi nghĩ rằng không ai sẽ nhận thấy rằng có một sự nới lỏng mặc định trên hình ảnh động. ;) Tôi đã thiết lập nó linearbây giờ.
  • Đã lưu 59 byte bằng cách ném mọi thứ hủy bỏ mà trình duyệt sẽ tự động xử lý.
  • Đã lưu 3 byte bằng cách xóa dấu )}}. Nhờ bàn chải đánh răng .
  • Đã lưu 2 byte bằng cách sử dụng 12%thay vì 12pxđó là cùng một giá trị tương ứng với kích thước của phần tử cha.
  • Đã lưu 55 byte do tái cấu trúc lớn, cũng đã đưa rất nhiều ý kiến ​​vào tài khoản. Cảm ơn rất nhiều cho tất cả những đóng góp.

1
Tôi chỉ muốn bình luận về bài đăng, tôi muốn xem một giải pháp html / css thuần túy (ty để gửi một)
dwana

1
Sử dụng fiddle tốc độ của pixel di chuyển rất không đồng đều. Nó gần như dừng lại khi pixel ở phía bên trái. Bất cứ ý tưởng tại sao?

1
@insertusernamehere :) Tôi nghĩ rằng phiên bản chưa được chỉnh sửa cũng cần cập nhật.

5
Bạn nên tìm mã làm việc nhỏ nhất bất kể tính hợp lệ. Những thứ như gây ô nhiễm không gian tên toàn cầu là ngang bằng với khóa học trong khi chơi golf.
John Dvorak

2
Bạn có thể thả )}}từ cuối (trình phân tích cú pháp CSS sẽ tự động kết thúc các khối)
Bàn chải đánh răng

14

TI-BASIC, 44 byte

Đối với máy tính TI-84 + CSE / CE, hỗ trợ một số đồ họa màu BASIC hạn chế.

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

Màu ở đây là đỏ tươi, hoặc màu 13 (người ta cũng có thể sử dụng MAGENTAmã thông báo).

Tôi sử dụng randthay vì 1cho điều kiện vòng lặp vô hạn để cung cấp một chút độ trễ nhỏ (~ 15 ms) giữa khi pixel được hiển thị và khi nó bị tắt lần nữa.

Đặt máy tính của bạn ở chế độ radian trước khi chạy chương trình này; Tôi không tính kích thước này vì nó là trạng thái mặc định. Cũng được đặt Ansthành 0 bằng cách nhập 0 trước chương trình; đây cũng là mặc định

Cảm ơn @quartata đã thử nghiệm chương trình này (Tôi không sở hữu máy tính màu).


Ý tưởng ngây thơ: bạn có thể tự thực hiện chương trình gọi thay vì sử dụng vòng lặp while và điều đó có ngắn hơn không?
Lynn

@Mauris vòng lặp while là 3 mã thông báo, trong khi tên chương trình thường dài hơn
TheDoctor

1
@Mauris Vòng lặp While thực sự là 4 byte và có thể lặp lại trong 3, nhưng ngăn xếp hết rất nhanh, sau chưa đầy 300 cuộc gọi.
lirtosiast

@Lembik Vì bạn ổn với [ codegolf.stackexchange.com/a/62203/39328] , tôi sẽ không thay đổi điều này để mượt mà hơn.
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();}}

Cảm ơn @Peter Lenkefi, người đã bắt đầu giải pháp tuyệt vời cho tôi, và người mà tôi đã sao chép một cách đáng xấu hổ!

Việc tiết kiệm chính là do chuyển sang AWT thuần túy và hiển thị trực tiếp trong Khung - không cần JPanel (hoặc Canvas). Tôi cũng biến bộ đếm thành một biến số nguyên, được cập nhật theo mức tăng đơn giản và lưu một vài byte xoay các hằng số để có thể tách một chữ số ở đây và ở đó.

EDIT: Cảm ơn @Peter Lenkefi và @tobii vì những gợi ý của họ trong các bình luận. Đánh bại HTML sẽ rất tuyệt - có ai biết cách tạm dừng thực thi trong Java một cách đáng tin cậy mà không cần sử dụng chế độ ngủ () và phải bắt ngoại lệ không?

EDIT 2: JAVA BEATS HTML (hiện ở mức 290 byte!): D Thời gian hiện phụ thuộc vào máy, nhưng ~ 60 giây cho một vòng tròn đầy đủ trên máy của tôi, điều này ổn theo @Lembik. Một lần nữa xin cảm ơn @PeterLenkefi vì gợi ý của anh ấy - câu trả lời của tôi là hơn một nửa của anh ấy :)

EDIT 3: @Ajay đề nghị xóa "re" khỏi "sơn lại". Hai byte ít hơn. Chúng tôi đang đến đó :)


1
Chúng ta phải lấy nó dưới HTML (vì vậy <290 ngay bây giờ)
Peter Lenkefi

1
@PeterLenkefi: Thật không may, tôi không thể lưu niềng răng của các diễn viên; đúc kết quả sin / cos trực tiếp phá vỡ tính toán. Sơn lại của bạn bên trong sơn () cực kỳ bẩn :)
Franz D.

1
@Troyseph Ý tôi là chơi gôn;) Tôi không sử dụng java cho bất cứ điều gì.
Peter Lenkefi

1
Sử dụng int c,ivà bỏ qua inttrong for(int i=..nên tiết kiệm thêm một số.
Marco13

1
Bạn thậm chí không cần khai báo lớp cho F, bạn chỉ có thể mở rộng nội tuyến của lớp Frame : new Frame(){...}.
Bạch tuộc ma thuật Urn

9

Haskell, 143 136 byte

Điều này sử dụng gói độ bóng :

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

Phiên bản đẹp hơn là

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

Bạn có thể loại bỏ một số khoảng trắng.
đúng

@Elyse Thật vậy, cảm ơn. Tôi cũng loại bỏ hai thứ không cần thiết .0.
Frerich Raabe

8

HTML (CSS?), 167 byte

Lấy cảm hứng từ câu trả lời của 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

Ung dung:

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


Chỉ là một FYI, HTML + CSSthường không được coi là ngôn ngữ lập trình, tuy nhiên nó phụ thuộc vào OP.
GamrCorps

1
Nó không làm gì trên Firefox 41.0.2.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
Chỉ cần thử nghiệm trên Firefox 41.0.2, Win 10. Hoạt động tốt với tôi.
Lachlan Arthur

1
Hoạt động với tôi trong 41.0.2 trong Ubuntu.

1
+1 Suy nghĩ tốt để chỉ làm động bodychính nó. :)
insertusernamehere

7

QBasic, 106

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

Đã thử nghiệm trên QB64 , cho biết nó có phiên bản Linux (mặc dù tôi chỉ thử nó trên Windows).

  • SCREEN 7 đặt chế độ đồ họa.
  • COLOR 5,15 đặt màu đỏ tươi làm màu nền trước và màu trắng sáng làm màu nền.
  • DO ... LOOPlà một vòng lặp vô hạn. Thông thường bạn sẽ thấy nó như DO WHILE ... LOOP(hoặc bạn có thể đặt LOOP WHILEthay thế hoặc sử dụng UNTILcho điều kiện phủ định), nhưng bạn cũng có thể bỏ điều kiện đó, trong trường hợp đó nó lặp lại mãi mãi.
  • TIMER là số giây kể từ nửa đêm, dưới dạng giá trị dấu phẩy động.
  • CLS = Màn hình cắt.
  • PSET Đặt một điểm thành một màu, màu nền trước theo mặc định.
  • ibắt đầu từ 0 và đếm lên bằng pi / 300 mỗi lần qua vòng lặp, do đó hoàn thành một vòng tròn đầy đủ sau 600 lần lặp lại. Chúng tôi tính pi là 4 * arctan (1).
  • Dòng cuối cùng đợi cho đến khi 0,1 giây trôi qua. Thành ngữ mà tôi học được từ sách QBasic của mình là t# = TIMER: WHILE TIMER < t# + 0.1: WEND. Nhưng chúng ta không cần các số chính xác kép (được đánh dấu bằng #) cho chênh lệch 0,1 giây và hóa ra IF cond THEN [GOTO] linecú pháp ngắn hơn 1 ký tự so với một WHILE ... WENDvòng lặp.

Vòng lặp lặp lại 600 lần trong 60 giây, do đó hoàn thành một vòng tròn đầy đủ.

Hãy cẩn thận

  • Màu 5, màu đỏ sẫm, #8B008Bthay vì được yêu cầu #800080(xóa bằng OP).
  • Chế độ màn hình 7 là 320x200 và do đó, vòng tròn có đường kính 198, không> = 0,75 chiều rộng nhưng là> = 0,75 chiều cao (cũng được xóa bằng OP).
  • Nếu bạn chạy nó trên DOS QBasic, thì đó là toàn màn hình, do đó, "pixel" không thực sự là một pixel trên màn hình (trừ khi bạn có màn hình 320x200). Nhưng nó phải đủ gần. QB64 chạy trong một cửa sổ sử dụng các kích thước chính xác và do đó pixel là một pixel theo nghĩa đen.
  • Trong QB64 ít nhất, việc này mất hơn 65 giây để tạo nên một cuộc cách mạng hoàn chỉnh. Tôi thực sự không biết tại sao; nó phải là lỗi làm tròn hoặc phí trên vòng lặp, mặc dù tôi đã cố gắng giảm thiểu cả hai mà không thành công. Về lý thuyết, mã phải hoạt động chính xác. Trong thực tế, người ta có thể điều chỉnh số lượng ităng dần cho đến khi một cuộc cách mạng đủ gần đến 60 giây. (Hãy thử mẫu số 69 hoặc 68.)
  • Không có hình ảnh đẹp ở đây. :( Chất lượng của LICEcap không đủ tốt để chụp chính xác một pixel.

Mã này hoạt động hoàn hảo cho tôi trong Linux. Cảm ơn bạn.

Điều này thực sự chạy trong QBasic 4.5, nhưng nền không thực sự trắng :). Đây là một GIF của nó được biên dịch và chạy: codegolf.sapes7.ch/altqb.gif
mınxomaτ

@ mınxomaτ Lạ, màu 15 nên cho màu trắng hoặc xám nhạt theo mọi thứ tôi nghĩ tôi biết ... trông giống như màu lục lam nhạt (màu 11). Những gì hiện SCREEN 8thay vì 7làm gì?
DLosc

Cùng một nền màu xanh lục. Nhưng bạn đã đúng, theo thông số kỹ thuật nên có màu trắng. Tôi cũng đã thử màu 7 (màu xám) và nó có màu xám. Vì vậy, giải pháp của bạn là hoàn toàn ổn, nhưng có gì đó không ổn với DOS của tôi.
mınxomaτ

7

tập lệnh 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
}

Điều này được tối ưu hóa cho mIRC trong Wine. Bắt đầu mIRC, nhấn Alt + Rrồi dán này, đóng trình chỉnh sửa và chạy nó với/g

Xem trước

Thời gian trên gif có thể được tắt.


Đây là một cái mới trên tôi! Sẽ thật tuyệt nếu bạn có thể làm cho một gif hoạt hình của nó chạy.

Đó là một trong những ngôn ngữ đầu tiên tôi sử dụng / khiến tôi quan tâm đến tiền mã hóa!
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()}

Nó dựa vào gói animation. Và đây là một gif để hiển thị nó hoạt động:

Trong một cửa sổ

Giải pháp không hợp lệ lưu vào 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")}})

Cái này yêu cầu ImageMagick phải được cài đặt. Kết quả được lưu vào một gif.

! [Tròn và tròn nó đi


Điều này thật tuyệt vời .. thử thách cần mã để ghi vào màn hình / cửa sổ.

Ồ tôi không hiểu điều đó.
plannapus

2
Đây là, trong một cửa sổ.
plannapus

6

Ruby với Giày, 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 thực sự là đỉnh của kim giây của đồng hồ analog. Vì vậy, điều này là hoàn toàn chính xác.

Ruby với Giày, 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}}

Đây là một thay thế dựa trên khung hình mỗi giây, lấy cảm hứng từ các câu trả lời khác. Mặc dù tài liệu nói rằng khung hình / giây mặc định là 10, nhưng các thử nghiệm thực tế cho thấy nó thực sự là 12.

Cả hai giải pháp đều lấy Độ rộng của vòng tròn phải là 0,75 (làm tròn phù hợp) chiều rộng của màn hình hoặc cửa sổ theo nghĩa đen: tính toán dựa trên chiều rộng cửa sổ, do đó, thỉnh thoảng pixel có thể rời khỏi đáy của cửa sổ không vuông. Không chắc chắn làm thế nào trường hợp như vậy dự kiến ​​sẽ được xử lý. (Sử dụng tối thiểu chiều rộng và chiều cao? Đi bộ trên đường hình bầu dục?) Cửa sổ bắt đầu với kích thước mặc định 600 x 500 và có thể thay đổi kích thước.


Rất vui khi thấy một giải pháp Ruby! Bây giờ chúng ta cần Python, Perl, ....

5

D, 286 280 byte

(392 nếu được viết bình thường)

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

Hoặc cách tôi ban đầu viết nó mà không cần chơi 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;
        });
}

Phụ thuộc vào Simpledisplay.d và color.d nằm ở đây: https://github.com/adamdruppe/arsd

Chỉ cần tải xuống hai tệp riêng lẻ đó và đặt chúng vào cùng thư mục của bạn với đoạn mã trên, sau đó: dmd yourfile.d simpledisplay.d color.dđể biên dịch và sau đó chỉ cần chạy nó.

Thư viện nhỏ của tôi đã được viết để tạo ra các hình ảnh động nhanh như thế này khá đơn giản để nó phát huy tốt các thế mạnh của nó! Than ôi, tôi giống như các tên định danh dài và không cung cấp hàm Pointtạo floatđể thêm 18 byte truyền và .... idk vài chục đánh vần tên phương thức của tôi.


1
Đối số đầu tiên cho eventLoop btw là bộ đếm thời gian mili giây. Nếu nó khác không, nó sẽ tự động tạo bộ đếm thời gian cho bạn và gọi hàm với các đối số 0 được cung cấp tại khoảng thời gian đó. (eventLoop cũng có thể thực hiện các chức năng với MouseEvent hoặc KeyEvent args để xử lý dữ liệu nhập của người dùng). Vì vậy, khoảng thời gian 50 mili giây = 20 khung hình mỗi giây, do đó 20 * 60 = chu kỳ trong 60 giây.
Adam D. Ruppe

Tôi nghĩ rằng cách bạn đã viết câu trả lời, mã bảng xếp hạng chọn 392 thay vì 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);}}}

Phụ thuộc System.Windows.FormsSystem.Drawingđể chạy. Đầu ra là trong một cửa sổ 1000x1000.


Có thể lưu một số byte bằng cách sử dụngvar
Pinkfloydx33

Lưu một byte khác bằng cách nhập tĩnh trên toán học hệ thống
Pinkfloydx33

bạn có thể khai báo mã của mình trong không gian tên Hệ thống và xóa tất cả các tham chiếu khác đến hệ thống và lưu tôi nghĩ 10 byte
JustinM - Tái lập 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

Đánh dấu không hợp lệ từ địa ngục đến bữa sáng, nhưng nó chạy (ít nhất là trong Chrome). Giống như một khung vẽ HTML5, kích thước mặc định cho một SVG dường như là 300x150, vì vậy đó là những gì nó đang giả định.

Chỉnh sửa: Rất tiếc, tôi đã vô tình để lại trong khoảng thời gian 6 thay vì 60. Đã sửa lỗi đó, nhưng cũng thấy rằng nó 0.5hoạt động như chỉ .5, vì vậy không có thay đổi về số lượng byte.


5

Mã máy X86 - 150 146 149 133 127 byte

Phiên bản chơi gôn:

        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', phiên bản nguồn:

; 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

Có thể tải xuống, phiên bản mã hóa base64

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

Sao chép và dán địa chỉ này vào trình duyệt của bạn. Đổi tên tệp kết quả golfcrcl.comvà chạy trong môi trường DOS, tức là DosBox.


Điều đó thật tuyệt! Đã thử nghiệm và hoạt động hoàn hảo.

1
Ôi chao! Chỉ cần nhận ra rằng bạn đã chỉ định một màu để sử dụng và tôi hoàn toàn bỏ qua nó. : oops: Tôi sẽ sửa nó sau. Chỉ số màu phải là 0x5C, thay vì 0x09 (giả sử dosbox đặt palet chính xác, nếu không, tôi sẽ chỉ ánh
xạ

4

Toán học 208 185 139 byte

Di chuyển một pixel màu tím xung quanh một mảng được sử dụng làm Hình ảnh.

Phương pháp 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]

Phương pháp 2 154 byte

Vẽ một pixel dọc theo đường tròn trong 60 giây.

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

Phương pháp 3 193 byte

Điều này vẽ một đồng hồ, với các dấu và nhãn màu trắng, trong đó kim giây là một pixel.

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

Tôi hiểu rồi, sự nhầm lẫn LTR cơ bản ... Nhưng dù sao, bạn có thể loại bỏ khoảng trắng giữa 30t.
LegionMammal978

4

Obj-C ++ / Ca cao, 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;}

Vì vậy, đây có lẽ là cách tồi tệ nhất để làm bất cứ điều gì, nhưng tôi đoán tôi sẽ thử.

Có thể được biên dịch trên máy Mac (dù sao cũng là của tôi) g++ -framework Cocoa file.mmvà chạy từ thiết bị đầu cuối ( ctrl-Cđể thoát, vì đó không phải là một ứng dụng).

ảnh chụp màn hình

Chỉnh sửa: Đã lưu 99 byte: Đã sửa lỗi main()để chạy trên OS X 10.10 (phiên bản đầu tiên chỉ chạy vào ngày 10.8), bỏ qua dịch / xoay theo các tính toán đơn giản, ngừng làm phiền với vị trí cửa sổ và các thứ nhỏ khác.

Chỉnh sửa: Đã lưu 10 byte khác: Thay đổi thành chỉ orderFrontđể hiển thị cửa sổ. Mặc dù không thực sự biến nó thành cửa sổ phía trước, nhưng cũng không orderFrontAndMakeKey, vì vậy ...

Chỉnh sửa: Đã lưu 11 byte khác: Bỏ qua NSMakeRectvà tìm thấy một chữ số vừa phải đi.

Chỉnh sửa: Đã lưu 14 byte khác: Không cần gán NSTimerthể hiện cho bất cứ điều gì và rõ ràng có thể bỏ qua việc khởi tạo rthành không.

Chỉnh sửa: Đã lưu 15 byte khác: Tôi không thể dừng lại. Gửi giúp đỡ.


Cảm ơn bạn. Obj-C ++ là người chiến thắng rõ ràng trong cuộc thi mã ngắn nhất dài nhất hiện nay!

14
+1 cho chiến thắng trong cuộc thi hình ảnh không hoạt hình nhất .
Lynn

4

Javascript / Chế biến, 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);}

Để chạy: hãy truy cập http: //www.open Processing.org/sketch/226733 để xem nó hoạt động bằng cách sử dụng process.js hoặc tải xuống xử lý 2.0 từ process.org , dán mã vào IDE xử lý, chọn chế độ Javascript và xem nó đi.


Lol, bạn đã đăng Xử lý 20 giây trước tôi.
PurkkaKoodari

Là tiêu đề sai trong câu trả lời này? Nó không hiển thị trong bảng xếp hạng.

1
Bỏ lỡ điều đó, tôi đang ở trên đó.
Timothy Groote

1
bây giờ nó sẽ đáp ứng yêu cầu 60 giây
Timothy Groote

1
background(-1)ngắn hơn một byte so vớibackground(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))

Hãy thử hoặc chỉnh sửa nó trong trình duyệt của bạn:

Lưu ý rằng nếu chúng ta thoát khỏi việc nhập và vẽ phác thảo xung quanh khung vẽ, chúng ta sẽ giảm xuống còn 149 byte, nhưng điều đó có thể là gian lận!


Rất tiếc, đã sửa! Tôi đã mất kiên nhẫn trong quá trình thử nghiệm
jmite

1
Điều này là rất tốt và thật tuyệt khi có được một cái gì đó bằng ngôn ngữ chức năng. Chúng ta chỉ cần Haskell và Scala ngay bây giờ!

2
@Lembik Tôi vừa thêm phiên bản 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();};}}

Phụ thuộc vào số liệu kích thước mặc định; kích thước và vị trí có thể là một chút tùy thuộc vào một số yếu tố. Có thể hoặc không nhấp nháy khủng khiếp; Để giải quyết điều đó, hãy thêm vào như sau:

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

3

Lua + Löve, 189 ký tự

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()nhận làm tham số thời gian trôi qua kể từ khung trước. Vẽ trong cửa sổ 800 x 600 mặc định ở tọa độ cố định, vì dù sao cửa sổ không thể thay đổi kích thước.


Câu trả lời lua đầu tiên! Cảm ơn bạn.

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
Tuyệt vời!

Bây giờ chúng ta chỉ cần một giải pháp python + rùa quá.

3

C (sử dụng 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);}}

Biên dịch và chạy bằng gcc -I/usr/include/SDL snippet.c -lSDL -lm && ./a.out


Thật tuyệt vời! Tôi nghĩ rằng không ai sẽ làm điều đó.

2

ActionScript 2.0, 151 byte

Thật không may, Adobe Flash không phải là phần mềm miễn phí và Google thông báo rằng nó không hoạt động trên Linux mà không có VM hoặc Wine (và ngay cả với Wine, nó chỉ hoạt động chủ yếu ). Tuy nhiên, tôi muốn xem nó sẽ làm tốt như thế nào trong nhiệm vụ này. Khá tốt, nó bật ra.

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}

Ý tưởng cơ bản: tạo một đối tượng clip phim mới, đặt nó ở (200, 200), sau đó vẽ một chấm 2 trong đó 200 pixel xa hơn bên phải. Bây giờ clip phim rộng 200 pixel và cao 1 pixel. Điểm mấu chốt là tọa độ ban đầu nơi chúng tôi bắt đầu, vì vậy khi chúng tôi sửa đổi_rotation tính, dấu chấm di chuyển trong một vòng tròn quanh điểm (200, 200). Thuận tiện, _rotationlà bằng cấp; 0,25 độ / khung hình * 24 khung hình / giây * 60 giây / phút = 360 độ / phút.

Để chạy lại từ đầu nếu bạn có Flash, hãy tạo tài liệu Flash mới 1 , mở bảng Hành động và dán mã ở trên. Không cần tùy chỉnh thêm, giả sử nền trắng mặc định, vải bạt 550x400 và 24 khung hình / giây. Nhấn Ctrl-Enter và xem nó đi.

Nếu bạn không có Flash, bạn vẫn có thể xem kết quả với Flash Player miễn phí, đi kèm với hầu hết các trình duyệt hiện đại. Tải tập tin SWF tại đây . Nếu bạn không thể chơi nó, hãy thử tải xuống trang HTML này và mở nó, với tệp SWF trong cùng thư mục.

1 Đã thử nghiệm trên Adobe Flash CS4 Professional, chọn "Tệp flash (ActionScript 2.0)" khi được hỏi loại tệp mới sẽ tạo.

2 Trên thực tế là một hình tam giác nhỏ, như bạn sẽ thấy nếu bạn phóng to nó đủ. Đó là cách tốt nhất tôi có thể tìm thấy để vẽ một dấu chấm.


2

JavaScript với 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 , đoạn dưới đây

Điều này có thể không hoàn toàn bởi cuốn sách. Kích thước mặc định của khung vẽ (ít nhất là trong Chrome) là 300x150, vì vậy tôi đã căn giữa vòng tròn trên 75x75. Tôi có thể căn giữa nó trên 150x75 và tạo bán kính 113px (~ 75% chiều rộng), nhưng đôi khi nó sẽ ở bên ngoài khung vẽ, vì vậy tôi đã chọn ~ 75% chiều cao thay thế.

Nhưng dù sao nó cũng không đặc biệt ngắn, vì vậy 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

Thật không may, ngôn ngữ này chỉ được hỗ trợ trên Windows (mặc dù nó có thể chạy trong 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)

Đã thử nghiệm trong Firefox 41.

Giống như câu trả lời Javascript thuần túy (gần như) khác, vòng tròn được đặt ở giữa 75x75 do kích thước mặc định của các thành phần canvas là 300x150 như được xác định bởi thông số kỹ thuật HTML.


2

Matlab, 141 136

Tôi chỉ gửi cái này cho bạn, Lembik, để có một danh sách đầy đủ.

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

Phiên bản cũ:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.