Создать флажок

51

Напишите программу, которая создает флажок с двумя состояниями, с которым люди могут взаимодействовать с помощью мыши.

В частности, ваша программа должна выполнять все следующие действия:

  1. Имейте область экрана размером 8 × 8 пикселей (или больше, если хотите), которая является интерактивной областью флажка. Отныне этот регион просто называется флажком.

  2. Когда курсор мыши перемещается внутри флажка и нажата кнопка мыши по умолчанию *, флажок должен переключать состояния.
    Проверено становится непроверенным. Не проверено становится проверено.

  3. Флажок не должен перемещаться при переключении.

  4. В отмеченном состоянии флажок может быть любого цвета.

  5. В непроверенном состоянии флажок может быть любого цвета, если по крайней мере 16 пикселей визуально отличаются от отмеченного состояния .

  6. В одном экземпляре программы все проверенные состояния должны быть визуально идентичны друг другу, а все непроверенные состояния должны быть визуально идентичны друг другу.

  7. Не завершайте программу до тех пор, пока она не прекратится явно (например, с помощью кнопки выхода или Alt + F4), поэтому пользователь может установить флажок столько, сколько он хочет.

* Вы можете предположить, что кнопка мыши по умолчанию всегда щелкается левой кнопкой мыши, но также хорошо использовать значение по умолчанию, определенное программным обеспечением мыши или ОС, которое может фактически не щелкать левой кнопкой мыши в зависимости от пользователя.

Примечания

  • Неважно, что находится за пределами вашего региона флажка. Это может быть просто рабочий стол. Это может быть часть консоли, которая меняется при каждом переключении.

  • Не имеет значения, в каком состоянии установлен ваш флажок.

  • Область флажка может иметь любые размеры 8 или 8 пикселей или выше. Это не должно быть квадратным.

  • Вы можете вносить незначительные поправки в настройки, которые находятся вне вашего контроля, такие как размер шрифта консоли, масштабирование браузера, разрешение монитора и т. Д. Если ваша программа работает в приемлемых тестовых настройках, она должна быть действительной.

  • Если ваша программа открывает окно, вы можете предположить, что оно было перенесено в соответствующее место на экране, если это необходимо (например, в верхнем левом углу).

  • Вы можете использовать языки разметки, такие как HTML или другие языки, которые мы обычно не считаем полноценными языками программирования.

  • Ваш флажок должен быть переключен с помощью кнопки мыши по умолчанию. Это нормально, если он также переключает другие формы ввода (например, правую кнопку мыши), за исключением движения мыши . то есть состояние не должно изменяться, если мышь просто перемещается внутри флажка.

  • Скриншоты вашего флажка в действии очень приветствуются!

счет

Самый короткий код в байтах побеждает.

пример

Канонический пример HTML в 23 байта.

<input type="checkbox">

Для меня в Google Chrome это делает флажок 12 × 12 пикселей, и около 30 пикселей четко меняются между проверенным и непроверенным состояниями.

Я принимаю во внимание, что масштаб браузера составляет 100%.

Кальвин Хобби
источник
2
Может ли флажок охватывать весь экран?
Kritixi Lithos
@KritixiLithos Да, это будет действительно. Обратите внимание, что при желании вы можете считать конкретный регион 8х8 официальным флажком, даже если работает больший регион.
Увлечения Кэлвина
@ Helka Homba - разрешено ли приложению отображать другие элементы управления, кроме самого флажка?
Цеппелин
Это нормально для флажка для переключения на другие виды ввода? (Например, является ли решение правильным, если флажок переключается на любой пользовательский ввод, независимо от того, является ли он щелчком мыши, движением мыши или нажатием клавиши? Он переключался бы по щелчку мыши, но включал бы другие стимулы тоже.)
1
@zeppelin «Неважно, что находится за пределами области вашего флажка. Это может быть просто рабочий стол. Это может быть часть консоли, которая меняется при каждом переключении». Таким образом, пока флажок есть, не имеет значения, что еще есть.
Увлечения Кэлвина

Ответы:

33

Mathematica, 10 байт

Checkbox[]

Предполагается, что среда Mathematica для ноутбуков .

Два состояния выглядят так:

введите описание изображения здесь

Мартин Эндер
источник
73
Конечно. Mathematica снова обманывает.
Мэтью Ро
1
Забавно, что в комментарии больше откликов, чем в ответе
RudolfJelin
4
@ RudolfL.Jelínek забавно, что в ответе вообще есть какие-то отрицательные отзывы ...
Мартин Эндер,
31

