Codegolf — Создать Флажок

  • Автор темы Ckuff
  • Обновлено
  • 22, Oct 2024
  • #1

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

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

  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%.

#код-гольф #интерактив

Ckuff


Рег
21 Mar, 2014

Тем
78

Постов
204

Баллов
594
  • 26, Oct 2024
  • #2

Математика, 10 байт

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 from tkinter import*
a=Tk()
Checkbutton(a).pack()
a.mainloop()
 

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

Два состояния выглядят следующим образом:

 

Jasymnshoms70


Рег
31 Aug, 2005

Тем
83

Постов
208

Баллов
663
  • 26, Oct 2024
  • #3

HTML, 20 байт

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

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

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

(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))

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

В коде определяется функция с именем @ , which alternately displays a white 1 или 0 в черном прямоугольнике. В настройках xterm по умолчанию имеется ровно 24 разных пикселя. (доказательство)

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

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

Как это работает

fun-mode creates a function named :size который выполняет :setup .

читать Команда творит настоящее волшебство.

  • m/fun-mode specifies an input prompt, which is printed to STDOUT.

    • (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)) is an arithmetic expansion which XORs the variable я с 1. я изначально может быть отключен; когда это произойдет, это будет рассматриваться как 0.

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

    • input(type=checkbox) captures the mouse in supported terminals. Each click will send six characters to the terminal, namely Sub a() f = a.FormFields.Add(Selection.Range, 71) End Sub , где 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;}}} represents the ESC byte (0x1b). description.ext indicates an escape sequence, createDialog"b" мышь, Windows.Forms.Form the button (0x20 + номер кнопки), System.Windows.Forms.Form the х координата щелчка (0x20 + координата) и ShowDialog the й координировать.

    • Controls.Add() makes читать бесшумно (ввод мыши не будет отображаться в STDERR) и останавливается после чтения ровно 6 байт. Он сохраняет ввод в ОТВЕЧАТЬ переменная, но нас не интересует результат, который она производит.

Наконец, однажды читать завершается (после ровно одного щелчка мыши), using namespace recursively calls itself, entering an infinite loop.

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

Add-Type

Выход

 

Дмитрий Закуленков


Рег
25 Oct, 2020

Тем
79

Постов
185

Баллов
630
  • 26, Oct 2024
  • #4

Маркдаун со вкусом GitHub — 6 байт

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

(есть пробел в конце)

В сущности:

 

Vyruz


Рег
26 Dec, 2009

Тем
59

Постов
207

Баллов
542
  • 26, Oct 2024
  • #5

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

on ||answer||

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

2 байта сэкономлены благодаря @TuukkaX с помощью 1 instead of off

2 байта сэкономлены благодаря @TuukkaX с помощью 0

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

Флажок попеременно бывает черным и белым.

Объяснение

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

Теперь есть много других альтернатив, например, использование оператора if для обработки этого, но тогда это становится странным и постоянно меняет фон при нажатии мыши. Я впервые попробовал <body onclick=innerHTML^=1>0 , but then I would need more conditions and more code that will just end up much more verbose.

Теперь о Shoes.app{check} to be called forever (otherwise it would just stop after the program has just started), we need a Sheet1 функция.

[Sheet1]


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

Sheets(1) ||answer||

Unix Shell (+x11-приложения), 3 байта

Отказ от ответственности

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

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

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

играл в гольф

0,0,9,9

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

хгк экран на самом деле заполнен различными флажками:

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

 

Танюша Жемчугова


Рег
29 Oct, 2020

Тем
74

Постов
192

Баллов
582
  • 26, Oct 2024
  • #7

Скретч, 2 блока

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

 

Orki1


Рег
29 Oct, 2004

Тем
85

Постов
218

Баллов
653
  • 26, Oct 2024
  • #8

Python REPL, 45 байт

Sheet1.CheckBoxes.Add 0,0,9,9 ||answer||

ГеоГебра, 10 байт

A1

Вошел в панель ввода.

Вот гифка казни:

 

Spasibo3


Рег
09 Feb, 2009

Тем
68

Постов
193

Баллов
553
  • 26, Oct 2024
  • #9

Ткл/Тк, 21 байт

играл в гольф

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

 

Sretupok


Рег
28 Jan, 2006

Тем
88

Постов
197

Баллов
647
  • 26, Oct 2024
  • #10

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

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

-2 с благодарностью @KritixiLithos

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

Хотя использование встроенных модулей вполне допустимо, я подумал, что было бы интереснее создать свою собственную с нуля. Протестировано с Chrome и Firefox. EXEC"SYS/SBGED is there for IE compatibility but I don't know if it is actually needed in newer IE versions - I don't have IE available to test.

in the height is there for the benefit of "Run code snippet" so is not included in the "real" byte count. It works fine in the browser without it.

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

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

Майнкрафт 1.0.0, 1 байт

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

Оценка выполнена с использованием количества байт, предложенного @Connor O'Brien.

 

Fanzanun


Рег
29 Sep, 2006

Тем
70

Постов
225

Баллов
615
  • 26, Oct 2024
  • #11

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

(cmd.exe, пакет, powershell, пуск-> запуск, что угодно)

Application openGL Window root widget(mostly layout) main tree and some widgets ...

Открывает экранную клавиатуру, на которой есть несколько «флажков», таких как клавиши «Shift», «Ctrl», «Alt», «Capslock».

Похож на ответ xgc и вдохновлен скриншотом ответа SmileBASIC.

 

