Schreiben Sie ein Programm, das ein Kontrollkästchen mit zwei Status erstellt, mit dem Benutzer mit einer Maus interagieren können.
Insbesondere sollte Ihr Programm Folgendes erreichen:
Stellen Sie einen Bildschirmbereich von 8 × 8 Pixel (oder, falls gewünscht, größer) als den anklickbaren Bereich des Kontrollkästchens ein. Diese Region wird fortan einfach als Checkbox bezeichnet.
Wenn der Mauszeiger innerhalb des Kontrollkästchens bewegt und die Standard-Maustaste * gedrückt wird, sollte das Kontrollkästchen den Status umschalten.
Aktiviert wird deaktiviert. Nicht angehakt wird angehakt.Das Kontrollkästchen sollte sich beim Umschalten nicht bewegen.
Im aktivierten Zustand kann das Kontrollkästchen eine beliebige Farbe haben.
Im deaktivierten Zustand kann das Kontrollkästchen eine beliebige Farbe haben , solange sich mindestens 16 Pixel visuell vom aktivierten Zustand unterscheiden .
In einer einzelnen Programminstanz sollten alle aktivierten Zustände visuell identisch sein und alle nicht aktivierten Zustände sollten visuell identisch sein.
Beenden Sie das Programm erst, wenn es explizit beendet wurde (z. B. über die Schaltfläche "Beenden" oder Alt + F4), damit ein Benutzer das Kontrollkästchen so oft anklicken kann, wie er möchte.
* Sie können davon ausgehen, dass die Standard-Maustaste immer mit der linken Maustaste gedrückt wird. Es ist jedoch auch in Ordnung, die von der Maussoftware oder dem Betriebssystem festgelegte Standard-Maustaste zu verwenden, die je nach Benutzer möglicherweise nicht mit der linken Maustaste gedrückt wird.
Anmerkungen
Es spielt keine Rolle, was sich außerhalb Ihrer Kontrollkästchenregion befindet. Es könnte nur der Desktop sein. Dies kann ein Teil einer Konsole sein, der sich bei jedem Wechsel ändert.
Es spielt keine Rolle, in welchem Status Ihr Kontrollkästchen startet.
Der Kontrollkästchenbereich kann beliebige Abmessungen bei oder über 8 × 8 Pixeln haben. Es muss nicht quadratisch sein.
Möglicherweise berücksichtigen Sie geringfügig Einstellungen, die außerhalb Ihrer Kontrolle liegen, z. B. die Schriftgröße der Konsole, den Browserzoom, die Bildschirmauflösung usw. Solange Ihr Programm in einer angemessenen Testeinstellung ausgeführt wird, sollte es gültig sein.
Wenn Ihr Programm ein Fenster öffnet, können Sie davon ausgehen, dass es bei Bedarf an eine geeignete Stelle auf dem Bildschirm gezogen wurde (z. B. in der oberen linken Ecke).
Sie können Auszeichnungssprachen wie HTML oder andere Sprachen verwenden, die wir normalerweise nicht als vollwertige Programmiersprachen betrachten.
Ihr Kontrollkästchen muss mit der Standard-Maustaste umschaltbar sein. Es ist in Ordnung, wenn mit Ausnahme der Mausbewegung auch auf andere Eingabeformen (z. B. rechte Maustaste) umgeschaltet wird . dh der Zustand sollte sich nicht ändern, wenn die Maus nur innerhalb der Checkbox bewegt wird.
Screenshots Ihres Kontrollkästchens in Aktion sind ausdrücklich erwünscht!
Wertung
Der kürzeste Code in Bytes gewinnt.
Beispiel
Ein kanonisches HTML-Beispiel in 23 Bytes.
<input type="checkbox">
Für mich in Google Chrome bedeutet dies, dass ein Kontrollkästchen mit 12 × 12 Pixeln angezeigt wird und ungefähr 30 Pixel deutlich zwischen aktivierten und deaktivierten Status wechseln.
Ich gehe davon aus, dass der Browser-Zoom 100% beträgt.
quelle
Antworten:
Mathematica, 10 Bytes
Übernimmt die Notebook-Umgebung von Mathematica .
Die beiden Zustände sehen folgendermaßen aus:
quelle
HTML, 20 Bytes
Ich weiß nicht, wie gültig dies als Antwort sein wird. HTML erfordert, dass das Tag geschlossen wird, damit es rechtsgültig ist. Moderne Browser schließen es jedoch automatisch, damit es ausführbar ist.
quelle
>
. +1 und gültige IMHO.Bash ,
675550353231 BytesDer Code enthält ein CR-Byte (erste Zeile) und ein CSI-Byte (kleine eckige Klammer mit der Windows-1252-Codierung). Es erfordert xterm (oder ein gleichwertiges) und die ISO-8859-1-Codierung (oder ähnliches).
Der Code definiert eine benannte Funktion
:
, die abwechselnd eine weiße 1 oder 0 in einem schwarzen Rechteck anzeigt . Es gibt genau 24 unterschiedliche Pixel mit den Standardeinstellungen von xterm. ( Beweis )Bei einer älteren Version, bei der die Farbe des gesamten Terminals umgeschaltet wird, überprüfen Sie Revision 10 dieser Antwort.
Vielen Dank an @ ais523 für die Empfehlung von xterm, das 4 Bytes einspart!
Wie es funktioniert
:(...)
Erstellt eine Funktion mit dem Namen:
, die ausgeführt wird...
.Der Lesebefehl führt die eigentliche Magie aus.
-p
Gibt eine Eingabeaufforderung an, die an STDOUT ausgegeben wird.$[i^=1]
ist eine arithmetische Erweiterung, die die Variable i mit 1 XOR verknüpft . ich kann anfangs unset sein; In diesem Fall wird es als 0 behandelt .Der Wagenrücklauf setzt den Cursor wieder an den Zeilenanfang.
›?9h
Fängt die Maus in unterstützten Terminals ein. Mit jedem Klick werden sechs Zeichen an das Terminal gesendet←[Mbxy
, wobei←
das ESC-Byte ( 0x1b ) dargestellt wird.←[
Gibt eine Escape-Sequenz,M
die Maus,b
die Schaltfläche ( 0x20 + die Schaltflächennummer),x
die x- Koordinate des Klicks ( 0x20 + Koordinate) undy
die y- Koordinate an.-sn6
Schaltet das Lesen stumm (die Mauseingabe wird nicht an STDERR weitergegeben) und stoppt nach dem Lesen von genau 6 Bytes. Die Eingabe wird in der Variablen REPLY gespeichert , die Ausgabe interessiert uns jedoch nicht.Schließlich, sobald Lese beendet (nach genau einem Mausklick),
:
ruft rekursiv selbst, eine Endlosschleife eingeben.Schaffung und Anrufung
Ausgabe
quelle
1000h
in9h
(der Unterschied besteht darin, dass1000h
sowohl das Drücken als auch das Loslassen der9h
Maus und nur das Loslassen der Maus behandelt werden). Dies kann Änderungen an anderer Stelle im Code erforderlich machen oder auch nicht.gnome-terminal
scheint zu funktionieren, das habe ich zum Testen benutzt (edit: aber ich glaube nicht, dass es ein 1-Byte-CSI unterstützt).xterm
sollte auch funktionieren und ist möglicherweise einfacher zu installieren, wenn Sie ein KDE-System haben. (Ich habe das gerade selbst getestet; es funktioniert mit,\x1b[
aber nicht mit\x9b
aus irgendeinem Grund, möglicherweise im Zusammenhang mit meinen Stty-Einstellungen und nicht mit dem Terminal selbst.):)
aus:(
bis zum EndeVerarbeitung,
7866656361 Bytes2 Bytes gespart dank @TuukkaX durch Verwendung von
-a%2
anstelle vona%2*-1
2 Bytes gespart dank @TuukkaX mit
a=-a
Das Kontrollkästchen wechselt zwischen Schwarz und Weiß.
Erläuterung
Jetzt gibt es viele andere Alternativen, wie die Verwendung einer if-Anweisung, um dies zu verarbeiten, aber dann wird es seltsam und ändert ständig den Hintergrund, während die Maus gedrückt wird. Ich habe es zuerst versucht
mouseButton
, aber dann brauche ich mehr Bedingungen und Code, der viel ausführlicher wird.Um nun für
mousePressed()
immer aufgerufen zu werden (andernfalls würde es einfach aufhören, nachdem das Programm gerade gestartet wurde), benötigen wir einedraw()
Funktion.Ein kleineres Kontrollkästchen wäre 90 Bytes (das Kontrollkästchen befindet sich in der oberen linken Ecke, damit wir einige Mausbedingungen entfernen können):
quelle
fill(-1)
a
auf 1 statt auf 0. Änderea++
aufa=-a
, was-a%2
gerade ergibta
. Dies schalteta
zwischen 1 und -1 um. Ich weiß jedoch nicht, welche Farbe 1 erzeugt.color(1)
produziert,#010101
die sehr nah an schwarz istHTML + JavaScript,
323025 Zeichenquelle
this
ist implizit und kann entfernt werden. AuchinnerHTML
ist kürzer.<input>
Unix-Shell (+ x11-apps), 3 Bytes
Haftungsausschluss
Die Antwort unten ist langweilig, grenzwertig und "fühlt sich betrogen an" (zumindest für mich).
Es scheint jedoch keine der Herausforderungsregeln "wie geschrieben" oder "Standardlücken" zu verletzen, also poste ich es.
(Wenn Sie eine bestimmte Regel angeben können, die verletzt wird, kommentieren Sie sie bitte!)
Golf gespielt
Der xgc- Bildschirm ist tatsächlich mit verschiedenen Kontrollkästchen gefüllt:
und "Sticky Buttons" (die sich nach diesen Herausforderungsregeln als Kontrollkästchen qualifizieren):
quelle
GitHub Flavored Markdown - 6 Bytes
(Es gibt ein Leerzeichen)
Im Kern:
quelle
AHK , 25 Bytes
Ausgabe -
quelle
Kratzer, 2 Blöcke
Setze dieses Skript in das Standard-Sprite ein (welches mit 2 Kostümen geliefert wird)
quelle
Python REPL, 45 Bytes
quelle
tkinter
ist eine Standardbibliothek für Python (aber selbst wenn es nicht so wäre, müsste ich nur Python REPL + tkinter deklarieren). Dies bedeutet, dass ich seine Funktionen durch einfaches Importieren nutzen kann. Die Strafe, die Sie vorschlagen, ist vergleichbar mit der Aufforderung an Benutzer, die Anzahl der Bytes in der Quelle der Sprache, in der Sie schreiben, in die Byteanzahl aufzunehmen. Hier können alle Sprachen oder Module miteinander konkurrieren, solange sie zuvor geschrieben und öffentlich veröffentlicht wurden Die Herausforderung wurde veröffentlicht.GeoGebra , 10 Bytes
Eingetragen in die Eingabeleiste.
Hier ist ein GIF der Ausführung:
quelle
Tcl / Tk, 21 Byte
Golf gespielt
quelle
HTML mit JavaScript -
13612412011511311110979 Bytes-2 mit Dank an @KritixiLithos
Reduziert auf 79 nach fantastischem Golfen von @Jan. Obwohl die neue Version den Anforderungen entspricht, habe ich aus beruflichen Gründen die alte Version beibehalten.
Die Verwendung von Built-Ins ist zwar durchaus zulässig, aber es hat mir mehr Spaß gemacht, meine eigenen von Grund auf neu zu erstellen. Getestet mit Chrome und Firefox.
border:solid
gibt es für die IE-Kompatibilität, aber ich weiß nicht, ob es tatsächlich in neueren IE-Versionen benötigt wird - ich habe keinen verfügbaren IE zum Testen.Das
px
in der Höhe ist zugunsten von "Code-Schnipsel ausführen" da, ist also nicht in der "echten" Byteanzahl enthalten. Es funktioniert gut im Browser ohne.Vorherige Version:
quelle
id=d
zu entfernend=this
?this
Sie das Festlegen der ID. Wenn Siethis
in einer Eigenschaft speichern, sparen Sie einige Bytes. Dasalign
ist unnötig. Da die Attributzeichenfolgen keine Leerzeichen enthalten, benötigen Sie keine Anführungszeichen.<p style=height:20px;border:solid onClick=t=this;t.innerHTML=(t.e=!t.e)?'x':''>
79 BytesMinecraft 1.0.0, 1 Byte
Ein Hebel in Minecraft erfüllt alle Kriterien für ein Kontrollkästchen. Diese Antwort ist nur für ältere Versionen des Spiels gültig, bei denen das Drücken eines Hebels noch umschaltet.
Bewertung mit der von @Connor O'Brien vorgeschlagenen Byteanzahl.
quelle
n
in Conor, übrigens :)1 block
? Warum1 byte
? Ich glaube nicht, dass mc jeden Block als ein Byte speichert ...TI-Basic, 15 Bytes
Ziemliech direkt. Das Kontrollkästchen bedeckt ungefähr 40% des Bildschirms und wechselt zwischen Schwarz und Weiß. Wenn diese Option aktiviert ist, sieht der Bildschirm folgendermaßen aus:
quelle
Beliebige Version der Windows-Befehlszeile, 3 Byte
(cmd.exe, Batch, Powershell, Start -> Ausführen, was auch immer)
Öffnet die Bildschirmtastatur mit mehreren "Kontrollkästchen" wie Umschalttaste, Strg-Taste, Alt-Taste und Feststelltaste.
quelle
Oktave,
3620 BytesDank @LuisMendo 16 Bytes gespart!
quelle
uicontrol('sty','c')
funktioniert auchKV Lang , 8 Bytes
Unter der Annahme einer wirklich einfachen Python-Umgebung kann kv lang sogar ausgeführt werden:
Dies funktioniert im Grunde genommen, weil
CheckBox
ein Kivy-Widget in einemkivy.Factory
als jedes Widget aus der Standardbibliothek enthalten ist.Diese einfache Zeichenfolge erstellt eine Instanz von
CheckBox
und darunTouchApp
erwartet wird, dass ein Widget ausgeführt wird, kann ich sie verwendenBuilder.load_string
.Der Hintergrund von
load_string
behandelt im Grunde jede kv-Zeichenfolge und wenn eine einzelne Instanz eines Widgets definiert ist (z. B.CheckBox
), wird es zu einer Root- Widget-Position erhöht , zum Beispiel:quelle
SmileBASIC, 49 Bytes
und
sind ein leeres Kästchen und ein Häkchen in der Schriftart von SB.Aktivieren Sie das Kontrollkästchen durch Berühren des Bildschirms (entspricht dem Klicken mit der Maus am ehesten).
Betrügende Antworten:
0 Bytes:
(Die Bildschirmtastatur verfügt über Schaltflächen, die wie Kontrollkästchen funktionieren, z. B. die Feststelltaste und die Einfügetaste.)
14 Bytes:
Öffnet den eingebauten Grafikeditor, der über mehrere kästchenähnliche Schaltflächen verfügt
quelle
T<O
ist wahr, wenn Sie aufhören, den Bildschirm zu berühren, und!=
wird als logisches XOR verwendet.X=X XOR (O && !T)
C #,
124120 Bytes4 Bytes dank grabthefish gespart.
hinweis: aufgrund von bearbeitungen stellt das bild nicht genau dar, was der code macht, die "checkBox1" wird nicht mit dem aktuellen code angezeigt.
ungolfed:
using System.Windows.Forms; class P{ static void Main(){ var a=new Form(); a.Controls.Add(new CheckBox());
Application.Run(a);a.ShowDialog(); } }quelle
var a = new Form();
.a.ShowDialog();
, um ein paar Bytes zu speichernRuby with Shoes, 16 Zeichen
Beispielausgabe:
quelle
HTML mit JavaScript,
463328 Bytesv2
v1
Dies ist eine Variante der Antwort von @ ElPedro: Erstellen Sie eine Checkbox . Mit Hilfe von @Albert Renshaw auf 28 Byte heruntergekommen. Es könnte weiter reduziert werden, aber das würde es identisch mit Create a Checkbox machen
Der gesamte Anwendungsbereich ist anklickbar. Es wird
0
imoff
Zustand und1
imon
Zustand angezeigt . Probieren Sie es unter https://jsbin.com/nuhetiyocu/1/edit ausquelle
<body onclick=t=this;t.innerHTML^=t?1:0
Die 16-Pixel-Regel zwischen Zustandsänderungen steht jedoch zur Debatte.<body onclick=this.innerHTML^=this?1:0
<body onclick=innerHTML^=1>0
body
in ein anderes Element geändert werden . Aber ich gerade bemerkt , dass es gleich zu einer anderen Antwort würde codegolf.stackexchange.com/questions/109155/create-a-checkbox/... so dass ich es nur verlasse wiePowershell v5 +, 94 Bytes
Das ist ziemlich schrecklich, aber ich kann die Anweisungen mit
Add-Type
oder nicht kürzer bekommen,using namespace
und die Variable ist erforderlich, da ich das Objekt erneut verwenden muss, um das FormularControls.Add()
anzuzeigen , und nichts Nutzbares zurückgibt.ShowDialog
Auf meinem System muss die Box nach dem Ausführen dieses Befehls interaktiv sein. Andernfalls wird das Formular eingefroren.auch
System.Windows.Forms.Form
kann nur verkürzt werden ,Windows.Forms.Form
bevor (zumindest mein eigenes) System stoppt Auto es in einer frischen Sitzung abgeschlossen wird .quelle
Excel VBA,
38323129 BytesDirektfensterfunktion, die ein Kontrollkästchen mit den Werten height = 9 und width = 9 in die Zelle
A1
auf dem ersten Blatt des aktiven Excel VBA-Projekts einfügt-6 Danke an pajonk für das Ersetzen
[A1],[A1],9,9
durch0,0,9,9
-1 zum Ersetzen
Sheets(1)
durch[Sheet1]
-2 für die Realisierung der oben war dumm und
Sheet1
stattdessen mitquelle
1,1,9,9
als Argumente auch funktioniert.Sheet(1).
, Sie können dies schnell genug in ExcelCheckBoxes
ausführen, aber es ist Teil des aktivenCheckBoxes.Add
Methode den Fehler "Objekt erforderlich" ausVBA (Word),
74.57Bytes-17 Dank an Taylor Scott
Der Dateiname des Dokuments sollte a sein.
quelle
wdFieldFormCheckBox
durch71
(den ganzzahligen Wert derwdFieldFormCheckBox
Konstanten) ersetzen, um 17 Byte zu sparenMops, 20 Bytes
quelle
Clojure,
201195145127 Bytes-6 Bytes, indem Sie die Notwendigkeit für loswerden
m/fun-mode
.-50 Bytes durch Entfernen der Optionen
:setup
und:size
, da diese standardmäßig vorhanden und in non- nicht erforderlich sindfun-mode
. Außerdem wurde der unnötige Import für Middleware entfernt.-18 Bytes dank nur @ ASCII. Auf "kleinere" Farben geändert und unnötiges Leerzeichen vor dem Dereferenzierungsoperator (
@
) entfernt.Erstellt eine Quil- Skizze (eine Clojure-Bibliothek, die eine Ebene über der Verarbeitung bereitstellt). Daher muss die Quil-Bibliothek ausgeführt werden.
quelle
[0 0 99]
dann? (irgendeine Art von dunkelblau)Operation Flashpoint- Skriptsprache, 273 Byte
So zeigen Sie das Kontrollkästchen an:
Aber zuerst muss definiert werden:
Speichern Sie Folgendes in einer Datei
description.ext
im Missionsordner:Das Kontrollkästchen in Aktion:
quelle
AutoIt , 78 Bytes
Öffnet ein maximiertes Fenster, das wie jedes andere Fensterfenster geschlossen werden kann. Die Maximierung und ... Top-Qualität ist ein Nebeneffekt des Golfspiels.
quelle
wine AutoIt3.exe script.au3
, wo diescript.au3
Datei diesen Code enthält.Python, 62 Bytes
quelle