HTML, 20 байт

Не знаю, насколько достоверным будет ответ. HTML требует, чтобы тег был закрыт для юридической проверки, но современные браузеры автоматически закрывают их, чтобы он выполнялся.

<input type=checkbox

январь
источник
3
Я рассматривал это как вариант ранее (без кавычек), но полностью пропустил закрытие >. +1 и действительное ИМХО.
ElPedro
1
На этом сайте языки определяются их реализацией, поэтому мне кажется, что это нормально.
Джон Гауэрс
1
Спасибо @JohnGowers, мне было интересно узнать, насколько допустимо злоупотребление.
Jan
27

Баш , 67 55 50 35 32 31 байт

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

Код содержит байт CR (первая новая строка) и байт CSI (небольшая правая угловая скобка с кодировкой Windows-1252). Требуется xterm (или эквивалентный) и кодировка ISO-8859-1 (или аналогичная).

Код определяет функцию с именем :, которая поочередно отображает белый 1 или 0 в черном прямоугольнике. Есть ровно 24 разных пикселя с настройками по умолчанию для xterm. ( доказательство )

Для более старой версии, которая переключает цвет всего терминала, проверьте версию 10 этого ответа.

Спасибо @ ais523 за предложение xterm, которое экономит 4 байта!

Как это устроено

:(...)создает функцию с именем, :которая выполняется ....

