พิกเซลเดียวเคลื่อนที่ในเส้นทางวงกลม


45

นี่คือความท้าทายในการแสดงผลกราฟิกที่งานคือการให้รหัสสั้นที่สุดต่อภาษา

งาน

รหัสของคุณควรพล็อตพิกเซลสีม่วงเดียว (ค่าเลขฐานสิบหก # 800080 หรือ rgb (128, 0, 128)) โดยเลื่อนตามเข็มนาฬิกาเป็นวงกลม ควรใช้เวลา 60 วินาทีในการเดินทางรอบวงกลมอย่างเต็มรูปแบบและควรดำเนินการต่อไปเรื่อย ๆ ไม่ควรแสดงสิ่งใดบนหน้าจอหรือหน้าต่างยกเว้นพิกเซล ความกว้างของวงกลมควรเท่ากับ 0.75 (การปัดเศษอย่างเหมาะสม) ความกว้างของหน้าจอหรือหน้าต่างและพื้นหลังควรเป็นสีขาว เพื่อป้องกันการแก้ปัญหาที่โง่เง่าหน้าจอหรือหน้าต่างควรมีความกว้างอย่างน้อย 100 พิกเซล

รหัสของคุณควรจะเป็นโปรแกรมเต็มรูปแบบ

ภาษาและห้องสมุด

คุณสามารถใช้ภาษาหรือไลบรารีที่คุณต้องการ อย่างไรก็ตามฉันต้องการทดสอบโค้ดของคุณถ้าเป็นไปได้ดังนั้นหากคุณสามารถให้คำแนะนำที่ชัดเจนเกี่ยวกับวิธีการเรียกใช้ใน Ubuntu ที่จะได้รับการชื่นชมอย่างมาก

ภาษาที่ขาดหายไปยี่สิบอันดับแรก ต้องการความช่วยเหลือ.

ภาษาการเขียนโปรแกรมยี่สิบอันดับแรกต่อไปนี้ไม่มีวิธีการแก้ปัญหาใด ๆ เลย

  • C , C ++, C # , Python , PHP , Visual Basic .NET , Perl, Pascal, ประกอบ , Objective-C , Swift, Pascal, Matlab / Octave , PL / SQL, OpenEdge ABL, R

แค็ตตาล็อก

สแต็คส่วนย่อยที่ด้านล่างของโพสต์นี้สร้างแคตตาล็อกจากคำตอบ a) เป็นรายการคำตอบสั้นที่สุดต่อภาษาและ b) เป็นลีดเดอร์บอร์ดโดยรวม

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

## Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

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

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

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

คุณยังสามารถทำให้ชื่อภาษาเป็นลิงก์ซึ่งจะปรากฏในตัวอย่างข้อมูล:

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


1
วงกลมควรมีรัศมีอะไร
Timothy Groote

19
ทำไมพิกเซลควรเป็นสีม่วง ฉันจะสมมติว่าบางภาษาเช่น TI-Basic ไม่มีความสามารถด้านสีซึ่งหมายความว่าพวกเขาไม่สามารถใช้สำหรับการท้าทายด้วยเหตุผลที่ไม่เหมาะสม
Fatalize

1
@ สรุปว่าไม่ได้หมายความว่าคุณไม่สามารถตีสีลงในโปรแกรมด้วยวิธีที่สร้างสรรค์เพื่อประหยัดไบต์
Timothy Groote

3
@ TimothyGroote TI-BASIC ส่วนใหญ่มีเพียงหนึ่งสี: ดำ ทุกอย่างเป็นพิกเซลแบบปิด มีเครื่องคิดเลข C (SE) ที่มีสี แต่ไม่ใช่ทุกคนที่มี
Conor O'Brien

10
ฉันแน่ใจว่าการใส่เซลลูล่าสีม่วงบนหน้าจอของคุณไม่ได้เพิ่มขนาดรหัสของคุณเป็นไบต์ ฉันหมายความว่ามันทำงาน vor Vectrex นั้น)
ทิโมธี Groote

คำตอบ:


23

การประมวลผล , 101 97 96 ไบต์

4 ไบต์ขอบคุณ Flambino

ขอบคุณ 1 ไบต์สำหรับ Kritixi Lithos

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

สิ่งนี้จะสร้างหน้าต่างเริ่มต้น 100 คูณ 100 พิกเซลพร้อมภาพเคลื่อนไหวที่จำเป็น

หน้าต่างเอาท์พุท

คำเตือน: ภาพนั้นไม่ใช่ GIF อย่าจ้องมองมันสักนาที


2
สิ่งนี้ใช้กฎ 60 วินาทีหรือไม่

2
@Lembik ใช่ อัตราเฟรมเริ่มต้นคือ 60 fpsและฉันเพิ่มค่ามุมπ/1800เรเดียนในแต่ละครั้ง (เมื่อπ/360010 วินาทีก่อนเพราะสมองผายลม)
PurkkaKoodari

5
@ Pietu1998 brainfart นั้นเกิดจากข้อเท็จจริงที่ว่าpi นั้นผิด
Cruncher

2
@ Cruncher ต้องรัก vi hart!
ทิม

17
เฮ้ GIF ของคุณไม่ทำงานฉันจ้องที่นี่เป็นเวลาหนึ่งนาที แต่ไม่มีอะไรเกิดขึ้น
Beta Decay

16

QB64, 79 ไบต์

QB64 เป็นอีมูเลเตอร์ QBasic ที่เพิ่มคุณสมบัติที่ดีบางอย่าง โปรแกรมนี้ใช้หนึ่ง ( CLS,15) ที่วานิลลาไม่ได้รับการสนับสนุน QBasic

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

