円形のパスを移動する単一ピクセル


45

これは、タスクが言語ごとに最短のコードを提供することであるグラフィカル出力の課題です。

仕事

コードは、単一の紫色のピクセル(16進数値#800080またはrgb(128、0、128))をプロットし、時計回りに円を描いて移動する必要があります。円を一周するのにちょうど60秒かかり、無期限に継続する必要があります。ピクセル以外は、画面またはウィンドウに何も表示されません。円の幅は、画面またはウィンドウの幅の0.75(適切に丸める)で、背景は白である必要があります。愚かな解決策を防ぐには、画面またはウィンドウの幅を少なくとも100ピクセルにする必要があります。

あなたのコードは完全なプログラムでなければなりません。

言語とライブラリ

任意の言語またはライブラリを使用できます。ただし、可能な場合はコードをテストできるようにしたいので、Ubuntuでコードを実行する方法について明確な指示を提供できれば非常にありがたいです。

上位20言語がありません。助けが必要です。

現在、次の上位20のプログラミング言語にはソリューションがまったくありません。

  • C、C ++、C#PythonPHPVisual Basic .NET、Perl、Delphi / Object Pascal、アセンブリObjective-C、Swift、Pascal、Matlab / Octave、PL / SQL、OpenEdge ABL、R

カタログ

この投稿の下部にあるスタックスニペットは、a)言語ごとの最短ソリューションのリストとして、b)全体的なリーダーボードとして、回答からカタログを生成します。

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。

## Language Name, N bytes

N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

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

ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。

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

言語名をリンクにして、スニペットに表示することもできます。

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


1
円の半径はどのくらいですか?
ティモシーグルーテ

19
なぜピクセルは紫色でなければならないのですか?TI-Basicのような一部の言語にはカラー機能がないと思いますが、これはかなりの理由でチャレンジに使用できないことを意味します
-Fatalize

1
@Fatalizeは、バイトを節約するための賢い創造的な方法でプログラムに色を入れることができないという意味ではありません。
ティモシーグルーテ

3
@TimothyGroote TI-BASICの主な色は黒のみです。それ以外はすべてオフピクセルです。色を持つC(SE)電卓がありますが、誰もが持っているわけではありません。
コナーオブライエン

10
画面に紫色のセロファンを配置しても、コードサイズがバイト単位で増加することはありません。私はそれがvectrexで働いたことを意味します;)
ティモシー

回答:


23

処理中101 97 96バイト

Flambinoのおかげで4バイト

Kritixi Lithosのおかげで1バイト。

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

これにより、デフォルトの100 x 100ピクセルのウィンドウと必要なアニメーションが作成されます。

出力ウィンドウ

免責事項:その画像はGIFではありません。しばらく見つめないでください。


2
これは60秒ルールを実装していますか?

2
@Lembikはい。デフォルトのフレームレートは60 fpsで、角度π/1800ラジアンを一度に増やしています。(π/3600私の頭のおならのために10秒前でした。)
PurkkaKoodari

5
brainfartがあるという事実に起因したことPietu1998 @ piは間違っている
たけ

2
@Cruncherはviハートが大好きだ!
ティム

17
ちょっと、あなたのGIFは機能していません。ちょっと見つめましたが何も起こりませんでした
ベータ崩壊

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をクリックし、このファイルをロードしRun、その後とStart

ここに動作しています:

プログラム

@DLoscの答えから(のSCREEN 7代わりにSCREEN 13、そしてのPSET代わりにPOKE)いくつかのトリックを取りました。彼の答えのように、私のマゼンタは実際#8B008Bにはです。

(定数9.55はの近似値です30/π = 9.54929658551。十分近いですか?)


ハ!PLAY遅延のために使用することを考えたことはありません。休憩のためのコードがあったと断言できたかもしれませんが、ヘルプファイルには表示されていません。私は(の関数)TIMERをパラメータとして使用することを検討しましたが、それがより短いかどうかを確認しようとはしませんでした。称賛!
DLosc

4
感謝!私は恥知らずにPSETあなたから持ち上げたので、戻って称賛します:)休憩n0はの長さよりも長いようですc。また、私はルールを少し曲げるのが好きです:OPはウィンドウに他に何も表示できないと言ったが、私のプログラムが大声で行くことができないとは決して言わなかったBEEP BEEP BEEP BEEP
リン