Команда чтения делает настоящую магию.

  • -p указывает подсказку ввода, которая выводится в STDOUT.

    • $[i^=1]является арифметическим расширением, которое XOR переменной i с 1 . я могу быть изначально не установлен; когда это произойдет, он будет рассматриваться как 0 .

    • Возврат каретки помещает курсор назад в начало строки.

    • ›?9hзахватывает мышь в поддерживаемых терминалах. Каждый щелчок отправит шесть символов на терминал, а именно ←[Mbxy, где представляет байт ESC ( 0x1b ). ←[указывает последовательность эвакуации, Mмышь, bкнопку ( 0x20 + номер кнопки), xто х координату мыши ( 0x20 + координаты), и у координат.y

    • -sn6делает чтение беззвучным (ввод мыши не будет отображаться в STDERR) и останавливается после считывания ровно 6 байтов. Он сохраняет входные данные в переменной REPLY , но нас не интересует вывод, который он производит.

Наконец, когда чтение завершается (после одного щелчка мыши), :рекурсивно вызывает себя, входя в бесконечный цикл.

Создание и вызов

$ 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

Выход

скринкаст

Деннис
источник
Я сам работал над решением, аналогичным этому (хотя на другом языке, заставлял меня сдаться, потому что я не мог найти способ получить ввод без перевода строки). Вероятное улучшение: изменить 1000hна 9h(разница в том, что 1000hобрабатывает как нажатие, так и отпускание мыши, и 9hобрабатывает только отпускание мыши). Это может или не может нуждаться в изменениях в другом месте кода.
@ ais523 Я пытался это сделать, но, по крайней мере, мой эмулятор терминала (Konsole), похоже, не поддерживает его. Вы знаете, что делает?
Деннис
gnome-terminalкажется, работает, это то, что я использовал для тестирования (правка: но я не думаю, что он поддерживает 1-байтовый CSI). xtermДолжен также работать и может быть легче установить, если у вас есть система KDE. (Я только что проверил это; он работает, \x1b[но не \x9bпо какой-то причине, возможно, связан с моими настройками stty, а не с самим терминалом.)
@ ais523 У меня есть xterm. Я проверю, когда вернусь за своим компьютером.
Деннис
8
Я люблю, как это становится :)с :(конца
Андрас Дик
22

Обработка 78 66 65 63 61 байт

2 байта сохранены благодаря @TuukkaX с использованием -a%2вместоa%2*-1

2 байта сохранены благодаря @TuukkaX с помощью a=-a

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

Флажок чередуется между черным и белым.

объяснение

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

Теперь есть много других альтернатив, таких как использование оператора if для обработки этого, но тогда это становится странным и постоянно меняет фон, пока нажата мышь. Сначала я попробовал mouseButton, но потом мне понадобилось бы больше условий и больше кода, который в итоге получился бы гораздо более многословным.

Теперь, mousePressed()чтобы быть вызванным навсегда (иначе он просто остановился бы после того, как программа только что запустилась), нам нужна draw()функция.

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
}

введите описание изображения здесь


Меньший флажок будет 90 байтов (флажок находится в верхнем левом углу, поэтому мы можем удалить некоторые условия мыши):

int a=1;void draw(){fill(a);rect(0,0,8,8);}void mousePressed(){if(mouseX<9&mouseY<9)a=-1;}
Kritixi Lithos
источник
2
Умное использование того, как при обработке принимают одно целое число в качестве оттенков серого!
FlipTack
@FlipTack Кажется, что белый также может быть выражен какfill(-1)
Kritixi Lithos
1
У меня есть идея. Инициализируйте aна 1 вместо 0. Измените a++на a=-a, что делает -a%2просто a. Это будет переключаться aмежду 1 и -1. Я не знаю, какой цвет производит 1.
Yytsi
@TuukkaX Да, это работает. color(1)производит, #010101который очень близок к черному
Kritixi Lithos
22

HTML + JavaScript, 32 30 25 символов

<p onclick=innerHTML^=1>0

Qwertiy
источник
3
thisнеявный и может быть удален. Также innerHTMLкороче.
Деннис
@ Денис, странно с этим ... Спасибо.
Qwertiy
+1 за <input>
неиспользование
20

Unix Shell (+ x11-apps), 3 байта

отказ

Ответ ниже скучный, граничащий и «обманывающий» (по крайней мере, для меня).

Тем не менее, он, кажется, не нарушает ни одно из правил конкурса «как написано», или «лазейки по умолчанию», поэтому я публикую его.

(Если вы можете указать конкретное правило, которое оно нарушает, пожалуйста, прокомментируйте!)

Golfed

xgc

Программа xgc демонстрирует различные возможности графических примитивов X.

XGC экран фактически заполнен различными флажками:

введите описание изображения здесь

и «липкие кнопки» (которые подпадают под флажки в соответствии с правилами этого вызова):

введите описание изображения здесь

дирижабль
источник
20

Уценка GitHub со вкусом - 6 байтов

- [ ] 

(Есть пробел)

В сущности: проверить / не проверить

Axel
источник
Конечно, это соответствует второй половине первого предложения: «Напишите программу, которая создает флажок с двумя состояниями, с которым люди могут взаимодействовать с помощью мыши ».?
manatwork
1
Да, если вы вставите его в суть и создаете суть (для «компиляции»), вы сможете с ним взаимодействовать.
Аксель
Интересно. Спасибо @ Ax31. Я никогда не пользовался гистами.
manatwork
1
Я бы не ожидал "Github Flavored Markdown".
Йонас Шефер
18

AHK , 25 байт

Gui,Add,Checkbox
Gui,Show

Выход -

Указатель мыши не захвачен в этом гифке

Гурупад Мамадапур
источник
16

Царапина, 2 блока

введите описание изображения здесь

Поместите этот скрипт в спрайт по умолчанию (который поставляется с 2 костюмами)

SuperJedi224
источник
1
Интернет - демонстрация: phosphorus.github.io/...
прима
14

Python REPL, 45 байт

from tkinter import*
Checkbutton(Tk()).pack()
синий
источник
Я не участвую в компьютерной графике и не читаю эти сообщения. Однако меня действительно удивляет, что вам разрешено использовать внешние модули. Разве это не обман? Я не знаю, сколько байтов в исходном коде Tk, но неужели эти байты не должны быть добавлены к вашему количеству байтов?
FMaz
1
@Krazor tkinter- это стандартная библиотека для Python (но даже если бы это было не так, мне нужно было бы только объявить Python REPL + tkinter). Это означает, что я могу использовать его функции, просто импортировав его. Предлагаемое вами наказание аналогично тому, как просить пользователей включать в число байтов количество байтов в источнике языка, на котором вы пишете. Здесь мы разрешаем конкурировать любому языку или модулю, если они были написаны и опубликованы ранее. Задача была опубликована.
Blue
Хорошо, спасибо за разъяснения.
FMaz
14

GeoGebra , 10 байт

Checkbox[]

Введено в строку ввода.

Вот gif исполнения:

Выполнение программы

TheBikingViking
источник
7
Ух ты, GeoGebra. Я помню это. Прошло много времени.
Ник Хартли
Я знаю, что это не по теме, но вы ходите в Университетский институт Ватерлоо? Просто из любопытства, исходя из твоего имени. Я не сталкер, не волнуйся :)
HyperNeutrino
13

Tcl / Tk, 21 байт

Golfed

grid [checkbutton .c]

введите описание изображения здесь

дирижабль
источник
11

HTML с JavaScript - 136 124 120 115 113 111 109 79 байт

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

-2 благодаря @KritixiLithos

Уменьшено до 79 после некоторого фантастического игры в гольф от @Jan. Хотя новая версия соответствует требованиям, я сохранил старую версию по причинам профессиональной гордости.

Хотя использование встроенных модулей вполне допустимо, я подумал, что было бы веселее создавать свои собственные с нуля. Протестировано с Chrome и Firefox. border:solidесть для совместимости с IE, но я не знаю, действительно ли это нужно в новых версиях IE - у меня нет IE для тестирования.

pxВ высоту есть в пользу «Run фрагмента кода» , так как не входит в «реальном» счетчику байтов. Он отлично работает в браузере без него.

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

Предыдущая версия:

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

ElPedro
источник
1
Вы можете сделать, id=dчтобы удалить d=this?
Kritixi Lithos
1
@KritixiLithos - Действительно, я могу. Спасибо и хорошо заметили :)
ElPedro
1
Вам не нужно устанавливать ширину, правила говорят, что это могут быть любые размеры. Если вы сохраняете состояние в свойстве, thisвы сохраняете установку идентификатора. Если вы храните thisв собственности, вы сохраните несколько байтов. Это alignне нужно. Поскольку в строках атрибутов нет пробелов, вам не нужны кавычки. <p style=height:20px;border:solid onClick=t=this;t.innerHTML=(t.e=!t.e)?'x':''>79 байт
Jan
@ Ян - Спасибо! Ширина - моя профессиональная гордость. Если я не установлю это, это выглядит уродливо, и так как этот ответ никогда не выиграет и был просто опубликован как альтернатива, я, вероятно, оставлю это там. Кроме этого некоторые отличные намеки. Большое спасибо. Обновлю завтра.
ElPedro
Спасибо @Easterly. Обновил код, но забыл другие биты. Становится поздно.
ElPedro
9