มันดังมาก มันใช้PLAYคำสั่งเพื่อหยุดการทำงานชั่วครู่ก่อนที่จะล้างหน้าจอ; มิฉะนั้นพิกเซลจะสั่นไหวและมองไม่เห็น

ดาวน์โหลดQB64โหลดไฟล์นี้คลิกแล้วRunStart

นี่คือการกระทำ:

โปรแกรม

ฉันใช้เทคนิคบางอย่าง ( SCREEN 7แทนSCREEN 13และPSETแทนPOKE) จากคำตอบของ @ DLosc ดังนั้นเครดิตจึงครบกำหนด ในคำตอบของเขาสีม่วงแดงของฉันเป็นจริง#8B008Bซึ่ง OP ถือว่าเป็นที่ยอมรับ

(ค่าคงที่9.55คือการประมาณของ30/π = 9.54929658551มันใกล้เพียงพอหรือไม่)


ฮา! ไม่เคยคิดว่าจะใช้PLAYความล่าช้า ได้สาบานว่าจะมีรหัสสำหรับการพักผ่อน แต่ตอนนี้ฉันไม่เห็นมันในไฟล์ช่วยเหลือ ฉันพิจารณาการใช้ (ฟังก์ชัน) TIMERเป็นพารามิเตอร์ แต่ไม่เคยลองเพื่อดูว่ามันสั้นกว่านี้หรือไม่ รุ่งโรจน์!
DLosc

4
ขอบคุณ! ฉันลงคอยกPSETจากคุณดังนั้นรุ่งโรจน์กลับ :) ดูเหมือนว่าส่วนที่เหลือเป็นที่มีความยาวมากกว่าn0 cนอกจากนี้ฉันชอบมันเป็นกฎเล็กน้อย: OP กล่าวว่าไม่มีสิ่งใดปรากฏบนหน้าต่าง แต่ไม่เคยบอกว่าโปรแกรมของฉันไม่สามารถส่งเสียงบี๊บดังขึ้นได้
ลินน์

1
ฉันไม่มีอะไรเลยกับเสียงบี๊บ แต่จริง ๆ แล้วฉันไม่สามารถเห็นพิกเซลเคลื่อนที่วนเป็นวงกลมเมื่อฉันลองใช้ลินุกซ์

1
นี่คือการกระทำในเครื่องของฉันซึ่งควรจะเป็นหลักฐานที่เพียงพอ
ลินน์

12
ฉันจ้องมองที่ภาพชั่วขณะหนึ่งเพราะคุณพูดว่า "นี่มันเป็นการกระทำ "
mbomb007

14

Java, 449 443 439 ไบต์

เพราะฉันมีความคิดที่โง่เสมอ เช่นเดียวกับการเล่นกอล์ฟใน 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();}}

แก้ไข: ขอบคุณสำหรับ @Ypnypn สำหรับการเล่นกอล์ฟขนาด 7 ไบต์!

แก้ไข 2: ขอบคุณสำหรับ @Franz D. สำหรับการบันทึก 3 ไบต์!


7
Java ได้รับรางวัลการประกวดโค้ดที่สั้นที่สุดที่ยาวที่สุด :)

1
- คุณไม่จำเป็นต้องเริ่มต้นตัวแปรสมาชิกให้เป็นศูนย์ดังนั้นคุณสามารถบันทึกสองไบต์ (~ 0.45%) โดยการแปลง "c = 0" เป็น "c"
Franz D.

1
และคุณสามารถประหยัดได้อีกหนึ่งไบต์โดยการเริ่มต้นสีเป็นฐานสิบหกเช่น Color ใหม่ (0x800080)
Franz D.

1
@FranzD ดียิ่งขึ้น - 8388736ใช้เพียงตัวเลขทศนิยม
Ypnypn

1
กำจัดJFrameใช้Frameช่วยให้คุณสามารถลบการนำเข้า javax
Magic Octopus Urn

14

Mathematica, 102 101 94 ไบต์

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

สร้างวงกลมสีขาวที่ซ่อนอยู่และวางจุดที่ตามขอบจาก 0 ถึง2π DefaultDurationตัวเลือกของ Mathematica ให้ฉันตั้งค่าให้วนซ้ำทุก 60 วินาที

นี่เป็นเวอร์ชั่นเร่งความเร็วของเอาต์พุต:

แก้ไข: เปลี่ยนCircleเป็นDiskบันทึก 2 ตัวอักษรเพิ่มเครื่องหมายลบtเพื่อให้เลื่อนตามเข็มนาฬิกา

แก้ไข: บันทึก 7 ไบต์โดยใช้~โอเปอเรเตอร์ (ขอบคุณ Mauris)


14
หลักฐานเพิ่มเติมที่ Mathematica เป็นเพียงภาษาการเขียนโปรแกรมที่คุณเขียนคำศัพท์ภาษาอังกฤษที่คลุมเครือซึ่งหมายถึงสิ่งที่คุณต้องการแล้วเพิ่มเครื่องหมายวรรคตอน (ฉันได้ยินมาว่าคุณสามารถใช้a~f~bแทนf[a,b]นั่นจะไม่ทำให้คุณRotateสั้นลงหรือ?)
Lynn

1
นอกจากนี้คุณยังสามารถใช้คำนำหน้าสัญกรณ์และฉันไม่คิดว่าคุณต้องไปรอบ ๆPoint@{0,1} รายการ Purple,Point...
Martin Ender

