Introdução
Um dia, você estava mostrando ao seu filho como desenhar no computador. Você digita mspaint.exe
na barra de execução. Para seu horror, ele diz "Nenhum item corresponde à sua pesquisa". Você deve criar uma versão simples da tinta para que seu filho possa desenhar!
Desafio
Você deve criar um programa de desenho simples. Para fazer isso, abra uma janela de exibição branca (maior que 99x99 pixels). Sempre que o mouse for pressionado, altere o pixel em que o mouse está preto.
Isso é código-golfe , então a resposta mais curta em bytes vence!
Pen
faz exatamente isso: oRespostas:
Código de máquina 8086,
32 31 2826 bytesAssume a presença de uma placa gráfica VGA e de qualquer driver de mouse compatível com a Microsoft.
-2 bytes graças a @berendi!
Como funciona:
É tudo o que há para isso. Nenhuma mágica envolvida, apenas algumas chamadas de função.
fonte
INT 33h
está retornando 0 inBX
, e isso é diminuído para FFFFh conforme o esperado, mas uma linha ainda está sendo desenhada. Talvez isso ocorra porque o modo 11h possui apenas uma página de vídeo e o número de página inválido está sendo corrigido automaticamente? Estou testando no VM VirtualBox, então talvez isso seja algo que sua implementação do BIOS esteja fazendo.int 0x10
,jmp
voltando ao segundoint 0x10
. O deslocamento emjmp
permanece o mesmo, ajuste o endereço emmov dx
Zero, 10 bytes de zero
O Scratch foi praticamente projetado para coisas assim.
Experimente online!
fonte
HTML + JavaScript (ES6),
66 6462 bytesHTML
Javascript
Economizou 2 bytes graças a Gustavo Rodrigues e 2 bytes de Shaggy.
fonte
<canvas id=c>
?c.
desde o início do seu JS. @ Anoplexian, esse é o corpo padrão quemargin
joga fora algumas pixels.C + Win32,
209200195 bytesObrigado, Cody e Quentin! Eu estava esperando para me livrar do,
#include <windows.h>
mas isso leva a todos os tipos de erros. Pelo menos, está funcionando corretamente com vários monitores ...Código anterior:
fonte
h
dentro dofor
inicializador para salvar dois bytes :)LOWORD
eHIWORD
se não a maneira correta para extrair coordenadas do cursor de um embaladoLPARAM
. Você deve estar usandoGET_X_LPARAM
eGET_Y_LPARAM
, caso contrário, obterá resultados errados com vários monitores.int main
que teria adicionado mais 4 bytes.(short)LOWORD()
e(short)HIWORD()
resolveria o problema?main
tipo de retorno da função (por causa daint
regra implícita ). O único problema é omitir oreturn 0;
comportamento indefinido das causas em C89 e MSVC. Em C99 e C ++, você precisa de um tipo de retorno paramain
, mas oreturn 0;
é implícito e, portanto, desnecessário. Bem, a linguagem não foi feita para o código de golfe. :-)Processando,
9879 bytes19 bytes salvos graças a @dzaima
Explicação (desatualizada)
fonte
size(100,100);
que não precisa ser mencionado, obrigado! (também não sei por que eu não vi oif(mousePressed)
bit)JavaScript ES6, 126 bytes
Testado em cromo.
Experimente online!
fonte
Haskell,
189184170169 bytesIsso usa a
Gloss
biblioteca (v1.11). Ele abre uma janela de tela cheia e pinta pixels pretos (na verdade, círculos com o raio 1) pressionando o botão esquerdo do mouse. PressioneESC
para sair.Como funciona:
Edit: @ cessou de girar no sentido contrário, disse-me sobre a versão mais recente do gloss, que economiza 5 bytes ao usar janelas de tela cheia. Obrigado!
fonte
FullScreen
é nulo em brilho> = 1.11, reduzindo a pontuação em 5. (Estou recebendo um errounknown GLUT entry glutInit
, mas provavelmente minha configuração de excesso simplesmente não funciona; nunca a usei nesta máquina.)SmileBASIC 2,
5251 bytesEste é executado no pai do SmileBASIC, Petit Computer (e é
umbyte mais curto.)Explicação:
fonte
GPSET TCHX,TCHY:GOTO@A
pois a cor padrão é 0 (transparente).Javascript + jQuery 138 bytes
Confira on-line!
Adicionar suporte de clicar e arrastar seria simples; no entanto, você definiria uma variável de acordo com as instruções e para reduzir o código, ele não é suportado: "Sempre que o mouse for pressionado, altere o pixel em que o mouse está preto" . Eu interpretei a instrução como um
click
evento.fonte
SpecBAS -
6159 bytesO preto já é a cor padrão da caneta, mas o fundo geralmente é um tom desagradável de cinza, então o
CLS 15
define para branco brilhante.fonte
GOTO
tornar-seGO TO
)SmileBASIC,
705853 BytesExplicado:
fonte
Clojure,
9171 bytes-20 bytes graças a @cfrick por apontar que eu posso usar
use
para reduzir minha importação.Usa a biblioteca Quil . Desenha um ponto sempre que o mouse é arrastado.
Basicamente, a resposta de processamento, já que Quil é um wrapper de processamento para Clojure.
fonte
(use 'quil.core)(defsketch P :mouse-dragged #(point(mouse-x)(mouse-y)))
use
porque "não é apropriado". Obrigado.Tcl / Tk, 45
465157fonte
Java 7, 353 bytes
Ungolfed:
fonte
Python2 e Python3, 82 bytes (ou 77?)
Usando o módulo Turtle, isso não é tão ruim :)
Ungolfed:
Se não há problema em ter linhas entre os pontos, você pode realmente salvar 5 bytes:
fonte
Excel VBA, 62 bytes
Função de janela imediata VBE anônima que permite ao usuário desenhar em qualquer folha, simplesmente selecionando-a
Saída de amostra
fonte
HTML + Javascript,
152148 bytesfonte
Turing , 77 bytes
Ungolfed:
fonte
HTML + CSS + JavaScript (ES6), 8 + 31 + 64 = 103 bytes
Diversão com CSS
box-shadow
!HTML + CSS + JavaScript (ES6), 8 + 22 + 69 = 99 bytes
Este tenta compensar o padrão
margin
do<body>
elemento, mas pode ser diferente nos navegadores e nas folhas de estilo do agente do usuário. Testado com sucesso no Chrome.HTML + CSS + JavaScript (ES6), 8 + 18 + 69 = 95 bytes
Os pixels neste podem parecer maiores à medida que são desenhados nas coordenadas de meio pixel.
fonte
TI-Basic, 1 byte
Tenho certeza de que a maioria de vocês com TI pensa no
Pen
comando, mas acontece que não é tokenizado; portanto, faria mais sentido contar isso como 3 bytes. Você pode ler sobre a versão interativaPt-Change(
em http://tibasicdev.wikidot.com/pt-changefonte
Lua (estrutura do love2d), 180 bytes
versão golfada
destroçado
muito fácil como funciona. Primeiro, algumas inicializações para tornar as coisas mais curtas. Depois disso, ele verifica se a mous é clicada e salva os pontos na matriz. Depois disso, ele desenha os pontos. Também define a cor para branco e preto, porque o padrão é o contrário :)
E aqui vem a imagem:
fonte
l=love v,g,m,p=255,l.graphics,l.mouse,{}function l.draw()g.setBackgroundColor(v,v,v)if m.isDown(1)then p[#p+1],p[#p+2]=m.getPosition()end g.setColor(0,0,0)g.points(p)end
que resulta em 169 bytes!Processando, 65 bytes
fonte
glslsandbox 232 bytes
Post antigo, mas achei isso interessante.
Como o processamento já foi feito, decidi fazer algo diferente.
Isso desenha se o mouse é pressionado ou não, então não o que o pydude pediu, mas quase.
Experimente no glslsandbox
fonte
Processando, 93 bytes, 91 bytes se os espaços não contam
fonte
UCBlogo com wxWidgets, 65 bytes
Explicação (o código atribuído à variável
buttonact
é executado em cada clique do botão):Pelo menos, acho que isso funciona. De acordo com a documentação , mas aparentemente a
buttonact
variável só funciona em uma versão wxWidgets e estou lutando para criar o UCBLogo com wxWidgets em um Linux moderno (waddyamean você não pode usar um ponteiro paraint
trás e trás?).UCBlogo sem wxWidgets, 73 bytes
Para ver o efeito pretendido, você pode executar esta versão mais longa com um loop infinito.
Mas isso trava
ucblogo
na minha máquina ... Parece uma condição de corrida.UCBlogo, realmente trabalhando na minha máquina, 80 bytes
fonte