Utwórz pole wyboru

51

Napisz program, który tworzy dwustanowe pole wyboru, z którym ludzie mogą wchodzić w interakcje za pomocą myszy.

W szczególności twój program powinien spełniać wszystkie poniższe warunki:

  1. Mieć obszar ekranu o wymiarach 8 × 8 pikseli (lub w razie potrzeby większy), który jest klikalnym obszarem pola wyboru. Odtąd ten region jest po prostu nazywany polem wyboru.

  2. Gdy kursor myszy zostanie przesunięty w polu wyboru i naciśnięty zostanie domyślny * przycisk myszy, pole wyboru powinno przełączać stany.
    Zaznaczone staje się niezaznaczone. Odznaczone zostanie zaznaczone.

  3. Pole wyboru nie powinno się poruszać po przełączeniu.

  4. W stanie zaznaczonym pole wyboru może mieć dowolny kolor.

  5. W stanie niezaznaczonym pole wyboru może mieć dowolny kolor, o ile przynajmniej 16 pikseli jest wizualnie różne od stanu zaznaczonego .

  6. W jednej instancji programu wszystkie zaznaczone stany powinny być wizualnie identyczne, a wszystkie niesprawdzone stany powinny być wizualnie identyczne.

  7. Nie kończ programu, dopóki nie zostanie wyraźnie zakończony (np. Za pomocą przycisku wyjścia lub Alt + F4), aby użytkownik mógł kliknąć pole wyboru, ile chce.

* Możesz założyć, że domyślnym przyciskiem myszy jest zawsze kliknięcie lewym przyciskiem, ale dobrze jest też użyć domyślnego zdefiniowanego przez oprogramowanie myszy lub system operacyjny, który w rzeczywistości może nie być lewym kliknięciem w zależności od użytkownika.

Notatki

  • Nie ma znaczenia, co znajduje się poza regionem pola wyboru. Może to być po prostu pulpit. Może to być część konsoli, która zmienia się przy każdym przełączeniu.

  • Nie ma znaczenia, w jakim stanie zaczyna się Twoje pole wyboru.

  • Obszar pola wyboru może mieć dowolne wymiary o wymiarach 8 × 8 pikseli lub powyżej. To nie musi być kwadratowe.

  • Możesz wprowadzić drobne poprawki dla ustawień, które są poza twoją kontrolą, takich jak rozmiar czcionki konsoli, powiększenie przeglądarki, rozdzielczość monitora itp. Tak długo, jak twój program działa w rozsądnych ustawieniach testowych, powinien być poprawny.

  • Jeśli Twój program otworzy okno, możesz założyć, że zostało przeciągnięte w odpowiednie miejsce na ekranie, jeśli to konieczne (np. Lewy górny róg).

  • Możesz używać języków znaczników, takich jak HTML lub inne języki, których zwykle nie uważamy za pełnoprawne języki programowania.

  • Twoje pole wyboru musi być przełączalne za pomocą domyślnego przycisku myszy. Jest w porządku, jeśli przełącza się także na inne formy wprowadzania danych (np. Prawy przycisk myszy), z wyjątkiem ruchu myszy . tzn. stan nie powinien się zmieniać, jeśli mysz jest jedynie przesuwana w polu wyboru.

  • Zachęcamy do tworzenia zrzutów ekranu z pola wyboru w akcji!

Punktacja

Najkrótszy kod w bajtach wygrywa.

Przykład

Kanoniczny przykład HTML w 23 bajtach.

<input type="checkbox">

Dla mnie w Google Chrome sprawia, że ​​pole wyboru 12 × 12 pikseli i około 30 pikseli wyraźnie zmienia się między stanem zaznaczonym a niezaznaczonym.

Przyjmuję do wiadomości, że powiększenie przeglądarki wynosi 100%.

