Um único pixel se movendo em um caminho circular


45

Esse é um desafio de saída gráfica em que a tarefa é fornecer o menor código por idioma.

Tarefa

Seu código deve plotar um único pixel roxo (valor hexadecimal # 800080 ou rgb (128, 0, 128)), movendo-se no sentido horário em volta de um círculo. Demora exatamente 60 segundos para fazer uma viagem completa em volta do círculo e deve continuar indefinidamente. Nada mais deve ser mostrado na tela ou janela, exceto o pixel. A largura do círculo deve ser 0,75 (arredondar adequadamente) a largura da tela ou janela e o fundo deve ser branco. Para evitar soluções tolas, a tela ou janela deve ter pelo menos 100 pixels de largura.

Seu código deve ser um programa completo .

Línguas e bibliotecas

Você pode usar qualquer idioma ou biblioteca que desejar. No entanto, eu gostaria de poder testar seu código, se possível, para que você possa fornecer instruções claras sobre como executá-lo no Ubuntu que seriam muito apreciadas.

Faltam os vinte principais idiomas. Ajuda necessária.

Atualmente, as vinte principais linguagens de programação a seguir estão sem qualquer solução.

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

Catálogo

O snippet de pilha na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma lista da solução mais curta por idioma eb) como uma tabela geral de líderes.

Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:

## Language Name, N bytes

onde Nestá o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:

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

Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:

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

Você também pode transformar o nome do idioma em um link que será exibido no snippet:

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


1
qual raio deve ser o círculo?
Timothy Groote

19
Por que o pixel deve ser roxo? Eu diria que algumas linguagens como TI-Basic não tem capacidades de cor, o que significa que eles não podem ser usados para o desafio por uma razão abitrary muito
Fatalize

1
@Fatalize que não significa que você não pode jogar a cor no programa de uma maneira criativa e inteligente para salvar bytes.
Timothy Groote

3
@TimothyGroote O TI-BASIC possui principalmente apenas uma cor: preto. Tudo o resto é um pixel fora. Existem calculadoras C (SE) que possuem cores, mas nem todo mundo possui uma.
Conor O'Brien

10
Tenho certeza de que colocar um celofane roxo na tela não aumenta o tamanho do código em bytes. i significa que ele trabalhou vor do Vectrex;)
Timothy Groote

Respostas:


23

Processando , 101 97 96 bytes

4 bytes graças a Flambino.

1 byte graças a Kritixi Lithos.

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

Isso cria uma janela padrão de 100 por 100 pixels com a animação necessária.

janela de saída

Disclaimer: essa imagem não é um GIF. Não olhe para ele por um minuto.


2
Isso implementa a regra dos 60 segundos?

2
@Lembik Sim. A taxa de quadros padrão é 60 fps e estou aumentando os π/1800radianos dos ângulos de cada vez. (Foi a π/360010 segundos atrás por causa do meu peido cerebral.) #
PurkkaKoodari

5
@ Pietu1998 Isso brainfart deveu-se ao fato de que pi é errado
Cruncher

2
@Cruncher gotta love vi hart!
Tim

17
Ei, seu GIF não está funcionando, eu olhava para ele por um minuto, mas nada aconteceu
Beta Decay

16

QB64, 79 bytes

O QB64 é um emulador QBasic que adiciona alguns recursos interessantes. Este programa usa um ( CLS,15) que não é suportado pelo vanilla QBasic.

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

Isso é muito alto. Ele usa o PLAYcomando para interromper a execução por um curto período de tempo antes de limpar a tela; caso contrário, o pixel piscará e ficará invisível.

Faça o download do QB64 , carregue este arquivo, clique em Rune , em seguida Start.

Aqui está em ação:

o programa

Tomei alguns truques ( SCREEN 7em vez de SCREEN 13, e PSETem vez de POKE) de @ resposta de DLosc, então o crédito é devido. Como em sua resposta, minha magenta é realmente #8B008B, o que foi considerado aceitável pelo OP.

(A constante 9.55é uma aproximação de 30/π = 9.54929658551. Está perto o suficiente?)