1
@Mauris สำหรับ Mathematica นั้นอาจมีลักษณะเหมือนคำภาษาอังกฤษที่ไม่ชัดเจนและเครื่องหมายวรรคตอน ในความเป็นจริงมันเป็นชื่อของฟังก์ชั่นการตั้งค่าและโอเปอเรเตอร์ที่เฉพาะเจาะจง ความเป็นไปได้ที่ผู้ใช้ที่ไม่ใช่โปรแกรมเมอร์สามารถหมุนรหัสที่สามารถทำงานได้คือ zilch
DavidC

3
@ David: ฮ่า ๆ แน่นอนฉันรู้ - ผมก็แค่ล้อเล่น :)
ลินน์

@ เมาริสคุณหลอกฉัน!
DavidC

14

HTML, 235 290 295 354 347ไบต์

<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

บันทึกเป็น.htmlไฟล์และเปิดในเบราว์เซอร์ที่ไม่ต้องการคำนำหน้าผู้ขายเช่น Chrome หรือ Firefox หรือลองเล่นซอนี้


นี่เป็นเวอร์ชั่นใหม่ซึ่งสั้นกว่าความพยายามครั้งแรกของฉันฉันเขียน 5 นาทีก่อนการประชุม ขนาดผ้าใบใหม่เป็นสี่เหลี่ยมจัตุรัสตามความสูงวิวพอร์ต มันใช้งานได้ดีและไม่ได้ จำกัด อยู่ที่ความสูงที่กำหนดไว้ ฉันแม่นยำมากเกี่ยวกับการตั้งค่าในความท้าทาย (ขนาด 75% ของแม่สีม่วงและ 1px) ดังนั้นฉันต้องการและไม่สามารถทิ้งหรือทำให้กฎต่อไปนี้ง่ายขึ้น:

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

Ungolfed

นี่เป็นรุ่นที่ไม่ได้อัปโหลดที่มีมาร์กอัปแบบสะอาด:

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

การแก้ไข

  • เพิ่ม 7 ไบต์ ฉันคิดว่าจะไม่มีใครสังเกตเห็นว่ามีการเริ่มต้นทำให้สบายในภาพเคลื่อนไหว ;) ฉันได้ตั้งค่าเป็นlinearตอนนี้
  • บันทึก 59 ไบต์ด้วยการขว้างทุกอย่างที่เบราว์เซอร์จะจัดการโดยอัตโนมัติ
  • ที่บันทึกไว้ 3 ไบต์)}}โดยการลบต่อท้าย ขอขอบคุณที่แปรงสีฟัน
  • บันทึก 2 ไบต์โดยใช้12%แทน12pxซึ่งเป็นค่าเดียวกันที่สอดคล้องกับขนาดขององค์ประกอบหลัก
  • บันทึก 55 ไบต์เนื่องจากมีการรีแฟคเตอร์จำนวนมากและยังมีการแสดงความคิดเห็นจำนวนมากด้วย ขอบคุณมากสำหรับผลงานทั้งหมด

1
ฉันแค่อยากจะแสดงความคิดเห็นในโพสต์ฉันต้องการที่จะเห็นวิธีการแก้ปัญหา html / css บริสุทธิ์ (ty สำหรับการส่งหนึ่ง)
dwana

1
การใช้ซอความเร็วของพิกเซลที่เคลื่อนที่นั้นไม่สม่ำเสมอมาก มันเกือบจะหยุดชะงักเมื่อพิกเซลอยู่ทางด้านซ้ายสุด ความคิดใดทำไม

1
@insertusernamehere :) ฉันคิดว่าเวอร์ชั่นที่ไม่ดีต้องได้รับการอัปเดตด้วยเหมือนกัน

5
คุณควรไปเพื่อรหัสการทำงานที่เล็กที่สุดโดยไม่คำนึงถึงความถูกต้อง สิ่งต่าง ๆ เช่นการสร้างมลภาวะเนมสเปซทั่วโลกเป็นสิ่งที่ไม่ควรมองข้ามในขณะที่เล่นกอล์ฟ
John Dvorak

2
คุณสามารถดรอปได้)}}จากจุดสิ้นสุด (ตัวแยกวิเคราะห์ CSS จะสิ้นสุดบล็อกโดยอัตโนมัติ)
แปรงสีฟัน

14

TI-BASIC, 44 ไบต์

สำหรับเครื่องคิดเลข TI-84 + CSE / CE ซึ่งรองรับกราฟิกสีพื้นฐานบางอย่างที่ จำกัด

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

สีที่นี่คือสีม่วงแดงหรือสี 13 (หนึ่งสามารถใช้MAGENTAโทเค็น)

ฉันใช้randแทน1เงื่อนไขลูปอนันต์เพื่อให้เกิดความล่าช้าเล็กน้อย (~ 15 ms) ระหว่างเมื่อพิกเซลปรากฏขึ้นและเมื่อมันถูกปิดอีกครั้ง

ตั้งเครื่องคิดเลขเป็นโหมดเรเดียนก่อนเรียกใช้โปรแกรมนี้ ฉันไม่นับขนาดนี้เพราะมันเป็นสถานะเริ่มต้น ตั้งค่าAnsเป็น 0 โดยป้อน 0 ก่อนโปรแกรม; นี่เป็นค่าเริ่มต้นเช่นกัน

ขอบคุณ @quartata สำหรับการทดสอบโปรแกรมนี้ (ฉันไม่ได้เป็นเจ้าของเครื่องคิดเลขสี)


แนวคิดไร้เดียงสา: คุณสามารถทำให้โปรแกรมเรียกใช้ตัวเองแทนการใช้ลูป while และนั่นจะสั้นลงไหม
ลินน์

@Mauris the while loop คือ 3 โทเค็นในขณะที่ชื่อโปรแกรมมักจะยาวกว่า
TheDoctor