Hobby Calvina
źródło
2
Czy pole wyboru może obejmować cały ekran?
Kritixi Lithos
@KritixiLithos Tak, to byłoby poprawne. Pamiętaj jednak, że w razie potrzeby możesz policzyć dany region 8x8 jako oficjalne pole wyboru, nawet jeśli większy region działa.
Calvin's Hobbies
@Helka Homba - czy aplikacja może wyświetlać inne elementy sterujące oprócz samego pola wyboru?
zeppelin
Czy pole wyboru może być przełączane na inne rodzaje danych wejściowych? (Na przykład, czy rozwiązanie jest poprawne, jeśli pole wyboru przełącza się przy każdym wprowadzaniu przez użytkownika, niezależnie od tego, czy jest to kliknięcie myszą, ruch myszy, czy naciśnięcie klawisza? Przełączałoby się po kliknięciu myszą, ale inne bodźce też.)
1
@zeppelin „Nie ma znaczenia, co znajduje się poza regionem pola wyboru. Może to być po prostu pulpit. Może to być część konsoli, która zmienia się przy każdym przełączeniu.” Tak długo, jak pole wyboru jest obecne, nie ma znaczenia, co jeszcze jest.
Calvin's Hobbies

Odpowiedzi:

33

Mathematica, 10 bajtów

Checkbox[]

Zakłada środowisko notebooka Mathematica .

Dwa stany wyglądają tak:

enter image description here

Martin Ender
źródło
73
Pewnie. Mathematica znów oszukuje.
Matthew Roh
1
Zabawne, że komentarz ma więcej głosów pozytywnych niż odpowiedź
RudolfJelin
4
@ RudolfL.Jelínek to zabawne, jak odpowiedź w ogóle ma jakieś pozytywne głosy ...
Martin Ender
31

HTML, 20 bajtów

Nie wiem, jak ważne będzie to jako odpowiedź. HTML wymaga, aby tag został zamknięty w celu legalnego sprawdzenia poprawności, ale nowoczesne przeglądarki automatycznie je zamkną, aby był wykonywalny.

<input type=checkbox

Jan
źródło
3
Wcześniej patrzyłem na to jako opcję (bez cudzysłowów), ale całkowicie przegapiłem zamknięcie >. +1 i ważny IMHO.
ElPedro
1
Na tej stronie języki są definiowane według ich implementacji, więc wydaje mi się, że to w porządku.
John Gowers
1
Dzięki @JohnGowers, zastanawiałem się nad definicją dopuszczalnego nadużycia.
stycznia
27

Bash , 67 55 50 35 32 31 bajtów

:()(read -p$[i^=1]
›?9h -sn6
:)

Kod zawiera bajt CR (pierwsza nowa linia) i bajt CSI (mały nawias prostokątny z kodowaniem Windows-1252). Wymaga xterm (lub odpowiednika) i kodowania ISO-8859-1 (lub podobnego).

Kod definiuje nazwaną funkcję :, która na przemian wyświetla biały 1 lub 0 w czarnym prostokącie. Istnieją dokładnie 24 różne piksele z domyślnymi ustawieniami xterm. ( dowód )

W przypadku starszej wersji, która przełącza kolor całego terminala, sprawdź wersję 10 tej odpowiedzi.

Dzięki @ ais523 za sugestię xterm, który oszczędza 4 bajty!

Jak to działa

:(...)tworzy funkcję o nazwie, :która wykonuje ....