Ha! Nunca pensei em usar PLAYpor um atraso. Poderia jurar que havia um código para descanso, mas não o vejo agora no arquivo de ajuda. Eu considerei usar (uma função de) TIMERcomo parâmetro, mas nunca tentei ver se era mais curto. Parabéns!
DLosc

4
Obrigado! Eu descaradamente tirei PSETde você, então parabéns :) Parece que um descanso n0é mais longo que isso c. Além disso, eu gosto disso como um pouco de flexão de regras: o OP disse que nada mais poderia ser mostrado na janela, mas nunca disse que meu programa não podia sair alto do BEEP BEEP BEEP BEEP BEEP .
Lynn

1
Não tenho nada contra os bipes, mas não consigo ver um pixel se movendo em torno de um círculo quando tento no linux.

1
Aqui está em ação na minha máquina, o que deve ser prova suficiente.
Lynn

12
Fiquei olhando a imagem por um tempo, porque você disse "aqui está em ação ".
mbomb007

14

Java, 449 443 439 bytes

Porque eu sempre tive idéias estúpidas. Como jogar golfe em 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();}}

Edit: Obrigado por @Ypnypn por jogar 7 bytes!

Edit2: Obrigado por @Franz D. por salvar 3 bytes!


7
Java está ganhando a mais longa mais curta competição código até agora :)

1
- Você não precisa inicializar variáveis ​​de membro para zero, para salvar dois bytes (~ 0,45%) convertendo "c = 0" para "c".
Franz D.

1
E você pode salvar mais um byte, inicializando a cor em hexadecimal, ou seja, nova cor (0x800080).
Franz D.

1
@FranzD. Melhor ainda - basta usar o número decimal 8388736.
Ypnypn

1
Livre-se JFrame, use Frame, permite remover a importação de javax.
Magic Octopus Urn

14

Mathematica, 102 101 94 bytes

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

Cria um círculo branco que está oculto e coloca um ponto que segue sua aresta de 0 a 2π. A DefaultDurationopção do Mathematica permite definir um loop a cada 60 segundos.

Aqui está uma versão acelerada da saída:

EDIT: Altere Circlepara Disksalvar 2 caracteres, adicionou um sinal negativo tpara fazê-lo mover no sentido horário.

EDIT: salvou 7 bytes usando o ~operador (graças a Mauris).


14
Mais uma prova de que o Mathematica é apenas uma linguagem de programação na qual você escreve algumas palavras vagas em inglês que meio que significam o que deseja e depois adiciona pontuação. (Ouvi dizer que você pode usar a~f~bem vez de f[a,b], que não iria fazer o seu Rotatemais curto?)
Lynn

1
Você também pode usar a notação de prefixo Point@{0,1}e acho que não precisa da lista Purple,Point....
Martin Ender

1
@Mauris. Para os olhos destreinados, o Mathematica pode de fato parecer vagas palavras e pontuação em inglês. Na realidade, eles são os nomes de funções, configurações e operadores específicos e bem definidos. A probabilidade de um não programador criar um código viável é zilch.
DavidC

3
@ David: Haha, é claro que eu estou ciente - Eu estava apenas brincando :)
Lynn

@Mauris, você me enganou!
achou

14

HTML, 235 290 295 354 347 bytes

<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

Salve como um .htmlarquivo e abra em um navegador que não precise de prefixos de fornecedores, como Chrome ou Firefox. Ou tente este violino .


Esta é uma versão nova, bem mais curta que a minha primeira tentativa, que eu havia escrito 5 minutos antes de uma reunião. O novo tamanho da tela é um quadrado com base na altura da janela de exibição. Isso funciona muito bem e não se restringe a uma certa altura definida. Eu sou muito preciso sobre as configurações do desafio (tamanho de 75% de seu pai, roxo e 1px). Portanto, preciso e não posso descartar ou simplificar as seguintes regras:

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

Ungolfed

Esta é a versão ungolfed com marcação limpa:

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