Minecraft 1.0.0, 1 байт

Рычаг в Minecraft соответствует всем критериям для флажка. Этот ответ действителен только для более старых версий игры, где нажатие на рычаг все еще переключает его.

введите описание изображения здесь

Забил, используя предложенное @Connor O'Brien количество байтов.

Зэвэда
источник
Разница в 3 между двумя ответами едва ли дает или нарушает консенсус, но, учитывая, что ответ Конора довольно спорный (в настоящее время составляет + 24 / -10 ) и что принятый ответ в подавляющем большинстве хорошо принят ( + 17 / -0 ), я думаю последний должен быть использован для оценки ответов Minecraft.
Деннис
Однако в Minecraft 1.0.0 нет структурных блоков
ev3commander
1
Это один nв Коноре, кстати :)
Конор О'Брайен,
Или вы можете привязать левую и правую кнопки мыши в любой новой версии, чтобы сделать ее действительной; D
seadoggie01
@ ConorO'Brien Разве это не так 1 block? Почему 1 byte? Я не думаю, что mc хранит каждый блок как один байт ...
RedClover
8

TI-Basic, 15 байтов

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

Довольно просто. Флажок покрывает примерно 40% экрана и чередуется между черным и белым. Если флажок установлен, экран будет выглядеть примерно так:

экран

Timtech
источник
8

Любая версия командной строки Windows, 3 байта

(cmd.exe, batch, powershell, start-> run, что угодно)

osk

Открывает экранную клавиатуру, на которой есть несколько «флажков», таких как клавиши shift, ctrl, alt, capslock, аналогичные ответу xgc и вдохновленные скриншотом ответа SmileBASIC.

user65280
источник
7

Октава, 36 20 байт

uicontrol('sty','c')

Благодаря @LuisMendo сэкономлено 16 байт!

rahnema1
источник
1
uicontrol('sty','c')также работает
Луис Мендо
@ LuisMendo Спасибо! Сохранено 1/2 байта!
rahnema1
7

К.В. Ланг , 8 байт

CheckBox

введите описание изображения здесь


Предположим, что действительно простая среда Python для kv lang:

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

Это работает в основном потому CheckBox, что виджет Kivy включен в качестве kivy.Factoryкаждого виджета из стандартной библиотеки.