Polecenie odczytu robi prawdziwą magię.

  • -p określa monit o wprowadzenie, który jest drukowany do STDOUT.

    • $[i^=1]jest rozszerzeniem arytmetycznym, w którym XOR jest zmienną i z 1 . mogę początkowo być rozbrojony; gdy to nastąpi, będzie traktowane jako 0 .

    • Znak powrotu karetki umieszcza kursor z powrotem na początku wiersza.

    • ›?9hprzechwytuje mysz w obsługiwanych terminalach. Każde kliknięcie wyśle ​​sześć znaków do terminala, a mianowicie ←[Mbxy, gdzie reprezentuje bajt ESC ( 0x1b ). ←[oznacza sekwencję ucieczki, Mmyszy, bprzycisk ( 0x20 + numer przycisku) x współrzędna kliknięcia ( 0x20 + współrzędnych) i Y współrzędnych.xy

    • -sn6powoduje wyciszenie odczytu (wejście myszy nie zostanie powtórzone do STDERR) i zatrzymuje się po odczytaniu dokładnie 6 bajtów. Zapisuje dane wejściowe w zmiennej REPLY , ale nie jesteśmy zainteresowani uzyskanymi danymi wyjściowymi.

Na koniec, po zakończeniu odczytu (dokładnie po jednym kliknięciu myszy) :rekurencyjnie wywołuje się, wchodząc w nieskończoną pętlę.

Stworzenie i wywołanie

$ echo $':()(read -p$[i^=1]\r\x9b?9h -sn6\n:);:' > checkbox.sh
$ xxd -c 17 -g 1 checkbox.sh
0000000: 3a 28 29 28 72 65 61 64 20 2d 70 24 5b 69 5e 3d 31  :()(read -p$[i^=1
0000011: 5d 0d 9b 3f 39 68 20 2d 73 6e 36 0a 3a 29 3b 3a 0a  ]..?9h -sn6.:);:.
$ LANG=en_US xterm -e bash checkbox.sh

Wynik

screencast

Dennis
źródło
Sam pracowałem nad podobnym rozwiązaniem (chociaż w innym języku, zmuszając mnie do poddania się, ponieważ nie mogłem znaleźć sposobu na wejście bez nowej linii). Prawdopodobna poprawa: zmiana 1000hna 9h(różnica polega na tym, że 1000hobsługuje zarówno naciśnięcie, jak i zwolnienie myszy, a 9htylko zwolnienie myszy). Może to wymagać zmian w innym miejscu kodu.
@ ais523 Próbowałem tego, ale przynajmniej mój emulator terminala (Konsole) nie obsługuje tego. Czy znasz taki, który wie?
Dennis
gnome-terminalwydaje się działać, właśnie tego używałem do testowania (edytuj: ale nie sądzę, że obsługuje 1-bajtowy CSI). xtermpowinien również działać i może być łatwiejszy do zainstalowania, jeśli masz system KDE. (Właśnie to przetestowałem; działa z, \x1b[ale nie z \x9bjakiegoś powodu, prawdopodobnie związane z moimi ustawieniami stty, a nie z samym terminalem.)
@ ais523 Mam Xterm. Sprawdzę, kiedy wrócę do komputera.
Dennis
8
Uwielbiam sposób staje się :)od :(końca
Andras Deak
22

Przetwarzanie, 78 66 65 63 61 bajtów

2 bajty zapisane dzięki @TuukkaX przy użyciu -a%2zamiasta%2*-1

2 bajty zapisane dzięki @TuukkaX przy użyciu a=-a

int a=1;void draw(){background(a);}void mousePressed(){a=-a;}

Pole wyboru na przemian jest czarno-białe.

Wyjaśnienie

int a=1;                   //the variable that contains the state of the checkbox
void mousePressed(){a=-a;} //if the mouse is pressed, change the sign of a

Teraz istnieje wiele innych alternatyw, takich jak użycie instrukcji if do przetworzenia tego, ale potem staje się dziwne i ciągle zmienia tło podczas naciskania myszy. Najpierw próbowałem mouseButton, ale potem potrzebowałem więcej warunków i więcej kodu, który po prostu skończy o wiele bardziej gadatliwie.

Teraz, mousePressed()aby zadzwonić na zawsze (w przeciwnym razie przestałoby działać po uruchomieniu programu), potrzebujemy draw()funkcji.

void draw(){               //loop infinitely
  background(a);           //set the sketch's background to -a%2
  //if a ==  1, the background colour is set to almost black
  //if a == -1, the background colour is set to white
}

enter image description here


Mniejsze pole wyboru miałoby 90 bajtów (pole wyboru znajduje się w lewym górnym rogu, więc możemy usunąć niektóre warunki myszy):

int a=1;void draw(){fill(a);rect(0,0,8,8);}void mousePressed(){if(mouseX<9&mouseY<9)a=-1;}
Kritixi Lithos
źródło
2
Sprytne wykorzystanie sposobu, w jaki Processing przyjmuje pojedyncze liczby całkowite jako kolory w skali szarości!
FlipTack,
@FlipTack Wygląda na to, że biel można również wyrazić jakofill(-1)
Kritixi Lithos
1
Mam pomysł. Zainicjuj ana 1 zamiast 0. Zmień a++na a=-a, co czyni -a%2just a. Spowoduje to przełączenie amiędzy 1 a -1. Nie wiem jednak, jaki jest kolor 1.
Yytsi
@TuukkaX Tak, to działa. color(1)produkty, #010101które są bardzo zbliżone do czerni
Kritixi Lithos
22

HTML + JavaScript, 32 30 25 znaków

<p onclick=innerHTML^=1>0

Qwertiy
źródło
3
thisjest niejawny i można go usunąć. Jest także innerHTMLkrótszy.
Dennis
@Dennis, dziwne z tym ... Dziękuję.
Qwertiy
+1 za nieużywanie <input>elementu
RedClover
20

Unix Shell (+ aplikacje x11), 3 bajty

Zrzeczenie się

Odpowiedź poniżej jest nudna, z pogranicza i „czuje się oszukana” (przynajmniej dla mnie).

Wydaje się jednak, że nie narusza żadnej z reguł wyzwania „tak jak napisano” ani „domyślnych luk”, więc zamieszczam to.

(Jeśli możesz wskazać konkretną zasadę, którą łamie, skomentuj!)

Grał w golfa

xgc

Program xgc demonstruje różne funkcje prymitywów graficznych X.

Ekran XGC jest wypełniony różnymi polami wyboru:

enter image description here

i „lepkie przyciski” (które kwalifikują się jako pola wyboru, zgodnie z regułami wyzwania):

enter image description here

zepelin
źródło
20

GitHub Flavored Markdown - 6 bajtów

- [ ] 

(Jest spacja)

W skrócie: check/not check

Axel
źródło
Upewnij się, że pasuje to do drugiej połowy zdania 1. „Napisz program, który tworzy dwustanowe pole wyboru, z którym ludzie mogą korzystać za pomocą myszy ”.
manatwork
1
Tak, jeśli wkleisz go do istoty i utworzysz istotę (do „kompilacji”), będziesz mógł z nią wchodzić w interakcje.
Axel
Ciekawy. Dzięki @ Ax31. Nigdy nie używałam manier.
manatwork
1
Nie spodziewałbym się „Github Flavored Markdown”.
Jonas Schäfer
18

AHK , 25 bajtów

Gui,Add,Checkbox
Gui,Show

Wynik -

Mouse pointer is not captured in this gif

Gurupad Mamadapur
źródło
16

Scratch, 2 bloki

enter image description here

Umieść ten skrypt w domyślnej ikonce (która zawiera 2 kostiumy)

SuperJedi224
źródło
1
Demo online: fosforu.github.io/...
primo
14

Python REPL, 45 bajtów

from tkinter import*
Checkbutton(Tk()).pack()
niebieski
źródło
Nie biorę udziału w CG ani często nie czytam tych postów. Jednak naprawdę zaskakuje mnie, że wolno ci używać zewnętrznych modułów. Czy to nie oszustwo? Nie wiem, ile bajtów zawiera kod źródłowy Tk, ale tak naprawdę nie należy dodawać tych bajtów do liczby bajtów?
FMaz
1
@Krazor tkinterjest standardową biblioteką dla Pythona (ale nawet gdyby tak nie było, musiałbym tylko zadeklarować Python REPL + tkinter). Oznacza to, że mogę korzystać z jego funkcji, po prostu importując go. Kara, którą sugerujesz, jest podobna do poproszenia użytkowników o podanie w bajcie liczby bajtów w źródle języka, w którym piszesz. Tutaj zezwalamy na konkurowanie dowolnym językiem lub modułowi, o ile został napisany i opublikowany wcześniej wyzwanie zostało opublikowane.
Niebieski
OK, dziękuję za wyjaśnienie.
FMaz
14

GeoGebra , 10 bajtów

Checkbox[]

Wszedł w pasek wprowadzania.

Oto gif z wykonania:

Program execution

TheBikingViking
źródło
7
Whoah, GeoGebra. Pamiętam to. Minęło trochę czasu.
Nic Hartley,
Wiem, że to nie na temat, ale czy chodzisz do Waterloo Collegiate Institute? Z ciekawości, na podstawie twojego imienia. Nie jestem prześladowcą, nie martw się :)
HyperNeutrino
13

Tcl / Tk, 21 bajtów

Grał w golfa

grid [checkbutton .c]

enter image description here

zepelin
źródło
11

HTML z JavaScript - 136 124 120 115 113 111 109 79 bajtów

<p style=height:20;border:solid onClick=t=this;t.innerHTML=(t.e=!t.e)?'x':''>

-2 dzięki dzięki @KritixiLithos

Zmniejszono do 79 po fantastycznych golfach z @Jan. Chociaż nowa wersja spełnia wymagania, zachowałem starą wersję z powodów dumy zawodowej.

Chociaż korzystanie z wbudowanych aplikacji jest całkowicie poprawne, pomyślałem, że fajniej jest tworzyć własne od zera. Testowane z Chrome i Firefox.border:solidczy jest kompatybilny z IE, ale nie wiem, czy jest on rzeczywiście potrzebny w nowszych wersjach IE - nie mam IE do przetestowania.

pxW wysokości nie jest z korzyścią dla „kod” Run fragmencie tak nie jest zawarty w „prawdziwym” count bajtów. Bez niego działa poprawnie w przeglądarce.

<p style=height:20px;border:solid onClick=t=this;t.innerHTML=(t.e=!t.e)?'x':''>

Poprzednia wersja:

<p id=d style="width:20px;height:20px;border:solid 1px"onClick="d.innerHTML=d.innerHTML=='x'?'':'x'"align=center>

ElPedro
źródło
1
Można zrobić, id=daby usunąć d=this?
Kritixi Lithos
1
@KritixiLithos - Rzeczywiście mogę. Dzięki i dobrze zauważony :)
ElPedro
1
Nie musisz ustawiać szerokości, reguły mówią, że może to być dowolny wymiar. Jeśli thiszapiszesz stan we właściwości , zapiszesz ustawienie identyfikatora. Jeśli przechowujesz thiswe właściwości, zaoszczędzisz kilka bajtów. To alignjest niepotrzebne. Ponieważ w ciągach atrybutów nie ma spacji, nie potrzebujesz cudzysłowów. <p style=height:20px;border:solid onClick=t=this;t.innerHTML=(t.e=!t.e)?'x':''>79 bajtów
stycznia
@ Jan - Dzięki! Szerokość jest moją własną dumą zawodową. Jeśli tego nie ustawię, wygląda to brzydko, a ponieważ ta odpowiedź nigdy nie wygra i została opublikowana jako alternatywa, prawdopodobnie zostawię ją tam. Poza tym kilka świetnych wskazówek. Wielkie dzięki. Zaktualizuje jutro.
ElPedro,
Dzięki {Easterly. Zaktualizowałem kod, ale zapomniałem o innych bitach. Robi się późno.
ElPedro,
9

Minecraft 1.0.0, 1 bajt

Dźwignia w Minecraft spełnia wszystkie kryteria pola wyboru. Ta odpowiedź jest ważna tylko w starszych wersjach gry, w których wybijanie dźwigni wciąż ją przełącza.

enter image description here

Przy użyciu sugerowanej liczby bajtów @Connor O'Brien.

Zavada
źródło
Różnica 3 między dwiema odpowiedziami nie czyni konsensusu ani nie psuje konsensusu, ale biorąc pod uwagę, że odpowiedź Conora jest dość kontrowersyjna (obecnie na + 24 / -10 ) i że zaakceptowana odpowiedź jest w większości dobrze przyjęta ( + 17 / -0 ), myślę, że to ostatnie powinno być użyte do oceny odpowiedzi w Minecrafcie.
Dennis
Jednak nie ma bloków struktur w Minecraft 1.0.0
ev3commander
1
Jest jeden nw Conor, btw :)
Conor O'Brien
Lub możesz ponownie powiązać lewy i prawy przycisk myszy w dowolnej nowszej wersji, aby był ważny; D
seadoggie01
@ ConorO'Brien Czy to nie jest 1 block? Dlaczego 1 byte? Nie sądzę, żeby mc przechowywał każdy blok jako jeden bajt ...
RedClover,
8

TI-Basic, 15 bajtów

While 1:Shade(0,9:Input :ClrDraw:Input :End

Dość bezpośredni. Pole wyboru obejmuje około 40% ekranu i zmienia się na czarno-biały. Po zaznaczeniu ekran będzie wyglądał mniej więcej tak:

screen

Timtech
źródło
8

Dowolna wersja wiersza polecenia systemu Windows, 3 bajty

(cmd.exe, partia, powershell, start-> uruchom, cokolwiek)

osk

Otwiera klawiaturę ekranową z kilkoma „polami wyboru”, takimi jak Shift, Ctrl, Alt, Capslock. Podobne do odpowiedzi XGC i zainspirowane zrzutem ekranu SmileBASIC.

użytkownik65280
źródło
7

Oktawa, 36 20 bajtów

uicontrol('sty','c')

Dzięki @LuisMendo zapisano 16 bajtów!

rahnema1
źródło
1
uicontrol('sty','c')działa również
Luis Mendo,
@LuisMendo Thanks! Zapisano 1/2 bajtu!
rahnema1
7

KV Lang , 8 bajtów

CheckBox

enter image description here


zakładając naprawdę podstawowe środowisko Pythona, aby kv lang mógł nawet uruchomić:

from kivy.app import runTouchApp
from kivy.lang import Builder
runTouchApp(Builder.load_string('CheckBox'))

Działa to w zasadzie, ponieważ CheckBoxjest widżetem Kivy zawartym w kivy.Factorykażdym widżecie ze standardowej biblioteki.

Ten prosty ciąg tworzy instancję CheckBoxi ze względu na runTouchAppoczekiwanie na uruchomienie widgetu mogę go użyć Builder.load_string.

Tło load_stringuchwytów obsługuje zasadniczo każdy ciąg kv, a jeśli zdefiniowano pojedyncze wystąpienie widgetu (np. CheckBox), To jest ono podnoszone do pozycji głównego widgetu, na przykład:

Application
    openGL Window
        root widget(mostly layout)
            main tree
            and some widgets
            ...
KeyWeeUsr
źródło
7

SmileBASIC, 49 bajtów

@L
O=T
TOUCH OUT T,,
X=T<O!=X
KEY 1,""[X]GOTO@L

i są pustym polem i polem zaznaczonym czcionką SB.
Przełącz pole wyboru, dotykając ekranu (najbliższa rzecz do kliknięcia myszą)

enter image description here enter image description here

Oszukiwanie odpowiedzi:

0 bajtów:

(klawiatura ekranowa ma przyciski, które działają jak pola wyboru, takie jak Caps Lock i klawisze Insert)

14 bajtów:

EXEC"SYS/SBGED

Otwiera wbudowany edytor grafiki, który ma wiele przycisków podobnych do pól wyboru

12Me21
źródło
To jest po prostu genialne, chociaż tak naprawdę nie rozumiem, co robi czwarta linia. Czy możesz wytłumaczyć?
snail_
T<Ojest prawdziwe, gdy przestajesz dotykać ekranu, i !=jest używane jako logiczny XOR. X=X XOR (O && !T)
12Me21
7

C #, 124 120 bajtów

zapisane 4 bajty dzięki grabthefish.

checkbox checked and not checked Uwaga: z powodu edycji obraz nie przedstawia dokładnie tego, co tworzy kod, „checkBox1” nie jest wyświetlany z bieżącym kodem.

using System.Windows.Forms;class P{static void Main(){var a=new Form();a.Controls.Add(new CheckBox());a.ShowDialog();}}

bez golfa: using System.Windows.Forms; class P{ static void Main(){ var a=new Form(); a.Controls.Add(new CheckBox()); Application.Run(a); a.ShowDialog(); } }

satibel
źródło
Jeśli nie znalazłeś nic na ten temat na meta, zapytaj o to na meta.
Matthew Roh,
Możesz pozbyć się przestrzeni var a = new Form();.
clismique
@ Qwerp-Derp Usunąłem je do liczenia, właśnie wkleiłem niewłaściwą rzecz, dzięki.
satibel
możesz użyć, a.ShowDialog();aby zaoszczędzić kilka bajtów
weź
dzięki @grabthefish, choć c # wciąż przegrywa z java :(
satibel
6

Rubin z butami, 16 znaków

Shoes.app{check}

Przykładowe dane wyjściowe: checkbox created with Ruby

człowiek w pracy
źródło
6

HTML z JavaScript, 46 33 28 bajtów

<body onclick=innerHTML^=1>0

v2

<body onclick=this.innerHTML^=1>0

v1

<body onclick=t=this;t.innerHTML=t.e=!t.e||''>

Jest to wariant odpowiedzi @ ElPedro: Utwórz pole wyboru . Zmniejszono do 28 bajtów za pomocą @Albert Renshaw. Można go jeszcze zmniejszyć, ale dzięki temu byłby identyczny jak Utwórz pole wyboru

Cały obszar aplikacji jest klikalny. Będzie on wyświetlany 0w offstanie i 1w onpaństwie. Wypróbuj na https://jsbin.com/nuhetiyocu/1/edit

Jan
źródło
1
Oto zgrabna odmiana o 39 bajtach. <body onclick=t=this;t.innerHTML^=t?1:0Jednak reguła 16 pikseli między zmianą stanu jest przedmiotem dyskusji.
Albert Renshaw,
38<body onclick=this.innerHTML^=this?1:0
Albert Renshaw,
1
O nie, z twoją pomocą mam już 33 lata :)
stycznia
1
28<body onclick=innerHTML^=1>0
Albert Renshaw,
1
Teraz, gdy w pojemniku zawsze znajduje się wartość, można ją zmienić z elementu bodyna inny. Ale właśnie zauważyłem, że dzięki temu będzie identyczna z inną odpowiedzią codegolf.stackexchange.com/questions/109155/create-a-checkbox/... więc zostawiam to tak, jak jest
Jan
6

PowerShell v5 +, 94 bajty

($a=[Windows.Forms.Form]::new()).Controls.Add([Windows.Forms.Checkbox]::new());$a.ShowDialog()

enter image description here enter image description here

Jest to dość straszne, ale nie mogę dostać oświadczenia któregokolwiek z krótsze albo Add-Typealbo using namespace- i wymagana jest zmienna, ponieważ muszę ponownie użyć obiektu, aby pokazać postać, i Controls.Add()zwraca nic użytecznego.

ShowDialog jest wymagane w moim systemie, aby pole było interaktywne po uruchomieniu tego polecenia, w przeciwnym razie formularz zostanie zawieszony.

również System.Windows.Forms.Formmożna skrócić tylko Windows.Forms.Formprzed systemem (przynajmniej moim) zatrzymuje auto ukończenie go w świeżej sesji.

colsw
źródło
Miły! Może warto dodać, że wymaga to wersji 5+.
briantist
@briantist zaktualizowane, dzięki.
colsw
6

Excel VBA, 38 32 31 29 bajtów

Natychmiastowa funkcja okna, która wstawia pole wyboru o wysokości = 9 i szerokości = 9 w komórce A1na pierwszym arkuszu aktywnego projektu Excel VBA

Sheet1.CheckBoxes.Add 0,0,9,9

-6 Dzięki Pajonk zastępowania [A1],[A1],9,9z0,0,9,9

-1 wymianie Sheets(1)z[Sheet1]

-2 za uświadomienie sobie powyższego było głupie i Sheet1zamiast tego użyłem

Taylor Scott
źródło
Wydaje się, że 1,1,9,9jako argumenty również działają.
pajonk
1
Nie potrzebujesz Sheet(1)., możesz uruchomić to wystarczająco szybko w programie Excel, ale CheckBoxesjest dziedziczony do aktywnego arkusza
Mr.Burns
@ Mr.Burns Sprawdziłem w to, ale bez bezpośredniego odwoływania dowolny obiekt arkusza CheckBoxes.Addmetoda generuje błąd informujący, „Obiekt jest wymagane”
Taylor Scott
@TaylorScott Masz rację, umieściłem kod w module arkusza, a nie w normalnym module. Mój błąd xD
Mr.Burns
4

VBA (Word), 74 57 bajtów

-17 dzięki Taylor Scott

Sub a()
f = a.FormFields.Add(Selection.Range, 71)
End Sub

Nazwa pliku dokumentu powinna wynosić.

Daniel
źródło
1
Można wymienić wdFieldFormCheckBoxz 71(wartość całkowitej części wdFieldFormCheckBoxstałych) dla oszczędności z 17 bajtów
Taylor Scotta
Myślę, że możesz usunąć znaki nowej linii dla -2 bajtów.
devRicher
4

Mops, 20 bajtów

input(type=checkbox)
theonlygusti
źródło
Poza tym liczę jako 23. Jeśli usuniesz cytaty, nadal działa w Firefox i Chrome (nie można przetestować na IE) i pojawiłby się w 21, w którym to przypadku uznałbym to za ulepszenie w tym przykładzie i dlatego jest poprawne.
ElPedro
@heonlygusti - rzeczywiście, ale bez cytatów głosowałbym :-) btw, głosowanie nie było mną.
ElPedro
Głosowałbym za tym, gdyby nie te cytaty, które nie są potrzebne.
NightSkyCode
@ thehelylygusti wcale. Spróbuj.
NightSkyCode
4