Blqzsoprlg


Рег
13 Dec, 2010

Тем
76

Постов
179

Баллов
579
  • 26, Oct 2024
  • #12
CheckBox

TI-Basic, 15 байт

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

 

Lovedodge


Рег
01 Nov, 2019

Тем
87

Постов
215

Баллов
670
  • 26, Oct 2024
  • #14
КВ Ланг Builder.load_string


, 8 байт

runTouchApp

предполагая, что действительно базовая среда Python для kv lang даже работает: CheckBox is a Kivy widget included in a kivy.Factory Это работает в основном потому, что

как каждый виджет из стандартной библиотеки. CheckBox Эта простая строка создает экземпляр from kivy.app import runTouchApp from kivy.lang import Builder runTouchApp(Builder.load_string('CheckBox')) expecting a widget to run I can use CheckBox .

и из-за uicontrol('sty','c') handles basically every kv string and if there is a single instance of a widget defined (e.g. While 1:Shade(0,9:Input :ClrDraw:Input :End Предыстория ), то оно повышается до корень

osk ||answer||

положение виджета, например:

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

<p style=height:20px;border:solid onClick=t=this;t.innerHTML=(t.e=!t.e)?'x':''> and px SmileBASIC, 49 байт
пустое поле и отмеченный флажок шрифтом SB.

Переключите флажок, коснувшись экрана (наиболее похоже на щелчок мышью)

Обманные ответы:

0 байт:

(на экранной клавиатуре есть кнопки, которые действуют как флажки, например клавиши Caps Lock и Insert)

border:solid

14 байт:

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

 

CheGuevara


Рег
07 Apr, 2006

Тем
81

Постов
209

Баллов
644
  • 26, Oct 2024
  • #15

С#, 124 120 байт

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

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

без гольфа: grid [checkbutton .c]

 

Pacha0409


Рег
25 Nov, 2019

Тем
81

Постов
195

Баллов
620
  • 26, Oct 2024
  • #16

Эксель ВБА, 38 32 31 29 байт

Немедленно выполняет функцию Window, которая вставляет флажок высотой = 9 и шириной = 9 в ячейку. Checkbox[] on the first sheet of the active Excel VBA project

from tkinter import* Checkbutton(Tk()).pack()

-6 Спасибо pajonk за замену Gui,Add,Checkbox Gui,Show with xgc

-1 за замену int a=1;void draw(){fill(a);rect(0,0,8,8);}void mousePressed(){if(mouseX<9&mouseY<9)a=-1;} with 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 }

-2 за то, что понял, что вышесказанное было глупо и использовал draw() instead

 

Yu01


Рег
28 Jan, 2007

Тем
56

Постов
182

Баллов
472
  • 26, Oct 2024
  • #17

Рубин с туфлями, 16 символов

mousePressed()

Пример вывода:

 

Nickbilak


Рег
17 Jan, 2006

Тем
81

Постов
194

Баллов
639
  • 26, Oct 2024
  • #18

HTML с JavaScript, 46 33 28 байт

mouseButton

v2

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

v1

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

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

Вся область приложения кликабельна. Он отобразит a=-a in the a%2*-1 государство и -a%2 in the <p onclick=innerHTML^=1>0 состояние. Попробуйте это на https://jsbin.com/nuhetiyocu/1/edit

 

KareTrime22


Рег
13 May, 2009

Тем
67

Постов
203

Баллов
538
  • 26, Oct 2024
  • #19

Powershell v5+, 94 байта

- [ ]

Это довольно ужасно, но я не могу сделать утверждения короче ни с помощью, ни с другой стороны. $ 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 or : - и переменная обязательна, так как мне нужно повторно использовать объект для отображения формы, и -sn6 returns nothing usable.

y is required on my system to have the box be interactive after running this command, otherwise the form is frozen.

также x can only be shortened to b прежде чем (по крайней мере, моя собственная) система перестанет автоматически завершать его в новом сеансе.

 

O_nadia


Рег
14 Jan, 2008

Тем
73

Постов
208

Баллов
613
  • 26, Oct 2024
  • #20

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

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

M

Но сначала необходимо определить:

Сохраните следующее в файл с именем ←[ in the mission folder:

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

 

GGEWDSA


Рег
18 May, 2016

Тем
76

Постов
187

Баллов
577
  • 26, Oct 2024
  • #21

VBA (Word), 74 57 байт

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

←[Mbxy

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

 

Denissyomkin


Рег
18 Mar, 2020

Тем
78

Постов
212

Баллов
622
  • 26, Oct 2024
  • #22

Мопс, 20 байт

›э9h ||answer||

Clojure, 201 195 145 127 байт

$[i^=1]

-6 байт, избавляясь от необходимости -p .

-50 байт, удалив ... and : параметры, поскольку они являются стандартными и ненужными в не- :(...) . Also removed the unnecessary import for middleware.

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

Создает Квилл Sketch (библиотека Clojure, предоставляющая слой поверх обработки), поэтому для запуска требуется библиотека Quil.

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

 

BigBlackTigr


Рег
19 Apr, 2007

Тем
70

Постов
196

Баллов
576
  • 26, Oct 2024
  • #23

АвтоИт, 78 байт

<input type=checkbox

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

 

RhydayRar27


Рег
25 Oct, 2024

Тем
73

Постов
179

Баллов
554
Тем
403,760
Комментарии
400,028
Опыт
2,418,908