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:
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.
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.Pole wyboru nie powinno się poruszać po przełączeniu.
W stanie zaznaczonym pole wyboru może mieć dowolny kolor.
W stanie niezaznaczonym pole wyboru może mieć dowolny kolor, o ile przynajmniej 16 pikseli jest wizualnie różne od stanu zaznaczonego .
W jednej instancji programu wszystkie zaznaczone stany powinny być wizualnie identyczne, a wszystkie niesprawdzone stany powinny być wizualnie identyczne.
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%.
źródło
Odpowiedzi:
Mathematica, 10 bajtów
Zakłada środowisko notebooka Mathematica .
Dwa stany wyglądają tak:
źródło
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.
źródło
>
. +1 i ważny IMHO.Bash ,
675550353231 bajtówKod 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.
›?9h
przechwytuje 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,M
myszy,b
przycisk ( 0x20 + numer przycisku) x współrzędna kliknięcia ( 0x20 + współrzędnych) i Y współrzędnych.x
y
-sn6
powoduje 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
Wynik
źródło
1000h
na9h
(różnica polega na tym, że1000h
obsługuje zarówno naciśnięcie, jak i zwolnienie myszy, a9h
tylko zwolnienie myszy). Może to wymagać zmian w innym miejscu kodu.gnome-terminal
wydaje się działać, właśnie tego używałem do testowania (edytuj: ale nie sądzę, że obsługuje 1-bajtowy CSI).xterm
powinien 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\x9b
jakiegoś powodu, prawdopodobnie związane z moimi ustawieniami stty, a nie z samym terminalem.):)
od:(
końcaPrzetwarzanie,
7866656361 bajtów2 bajty zapisane dzięki @TuukkaX przy użyciu
-a%2
zamiasta%2*-1
2 bajty zapisane dzięki @TuukkaX przy użyciu
a=-a
Pole wyboru na przemian jest czarno-białe.
Wyjaśnienie
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), potrzebujemydraw()
funkcji.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):
źródło
fill(-1)
a
na 1 zamiast 0. Zmieńa++
naa=-a
, co czyni-a%2
justa
. Spowoduje to przełączeniea
między 1 a -1. Nie wiem jednak, jaki jest kolor 1.color(1)
produkty,#010101
które są bardzo zbliżone do czerniHTML + JavaScript,
323025 znakówźródło
this
jest niejawny i można go usunąć. Jest takżeinnerHTML
krótszy.<input>
elementuUnix 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
Ekran XGC jest wypełniony różnymi polami wyboru:
i „lepkie przyciski” (które kwalifikują się jako pola wyboru, zgodnie z regułami wyzwania):
źródło
GitHub Flavored Markdown - 6 bajtów
(Jest spacja)
W skrócie:
źródło
AHK , 25 bajtów
Wynik -
źródło
Scratch, 2 bloki
Umieść ten skrypt w domyślnej ikonce (która zawiera 2 kostiumy)
źródło
Python REPL, 45 bajtów
źródło
tkinter
jest 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.GeoGebra , 10 bajtów
Wszedł w pasek wprowadzania.
Oto gif z wykonania:
źródło
Tcl / Tk, 21 bajtów
Grał w golfa
źródło
HTML z JavaScript -
13612412011511311110979 bajtów-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:solid
czy jest kompatybilny z IE, ale nie wiem, czy jest on rzeczywiście potrzebny w nowszych wersjach IE - nie mam IE do przetestowania.px
W 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.Poprzednia wersja:
źródło
id=d
aby usunąćd=this
?this
zapiszesz stan we właściwości , zapiszesz ustawienie identyfikatora. Jeśli przechowujeszthis
we właściwości, zaoszczędzisz kilka bajtów. Toalign
jest 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ówMinecraft 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.
Przy użyciu sugerowanej liczby bajtów @Connor O'Brien.
źródło
n
w Conor, btw :)1 block
? Dlaczego1 byte
? Nie sądzę, żeby mc przechowywał każdy blok jako jeden bajt ...TI-Basic, 15 bajtów
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:
źródło
Dowolna wersja wiersza polecenia systemu Windows, 3 bajty
(cmd.exe, partia, powershell, start-> uruchom, cokolwiek)
Otwiera klawiaturę ekranową z kilkoma „polami wyboru”, takimi jak Shift, Ctrl, Alt, Capslock. Podobne do odpowiedzi XGC i zainspirowane zrzutem ekranu SmileBASIC.
źródło
Oktawa,
3620 bajtówDzięki @LuisMendo zapisano 16 bajtów!
źródło
uicontrol('sty','c')
działa równieżKV Lang , 8 bajtów
zakładając naprawdę podstawowe środowisko Pythona, aby kv lang mógł nawet uruchomić:
Działa to w zasadzie, ponieważ
CheckBox
jest widżetem Kivy zawartym wkivy.Factory
każdym widżecie ze standardowej biblioteki.Ten prosty ciąg tworzy instancję
CheckBox
i ze względu narunTouchApp
oczekiwanie na uruchomienie widgetu mogę go użyćBuilder.load_string
.Tło
load_string
uchwytó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:źródło
SmileBASIC, 49 bajtów
i
są pustym polem i polem zaznaczonym czcionką SB.Przełącz pole wyboru, dotykając ekranu (najbliższa rzecz do kliknięcia myszą)
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:
Otwiera wbudowany edytor grafiki, który ma wiele przycisków podobnych do pól wyboru
źródło
T<O
jest prawdziwe, gdy przestajesz dotykać ekranu, i!=
jest używane jako logiczny XOR.X=X XOR (O && !T)
C #,
124120 bajtówzapisane 4 bajty dzięki grabthefish.
Uwaga: z powodu edycji obraz nie przedstawia dokładnie tego, co tworzy kod, „checkBox1” nie jest wyświetlany z bieżącym kodem.
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(); } }źródło
var a = new Form();
.a.ShowDialog();
aby zaoszczędzić kilka bajtówRubin z butami, 16 znaków
Przykładowe dane wyjściowe:
źródło
HTML z JavaScript,
463328 bajtówv2
v1
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
0
woff
stanie i1
won
państwie. Wypróbuj na https://jsbin.com/nuhetiyocu/1/editźródło
<body onclick=t=this;t.innerHTML^=t?1:0
Jednak reguła 16 pikseli między zmianą stanu jest przedmiotem dyskusji.<body onclick=this.innerHTML^=this?1:0
<body onclick=innerHTML^=1>0
body
na 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 jestPowerShell v5 +, 94 bajty
Jest to dość straszne, ale nie mogę dostać oświadczenia któregokolwiek z krótsze albo
Add-Type
albousing namespace
- i wymagana jest zmienna, ponieważ muszę ponownie użyć obiektu, aby pokazać postać, iControls.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.Form
można skrócić tylkoWindows.Forms.Form
przed systemem (przynajmniej moim) zatrzymuje auto ukończenie go w świeżej sesji.źródło
Excel VBA,
38323129 bajtówNatychmiastowa funkcja okna, która wstawia pole wyboru o wysokości = 9 i szerokości = 9 w komórce
A1
na pierwszym arkuszu aktywnego projektu Excel VBA-6 Dzięki Pajonk zastępowania
[A1],[A1],9,9
z0,0,9,9
-1 wymianie
Sheets(1)
z[Sheet1]
-2 za uświadomienie sobie powyższego było głupie i
Sheet1
zamiast tego użyłemźródło
1,1,9,9
jako argumenty również działają.Sheet(1).
, możesz uruchomić to wystarczająco szybko w programie Excel, aleCheckBoxes
jest dziedziczony do aktywnego arkuszaCheckBoxes.Add
metoda generuje błąd informujący, „Obiekt jest wymagane”VBA (Word),
7457 bajtów-17 dzięki Taylor Scott
Nazwa pliku dokumentu powinna wynosić.
źródło
wdFieldFormCheckBox
z71
(wartość całkowitej częściwdFieldFormCheckBox
stałych) dla oszczędności z 17 bajtówMops, 20 bajtów
źródło
Clojure,
201195145127 bajtów-6 bajtów poprzez pozbycie się potrzeby
m/fun-mode
.-50 bajtów poprzez usunięcie opcji
:setup
i: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.
źródło
[0 0 99]
wtedy? (jakiś ciemnoniebieski)Operacyjny język skryptowy Flashpoint , 273 bajty
Aby pokazać pole wyboru:
Ale najpierw trzeba to zdefiniować:
Zapisz następujące elementy w pliku o nazwie
description.ext
w folderze misji:Pole wyboru w akcji:
źródło
AutoIt , 78 bajtów
Otwiera zmaksymalizowane okno, które można zamknąć jak każde inne okno. Maksymalizacja i ... świetność to efekt uboczny gry w golfa.
źródło
wine AutoIt3.exe script.au3
, gdziescript.au3
plik zawiera ten kod.Python, 62 bajty
źródło