1
@Mauris The While ลูปจริง ๆ แล้วมี 4 ไบต์และเป็นไปได้ที่จะเรียกคืนเป็น 3 แต่สแต็กจะหมดเร็วมากหลังจากการโทรน้อยกว่า 300 ครั้ง
lirtosiast

@Lembik เพราะคุณสบายดีกับ [ codegolf.stackexchange.com/a/62203/39328]ฉันจะไม่เปลี่ยนมันให้ราบรื่น
lirtosiast

13

Java, 339 308 289 287 ไบต์

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

ขอบคุณ @Peter Lenkefi ซึ่งเป็นวิธีแก้ปัญหาที่ยอดเยี่ยมสำหรับฉันที่เริ่มขึ้น

การประหยัดหลักเกิดจากการเปลี่ยนไปใช้ AWT บริสุทธิ์และการเรนเดอร์โดยตรงใน Frame - ไม่จำเป็นต้องใช้ JPanel (หรือ Canvas) ฉันยังทำให้ตัวนับเป็นตัวแปรจำนวนเต็มอัปเดตโดยการเพิ่มอย่างง่ายและบันทึกสองสามไบต์ในการทวีค่าคงที่เพื่อให้สามารถตัดตัวเลขที่นี่และตรงนั้น

แก้ไข:ขอบคุณ @Peter Lenkefi และ @tobii สำหรับคำแนะนำในความคิดเห็น การเอาชนะ HTML จะดี - ไม่มีใครรู้วิธีหยุดการทำงานของ Java อย่างปลอดภัยโดยไม่ต้องใช้ sleep () และต้องจับข้อยกเว้น?

แก้ไข 2: JAVA BEATS HTML (ปัจจุบันอยู่ที่ 290 ไบต์!): D Timing ตอนนี้ขึ้นอยู่กับเครื่อง แต่ ~ 60 วินาทีสำหรับวงกลมเต็มบนเครื่องของฉันซึ่งก็โอเคตาม @Lembik ขอบคุณ @PeterLenkefi อีกครั้งสำหรับคำแนะนำของเขา - คำตอบของฉันมากกว่าครึ่งของเขา :)

แก้ไข 3: @Ajay แนะนำให้ลบ "ใหม่" ออกจาก "ทาสีใหม่" น้อยกว่าสองไบต์ เราไปถึงที่นั่น :)


1
เราต้องรับมันภายใต้ HTML (ดังนั้น <290 ตอนนี้)
Peter Lenkefi

1
@PeterLenkefi: น่าเสียดายที่ฉันไม่สามารถบันทึกวงเล็บปีกกาของนักแสดงได้ การคัดเลือกผลบาป / cos จะเป็นการหยุดการคำนวณโดยตรง สีทาสีภายในของคุณ () สกปรกอย่างไม่น่าเชื่อ :)
ฟรานซ์ดี.

1
@Troyseph ฉันหมายถึงการเล่นกอล์ฟ;) ฉันไม่ได้ใช้ java เพื่ออะไร
Peter Lenkefi

1
การใช้int c,iและถนัดintในfor(int i=..ควรบันทึกบางมากขึ้น
Marco13

1
คุณไม่จำเป็นต้องมีการประกาศคลาสสำหรับ F new Frame(){...}คุณก็สามารถขยายแบบอินไลน์ระดับกรอบ:
Magic Octopus Urn

9

Haskell, 143 136 ไบต์

สิ่งนี้ใช้แพ็คเกจความมันวาว :

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

รุ่นที่สวยกว่านี้คือ

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

คุณสามารถลบช่องว่างออกได้
rightfold

@Elyse แน่นอนขอบคุณ ฉันยังลบสองสิ่งที่ไม่จำเป็นออก.0ไป
Frerich Raabe

8

HTML (CSS?), 167 ไบต์

แรงบันดาลใจจากคำตอบของแทรกชื่อผู้ใช้ที่นี่

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


เพียงแค่ FYI HTML + CSSนั้นไม่ได้รับการพิจารณาว่าเป็นภาษาโปรแกรม แต่มันก็ขึ้นอยู่กับ OP
GamrCorps

1
ไม่ได้ทำอะไรเลยใน Firefox 41.0.2
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
เพิ่งทดสอบกับ Firefox 41.0.2 ชนะ 10 ใช้งานได้ดีสำหรับฉัน
Lachlan Arthur

1
ทำงานได้สำหรับฉันใน 41.0.2 ใน Ubuntu

1
+1 การคิดที่ดีที่จะทำให้bodyตัวเองมีชีวิตชีวา :)
insertusername ที่นี่

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

ทดสอบกับQB64ซึ่งบอกว่าเป็นรุ่น Linux (แม้ว่าฉันจะลองบน Windows เท่านั้น)

  • SCREEN 7 ตั้งค่าโหมดกราฟิก
  • COLOR 5,15 ตั้ง magenta สีเข้มเป็นสีพื้นหน้าและสีขาวสว่างเป็นสีพื้นหลัง
  • DO ... LOOPเป็นวงไม่สิ้นสุด โดยปกติแล้วคุณจะเห็นว่ามันเป็นDO WHILE ... LOOP(หรือคุณสามารถใส่LOOP WHILEแทนหรือใช้UNTILสำหรับเงื่อนไขเมื่อตะกี้) แต่คุณยังสามารถออกจากเงื่อนไขในกรณีที่มันลูปตลอดไป
  • TIMER คือจำนวนวินาทีตั้งแต่เที่ยงคืนเป็นค่าทศนิยม
  • CLS = หน้าจอ CLear
  • PSET ชุด a ชี้ไปที่สีสีพื้นหน้าโดยค่าเริ่มต้น
  • iเริ่มต้นที่ศูนย์และนับโดย pi / 300 ทุกครั้งที่ผ่านการวนซ้ำดังนั้นการทำให้ครบวงจรหลังจากการทำซ้ำ 600 ครั้ง เราคำนวณ pi เป็น 4 * arctan (1)
  • บรรทัดสุดท้ายรอจนกระทั่ง 0.1 วินาทีผ่านไป สำนวนที่ผมได้เรียนรู้จากหนังสือ QBasic t# = TIMER: WHILE TIMER < t# + 0.1: WENDของฉันคือ แต่เราไม่ต้องการตัวเลขความแม่นยำสองเท่า (ทำเครื่องหมายด้วย#) สำหรับความแตกต่าง 0.1 วินาทีและปรากฎว่าIF cond THEN [GOTO] lineไวยากรณ์คือ 1 ตัวอักษรสั้นกว่าWHILE ... WENDวน