Editar% s

  • Adicionado 7 bytes . Eu pensei que ninguém notaria, que há uma flexibilização padrão na animação. ;) Eu configurei para linearagora.
  • Economizou 59 bytes lançando tudo o que o navegador manipulará automaticamente.
  • Economizou 3 bytes removendo o final )}}. Graças à escova de dentes .
  • Salva 2 bytes usando, em 12%vez de, 12pxo mesmo valor correspondente ao tamanho do elemento pai.
  • Economizados 55 bytes devido à refatoração massiva, também levaram muitos comentários em consideração. Muito obrigado por todas as contribuições.

1
Eu só queria comentar sobre o post, eu gostaria de ver uma solução puro html / css (ty para a apresentação de um)
Dwana

1
Usando o violino, a velocidade do pixel em movimento é muito desigual. Ele quase pára quando o pixel está na extrema esquerda. Alguma idéia do porquê?

1
@insertusernamehere :) Acho que a versão não-gasta precisa ser atualizada também agora.

5
Você deve optar pelo menor código de trabalho, independentemente da validade. Coisas como poluir o espaço para nome global são o par para o curso enquanto jogam golfe.
John Dvorak

2
Você pode soltar a )}}partir do final (o analisador de CSS terminará automaticamente os blocos) #
Toothbrush

14

TI-BASIC, 44 bytes

Para as calculadoras TI-84 + CSE / CE, que suportam alguns gráficos em cores BASIC limitados.

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

A cor aqui é magenta ou cor 13 (também é possível usar o MAGENTAtoken).

Em randvez disso, uso 1a condição de loop infinito para fornecer um pequeno atraso (~ 15 ms) entre quando o pixel é exibido e quando é desligado novamente.

Coloque sua calculadora no modo radiano antes de executar este programa; Não conto isso no tamanho, porque é o estado padrão. Também defina Anscomo 0 digitando um 0 antes do programa; este também é o padrão.

Agradecemos a @quartata por testar este programa (não possuo uma calculadora de cores).


Idéia ingênua: você pode fazer o programa se chamar em vez de usar um loop while, e isso seria mais curto?
Lynn

@Mauris o loop while é de 3 tokens, enquanto o nome de um programa geralmente é mais longo
TheDoctor

1
@Mauris O loop While, na verdade, tem 4 bytes, e é possível recuperar em 3, mas a pilha acaba rapidamente, após menos de 300 chamadas.
lirtosiast

@ Lembik Como você está bem com [ codegolf.stackexchange.com/a/62203/39328] , não vou mudar isso para ser mais suave.
lirtosiast

13

Java, 339 308 289 287 bytes

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

Graças a Peter Lenkefi, cuja ótima solução me deu início e cujo loop for copiei descaradamente!

A principal economia ocorreu devido à mudança para o AWT puro e à renderização diretamente no quadro - sem a necessidade de um JPanel (ou Canvas). Também tornei o contador uma variável inteira, atualizada por simples incremento, e salvei alguns bytes girando as constantes para poder retirar um dígito aqui e ali.

EDIT: Obrigado a Peter Lenkefi e @tobii por suas sugestões nos comentários. Bater HTML seria bom - alguém sabe como pausar a execução de maneira confiável em Java sem usar sleep () e ter que capturar exceções?

EDIÇÃO 2: JAVA BEATS HTML (atualmente em 290 bytes!): D O tempo agora depende da máquina, mas ~ 60 segundos para um círculo completo na minha máquina, o que é bom de acordo com @Lembik. Mais uma vez obrigado a PeterLenkefi por sua sugestão - minha resposta é mais da metade dele :)

EDIT 3: @Ajay sugeriu remover o "re" de "repintar". Dois bytes a menos. Estamos chegando lá :)


1
Nós temos que obtê-lo sob HTML (assim <290 agora)
Peter Lenkefi

1
@ PeterLenkefi: Infelizmente, não consigo salvar o aparelho do elenco; lançar o resultado sin / cos interrompe diretamente o cálculo. Seu repintura dentro paint () é incrivelmente :) sujo
Franz D.

1
@ Troyseph eu quis dizer para jogar golfe;) Eu não uso java para nada.
Peter Lenkefi

