Einführung
Eines Tages haben Sie Ihrem Kind gezeigt, wie man an einem Computer zeichnet. Sie geben mspaint.exe
die Laufleiste ein. Zu Ihrem Entsetzen heißt es "Keine Artikel entsprechen Ihrer Suche". Sie müssen eine einfache Version der Farbe erstellen, damit Ihr Kind zeichnen kann!
Herausforderung
Sie müssen ein einfaches Zeichenprogramm erstellen. Öffnen Sie dazu ein weißes Anzeigefenster (größer als 99x99 Pixel). Ändern Sie bei jedem Herunterdrücken der Maus das Pixel, auf dem sich die Maus befindet, in Schwarz.
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes!
Pen
genau das tut: oAntworten:
8086 Maschinencode,
32 31 2826 BytesVorausgesetzt, dass eine VGA-Grafikkarte und ein Microsoft-kompatibler Maustreiber vorhanden sind.
-2 Bytes dank @berendi!
Wie es funktioniert:
Das ist alles dazu. Keine Zauberei, nur ein paar Funktionsaufrufe.
quelle
INT 33h
wird 0 in zurückgegebenBX
, und dies wird wie erwartet zu FFFFh dekrementiert, aber es wird noch eine Linie gezeichnet. Vielleicht liegt es daran, dass Modus 11h nur eine Videoseite hat und die ungültige Seitennummer automatisch korrigiert wird? Ich teste auf VM VirtualBox. Vielleicht ist das etwas, was die BIOS-Implementierung bewirkt.int 0x10
, stattdessenjmp
zurück zum zweitenint 0x10
. Offset injmp
bleibt gleich, Adresse inmov dx
Scratch, 10 Scratch-Bytes
Scratch wurde praktisch für solche Dinge entwickelt.
Probieren Sie es online!
quelle
HTML + JavaScript (ES6),
66 6462 ByteHTML
JavaScript
2 Bytes dank Gustavo Rodrigues und 2 Bytes von Shaggy gespeichert.
quelle
<canvas id=c>
?c.
vom Anfang Ihres JS löschen. @Anoplexian, das ist der Standardkörper, der diemargin
Dinge um einige Pixel abwirft .C + Win32,
209200195 BytesDanke, Cody und Quentin! Ich hatte gehofft, das loszuwerden,
#include <windows.h>
aber das führt zu allen möglichen Fehlern. Zumindest funktioniert es mit mehreren Monitoren richtig ...Vorheriger Code:
quelle
h
in denfor
Initialisierer einbinden, um zwei Bytes zu sparen :)LOWORD
undHIWORD
bin nicht der richtige Weg , Cursor - Koordinaten aus einem gepackten zu extrahierenLPARAM
. Sie solltenGET_X_LPARAM
und verwendenGET_Y_LPARAM
, andernfalls erhalten Sie bei mehreren Monitoren falsche Ergebnisse.int main
was 4 weitere Bytes hinzugefügt hätte.(short)LOWORD()
und(short)HIWORD()
würde das Problem lösen?main
den Rückgabetyp der Funktion (aufgrund der implizitenint
Regel) weglassen dürfen . Das einzige Problem ist, diereturn 0;
Ursachen undefiniertes Verhalten in C89 und MSVC wegzulassen. In C99 und C ++ benötigen Sie einen Rückgabetyp fürmain
, derreturn 0;
jedoch implizit und daher nicht erforderlich ist. Nun, die Sprache war nicht für Code-Golf gemacht. :-)Verarbeitung,
9879 BytesDank @dzaima wurden 19 Bytes gespeichert
Erklärung (veraltet)
quelle
size(100,100);
muss nicht erwähnt werden, danke! (auch ich weiß nicht, warum ich dasif(mousePressed)
bisschen nicht gesehen habe )JavaScript ES6, 126 Byte
In Chrom getestet.
Probieren Sie es online!
quelle
Haskell,
189184170169 BytesDies verwendet die
Gloss
Bibliothek (v1.11). Es öffnet sich ein Vollbildfenster und malt mit der linken Maustaste schwarze Pixel (tatsächlich Kreise mit Radius 1). Drücken Sie,ESC
um das Menü zu verlassen.Wie es funktioniert:
Edit: @ nicht mehr gegen den Uhrzeigersinn zu drehen, erzählte mir von der neuesten Version von Gloss, die 5 Bytes spart, wenn Vollbild-Fenster verwendet werden. Vielen Dank!
quelle
FullScreen
wird nullary in Glanz> = 1,11, die Partitur von 5. Reduzieren (ich erhalte eine Fehlermeldungunknown GLUT entry glutInit
meine glut Setup funktioniert einfach nicht obwohl, sondern wahrscheinlich,. nie auf dieser Maschine)SmileBASIC 2,
5251 BytesDiese läuft man in SmileBASIC Papas, Petit - Computer (und ist
einZwei - Byte kürzer.)Erläuterung:
quelle
GPSET TCHX,TCHY:GOTO@A
da die Standardfarbe 0 (transparent) ist.Javascript + jQuery 138 Bytes
Probieren Sie es online aus!
Das Hinzufügen einer Klick- und Ziehunterstützung wäre einfach. Sie würden jedoch gemäß den Anweisungen eine Variable festlegen. Um den Code zu verkürzen, wird diese nicht unterstützt. . Ich habe die Anweisung als
click
Ereignis interpretiert .quelle
SpecBAS -
6159 BytesSchwarz ist bereits die Standardfarbe des Stifts, aber der Hintergrund ist normalerweise ein böser Grauton, sodass
CLS 15
er hellweiß wird.quelle
GOTO
WerdensGO TO
)SmileBASIC,
705853 BytesErklärt:
quelle
Clojure,
9171 Bytes-20 Bytes Danke an @cfrick für den Hinweis, dass ich
use
meinen Import verkleinern kann .Verwendet die Quil- Bibliothek. Zeichnet einen Punkt, wenn die Maus gezogen wird.
Grundsätzlich ist die Verarbeitung die Antwort, da Quil ein Verarbeitungs-Wrapper für Clojure ist.
quelle
(use 'quil.core)(defsketch P :mouse-dragged #(point(mouse-x)(mouse-y)))
use
weil es "nicht richtig" ist. Danke.Tcl / Tk, 45,
46,51,57quelle
Java 7, 353 Bytes
Ungolfed:
quelle
Python2 und Python3, 82 Bytes (oder 77?)
Mit dem Turtle-Modul ist das nicht schlecht :)
Ungolfed:
Wenn es in Ordnung ist, Linien zwischen den Punkten zu haben, können Sie tatsächlich 5 Bytes sparen:
quelle
Excel VBA, 62 Bytes
Anonyme VBE-Direktfensterfunktion, mit der der Benutzer auf jedem Blatt zeichnen kann, indem er es einfach auswählt
Beispielausgabe
quelle
HTML + Javascript,
152148 Bytesquelle
Turing , 77 Bytes
Ungolfed:
quelle
HTML + CSS + JavaScript (ES6), 8 + 31 + 64 = 103 Byte
Spaß mit CSS
box-shadow
!HTML + CSS + JavaScript (ES6), 8 + 22 + 69 = 99 Byte
In diesem Beispiel wird versucht, die Standardeinstellung
margin
des<body>
Elements zu ändern, sie kann jedoch in den Browsern und Benutzeragenten-Stylesheets unterschiedlich sein. Erfolgreich in Chrome getestet.HTML + CSS + JavaScript (ES6), 8 + 18 + 69 = 95 Byte
Pixel in diesem Bild erscheinen möglicherweise größer, da sie an halben Pixelkoordinaten gezeichnet sind.
quelle
TI-Basic, 1 Byte
Ich bin sicher, dass die meisten von Ihnen mit TI Calcs an den
Pen
Befehl gedacht haben , aber es stellt sich heraus, dass er nicht mit einem Token versehen ist, sodass es am sinnvollsten wäre, ihn als 3 Byte zu zählen. Informationen zur interaktiven Version von finden SiePt-Change(
unter http://tibasicdev.wikidot.com/pt-changequelle
Lua (love2d Framework), 180 Byte
Golf Version
ungolfed
ganz einfach wie es funktioniert. Zuerst ein paar Initialisierungen, um die Sache zu verkürzen. Danach wird überprüft, ob die Maus angeklickt ist, und die Punkte werden im Array gespeichert. Danach werden die Punkte gezeichnet. Außerdem wird die Farbe auf Weiß und Schwarz gesetzt, da die Standardeinstellung umgekehrt ist :)
Und hier kommt das Bild:
quelle
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
was 169 Bytes ergibt!Verarbeitung, 65 Bytes
quelle
glslsandbox 232 bytes
Alte Post fand das aber interessant.
Da die Verarbeitung bereits abgeschlossen ist, habe ich mich für etwas anderes entschieden.
Dies zeichnet, ob die Maus gedrückt ist oder nicht, also nicht, wonach pydude aber fast gefragt hat.
Probieren Sie es auf glslsandbox
quelle
Verarbeitung, 93 Byte, 91 Byte, wenn Leerzeichen nicht zählen
quelle
UCBlogo mit wxWidgets, 65 Bytes
Erläuterung (der der Variablen zugewiesene Code
buttonact
wird bei jedem Tastenklick ausgeführt):Zumindest denke ich, dass dies funktioniert. Es sollte laut Dokumentation , aber anscheinend
buttonact
funktioniert die Variable nur in einem wxWidgets-Build und ich habe Mühe, UCBLogo mit wxWidgets auf einem modernen Linux zu erstellen (waddyamean können Sie keinen Zeiger aufint
und zurück setzen?).UCBlogo ohne wxWidgets, 73 Bytes
Um den beabsichtigten Effekt zu sehen, können Sie diese längere Version mit einer Endlosschleife ausführen.
Aber das stürzt
ucblogo
auf meiner Maschine ab ... Sieht aus wie ein Rennzustand.UCBlogo, arbeitet tatsächlich auf meinem Computer, 80 Bytes
quelle