การวนซ้ำซ้ำกัน 600 ครั้งใน 60 วินาทีจึงทำให้ครบวงจร

คำเตือน

  • สี 5, สีม่วงแดงเข้ม, #8B008Bแทนการร้องขอ#800080(ลบด้วย OP)
  • โหมดหน้าจอ 7 คือ 320x200 และดังนั้นวงกลมจึงมีเส้นผ่านศูนย์กลาง 198 ซึ่งไม่ใช่> = 0.75 ของความกว้าง แต่เป็น> = 0.75 ของความสูง (ลบด้วย OP)
  • หากคุณเรียกใช้งานบน DOS QBasic มันเป็นแบบเต็มหน้าจอดังนั้น "พิกเซล" จึงไม่ใช่พิกเซลเดียวบนจอภาพ (ยกเว้นว่าคุณมีจอภาพขนาด 320x200) แต่ควรใกล้พอ QB64 ทำงานในหน้าต่างที่ใช้ขนาดที่แน่นอนดังนั้นพิกเซลจึงเป็นพิกเซลที่แท้จริง
  • อย่างน้อยใน QB64 สิ่งนี้ใช้เวลามากกว่า 65 วินาทีในการปฏิวัติอย่างสมบูรณ์ ฉันไม่รู้จริงๆว่าทำไม ต้องเป็นข้อผิดพลาดในการปัดเศษหรือโอเวอร์เฮดในลูปแม้ว่าฉันจะพยายามบรรเทาทั้งสองโดยไม่ประสบความสำเร็จ ในทางทฤษฎีรหัสควรทำงานอย่างถูกต้องตามที่เป็นอยู่ ในทางปฏิบัติเราสามารถปรับจำนวนที่iเพิ่มขึ้นจนกว่าการปฏิวัติจะใกล้พอถึง 60 วินาที (ลองใช้ตัวหารที่ 69 หรือ 68)
  • ไม่มีรูปสวยเลย :( คุณภาพของ LICEcap นั้นไม่ดีพอที่จะจับภาพหนึ่งพิกเซลได้อย่างแม่นยำ

รหัสนี้ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันใน Linux ขอขอบคุณ.

สิ่งนี้ทำงานได้จริงใน QBasic 4.5 แต่พื้นหลังไม่ใช่สีขาวจริง ๆ :) นี่คือ GIF ที่คอมไพล์แล้วและทำงานอยู่: codegolf.square7.ch/altqb.gif
mınxoma15

@ mınxomaτแปลกสี 15 ควรให้สีขาวหรือสีเทาอ่อนตามทุกสิ่งที่ฉันคิดว่าฉันรู้ ... ที่ดูเหมือนสีฟ้าอ่อน (สี 11) อะไรSCREEN 8แทนการ7ทำอย่างไร
DLosc

พื้นหลังสีเขียวเหมือนกัน แต่คุณถูกต้องตามข้อมูลจำเพาะควรเป็นสีขาว ฉันลองสี 7 (สีเทา) และมันก็ออกมาเป็นสีเทา ดังนั้นทางออกของคุณก็โอเคอย่างแน่นอน แต่มีบางอย่างผิดปกติกับ DOS ของฉัน
mınxomaτ

7

สคริปต์ mIRC ขนาด 184 ไบต์

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
}

สิ่งนี้เหมาะสำหรับ mIRC ในไวน์ เริ่ม mIRC กดAlt + Rแล้ววางสิ่งนี้ปิดตัวแก้ไขและเรียกใช้ด้วย/g

ดูตัวอย่าง

เวลาใน gif อาจถูกปิด


นี่คือใหม่สำหรับฉัน! มันจะดีมากถ้าคุณสามารถทำให้ gif เคลื่อนไหวได้

มันเป็นหนึ่งในภาษาแรก ๆ ที่ฉันใช้ / ทำให้ฉันสนใจในการเขียนโค้ด!
Varis

6

R, 170 ไบต์

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

animationมันอาศัยอยู่กับแพคเกจ และนี่คือ gif เพื่อแสดงการทำงาน:

ในหน้าต่าง

โซลูชันไม่ถูกต้องบันทึกเป็น gif (139 bytes):

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

อันนี้ต้องติดตั้ง ImageMagick ผลลัพธ์จะถูกบันทึกเป็น gif