1
Usar int c,ie omitir o intin for(int i=..deve economizar um pouco mais.
precisa saber é o seguinte

1
Você não precisa mesmo da declaração de classe para F, você pode simplesmente estender a classe em linha quadro: new Frame(){...}.
Magic Octopus Urn

9

Haskell, 143 136 bytes

Isso usa o pacote de brilho :

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

A versão mais bonita é

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

Você pode remover alguns espaços em branco.
rightfold

@ Ellyse De fato, obrigado. Também removi dois desnecessários .0.
Frerich Raabe

8

HTML (CSS?), 167 bytes

Inspirado pela resposta de 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

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


Apenas um FYI, HTML + CSSgeralmente não é considerado uma linguagem de programação, mas depende do OP.
GamrCorps

1
Não faz nada no Firefox 41.0.2.
N

1
Acabei de testar no Firefox 41.0.2, Win 10. Funciona bem para mim.
Lachlan Arthur

1
Funciona para mim no 41.0.2 no ubuntu.

1
+1 Bom pensamento para apenas animar a bodysi mesmo. :)
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

Testado no QB64 , que diz ter uma versão Linux (embora eu só tenha experimentado no Windows).

  • SCREEN 7 define o modo gráfico.
  • COLOR 5,15 define magenta escura como cor de primeiro plano e branco brilhante como cor de fundo.
  • DO ... LOOPé um loop infinito. Geralmente, você a vê como DO WHILE ... LOOP(ou pode colocar LOOP WHILEou usar UNTILpara uma condição negada), mas também pode deixar a condição de fora; nesse caso, ela fica para sempre.
  • TIMER é o número de segundos desde a meia-noite, como um valor de ponto flutuante.
  • CLS = Limpar tela.
  • PSET Define um ponto para uma cor, cor de primeiro plano por padrão.
  • icomeça em zero e conta pi / 300 a cada vez no loop, completando assim um círculo completo após 600 repetições. Calculamos pi como 4 * arctan (1).
  • A última linha espera até 0,1 segundos. O idioma que aprendi com meus livros QBasic foi t# = TIMER: WHILE TIMER < t# + 0.1: WEND. Mas não precisamos de números de precisão dupla (marcados com #) para uma diferença de 0,1 segundo, e a IF cond THEN [GOTO] linesintaxe é 1 caractere menor que um WHILE ... WENDloop.

O loop se repete 600 vezes em 60 segundos, completando assim um círculo completo.

Ressalvas

  • A cor 5, magenta escura, é #8B008Bsubstituída pela solicitada #800080(limpa com o OP).
  • O modo de tela 7 é 320x200 e, portanto, o círculo tem diâmetro 198, que não é> = 0,75 da largura, mas é> = 0,75 da altura (também limpo com o OP).
  • Se você executar isso no DOS QBasic, é em tela cheia, então o "pixel" não é realmente um único pixel no monitor (a menos que você tenha um monitor de 320x200). Mas deve estar perto o suficiente. O QB64 é executado em uma janela que usa as dimensões exatas e, portanto, o pixel é um pixel literal.
  • No QB64, pelo menos, leva mais ou menos 65 segundos para fazer uma revolução completa. Eu realmente não sei o porquê; deve haver erros de arredondamento ou sobrecarga no loop, embora eu tenha tentado mitigar os dois sem êxito. Em teoria, o código deve funcionar corretamente como está. Na prática, pode-se ajustar a quantidade que ié incrementada até que uma revolução esteja perto o suficiente para 60 segundos. (Tente um denominador de 69 ou 68.)
  • Nenhuma imagem bonita aqui. :( A qualidade do LICEcap não era boa o suficiente para capturar um único pixel com precisão.

Este código funciona perfeitamente para mim no Linux. Obrigado.

Na verdade, isso é executado no QBasic 4.5, mas o fundo não é realmente branco :). Aqui está um GIF dele compilando e executando: codegolf.square7.ch/altqb.gif
mınxomaτ