Clojure, 201 195 145 127 bajtów

(ns c(:require[quil.core :as q]))(def a(atom nil))(q/defsketch b :draw #(q/background(if@a 0 99)):mouse-clicked #(swap! a not))

-6 bajtów poprzez pozbycie się potrzeby m/fun-mode.

-50 bajtów poprzez usunięcie opcji :setupi :size, ponieważ są one domyślne i niepotrzebne w non- fun-mode. Usunięto również niepotrzebny import oprogramowania pośredniego.

-18 bajtów dzięki tylko @ ASCII. Zmieniono na „mniejsze” kolory i usunięto niepotrzebne miejsce przed operatorem dereferencji ( @).

Tworzy szkic Quil (biblioteka Clojure, która zapewnia warstwę nad przetwarzaniem), dlatego wymaga uruchomienia biblioteki Quil.

(ns bits.golf.checkbox
  (:require [quil.core :as q]))

; Mutable global variable to hold the toggle state
(def a (atom nil))

(q/defsketch b
         ; Draw the background color to be either black or red depending on the toggle state.
         :draw #(apply q/background (if @a [0 0 0] [255 0 0]))

         ; Negate the state on mouse click
         :mouse-clicked #(swap! a not))

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Carcigenicate
źródło
Nie możesz zamienić 255 na 99? Również spróbuję usunąć spacje przed / po symbolach i sprawdzić, czy nadal działa
tylko ASCII
@ Tylko ASCII tak, mógłbym. Zrobił się bardzo brzydki kolor przez iirc, i z jakiegoś powodu wtedy nadałem mu priorytet. I nie, to tyle miejsca, ile mogę niestety usunąć.
Carcigenicate
@ Tylko ASCII Problem polega na tym, że symbole mogą zawierać prawie dowolny znak, więc tak naprawdę jedynymi „bezpiecznymi sąsiadami”, w których można usunąć spacje, są nawiasy lub cudzysłowy. Na szczęście jest to seplenienie w stosunku do pierwszego.
Carcigenicate
Hmm może [0 0 99]wtedy? (jakiś ciemnoniebieski)
tylko ASCII
@ Tylko ASCII Właściwie myślę, że mogę teraz wyrzucić cyfry 0, kiedy o tym myślę. Myślę, że Quil auto wypełnia przód zerami, jeśli wektor jest za krótki. Jeśli pamiętam ostatnie, naprawię to. Dzięki, że kazałeś mi myśleć.
Carcigenicate
4

Operacyjny język skryptowy Flashpoint , 273 bajty

Aby pokazać pole wyboru:

createDialog"b"

Ale najpierw trzeba to zdefiniować:

Zapisz następujące elementy w pliku o nazwie description.extw folderze misji:

class b{idd=999;movingEnable=1;class controls{class c{idc=457;x=0.1;y=0.1;w=0.1;h=0.1;text="";action="if(ctrlText 457=={})then{ctrlSetText[457,{V}]}else{ctrlSetText[457,{}]}";type=1;style=2;colorText[]={1,1,1,1};font="tahomaB36";sizeEx=0.1;}}}

Pole wyboru w akcji:

Steadybox
źródło
3

AutoIt , 78 bajtów

GUICreate(0)
GUISetState(GUICtrlCreateCheckbox(0,0,0))
Do
Until GUIGetMsg()=-3

Otwiera zmaksymalizowane okno, które można zamknąć jak każde inne okno. Maksymalizacja i ... świetność to efekt uboczny gry w golfa.

wprowadź opis zdjęcia tutaj

mınxomaτ
źródło
Jak miałbym to uruchomić w systemie Linux?
dkudriavtsev
@wat wine AutoIt3.exe script.au3, gdzie script.au3plik zawiera ten kod.
mınxomaτ
3

Python, 62 bajty

from tkinter import*
a=Tk()
Checkbutton(a).pack()
a.mainloop()
niebieski
źródło