! [รอบและรอบมันไป


มันยอดเยี่ยม แต่ .. ความท้าทายต้องการรหัสเพื่อเขียนไปยังหน้าจอ / หน้าต่าง

โอ้ฉันไม่เข้าใจสิ่งนั้น
plannapus

2
นี่คือในหน้าต่าง
plannapus

6

ทับทิมกับรองเท้า 159 ไบต์

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

จริง ๆ แล้วพิกเซลเป็นส่วนปลายของเข็มวินาทีของนาฬิกาอะนาล็อก ดังนั้นอันนี้มีความแม่นยำอย่างแน่นอน

Ruby with Shoes ขนาด 134 ไบต์

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

นี่เป็นทางเลือกพื้นฐานเฟรมต่อวินาทีซึ่งได้แรงบันดาลใจจากคำตอบอื่น ๆ แม้ว่าเอกสารประกอบจะระบุค่าเริ่มต้นที่ fps คือ 10 แต่การทดสอบภาคปฏิบัติแสดงให้เห็นว่าเป็นจริง 12

วิธีแก้ปัญหาทั้งสองใช้“ ความกว้างของวงกลมควรเท่ากับ 0.75 (การปัดเศษอย่างเหมาะสม) ความกว้างของหน้าจอหรือหน้าต่าง” ตามตัวอักษร: คำนวณตามความกว้างของหน้าต่างดังนั้นบางครั้งพิกเซลอาจออกจากด้านล่างของหน้าต่างที่ไม่ใช่สี่เหลี่ยม ไม่แน่ใจว่าจะจัดการกรณีเช่นนี้ได้อย่างไร (ใช้ความกว้างและความสูงต่ำสุดหรือไม่เดินบนเส้นทางวงรี?) หน้าต่างเริ่มต้นด้วยขนาดเริ่มต้น 600 x 500 และปรับขนาดได้


ยินดีเป็นอย่างยิ่งที่ได้เห็นโซลูชันทับทิม! ตอนนี้เราต้องการ Python, Perl, ....

5

D, 286 280 ไบต์

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

หรือวิธีที่ฉันเขียนโดยไม่ต้องเล่นกอล์ฟ:

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

ขึ้นอยู่กับ simpledisplay.d และ color.d อยู่ที่นี่: https://github.com/adamdruppe/arsd

เพียงดาวน์โหลดไฟล์สองไฟล์เหล่านั้นและวางไว้ในไดเรกทอรีเดียวกันของคุณเป็นรหัสข้างต้นแล้ว: dmd yourfile.d simpledisplay.d color.dเพื่อรวบรวมและจากนั้นก็เรียกใช้

ห้องสมุดเล็ก ๆ ของฉันเขียนขึ้นเพื่อทำให้แอนิเมชั่นอย่างรวดเร็วเช่นนี้ค่อนข้างง่ายดังนั้นมันจึงเล่นได้ดีกับจุดแข็งของมัน! อนิจจาฉันชอบชื่อตัวระบุแบบยาวและไม่ได้จัดทำคอนPointสตรัคเตอร์floatที่เพิ่มขนาด 18 ไบต์และ .... idk สองสามโหลสะกดชื่อเมธอดของฉัน


1
อาร์กิวเมนต์แรกของ eventLoop btw คือตัวจับเวลามิลลิวินาที หากไม่ใช่ศูนย์มันจะตั้งเวลาให้คุณโดยอัตโนมัติและเรียกใช้ฟังก์ชันที่มีค่าศูนย์ args ที่ให้ไว้ในช่วงเวลานั้น (eventLoop ยังสามารถใช้ฟังก์ชั่นที่มี MouseEvent หรือ KeyEvent args เพื่อจัดการอินพุตผู้ใช้) ดังนั้นช่วงเวลา 50 มิลลิวินาที = 20 เฟรมต่อวินาทีดังนั้น 20 * 60 = รอบใน 60 วินาที
Adam D. Ruppe

ฉันคิดว่าวิธีที่คุณเขียนคำตอบรหัสลีดเดอร์บอร์ดเลือกขึ้น 392 แทนที่จะเป็น 280

5

C #, 379 365 ไบต์

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

ขึ้นอยู่กับSystem.Windows.Formsและที่System.Drawingจะเรียกใช้ เอาต์พุตอยู่ในหน้าต่าง 1000x1000


สามารถบันทึกไบต์โดยใช้var
pinkfloydx33

บันทึกไบต์อื่นโดยใช้การนำเข้าแบบคงที่ในระบบคณิตศาสตร์
pinkfloydx33

คุณสามารถประกาศรหัสของคุณใน System namespace และลบการอ้างอิงอื่น ๆ ทั้งหมดไปยังระบบและบันทึกฉันคิดว่า 10 ไบต์
Phaeze

5

SVG, 177 ไบต์

<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

มาร์กอัปไม่ถูกต้องจากนรกเป็นอาหารเช้า แต่มันทำงาน (ใน Chrome อย่างน้อย) เช่นเดียวกับผืนผ้าใบ HTML5 ขนาดเริ่มต้นของ SVG ดูเหมือนจะเป็น 300x150 ดังนั้นนี่คือสิ่งที่สมมติว่าเป็น

แก้ไข: อ๊ะฉันตั้งใจทิ้งไว้ในช่วงเวลา 6 แทนที่จะเป็น 60 แก้ไขเรื่องนั้น แต่ก็พบว่าใช้0.5งานได้เหมือน.5เดิมดังนั้นจึงไม่มีการเปลี่ยนแปลงจำนวนไบต์


5

X86 รหัสเครื่อง - 150 146 149 133 127 ไบต์

รุ่น Golfed:

        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' เวอร์ชันต้นฉบับ:

; 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

เวอร์ชันที่เข้ารหัส base64 ที่ดาวน์โหลดได้

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

คัดลอกและวางที่อยู่นี้ลงในเบราว์เซอร์ของคุณ เปลี่ยนชื่อไฟล์ผลลัพธ์golfcrcl.comและเรียกใช้ในสภาพแวดล้อม DOS เช่น DosBox


มันเยี่ยมมาก! ผ่านการทดสอบและใช้งานได้อย่างสมบูรณ์แบบ

1
โอ้โห! เพิ่งรู้ว่าคุณระบุสีที่จะใช้และฉันก็ไม่สนใจมันเลย : อ๊ะ: ฉันจะแก้ไขมันในภายหลัง ดัชนีสีควรเป็น 0x5C แทนที่จะเป็น 0x09 (โดยสมมติว่า dosbox ตั้งค่าพาเล็ตอย่างถูกต้องมิฉะนั้นฉันจะทำการแมปสีใหม่ 1)
ปรับปรุง

4

Mathematica 208 185 139 ไบต์

ย้ายพิกเซลสีม่วงรอบ ๆ อาร์เรย์ที่ใช้เป็นรูปภาพ

วิธีที่ 1 139 ไบต์

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

วิธีที่ 2 154 ไบต์

พล็อตพิกเซลตามเส้นทางวงกลมใน 60 วินาที

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

วิธีที่ 3 193 ไบต์

การทำเช่นนี้จะทำให้นาฬิกามีเครื่องหมายและป้ายกำกับเป็นสีขาวซึ่งเข็มวินาทีเป็นพิกเซล

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

ฉันเห็นความสับสน LTR พื้นฐาน ... แต่ anyways คุณสามารถลบช่องว่างระหว่างและ30 t
LegionMammal978

4

Obj-C ++ / Cocoa, 777 678 668 657 643 628 ไบต์

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

ดังนั้นนี่อาจเป็นวิธีที่เลวร้ายที่สุดในการทำสิ่งใด ๆ แต่ฉันคิดว่าฉันจะลอง

สามารถรวบรวมบน Mac (ของฉันต่อไป) ด้วยg++ -framework Cocoa file.mmและเรียกใช้จากเทอร์มินัล ( ctrl-Cเพื่อออกเนื่องจากไม่ใช่แอป)

ภาพหน้าจอ

แก้ไข: บันทึกแล้ว 99 ไบต์: แก้ไขmain()เพื่อให้ทำงานบน OS X 10.10 (รุ่นที่ 1 ใช้งานได้เพียง 10.8) ข้ามการแปล / หมุนเพื่อการคำนวณตรีโกณมิติธรรมดาหยุดรบกวนตำแหน่งหน้าต่างและสิ่งเล็ก ๆ อื่น ๆ

แก้ไข: บันทึกอีก 10 ไบต์: เปลี่ยนเป็นเพียงorderFrontเพื่อแสดงหน้าต่าง ไม่ทำให้หน้าต่างด้านหน้าเป็นจริง แต่ก็ไม่ได้ทำorderFrontAndMakeKeyเช่นนั้น ...

แก้ไข: บันทึกอีก 11 ไบต์: ข้ามNSMakeRectและพบตัวเลขที่ต้องไป

แก้ไข: บันทึกอีก 14 ไบต์: ไม่จำเป็นต้องกำหนดNSTimerอินสแตนซ์ให้กับอะไรและเห็นได้ชัดว่าสามารถข้ามการเริ่มต้นrเป็นศูนย์

แก้ไข: บันทึกอีก 15 ไบต์: ฉันหยุดไม่ได้ ส่งความช่วยเหลือ


ขอขอบคุณ. Obj-C ++ เป็นผู้ชนะที่ชัดเจนในการแข่งขันรหัสที่สั้นที่สุดที่ยาวที่สุดในขณะนี้!

14
+1 สำหรับยังเป็นผู้ชนะในภาพเคลื่อนไหวมากที่สุดไม่ใช่ภาพเคลื่อนไหวการแข่งขัน
ลินน์

4

Javascript / Processingjs, 175 173 156 153 152 ไบต์

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

ในการรัน: เยี่ยมชมhttp://www.openprocessing.org/sketch/226733เพื่อดูการทำงานโดยใช้ processing.js หรือดาวน์โหลดการประมวลผล 2.0 จากprocessing.orgวางรหัสลงใน IDE การประมวลผลเลือกโหมด Javascript และดู มันไป.


ฮ่า ๆ คุณโพสต์การประมวลผล 20 วินาทีก่อนหน้าฉัน
PurkkaKoodari

คำตอบนี้ผิดหรือไม่? ไม่ปรากฏในกระดานแต้มนำ

1
พลาดนั่นตอนนี้ฉันกำลังทำอยู่
Timothy Groote

1
ตอนนี้มันควรจะเป็นไปตามข้อกำหนด 60 วินาที
ทิโมธี Groote

1
background(-1)คือหนึ่งไบต์ที่สั้นกว่าbackground(255)
Kritixi Lithos

3

เอล์ม 274 ไบต์

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

ลองหรือแก้ไขในเบราว์เซอร์ของคุณ:

โปรดทราบว่าหากเรากำจัดการนำเข้าและวาดโครงร่างรอบ ๆ ผืนผ้าใบเราจะลดลงเหลือ 149 ไบต์ แต่นั่นอาจเป็นการโกง!


อ๊ะแก้ไขแล้ว! ฉันใจร้อนในระหว่างการทดสอบ
jmite

1
นี่เป็นสิ่งที่ดีมากและเป็นเรื่องดีที่จะได้รับบางสิ่งบางอย่างในภาษาที่ใช้งานได้ เราแค่ต้องการ Haskell และ Scala ตอนนี้!

2
@Lembik ฉันเพิ่งเพิ่มรุ่น Haskell
Frerich Raabe

3

C #, 301 ไบต์

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

ขึ้นอยู่กับการวัดขนาดเริ่มต้น ขนาดและตำแหน่งอาจแตกต่างกันไปขึ้นอยู่กับปัจจัยหลายประการ อาจหรือไม่สั่นไหวอย่างน่ากลัว; เพื่อแก้ปัญหานั้นเพิ่มต่อไปนี้:

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

3

Lua + Löve, 189 ตัวอักษร

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()ได้รับเป็นพารามิเตอร์เวลาที่ผ่านไปตั้งแต่เฟรมก่อนหน้า วาดในหน้าต่าง 800 x 600 ที่เป็นค่าเริ่มต้นที่พิกัดคงที่เนื่องจากหน้าต่างนั้นไม่สามารถปรับขนาดได้


คำตอบลัวะครั้งแรก! ขอขอบคุณ.

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 สุดยอด!

ตอนนี้เราแค่ต้องการโซลูชันของ python + turtle เช่นกัน

3

C (ใช้ 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);}}