1
私はビープ音に対して何もしませんが、Linuxで試してみると、実際にはピクセルが円の周りを移動しているのを見ることができません。

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

編集:ゴルフ7バイトの@Ypnypnをありがとう!

Edit2:3バイトを節約してくれた@Franz Dに感謝します!


7
Javaはこれまでで最長の最短コード競争で勝ち取っています:)

1
-メンバー変数をゼロに初期化する必要がないため、「c = 0」を「c」に変換することで2バイト(〜0.45%)節約できます。
フランツD.

1
そして、16進数で色を初期化することで、もう1バイト、つまり新しいColor(0x800080)を節約できます。
フランツD.

1
@FranzD。さらに良い-10進数を使用してください8388736
Ypnypn

1
getをJFrame使用してFrame、javaxインポートを削除できます。
魔法のタコUr

14

Mathematica、102 101 94バイト

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

隠された白い円を作成し、その端に0から2πまでの点を配置​​します。MathematicaのDefaultDurationオプションでは、60秒ごとにループを完了するように設定できます。

出力の高速バージョンは次のとおりです。

編集:に変更CircleDiskて2文字を保存し、マイナス記号を追加してt時計回りに移動します。

編集:~演算子を使用して7バイトを保存しました(Maurisに感謝)。


14
Mathematicaがプログラミング言語であり、あなたが望むものを意味する漠然とした英語の単語を書いてから、句読点を追加するだけであることのさらなる証明 (のa~f~b代わりに使用できると聞きましたがf[a,b]Rotate短くなりませんか?)
Lynn

1
プレフィックス表記を使用することもできPoint@{0,1}ますが、リストは必要ないと思いますPurple,Point...
マーティンエンダー

1
@モーリス。訓練を受けていない人には、Mathematicaは確かに曖昧な英単語や句読点のように見えるかもしれません。実際には、それらは特定の明確に定義された関数、設定、および演算子の名前です。非プログラマーが実行可能なコードをスピンアウトできる可能性は、ジルチです。
DavidC

3
@デビッド:ハハ、もちろん私は知っている-私はただ冗談を言っていた:)
リン

@モーリス、あなたは私をだましました!
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%; }

非ゴルフ

これは、クリーンなマークアップを備えたバージョンではありません

<!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
私はちょうど(1を提出するためのTY)私は純粋なHTML / CSSのソリューションを見たいのですが、投稿にコメントしたかった
dwana

1
フィドルを使用すると、移動ピクセルの速度は非常に不均一になります。ピクセルが左端にあるとき、ほとんど停止します。なぜアイデアがありますか?

1
@insertusernamehere :)私は、ゴルフされていないバージョンも今すぐ更新する必要があると思います。

5
有効性に関係なく、最小の作業コードを使用する必要があります。グローバルな名前空間を汚染するようなことは、ゴルフ中のコースにとってはパーです。
ジョンドヴォルザーク

2
)}}最後からドロップできます(CSSパーサーは自動的にブロックを終了します)
歯ブラシ

14

TI-BASIC、44バイト

一部の制限されたBASICカラーグラフィックスをサポートする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秒)のほんの少しを提供するために、無限ループ条件のために。

このプログラムを実行する前に、電卓をラジアンモードに設定してください。これはデフォルトの状態なので、サイズにはカウントしません。またAns、プログラムの前に0を入力して0に設定します。これもデフォルトです。

このプログラムをテストしてくれた@quartataに感謝します(私は色計算機を所有していません)。


素朴なアイデア:whileループを使用する代わりに、プログラム自体を呼び出すことができますか?
リン

@Mauris whileループは3トークンですが、プログラム名は通常より長い
です-TheDoctor

1
@Mauris Whileループは実際には4バイトであり、3で再帰することは可能ですが、300回未満の呼び出しの後、スタックはすぐになくなります。
リスト管理者

@Lembik [ codegolf.stackexchange.com/a/62203/39328]で問題ないので、これをスムーズに変更しません。
リスト管理者

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に感謝します。彼の素晴らしい解決策が私を始め、そのforループを恥知らずにコピーしました!