@ mınxomaτ Estranho, a cor 15 deve dar branco ou cinza claro de acordo com tudo o que eu pensava que sabia ... que parece ciano claro (cor 11). O que em SCREEN 8vez de 7fazer?
31915 DLosc

O mesmo fundo esverdeado. Mas você está certo, de acordo com as especificações, deve ser branco. Eu também tentei a cor 7 (cinza) e saiu como cinza. Portanto, sua solução está absolutamente bem, mas há algo errado com o meu DOS.
mınxomaτ 29/10/2015

7

script mIRC, 184 bytes

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
}

Isso é otimizado para o mIRC no Wine. Inicie o mIRC, pressione Alt + Re cole, feche o editor e execute-o com/g

Pré-visualização

O tempo no gif pode estar desativado.


Este é um novo para mim! Seria ótimo se você pudesse criar um gif animado em execução.

Foi um dos primeiros idiomas que usei / me interessou em codificação!
Varis

6

R, 170 bytes

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

Depende do pacote animation. E aqui está um gif para mostrar que funciona:

Numa janela

Solução inválida salva em um 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")}})

Este requer que o ImageMagick esteja instalado. O resultado é salvo em um gif.

! [Rodando e rodando ele vai


Isso é ótimo, no entanto ... o desafio precisa do código para gravar na tela / janela.

Oh, eu não entendi isso.
plannapus

2
Aqui está, em uma janela.
plannapus

6

Rubi com Sapatos, 159 bytes

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

Na verdade, o pixel é a ponta do ponteiro dos segundos de um relógio analógico. Portanto, este é absolutamente preciso.

Rubi com Sapatos, 134 bytes

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

Essa é uma alternativa baseada em quadros por segundo, inspirada nas outras respostas. Embora a documentação diga que o fps padrão é 10, testes práticos mostram que na verdade é 12.

Ambas as soluções aceitam “A largura do círculo deve ser 0,75 (arredondar adequadamente) a largura da tela ou janela” literalmente: calcule com base na largura da janela, para que o pixel ocasionalmente possa deixar o fundo de uma janela não quadrada. Não tenho certeza de como esse caso deve ser tratado. (Use o mínimo de largura e altura? Andar no caminho oval?) A janela começa com o tamanho padrão de 600 x 500 e é redimensionável.


Muito prazer em ver uma solução Ruby! Agora precisamos Python, Perl, ....

5

D, 286 280 bytes

(392 se escrito normalmente)

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

Ou da maneira que escrevi originalmente sem jogar golfe:

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

Depende de simpledisplay.d e color.d localizado aqui: https://github.com/adamdruppe/arsd

Basta baixar esses dois arquivos individuais e colocá-los no mesmo diretório que o código acima e, em seguida: dmd yourfile.d simpledisplay.d color.dcompilar e apenas executá-lo.

Minha pequena biblioteca foi escrita para fazer animações rápidas como essa razoavelmente simples, então isso funciona bem em seus pontos fortes! Infelizmente, eu meio que gosto de nomes longos de identificador e não forneci um Pointconstrutor que leva, de floatmodo que adiciona 18 bytes de conversão e ... coloque algumas dezenas de nomes dos métodos.


1
O primeiro argumento para eventLoop btw é um timer de milissegundos. Se for diferente de zero, ele cria automaticamente um timer para você e chama a função com zero args fornecidos nesse intervalo. (eventLoop também pode aceitar funções com os argumentos MouseEvent ou KeyEvent para manipular a entrada do usuário). Então, intervalo de 50 milissegundos = 20 quadros por segundo, então 20 * 60 = alterna em 60 segundos.
Adam D. Ruppe

Eu acho que da maneira que você escreveu a resposta, o código da tabela de classificação pega 392 em vez de 280. #

5

C #, 379 365 bytes

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

Depende System.Windows.Formse System.Drawingpara executar. A saída está em uma janela de 1000 x 1000.


Pode salvar alguns bytes utilizandovar
pinkfloydx33

Salvar outro byte usando importação estática em matemática sistema
pinkfloydx33

você pode declarar o seu código no namespace System e remover todas as outras referências ao sistema e salvar eu acho que 10 bytes
JustinM - Reintegrar Monica

5

SVG, 177 bytes

<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

Marcação inválida do inferno para o café da manhã, mas é executada (pelo menos no Chrome). Como uma tela HTML5, o tamanho padrão de um SVG parece ser 300 x 150, então é isso que está assumindo.

Edit: Opa, eu acidentalmente deixei em uma duração de 6 em vez de 60. Corrigido isso, mas também achei que 0.5funciona como justo .5, então nenhuma alteração na contagem de bytes.


5

Código de máquina X86 - 150 146 149 133 127 bytes

Versão 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', versão de origem:

; 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

Versão codificada para base64, para download

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

Copie e cole este endereço no seu navegador. Renomeie o arquivo resultante golfcrcl.come execute em um ambiente DOS, ou seja, DosBox.


Isso é ótimo! Testado e funciona perfeitamente.

1
Oh snap! Acabei de perceber que você especificou uma cor para usar e eu a ignorei totalmente. : oops: vou consertar isso um pouco mais tarde. O índice de cor deve ser 0x5C, em vez de 0x09 (assumindo dosbox define a paleta corretamente, caso contrário, eu vou cor remapeamento 1)
enhzflep

4

Mathematica 208 185 139 bytes

Move um pixel roxo em torno de uma matriz usada como uma imagem.

Método 1 139 bytes

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

Método 2 154 bytes

Plota um pixel ao longo de um caminho circular em 60 segundos.

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

Método 3 193 bytes

Isso desenha um relógio, com carrapatos e rótulos em branco, para os quais o ponteiro dos segundos é um pixel.

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

Entendo, confusão básica de LTR ... Mas de qualquer maneira, você pode remover o espaço entre 30e t.
precisa

4

Obj-C ++ / cacau, 777 678 668 657 643 628 bytes

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

Então essa é provavelmente a pior maneira de fazer qualquer coisa, mas achei que tentaria.

Pode ser compilado em um Mac (de qualquer maneira, o meu) g++ -framework Cocoa file.mme executado no terminal ( ctrl-Cpara sair, pois não é um aplicativo).

captura de tela

Editado: 99 bytes salvos: corrigido main()para rodar no OS X 10.10 (a primeira versão era executada apenas no 10.8), ignorou a conversão / rotação em favor dos cálculos simples de trigonometria, parou de se preocupar com o posicionamento da janela e outras coisas pequenas.

Editar: salvou outros 10 bytes: mudou para apenas orderFrontpara exibir a janela. Na verdade, ele não é a janela da frente, mas também não orderFrontAndMakeKey...

Editar: salvou outros 11 bytes: pulou NSMakeRecte encontrou um dígito que só precisava ser executado.

Editar: salvou outros 14 bytes: não precisava atribuir a NSTimerinstância a nada e aparentemente pode pular a inicialização rpara zero.

Editar: salvou outros 15 bytes: não consigo parar. Envie ajuda.


Obrigado. O Obj-C ++ é o vencedor claro na maior competição de códigos mais curta atualmente!

14
+1 por também vencer a competição de imagens não animadas mais animadas .
Lynn

4

Javascript / Processingjs, 175 173 156 153 152 bytes

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

Para executar: visite http://www.openprocessing.org/sketch/226733 para vê-lo em ação usando o processing.js ou faça o download do processamento 2.0 do processing.org , cole o código no IDE de processamento, selecione o modo Javascript e assista isso ir.


Lol, você postou Processing 20 segundos antes de mim.
PurkkaKoodari

O cabeçalho está errado nesta resposta? Ele não aparece na tabela de classificação.

1
Perdi isso, estou nisso agora.
Timothy Groote

1
ele agora deve cumprir a exigência de 60 segundos
Timothy Groote

1
background(-1)é um byte mais curto quebackground(255)
Kritixi Lithos

3

Olmo , 274 bytes

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

Experimente ou edite-o no seu navegador:

Observe que, se nos livrarmos das importações e desenharmos o contorno da tela, reduziremos para 149 bytes, mas provavelmente isso é trapaça!


Opa, consertado! I ficou impaciente durante os testes
jmite

1
Isso é muito bom e é ótimo obter algo em uma linguagem funcional. Só precisamos de Haskell e Scala agora!

2
@Lembik Acabei de adicionar uma versão Haskell
Frerich Raabe

3

C #, 301 bytes

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

Depende das métricas de tamanho padrão; tamanho e posição podem ser um pouco diferentes, dependendo de vários fatores. Pode ou não piscar horrivelmente; para resolver isso, adicione o seguinte:

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

3

Lua + Amor, 189 caracteres

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()recebe como parâmetro o tempo decorrido desde o quadro anterior. Desenha na janela padrão de 800 x 600 em coordenadas fixas, pois a janela não é redimensionável de qualquer maneira.


A primeira resposta lua! Obrigado.

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
Pitontasticamente incrível!

Agora só precisamos de uma solução python + tartaruga também.

3

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

Compila e executa usando gcc -I/usr/include/SDL snippet.c -lSDL -lm && ./a.out


Incrivelmente ótimo! Eu pensei que ninguém faria isso.

2

ActionScript 2.0, 151 bytes

Infelizmente, o Adobe Flash não é freeware, e o Google informa que não funciona no Linux sem uma VM ou Wine (e mesmo com o Wine, ele funciona principalmente ). Ainda assim, eu queria ver como seria bom nessa tarefa. Muito bem, ao que parece.

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}