รวบรวมและเรียกใช้โดยใช้ gcc -I/usr/include/SDL snippet.c -lSDL -lm && ./a.out


ยอดเยี่ยมมาก! ฉันคิดว่าจะไม่มีใครทำ

2

ActionScript 2.0, 151 ไบต์

น่าเสียดายที่ Adobe Flash ไม่ใช่ฟรีแวร์และ Google แจ้งว่าไม่สามารถใช้งานบน Linux ได้หากไม่มี VM หรือ Wine (และแม้กระทั่งกับ Wine ก็สามารถใช้งานได้เป็นส่วนใหญ่ ) ถึงกระนั้นฉันต้องการที่จะดูว่ามันจะทำอย่างไรกับงานนี้ ค่อนข้างดีมันเปิดออก

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}

แนวคิดพื้นฐาน: สร้างวัตถุคลิปภาพยนตร์ใหม่วางไว้ที่ (200, 200) แล้ววาดจุดที่2ในนั้นไกล 200 พิกเซล ตอนนี้คลิปภาพยนตร์กว้าง 200 พิกเซลและสูง 1 พิกเซล จุดหมุนคือพิกัดดั้งเดิมที่เราเริ่มต้นดังนั้นเมื่อเราปรับเปลี่ยน_rotationคุณสมบัติจุดจะเลื่อนเป็นวงกลมรอบ ๆ จุด (200, 200) สะดวกสบาย_rotationเป็นองศา 0.25 องศา / เฟรม * 24 เฟรม / วินาที * 60 วินาที / นาที = 360 องศา / นาที