Эта простая строка создает экземпляр CheckBoxи из-за runTouchAppожидания запуска виджета, который я могу использовать Builder.load_string.

Фон load_stringобрабатывает в основном каждую строку kv, и если определен единственный экземпляр виджета (например CheckBox), то он повышается до позиции корневого виджета, например:

Application
    openGL Window
        root widget(mostly layout)
            main tree
            and some widgets
            ...
KeyWeeUsr
источник
7

SmileBASIC, 49 байтов

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

и являются пустым полем и флажком в шрифте SB.
Установите флажок, касаясь экрана (наиболее близкий к щелчку мышью)

введите описание изображения здесь введите описание изображения здесь

Читерские ответы:

0 байтов:

(на экранной клавиатуре есть кнопки, которые действуют как флажки, такие как заглавные буквы и клавиши вставки)

14 байтов:

EXEC"SYS/SBGED

Открывает встроенный графический редактор, который имеет несколько кнопок, похожих на флажки

12Me21
источник
Это просто замечательно, хотя я не совсем понимаю, что делает 4-я строка. Могли бы вы объяснить?
улитка
T<OЗначение true, когда вы перестаете касаться экрана, и !=используется в качестве логического XOR. X=X XOR (O && !T)
12Me21
7

C #, 124 120 байтов

сэкономил 4 байта благодаря grabthefish.

флажок установлен и не установлен примечание: из-за правок изображение не совсем соответствует тому, что делает код, «checkBox1» не отображается с текущим кодом.

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

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

satibel
источник
Если вы не нашли ничего об этом на мета, спросите об этом на мета.
Мэтью Ро
Вы можете избавиться от пробелов в var a = new Form();.
Климат
@ Qwerp-Derp Я убрал их для подсчета, я просто вставил не ту вещь, спасибо.
сатибель
Вы могли бы использовать, a.ShowDialog();чтобы сохранить несколько байтов
grabthefish
спасибо @grabthefish, хотя c # все еще проигрывает java :(
satibel
6

Рубин с Обуви, 16 символов

Shoes.app{check}

Пример вывода: флажок, созданный с помощью Ruby

manatwork
источник
6

HTML с JavaScript, 46 33 28 байт

<body onclick=innerHTML^=1>0

v2

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

v1

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

Это вариант ответа @ ElPedro: создайте флажок . Получено до 28 байт с помощью @Albert Renshaw. Это может быть дополнительно уменьшено, но это сделало бы его идентичным созданию флажка

Вся область приложения кликабельна. Он будет отображаться 0в offсостоянии и 1в onсостоянии. Попробуйте это на https://jsbin.com/nuhetiyocu/1/edit

январь
источник
1
Вот аккуратный вариант в 39 байт. <body onclick=t=this;t.innerHTML^=t?1:0Правило 16 пикселей между изменениями состояния, тем не менее, подлежит обсуждению.
Альберт Реншоу
38<body onclick=this.innerHTML^=this?1:0
Альберт Реншоу
1
О нет , с вашей помощью я падаю на 33 уже :)
я
1
28<body onclick=innerHTML^=1>0
Альберт Реншоу
1
Теперь, когда внутри контейнера всегда есть значение, его можно изменить с bodyдругого элемента. Но я только что заметил , что бы сделать его идентичным другой ответ codegolf.stackexchange.com/questions/109155/create-a-checkbox/... , так что я просто оставить его как есть
Jan
6

Powershell v5 +, 94 байта

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

введите описание изображения здесь введите описание изображения здесь

Это довольно ужасно, но я не могу получить операторы более короткими с помощью Add-Typeили using namespace- и переменная обязательна, так как мне нужно повторно использовать объект, чтобы показать форму, и не Controls.Add()возвращает ничего пригодного для использования.

ShowDialog в моей системе требуется, чтобы окно было интерактивным после выполнения этой команды, в противном случае форма будет заморожена.

также System.Windows.Forms.Formможет быть сокращено только до того, Windows.Forms.Formкак (по крайней мере, моя собственная) система прекратит автоматическое завершение в новом сеансе.

colsw
источник
Приятно! Могу добавить, что для этого требуется версия 5+.
Бриантист
@briantist обновлен, спасибо.
Colsw
6

Excel VBA, 38 32 31 29 байт

Функция «Немедленное окно», которая вставляет флажок высоты = 9 и ширины = 9 в ячейку A1на первом листе активного проекта Excel VBA

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