主な節約は、純粋なAWTへの切り替えとフレームでの直接レンダリングによるもので、JPanel(またはCanvas)は不要です。また、カウンターを整数変数にし、単純な増分で更新し、定数をいじって数バイトを節約して、あちこちで数字を削除できるようにしました。

編集:コメントでの提案について@Peter Lenkefiと@tobiiに感謝します。HTMLを破るのは良いことです-誰もが、sleep()を使用せずに例外をキャッチすることなく、Javaで実行を確実に一時停止する方法を知っていますか?

編集2: JAVA BEATS HTML(現在290バイト!):Dタイミングは現在マシンに依存していますが、私のマシン上の完全な円で約60秒です。これは@Lembikによれば問題ありません。彼の提案に対して@PeterLenkefiに再び感謝します-私の答えは彼の半分以上です:)

編集3: @Ajayは「repaint」から「re」を削除することを提案しました。2バイト少ない。私たちはそこに着いています:)


1
HTMLで取得する必要があります(したがって、現在<290)
Peter Lenkefi

1
@PeterLenkefi:残念ながら、キャストの中括弧を保存することはできません。sin / cosの結果をキャストすると、計算が直接中断されます。paint()内の再ペイントは非常に汚れています:)
フランツD.

1
@Troyseph私はゴルフをするつもりでした;)私は何にもJavaを使いません。
ピーターレンケフィ

1
in を使用int c,iして省略するとintfor(int i=..さらに節約できます。
マルコ13

1
Fのクラス宣言も必要ありません。Frameクラスをインラインで拡張できますnew Frame(){...}
魔法のタコUr

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

空白を削除できます。
右折

@Elyse確かに、ありがとう。不要な2つも削除しました.0
フレーリヒラーベ

8

HTML(CSS?)、167バイト

insertusernameにヒントを得た答えはこちら

<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

ゴルフをしていない:

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、Win 10でテストしました。私には問題ありません。
ラクランアーサー

1
41.0.2のUbuntuで動作します。

1
+1 bodyそれ自体をアニメーション化するための良い考え。:)
ユーザー名をここに挿入します

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 前景色として暗いマゼンタを設定し、背景色として明るい白を設定します。
  • DO ... LOOP無限ループです。通常、それはDO WHILE ... LOOP(またはLOOP WHILE代わりに置くかUNTIL、否定条件に使用できます)と表示されますが、条件を除外することもできます。その場合、ループは永久にループします。
  • TIMER 真夜中からの秒数で、浮動小数点値です。
  • CLS =クリア画面。
  • PSET Pointを色、デフォルトでは前景色に設定します。
  • 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構文はWHILE ... WENDループより1文字短いことがわかります。

ループは60秒で600回繰り返されるため、完全な円が完成します。

注意事項

  • 色5、濃いマゼンタ#8B008Bは、要求#800080されたものの代わりです(OPでクリアされます)。
  • 画面モード7は320x200であるため、円の直径は198で、幅の0.75以上ではなく、高さの0.75以上です(OPでもクリアされます)。
  • DOS QBasicでこれを実行すると、フルスクリーンであるため、「ピクセル」は実際にはモニター上の単一のピクセルではありません(320x200モニターを使用している場合を除く)。しかし、それは十分に近いはずです。QB64は正確な寸法を使用するウィンドウで実行されるため、ピクセルはリテラルピクセルです。
  • 少なくともQB64では、完全な革命を起こすには65秒ほどかかります。理由はよくわかりません。丸めエラーまたはループのオーバーヘッドのいずれかでなければなりませんが、成功せずに両方を軽減しようとしました。理論的には、コードは現状のまま正しく動作するはずです。実際には、1 i回転が60秒に十分近づくまで増分する量を微調整できます。(69または68の分母を試してください。)
  • ここにはきれいな絵はありません。:( LICEcapの品質は、単一のピクセルを正確にキャプチャするには不十分でした。

このコードはLinuxで完璧に機能します。ありがとうございました。

これは実際にはQBasic 4.5で実行されますが、背景は実際には白ではありませ :)。コンパイルと実行のGIFを以下に示します。codegolf.square7.ch
altqb.gif –mınxomaτ15年

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