หากต้องการเรียกใช้ตั้งแต่เริ่มต้นหากคุณมี Flash ให้สร้างเอกสาร Flash ใหม่1เปิดแผงการทำงานและวางโค้ดด้านบน ไม่จำเป็นต้องปรับแต่งเพิ่มเติมโดยสมมติว่ามีพื้นหลังสีขาวเริ่มต้นขนาดผ้าใบ 550x400 และ 24 เฟรมต่อวินาที กด Ctrl-Enter และดูมันไป

หากคุณไม่มี Flash เองคุณยังสามารถดูผลลัพธ์ด้วย Flash Player ฟรีซึ่งควรมาพร้อมกับเบราว์เซอร์ที่ทันสมัยที่สุด ดาวน์โหลด SWF ไฟล์ที่นี่ หากคุณไม่สามารถเล่นได้ให้ลองดาวน์โหลดหน้า HTML นี้ด้วยและเปิดขึ้นมาพร้อมกับไฟล์ SWF ในไดเรกทอรีเดียวกัน

1ทดสอบกับ Adobe Flash CS4 Professional โดยเลือก "Flash File (ActionScript 2.0)" เมื่อระบบถามว่าจะสร้างไฟล์ใหม่ประเภทใด

2จริง ๆ แล้วสามเหลี่ยมเล็ก ๆ อย่างที่คุณเห็นถ้าคุณซูมเข้ามันพอ มันเป็นวิธีที่กอล์ฟที่สุดที่ฉันจะหาได้เพื่อวาดจุด


2

JavaScript ด้วย jQuery, 205 ไบต์

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 , ตัวอย่างด้านล่าง

นี่อาจจะไม่ใช่หนังสือ ขนาดเริ่มต้นของผืนผ้าใบ (อย่างน้อยใน Chrome) คือ 300x150 ดังนั้นฉันจึงอยู่ตรงกลางวงกลมที่ 75x75 ฉันสามารถตั้งศูนย์ไว้ที่ 150x75 และทำให้รัศมี 113px (ความกว้างประมาณ 75%) แต่มันจะอยู่นอกผืนผ้าใบในบางครั้งดังนั้นฉันจึงเลือกความสูงประมาณ 75% แทน

แต่มันก็ไม่สั้นโดยเฉพาะดังนั้นฉันเลย '


2

Blitz 2D / 3D , 126 ไบต์

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

น่าเสียดายที่ภาษานี้ได้รับการสนับสนุนบน Windows เท่านั้น (แม้ว่าอาจทำงานใน Wine)


2

Javascript ES6, 202 ไบต์

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

เช่นเดียวกับคำตอบจาวาสคริปต์บริสุทธิ์อื่น ๆ (เกือบ) วงกลมอยู่ตรงกลางที่ 75x75 เนื่องจากขนาดผ้าใบเริ่มต้นคือ 300x150 ตามที่กำหนดโดยข้อกำหนด HTML


2

Matlab, 141 136

ฉันเพิ่งส่งสิ่งนี้ให้คุณ Lembik เพื่อให้มีรายการที่สมบูรณ์

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

เวอร์ชั่นเก่า:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.