Напишите программу, которая создает флажок с двумя состояниями, с которым люди могут взаимодействовать с помощью мыши.
В частности, ваша программа должна выполнять все следующие действия:
Имейте область экрана размером 8 × 8 пикселей (или больше, если хотите), которая является интерактивной областью флажка. Отныне этот регион просто называется флажком.
Когда курсор мыши перемещается внутри флажка и нажата кнопка мыши по умолчанию *, флажок должен переключать состояния.
Проверено становится непроверенным. Не проверено становится проверено.Флажок не должен перемещаться при переключении.
В отмеченном состоянии флажок может быть любого цвета.
В непроверенном состоянии флажок может быть любого цвета, если по крайней мере 16 пикселей визуально отличаются от отмеченного состояния .
В одном экземпляре программы все проверенные состояния должны быть визуально идентичны друг другу, а все непроверенные состояния должны быть визуально идентичны друг другу.
Не завершайте программу до тех пор, пока она не прекратится явно (например, с помощью кнопки выхода или Alt + F4), поэтому пользователь может установить флажок столько, сколько он хочет.
* Вы можете предположить, что кнопка мыши по умолчанию всегда щелкается левой кнопкой мыши, но также хорошо использовать значение по умолчанию, определенное программным обеспечением мыши или ОС, которое может фактически не щелкать левой кнопкой мыши в зависимости от пользователя.
Примечания
Неважно, что находится за пределами вашего региона флажка. Это может быть просто рабочий стол. Это может быть часть консоли, которая меняется при каждом переключении.
Не имеет значения, в каком состоянии установлен ваш флажок.
Область флажка может иметь любые размеры 8 или 8 пикселей или выше. Это не должно быть квадратным.
Вы можете вносить незначительные поправки в настройки, которые находятся вне вашего контроля, такие как размер шрифта консоли, масштабирование браузера, разрешение монитора и т. Д. Если ваша программа работает в приемлемых тестовых настройках, она должна быть действительной.
Если ваша программа открывает окно, вы можете предположить, что оно было перенесено в соответствующее место на экране, если это необходимо (например, в верхнем левом углу).
Вы можете использовать языки разметки, такие как HTML или другие языки, которые мы обычно не считаем полноценными языками программирования.
Ваш флажок должен быть переключен с помощью кнопки мыши по умолчанию. Это нормально, если он также переключает другие формы ввода (например, правую кнопку мыши), за исключением движения мыши . то есть состояние не должно изменяться, если мышь просто перемещается внутри флажка.
Скриншоты вашего флажка в действии очень приветствуются!
счет
Самый короткий код в байтах побеждает.
пример
Канонический пример HTML в 23 байта.
<input type="checkbox">
Для меня в Google Chrome это делает флажок 12 × 12 пикселей, и около 30 пикселей четко меняются между проверенным и непроверенным состояниями.
Я принимаю во внимание, что масштаб браузера составляет 100%.
источник
Ответы:
Mathematica, 10 байт
Предполагается, что среда Mathematica для ноутбуков .
Два состояния выглядят так:
источник
HTML, 20 байт
Не знаю, насколько достоверным будет ответ. HTML требует, чтобы тег был закрыт для юридической проверки, но современные браузеры автоматически закрывают их, чтобы он выполнялся.
источник
>
. +1 и действительное ИМХО.Баш ,
675550353231 байтКод содержит байт 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 , но нас не интересует вывод, который он производит.Наконец, когда чтение завершается (после одного щелчка мыши),
:
рекурсивно вызывает себя, входя в бесконечный цикл.Создание и вызов
Выход
источник
1000h
на9h
(разница в том, что1000h
обрабатывает как нажатие, так и отпускание мыши, и9h
обрабатывает только отпускание мыши). Это может или не может нуждаться в изменениях в другом месте кода.gnome-terminal
кажется, работает, это то, что я использовал для тестирования (правка: но я не думаю, что он поддерживает 1-байтовый CSI).xterm
Должен также работать и может быть легче установить, если у вас есть система KDE. (Я только что проверил это; он работает,\x1b[
но не\x9b
по какой-то причине, возможно, связан с моими настройками stty, а не с самим терминалом.):)
с:(
концаОбработка
7866656361 байт2 байта сохранены благодаря @TuukkaX с использованием
-a%2
вместоa%2*-1
2 байта сохранены благодаря @TuukkaX с помощью
a=-a
Флажок чередуется между черным и белым.
объяснение
Теперь есть много других альтернатив, таких как использование оператора if для обработки этого, но тогда это становится странным и постоянно меняет фон, пока нажата мышь. Сначала я попробовал
mouseButton
, но потом мне понадобилось бы больше условий и больше кода, который в итоге получился бы гораздо более многословным.Теперь,
mousePressed()
чтобы быть вызванным навсегда (иначе он просто остановился бы после того, как программа только что запустилась), нам нужнаdraw()
функция.Меньший флажок будет 90 байтов (флажок находится в верхнем левом углу, поэтому мы можем удалить некоторые условия мыши):
источник
fill(-1)
a
на 1 вместо 0. Изменитеa++
наa=-a
, что делает-a%2
простоa
. Это будет переключатьсяa
между 1 и -1. Я не знаю, какой цвет производит 1.color(1)
производит,#010101
который очень близок к черномуHTML + JavaScript,
323025 символовисточник
this
неявный и может быть удален. ТакжеinnerHTML
короче.<input>
Unix Shell (+ x11-apps), 3 байта
отказ
Ответ ниже скучный, граничащий и «обманывающий» (по крайней мере, для меня).
Тем не менее, он, кажется, не нарушает ни одно из правил конкурса «как написано», или «лазейки по умолчанию», поэтому я публикую его.
(Если вы можете указать конкретное правило, которое оно нарушает, пожалуйста, прокомментируйте!)
Golfed
XGC экран фактически заполнен различными флажками:
и «липкие кнопки» (которые подпадают под флажки в соответствии с правилами этого вызова):
источник
Уценка GitHub со вкусом - 6 байтов
(Есть пробел)
В сущности:
источник
AHK , 25 байт
Выход -
источник
Царапина, 2 блока
Поместите этот скрипт в спрайт по умолчанию (который поставляется с 2 костюмами)
источник
Python REPL, 45 байт
источник
tkinter
- это стандартная библиотека для Python (но даже если бы это было не так, мне нужно было бы только объявить Python REPL + tkinter). Это означает, что я могу использовать его функции, просто импортировав его. Предлагаемое вами наказание аналогично тому, как просить пользователей включать в число байтов количество байтов в источнике языка, на котором вы пишете. Здесь мы разрешаем конкурировать любому языку или модулю, если они были написаны и опубликованы ранее. Задача была опубликована.GeoGebra , 10 байт
Введено в строку ввода.
Вот gif исполнения:
источник
Tcl / Tk, 21 байт
Golfed
источник
HTML с JavaScript -
13612412011511311110979 байт-2 благодаря @KritixiLithos
Уменьшено до 79 после некоторого фантастического игры в гольф от @Jan. Хотя новая версия соответствует требованиям, я сохранил старую версию по причинам профессиональной гордости.
Хотя использование встроенных модулей вполне допустимо, я подумал, что было бы веселее создавать свои собственные с нуля. Протестировано с Chrome и Firefox.
border:solid
есть для совместимости с IE, но я не знаю, действительно ли это нужно в новых версиях IE - у меня нет IE для тестирования.px
В высоту есть в пользу «Run фрагмента кода» , так как не входит в «реальном» счетчику байтов. Он отлично работает в браузере без него.Предыдущая версия:
источник
id=d
чтобы удалитьd=this
?this
вы сохраняете установку идентификатора. Если вы хранитеthis
в собственности, вы сохраните несколько байтов. Этоalign
не нужно. Поскольку в строках атрибутов нет пробелов, вам не нужны кавычки.<p style=height:20px;border:solid onClick=t=this;t.innerHTML=(t.e=!t.e)?'x':''>
79 байтMinecraft 1.0.0, 1 байт
Рычаг в Minecraft соответствует всем критериям для флажка. Этот ответ действителен только для более старых версий игры, где нажатие на рычаг все еще переключает его.
Забил, используя предложенное @Connor O'Brien количество байтов.
источник
n
в Коноре, кстати :)1 block
? Почему1 byte
? Я не думаю, что mc хранит каждый блок как один байт ...TI-Basic, 15 байтов
Довольно просто. Флажок покрывает примерно 40% экрана и чередуется между черным и белым. Если флажок установлен, экран будет выглядеть примерно так:
источник
Любая версия командной строки Windows, 3 байта
(cmd.exe, batch, powershell, start-> run, что угодно)
Открывает экранную клавиатуру, на которой есть несколько «флажков», таких как клавиши shift, ctrl, alt, capslock, аналогичные ответу xgc и вдохновленные скриншотом ответа SmileBASIC.
источник
Октава,
3620 байтБлагодаря @LuisMendo сэкономлено 16 байт!
источник
uicontrol('sty','c')
также работаетК.В. Ланг , 8 байт
Предположим, что действительно простая среда Python для kv lang:
Это работает в основном потому
CheckBox
, что виджет Kivy включен в качествеkivy.Factory
каждого виджета из стандартной библиотеки.Эта простая строка создает экземпляр
CheckBox
и из-заrunTouchApp
ожидания запуска виджета, который я могу использоватьBuilder.load_string
.Фон
load_string
обрабатывает в основном каждую строку kv, и если определен единственный экземпляр виджета (напримерCheckBox
), то он повышается до позиции корневого виджета, например:источник
SmileBASIC, 49 байтов
и
являются пустым полем и флажком в шрифте SB.Установите флажок, касаясь экрана (наиболее близкий к щелчку мышью)
Читерские ответы:
0 байтов:
(на экранной клавиатуре есть кнопки, которые действуют как флажки, такие как заглавные буквы и клавиши вставки)
14 байтов:
Открывает встроенный графический редактор, который имеет несколько кнопок, похожих на флажки
источник
T<O
Значение true, когда вы перестаете касаться экрана, и!=
используется в качестве логического XOR.X=X XOR (O && !T)
C #,
124120 байтовсэкономил 4 байта благодаря grabthefish.
примечание: из-за правок изображение не совсем соответствует тому, что делает код, «checkBox1» не отображается с текущим кодом.
ungolfed:
using System.Windows.Forms; class P{ static void Main(){ var a=new Form(); a.Controls.Add(new CheckBox());
Application.Run(a);a.ShowDialog(); } }источник
var a = new Form();
.a.ShowDialog();
чтобы сохранить несколько байтовРубин с Обуви, 16 символов
Пример вывода:
источник
HTML с JavaScript,
463328 байтv2
v1
Это вариант ответа @ ElPedro: создайте флажок . Получено до 28 байт с помощью @Albert Renshaw. Это может быть дополнительно уменьшено, но это сделало бы его идентичным созданию флажка
Вся область приложения кликабельна. Он будет отображаться
0
вoff
состоянии и1
вon
состоянии. Попробуйте это на https://jsbin.com/nuhetiyocu/1/editисточник
<body onclick=t=this;t.innerHTML^=t?1:0
Правило 16 пикселей между изменениями состояния, тем не менее, подлежит обсуждению.<body onclick=this.innerHTML^=this?1:0
<body onclick=innerHTML^=1>0
body
другого элемента. Но я только что заметил , что бы сделать его идентичным другой ответ codegolf.stackexchange.com/questions/109155/create-a-checkbox/... , так что я просто оставить его как естьPowershell v5 +, 94 байта
Это довольно ужасно, но я не могу получить операторы более короткими с помощью
Add-Type
илиusing namespace
- и переменная обязательна, так как мне нужно повторно использовать объект, чтобы показать форму, и неControls.Add()
возвращает ничего пригодного для использования.ShowDialog
в моей системе требуется, чтобы окно было интерактивным после выполнения этой команды, в противном случае форма будет заморожена.также
System.Windows.Forms.Form
может быть сокращено только до того,Windows.Forms.Form
как (по крайней мере, моя собственная) система прекратит автоматическое завершение в новом сеансе.источник
Excel VBA,
38323129 байтФункция «Немедленное окно», которая вставляет флажок высоты = 9 и ширины = 9 в ячейку
A1
на первом листе активного проекта Excel VBA-6 Спасибо Pajonk за замену
[A1],[A1],9,9
на0,0,9,9
-1 для замены
Sheets(1)
на[Sheet1]
-2 для реализации вышеупомянутого было глупо и
Sheet1
вместо этогоисточник
1,1,9,9
качестве аргументов работает также.Sheet(1).
, вы можете запустить это достаточно быстро в Excel, ноCheckBoxes
это наследство для активного листаCheckBoxes.Add
метод выдает ошибку с указанием «Требуется объект»VBA (Word),
7457 байт-17 благодаря Тейлору Скотту
Имя файла документа должно быть.
источник
wdFieldFormCheckBox
с71
(целочисленного значенияwdFieldFormCheckBox
константы) для экономии в 17 байтМопс, 20 байт
источник
Clojure,
201195145127 байтов-6 байт, избавившись от необходимости
m/fun-mode
.-50 байт путем удаления
:setup
и:size
опций, поскольку они являются defaultable и ненужными в не-fun-mode
. Также удален ненужный импорт для промежуточного программного обеспечения.-18 байт благодаря @ ASCII-only. Изменены цвета на "меньшие" и удален лишний пробел перед оператором разыменования (
@
).Создает эскиз Quil (библиотека Clojure, которая предоставляет слой поверх обработки), поэтому для ее запуска требуется библиотека Quil.
источник
[0 0 99]
тогда? (какой-то темно-синий)Язык сценариев работы Flashpoint , 273 байта
Чтобы показать флажок:
Но сначала это должно быть определено:
Сохраните следующее в файл с именем
description.ext
в папке миссии:Флажок в действии:
источник
AutoIt , 78 байт
Открывает развернутое окно, которое можно закрыть, как любое другое окно. Максимизация и ... превосходство - побочный эффект игры в гольф.
источник
wine AutoIt3.exe script.au3
, гдеscript.au3
файл содержит этот код.Python, 62 байта
источник