A idéia básica: crie um novo objeto de clipe de filme, posicione-o em (200, 200) e desenhe um ponto 2 nele 200 pixels mais à direita. Agora, o clipe de filme tem 200 pixels de largura e 1 pixel de altura. O ponto de pivô é as coordenadas originais onde começamos; portanto, quando modificamos a _rotationpropriedade, o ponto se move em um círculo ao redor do ponto (200, 200). Convenientemente, _rotationestá em graus; 0,25 graus / quadro * 24 quadros / segundo * 60 segundos / minuto = 360 graus / minuto.

Para executar a partir do zero, se você tiver o Flash, crie um novo documento do Flash 1 , abra o painel Ações e cole o código acima. Nenhuma personalização adicional é necessária, assumindo o plano de fundo branco padrão, tela de 550x400 e 24 fps. Pressione Ctrl-Enter e assista.

Se você não possui o Flash em si, ainda pode visualizar os resultados com o Flash Player gratuito, que deve ser fornecido com os navegadores mais modernos. Faça o download do arquivo SWF aqui . Se você não conseguir reproduzi-lo, tente fazer o download desta página HTML e abri-la, com o arquivo SWF no mesmo diretório.

1 Testado no Adobe Flash CS4 Professional, escolhendo "Arquivo Flash (ActionScript 2.0)" quando perguntado que tipo de novo arquivo criar.

2 Na verdade, é um triângulo pequeno, pois você verá se o amplia o suficiente. Foi a maneira mais divertida de encontrar um ponto.


2

JavaScript com jQuery, 205 bytes

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 , trecho abaixo

Talvez não seja exatamente assim. O tamanho padrão de uma tela (pelo menos no Chrome) é 300 x 150, então eu centralizei o círculo em 75 x 75. Eu poderia centralizá-lo em 150x75 e fazer o raio 113px (~ 75% da largura), mas ele ficaria fora da tela algumas vezes, então escolhi ~ 75% da altura.

Mas não é particularmente curto de qualquer maneira, então meh '


2

Blitz 2D / 3D , 126 bytes

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

Infelizmente, esse idioma é suportado apenas no Windows (embora possa ser executado no Wine).


2

Javascript ES6, 202 bytes

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)

Testado no Firefox 41.

Como a outra resposta Javascript (quase) pura, o círculo é centralizado em 75x75, já que o tamanho padrão dos elementos da tela é 300x150, conforme definido pelas especificações HTML.


2

Matlab, 141 136

Acabei de enviar isso para você, Lembik, para ter uma lista completa.

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

Versão antiga:

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.