Wprowadzenie
Pewnego dnia pokazałeś swojemu dziecku, jak rysować na komputerze. Wpisujesz mspaint.exe
w pasku uruchamiania. Ku Twojemu przerażeniu jest napisane: „Brak elementów pasujących do wyszukiwania”. Musisz stworzyć prostą wersję farby, aby dziecko mogło rysować!
Wyzwanie
Musisz stworzyć prosty program do rysowania. Aby to zrobić, otwórz białe okno wyświetlacza (większe niż 99 x 99 pikseli). Za każdym razem, gdy mysz zostanie wciśnięta, zmień piksel na myszy.
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach!
Pen
robi dokładnie to: oOdpowiedzi:
8086 kod maszynowy,
32 31 2826 bajtówZakłada obecność karty graficznej VGA i dowolnego sterownika myszy zgodnego z Microsoft.
-2 bajty dzięki @berendi!
Jak to działa:
To wszystko. Nie wymaga magii, tylko kilka wywołań funkcji.
źródło
INT 33h
zwraca 0BX
, a to zmniejsza się do FFFFh zgodnie z oczekiwaniami, ale linia jest nadal rysowana. Być może dzieje się tak, ponieważ tryb 11h ma tylko jedną stronę wideo, a nieprawidłowy numer strony jest automatycznie naprawiany? Testuję na VM VirtualBox, więc może właśnie to robi jego implementacja systemu BIOS.int 0x10
, zjmp
powrotem do drugiegoint 0x10
zamiast. Odsunięciejmp
pozostaje takie samo, dostosuj adres inmov dx
Scratch, 10 bajtów Scratch
Scratch został praktycznie zaprojektowany do takich rzeczy.
Wypróbuj online!
źródło
HTML + JavaScript (ES6),
66 6462 bajtówHTML
JavaScript
Zaoszczędzono 2 bajty dzięki Gustavo Rodriguesowi i 2 bajty od Kudłatego.
źródło
<canvas id=c>
?c.
od początku swojego JS. @Anopleks, to domyślne ciałomargin
odrzucające rzeczy o kilka pikseli.C + Win32,
209200195 bajtówDzięki, Cody i Quentin! Miałem nadzieję, że się go pozbędę,
#include <windows.h>
ale prowadzi to do różnego rodzaju błędów. Przynajmniej działa poprawnie z wieloma monitorami ...Poprzedni kod:
źródło
h
dofor
inicjatora, aby zapisać dwa bajty :)LOWORD
iHIWORD
to nie jest poprawny sposób wyodrębnić współrzędne kursora z zapakowanyLPARAM
. Należy używaćGET_X_LPARAM
iGET_Y_LPARAM
, inaczej dostaniesz błędne wyniki z wieloma monitorami.int main
co dodałoby 4 dodatkowe bajty.(short)LOWORD()
i(short)HIWORD()
rozwiążesz problem?main
typ zwracany przez funkcję (z powoduint
reguły niejawnej ). Jedynym problemem jest pominięciereturn 0;
przyczyn niezdefiniowanego zachowania w C89 i MSVC. W C99 i C ++ potrzebujesz typu zwracanego dlamain
, alereturn 0;
jest niejawny, a zatem niepotrzebny. Cóż, język nie został stworzony do gry w golfa kodowego. :-)Przetwarzanie,
9879 bajtów19 bajtów zapisanych dzięki @dzaima
Wyjaśnienie (nieaktualne)
źródło
size(100,100);
nie trzeba o tym wspominać, dzięki! (też nie wiem, dlaczego tego nie widziałemif(mousePressed)
)JavaScript ES6, 126 bajtów
Testowane w chromie.
Wypróbuj online!
źródło
Haskell,
189184170169 bajtówTo korzysta z
Gloss
biblioteki (v1.11). Otwiera okno pełnoekranowe i maluje czarne piksele (w rzeczywistości okręgi o promieniu 1), naciskając lewy przycisk myszy. Naciśnij,ESC
aby wyjść.Jak to działa:
Edycja: @zakrętem, aby włączyć counterclockwis powiedział mi o najnowszej wersji połysku, która oszczędza 5 bajtów podczas korzystania z pełnoekranowych okien. Dzięki!
źródło
FullScreen
ma zerowy połysk> = 1,11, zmniejszając wynik o 5 (unknown GLUT entry glutInit
chociaż pojawia się błąd , ale prawdopodobnie moja konfiguracja glut po prostu nie działa; nigdy nie używałam jej na tym komputerze).SmileBASIC 2,
5251 bajtówTo jeden biegnie w tatusia SmileBASIC'S, Petit komputer (i jest
jedendwa bajt krótszy.)Wyjaśnienie:
źródło
GPSET TCHX,TCHY:GOTO@A
ponieważ domyślnym kolorem jest 0 (przezroczysty).JavaScript + jQuery 138 bajtów
Sprawdź to online!
Dodanie obsługi kliknięcia i przeciągnięcia byłoby proste, ustawiłbyś zmienną, jednak zgodnie z instrukcjami i w celu skrócenia kodu nie jest on obsługiwany: „Za każdym razem, gdy mysz jest wciśnięta, zmień piksel myszy na czarny” . Zinterpretowałem instrukcję jako
click
wydarzenie.źródło
SpecBAS -
6159 bajtówCzarny jest już domyślnym kolorem pióra, ale tło ma zwykle paskudny odcień szarości, więc
CLS 15
ustawia go na jasną biel.źródło
GOTO
stawaniu sięGO TO
)SmileBASIC,
705853 bajtówWyjaśniono:
źródło
Clojure,
9171 bajtów-20 bajtów dzięki @cfrick za wskazanie, że mogę użyć
use
do zmniejszenia importowania.Korzysta z biblioteki Quil . Rysuje kropkę przy każdym przeciągnięciu myszy.
Zasadniczo odpowiedź na przetwarzanie, ponieważ Quil jest opakowaniem przetwarzania dla Clojure.
źródło
(use 'quil.core)(defsketch P :mouse-dragged #(point(mouse-x)(mouse-y)))
use
ponieważ jest to „niewłaściwe”. Dziękuję Ci.Tcl / Tk, 45
465157źródło
Java 7, 353 bajtów
Nie golfowany:
źródło
Python2 i Python3, 82 bajty (lub 77?)
Korzystanie z modułu Turtle nie jest takie złe :)
Nie golfowany:
Jeśli linie między kropkami są w porządku, można w rzeczywistości zapisać 5 bajtów:
źródło
Excel VBA, 62 bajty
Anonimowa funkcja bezpośredniego okna VBE, która pozwala użytkownikowi rysować na dowolnym arkuszu, po prostu wybierając go
Przykładowe dane wyjściowe
źródło
HTML + JavaScript,
152148 bajtówźródło
Turing , 77 bajtów
Nie golfowany:
źródło
HTML + CSS + JavaScript (ES6), 8 + 31 + 64 = 103 bajty
Zabawa z CSS
box-shadow
!HTML + CSS + JavaScript (ES6), 8 + 22 + 69 = 99 bajtów
Ten próbuje zrównoważyć domyślne
margin
z<body>
elementu, lecz może on być różny w różnych przeglądarkach i stylów agenta użytkownika. Testowany pomyślnie w Chrome.HTML + CSS + JavaScript (ES6), 8 + 18 + 69 = 95 bajtów
Piksele w tym mogą wydawać się większe, ponieważ są rysowane przy współrzędnych półpiksela.
źródło
TI-Basic, 1 bajt
Jestem pewien, że większość z was z TI Calcs pomyślała o
Pen
poleceniu, ale okazuje się, że nie jest to tokena, więc sensowne byłoby policzenie go jako 3 bajtów. O interaktywnej wersji można przeczytaćPt-Change(
na stronie http://tibasicdev.wikidot.com/pt-changeźródło
Lua (framework love2d), 180 bajtów
wersja golfowa
bez golfa
całkiem proste, jak to działa. Najpierw kilka inicjalizacji, aby skrócić czas. Następnie sprawdzi kliknięcie myszy i zapisze punkty w tablicy. Następnie rysuje punkty, a także ustawia kolor na biało-czarny, ponieważ domyślnie jest odwrotnie :)
A oto zdjęcie:
źródło
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
daje to 169 bajtów!Przetwarzanie, 65 bajtów
źródło
glslsandbox 232 bajty
Stary post, ale uznał to za interesujące.
Ponieważ przetwarzanie zostało już wykonane, postanowiłem zrobić coś innego.
To rysuje, czy mysz jest wciśnięta, czy nie, więc nie to, o co prosiła pydude, ale prawie.
Wypróbuj na glslsandbox
źródło
Przetwarzanie, 93 bajty, 91 bajtów, jeśli spacje się nie liczą
źródło
UCBlogo z wxWidgets, 65 bajtów
Objaśnienie (kod przypisany do zmiennej
buttonact
jest wykonywany przy każdym kliknięciu przycisku):Przynajmniej myślę, że to działa. Powinno to być zgodne z dokumentacją , ale najwyraźniej
buttonact
zmienna działa tylko w kompilacji wxWidgets, a ja walczę o zbudowanie UCBLogo z wxWidgets na nowoczesnym Linuksie (waddyamean, którego nie można rzutować wskaźnikiem doint
iz powrotem?).UCBlogo bez wxWidgets, 73 bajty
Aby zobaczyć zamierzony efekt, możesz uruchomić tę dłuższą wersję z nieskończoną pętlą.
Ale to ulega awarii
ucblogo
na mojej maszynie ... Wygląda jak wyścig.UCBlogo, faktycznie działający na moim komputerze, 80 bajtów
źródło