これは、WineのmIRC用に最適化されています。mIRCを起動し、これを押してAlt + R貼り付け、エディターを閉じて実行します/g

プレビュー

gifのタイミングがずれている可能性があります。


これは私にとって新しいものです!実行中のアニメーションgifを作成できると便利です。

それは私が使用した/コーディングに興味を持った最初の言語の1つでした!
ヴァリス

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バイト):

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

ピクセルは、実際にはアナログ時計の秒針の先端です。これは絶対に正確です。

靴付きルビー、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サイズで始まり、サイズ変更可能です。


Rubyソリューションをご覧いただき、非常にうれしく思います!今、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

これらの2つの個別のファイルをダウンロードし、上記のコードと同じディレクトリに配置してdmd yourfile.d simpledisplay.d color.dから、コンパイルして実行するだけです。

私の小さなライブラリは、このようなクイックアニメーションをかなりシンプルにするために作成されたので、これはその長所を十分に発揮します!悲しいかな、私は長い識別子名が好きで、18バイトのキャストを追加するために必要なPointコンストラクタを提供しませんでしたfloat


1
eventLoop btwの最初の引数はミリ秒タイマーです。ゼロ以外の場合、自動的にタイマーを作成し、その間隔で提供されたゼロの引数で関数を呼び出します。(eventLoopは、ユーザー入力を処理するために、MouseEventまたはKeyEvent argsを持つ関数を取ることもできます)。したがって、50ミリ秒間隔= 20フレーム/秒なので、20 * 60 = 60秒でサイクルします。
アダムD.ルッペ

リーダーボードコードが280ではなく392を選択する答えを書いた方法だと思います。

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名前空間でコードを宣言し、システムに他のすべての参照を削除し、私は10バイトだと思います保存することができます
JustinM -復活モニカ

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のように見えるため、これが想定されています。

編集:おっと、60の代わりに6の期間で誤って残してしまいました。それを修正しましたが、それが0.5ちょうどとして機能することもわかった.5ので、バイトカウントに変更はありません。


5

X86マシンコード- 150の 146 149 133 127バイト

ゴルフバージョン:

        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
ああスナップ!あなたが使用する色を指定したことに気づきましたが、私はそれを完全に無視しました。:oops:少し後で修正します。カラーインデックスは0x09ではなく0x5Cにする必要があります(dosboxがパレットを正しく設定すると仮定します。それ以外の場合は、色1のみを再マップします)
enhzflep

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の混乱を参照してください...しかし、とにかく、あなたは間にスペースを削除することができます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(最初のバージョンは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を使用して動作を確認するか、processing.orgからprocessing 2.0をダウンロードし、コードを処理IDEに貼り付け、Javascriptモードを選択して監視します。行く


笑、あなたは私の20秒前に処理を投稿しました。
-PurkkaKoodari

この回答のヘッダーは間違っていますか?リーダーボードには表示されません。

1
それを逃した、私は今それをしています。
ティモシーグルーテ

1
60秒の要件を満たす必要があります
Timothy Groote

1
background(-1)より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ラーベ

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は、VMまたはWineなしではLinux上で動作しないことを通知しています(そして、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 fpsを想定して、これ以上のカスタマイズは不要です。Ctrlキーを押しながらEnterキーを押して、移動を確認します。

Flash自体を持っていない場合でも、最新のブラウザに付属しているはずの無料のFlash Playerで結果を表示できます。ここからSWFファイルをダウンロードします。再生できない場合は、このHTMLページもダウンロードして、同じディレクトリにSWFファイルを開いてみてください。

1 Adobe Flash CS4 Professionalでテストし、作成する新しいファイルの種類を尋ねられたときに「Flashファイル(ActionScript 2.0)」を選択します。

2実際に小さな三角形。十分にズームインすると表示されます。それはドットを描くのに私が見つけた最もゴルフらしい方法でした。


2

JavaScript w / 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でテスト済み。

他の(ほぼ)純粋なJavascriptの回答と同様に、キャンバス要素のデフォルトサイズはHTML仕様で定義されている300x150であるため、円の中心は75x75になります。


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.