-6 Спасибо Pajonk за замену [A1],[A1],9,9на0,0,9,9

-1 для замены Sheets(1)на[Sheet1]

-2 для реализации вышеупомянутого было глупо и Sheet1вместо этого

Тейлор Скотт
источник
Кажется, что в 1,1,9,9качестве аргументов работает также.
pajonk
1
Вам не нужно Sheet(1)., вы можете запустить это достаточно быстро в Excel, но CheckBoxesэто наследство для активного листа
Mr.Burns
@ Mr.Burns Я проверил это, но без прямой ссылки на какой-либо объект Worksheet, CheckBoxes.Addметод выдает ошибку с указанием «Требуется объект»
Тейлор Скотт,
@TaylorScott Вы правы, я поместил код в модуль листа, а не в обычный модуль. Моя ошибка xD
Mr.Burns
4

VBA (Word), 74 57 байт

-17 благодаря Тейлору Скотту

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

Имя файла документа должно быть.

Даниил
источник
1
Вы можете заменить wdFieldFormCheckBoxс 71(целочисленного значения wdFieldFormCheckBoxконстанты) для экономии в 17 байт
Taylor Scott
Я думаю, что вы можете удалить символы новой строки для -2 байтов.
devRicher
4

Мопс, 20 байт

input(type=checkbox)
theonlygusti
источник
Помимо того, что я считаю, как 23. Если вы удалите кавычки, он все еще работает на Firefox и Chrome (не могу проверить на IE) и будет приходить на 21 в этом случае, я бы посчитал это улучшением в примере и, следовательно, действительным.
ElPedro
@heonlygusti - действительно, но без кавычек я бы проголосовал :-), кстати, понижение было не мной.
ElPedro
Я бы проголосовал, если бы не те цитаты, которые не нужны.
NightSkyCode
@ theonlygusti совсем нет. Попробуйте.
NightSkyCode
4

Clojure, 201 195 145 127 байтов

(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 байт, избавившись от необходимости m/fun-mode.

-50 байт путем удаления :setupи :sizeопций, поскольку они являются defaultable и ненужными в не- fun-mode. Также удален ненужный импорт для промежуточного программного обеспечения.

-18 байт благодаря @ ASCII-only. Изменены цвета на "меньшие" и удален лишний пробел перед оператором разыменования ( @).

Создает эскиз Quil (библиотека Clojure, которая предоставляет слой поверх обработки), поэтому для ее запуска требуется библиотека 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))

введите описание изображения здесь

введите описание изображения здесь

Carcigenicate
источник
Не можете ли вы заменить 255 на 99? Также я бы попытался удалить пробелы до / после символов и посмотреть, работает ли он по-прежнему
только ASCII
@ ASCII-только да, я мог. Несмотря на то, что в iirc он был ужасно уродливым, я почему-то расставил приоритеты. И нет, это столько места, сколько я могу удалить, к сожалению.
Carcigenicate
@ ASCII-only Проблема в том, что символы могут содержать практически любой символ, поэтому на самом деле единственными «безопасными соседями», вокруг которых можно удалить пробелы, являются любые виды скобок или кавычек. К счастью, это шепот, так как первый довольно распространен.
Carcigenicate
Хм может [0 0 99]тогда? (какой-то темно-синий)
только для ASCII
@ ASCII-only На самом деле, я думаю, что могу отказаться от 0 сейчас, когда я думаю об этом. Я думаю, что Quil автоматически дополняет фронт 0, если вектор слишком короткий. Если я вспомню последние, я исправлю это. Спасибо, что заставил меня задуматься.
Carcigenicate
4

Язык сценариев работы Flashpoint , 273 байта

Чтобы показать флажок:

createDialog"b"

Но сначала это должно быть определено:

Сохраните следующее в файл с именем description.extв папке миссии:

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;}}}

Флажок в действии:

Steadybox
источник
3

AutoIt , 78 байт

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

Открывает развернутое окно, которое можно закрыть, как любое другое окно. Максимизация и ... превосходство - побочный эффект игры в гольф.

введите описание изображения здесь

mınxomaτ
источник
Как бы я запустил это на Linux?
дкудрявцев
@wat wine AutoIt3.exe script.au3, где script.au3файл содержит этот код.
mynxomaτ
3

Python, 62 байта

from tkinter import*
a=Tk()
Checkbutton(a).pack()
a.mainloop()
синий
источник