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 N
está 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
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 62095; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 9206; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang, user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Respostas:
Processando ,
1019796 bytes4 bytes graças a Flambino.
1 byte graças a Kritixi Lithos.
Isso cria uma janela padrão de 100 por 100 pixels com a animação necessária.
Disclaimer: essa imagem não é um GIF. Não olhe para ele por um minuto.
fonte
π/1800
radianos dos ângulos de cada vez. (Foi aπ/3600
10 segundos atrás por causa do meu peido cerebral.) #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.Isso é muito alto. Ele usa o
PLAY
comando 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
Run
e , em seguidaStart
.Aqui está em ação:
Tomei alguns truques (
SCREEN 7
em vez deSCREEN 13
, ePSET
em vez dePOKE
) 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 de30/π = 9.54929658551
. Está perto o suficiente?)fonte
PLAY
por 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)TIMER
como parâmetro, mas nunca tentei ver se era mais curto. Parabéns!PSET
de você, então parabéns :) Parece que um descanson0
é mais longo que issoc
. 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 .Java,
449443439 bytesPorque eu sempre tive idéias estúpidas. Como jogar golfe em Java;).
Edit: Obrigado por @Ypnypn por jogar 7 bytes!
Edit2: Obrigado por @Franz D. por salvar 3 bytes!
fonte
8388736
.JFrame
, useFrame
, permite remover a importação de javax.Mathematica,
10210194 bytesCria um círculo branco que está oculto e coloca um ponto que segue sua aresta de 0 a 2π. A
DefaultDuration
opção do Mathematica permite definir um loop a cada 60 segundos.Aqui está uma versão acelerada da saída:
EDIT: Altere
Circle
paraDisk
salvar 2 caracteres, adicionou um sinal negativot
para fazê-lo mover no sentido horário.EDIT: salvou 7 bytes usando o
~
operador (graças a Mauris).fonte
a~f~b
em vez def[a,b]
, que não iria fazer o seuRotate
mais curto?)Point@{0,1}
e acho que não precisa da listaPurple,Point...
.HTML, 235
290295354347bytesSalve como um
.html
arquivo 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:
Ungolfed
Esta é a versão ungolfed com marcação limpa:
Editar% s
linear
agora.)}}
. Graças à escova de dentes .12%
vez de,12px
o mesmo valor correspondente ao tamanho do elemento pai.fonte
)}}
partir do final (o analisador de CSS terminará automaticamente os blocos) #TI-BASIC, 44 bytes
Para as calculadoras TI-84 + CSE / CE, que suportam alguns gráficos em cores BASIC limitados.
A cor aqui é magenta ou cor 13 (também é possível usar o
MAGENTA
token).Em
rand
vez disso, uso1
a 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
Ans
como 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).
fonte
Java,
339308289287 bytesGraç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á :)
fonte
int c,i
e omitir oint
infor(int i=..
deve economizar um pouco mais.new Frame(){...}
.Haskell,
143136 bytesIsso usa o pacote de brilho :
A versão mais bonita é
fonte
.0
.HTML (CSS?), 167 bytes
Inspirado pela resposta de insertusernamehere
Ungolfed:
fonte
HTML + CSS
geralmente não é considerado uma linguagem de programação, mas depende do OP.body
si mesmo. :)QBasic, 106
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ê comoDO WHILE ... LOOP
(ou pode colocarLOOP WHILE
ou usarUNTIL
para 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.i
começ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).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 aIF cond THEN [GOTO] line
sintaxe é 1 caractere menor que umWHILE ... WEND
loop.O loop se repete 600 vezes em 60 segundos, completando assim um círculo completo.
Ressalvas
#8B008B
substituída pela solicitada#800080
(limpa com o OP).i
é incrementada até que uma revolução esteja perto o suficiente para 60 segundos. (Tente um denominador de 69 ou 68.)fonte
SCREEN 8
vez de7
fazer?script mIRC, 184 bytes
Isso é otimizado para o mIRC no Wine. Inicie o mIRC, pressione
Alt + R
e cole, feche o editor e execute-o com/g
O tempo no gif pode estar desativado.
fonte
R, 170 bytes
Depende do pacote
animation
. E aqui está um gif para mostrar que funciona:Solução inválida salva em um gif (139 bytes):
Este requer que o ImageMagick esteja instalado. O resultado é salvo em um gif.
fonte
Rubi com Sapatos, 159 bytes
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
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.
fonte
D,
286280 bytes(392 se escrito normalmente)
Ou da maneira que escrevi originalmente sem jogar golfe:
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.d
compilar 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
Point
construtor que leva, defloat
modo que adiciona 18 bytes de conversão e ... coloque algumas dezenas de nomes dos métodos.fonte
C #,
379365 bytesDepende
System.Windows.Forms
eSystem.Drawing
para executar. A saída está em uma janela de 1000 x 1000.fonte
var
SVG, 177 bytes
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.5
funciona como justo.5
, então nenhuma alteração na contagem de bytes.fonte
Código de máquina X86 -
150146149133127 bytesVersão Golfed:
'Ungolfed', versão de origem:
Versão codificada para base64, para download
Copie e cole este endereço no seu navegador. Renomeie o arquivo resultante
golfcrcl.com
e execute em um ambiente DOS, ou seja, DosBox.fonte
Mathematica
208 185139 bytesMove um pixel roxo em torno de uma matriz usada como uma imagem.
Método 1 139 bytes
Método 2 154 bytes
Plota um pixel ao longo de um caminho circular em 60 segundos.
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.
fonte
30
et
.Obj-C ++ / cacau,
777678668657643628 bytesEntã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.mm
e executado no terminal ( ctrl-Cpara sair, pois não é um aplicativo).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
orderFront
para exibir a janela. Na verdade, ele não é a janela da frente, mas também nãoorderFrontAndMakeKey
...Editar: salvou outros 11 bytes: pulou
NSMakeRect
e encontrou um dígito que só precisava ser executado.Editar: salvou outros 14 bytes: não precisava atribuir a
NSTimer
instância a nada e aparentemente pode pular a inicializaçãor
para zero.Editar: salvou outros 15 bytes: não consigo parar. Envie ajuda.
fonte
Javascript / Processingjs,
175173156153152 bytesPara 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.
fonte
background(-1)
é um byte mais curto quebackground(255)
Olmo , 274 bytes
Experimente ou edite-o no seu navegador:
Versão pequena
Versão sem golfe
Observe que, se nos livrarmos das importações e desenharmos o contorno da tela, reduziremos para 149 bytes, mas provavelmente isso é trapaça!
fonte
C #, 301 bytes
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:
fonte
Lua + Amor, 189 caracteres
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.fonte
Python 2 + PyGame,
221198193fonte
C (usando SDL1.2),
237233Compila e executa usando
gcc -I/usr/include/SDL snippet.c -lSDL -lm && ./a.out
fonte
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.
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
_rotation
propriedade, o ponto se move em um círculo ao redor do ponto (200, 200). Convenientemente,_rotation
está 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.
fonte
JavaScript com jQuery, 205 bytes
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 '
Mostrar snippet de código
fonte
Blitz 2D / 3D , 126 bytes
Infelizmente, esse idioma é suportado apenas no Windows (embora possa ser executado no Wine).
fonte
Javascript ES6, 202 bytes
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.
fonte
Matlab,
141136Acabei de enviar isso para você, Lembik, para ter uma lista completa.
Versão antiga:
fonte