Escriba un programa que cree una casilla de verificación de dos estados con la que las personas puedan interactuar usando un mouse.
Específicamente, su programa debe lograr todo lo siguiente:
Tenga una región de 8 × 8 píxeles (o más grande si lo desea) de la pantalla que es el área en la que se puede hacer clic en la casilla de verificación. En adelante, esta región se llama simplemente la casilla de verificación.
Cuando el cursor del mouse se mueve dentro de la casilla de verificación y se presiona el botón predeterminado del mouse *, la casilla de verificación debe alternar los estados.
Marcado se desmarca. Sin marcar se comprueba.La casilla de verificación no debe moverse cuando se alterna.
En el estado marcado, la casilla de verificación puede ser de cualquier color.
En el estado desmarcado, la casilla de verificación puede tener cualquier color siempre que al menos 16 píxeles sean visualmente distintos del estado marcado .
En una sola instancia de programa, todos los estados marcados deben ser visualmente idénticos entre sí y todos los estados no verificados deben ser visualmente idénticos entre sí.
No finalice el programa hasta que finalice explícitamente (por ejemplo, mediante el botón de salida o Alt + F4), de modo que un usuario pueda hacer clic en la casilla de verificación todo lo que quiera.
* Puede suponer que el botón predeterminado del mouse siempre es hacer clic con el botón izquierdo, pero también está bien usar el predeterminado como lo define el software del mouse o el sistema operativo, que en realidad no se puede hacer clic izquierdo según el usuario.
Notas
No importa lo que esté fuera de su región de casilla de verificación. Podría ser solo el escritorio. Podría ser una parte de una consola que cambia en cada alternar.
No importa en qué estado comience su casilla de verificación.
La región de la casilla de verificación puede tener cualquier dimensión igual o superior a 8 × 8 píxeles. No necesita ser cuadrado.
Puede tener en cuenta los ajustes menores que están fuera de su control, como el tamaño de fuente de la consola, el zoom del navegador, la resolución del monitor, etc. Mientras su programa funcione en una configuración de prueba razonable, debería ser válido.
Si su programa abre una ventana, puede suponer que se ha arrastrado a una ubicación apropiada en la pantalla si es necesario (por ejemplo, la esquina superior izquierda).
Puede usar lenguajes de marcado como HTML u otros lenguajes que generalmente no consideramos como lenguajes de programación completos.
Su casilla de verificación debe poder alternarse con el botón predeterminado del mouse. Está bien si también alterna para otras formas de entrada (por ejemplo, el botón derecho del mouse), con la excepción del movimiento del mouse . es decir, el estado no debería cambiar si el mouse simplemente se mueve dentro de la casilla de verificación.
¡Se recomiendan las capturas de pantalla de su casilla de verificación en acción!
Puntuación
El código más corto en bytes gana.
Ejemplo
Un ejemplo HTML canónico en 23 bytes.
<input type="checkbox">
Para mí en Google Chrome, esto hace que una casilla de verificación de 12 × 12 píxeles y unos 30 píxeles cambien claramente entre los estados marcados y no marcados.
Tengo en cuenta que el zoom del navegador está al 100%.
fuente
Respuestas:
Mathematica, 10 bytes
Asume el entorno del cuaderno de Mathematica .
Los dos estados se ven así:
fuente
HTML, 20 bytes
No sé cuán válido será esto como respuesta. HTML requiere que la etiqueta se cierre para validar legalmente, pero los navegadores modernos las cerrarán automáticamente para que sea ejecutable.
fuente
>
. +1 y en mi humilde opinión.Bash ,
675550353231 bytesEl código contiene un byte CR (primera línea nueva) y un byte CSI (pequeño corchete en ángulo recto con la codificación Windows-1252). Requiere xterm (o equivalente) y la codificación ISO-8859-1 (o similar).
El código define una función denominada
:
, que muestra alternativamente un blanco 1 o 0 en un rectángulo negro. Hay exactamente 24 píxeles diferentes con la configuración predeterminada de xterm. ( prueba )Para una versión anterior que alterna el color de todo el terminal, verifique la revisión 10 de esta respuesta.
¡Gracias a @ ais523 por sugerir xterm, que ahorra 4 bytes!
Cómo funciona
:(...)
crea una función llamada:
que se ejecuta...
.El comando de lectura hace la magia real.
-p
especifica una solicitud de entrada, que se imprime en STDOUT.$[i^=1]
es una expansión aritmética que XOR la variable i con 1 . i puede ser inicialmente unset; cuando esto ocurra, será tratado como 0 .El retorno de carro coloca el cursor hacia atrás al comienzo de la línea.
›?9h
captura el mouse en terminales compatibles. Cada clic enviará seis caracteres al terminal, es decir←[Mbxy
, donde←
representa el byte ESC ( 0x1b ).←[
indica una secuencia de escape,M
el mouse,b
el botón ( 0x20 + el número del botón),x
la coordenada x del clic ( 0x20 + coordenada) yy
la coordenada y .-sn6
hace que la lectura sea silenciosa (la entrada del mouse no se repetirá en STDERR) y se detiene después de leer exactamente 6 bytes. Guarda la entrada en la variable REPLY , pero no estamos interesados en la salida que produce.Finalmente, una vez que finaliza la lectura (después de hacer exactamente un clic con el mouse), se
:
llama recursivamente, ingresando un bucle infinito.Creación e invocación.
Salida
fuente
1000h
a9h
(la diferencia es que1000h
maneja tanto la presión como la liberación del mouse, y9h
solo maneja la liberación del mouse). Esto podría o no necesitar cambios en otra parte del código.gnome-terminal
parece funcionar, eso es lo que estaba usando para probar (editar: pero no creo que sea compatible con un CSI de 1 byte).xterm
También debería funcionar y podría ser más fácil de instalar si tiene un sistema KDE. (Acabo de probar esto por mí mismo, sino que trabaja con\x1b[
, pero no con\x9b
, por alguna razón, posiblemente relacionada con la configuración de mi stty en lugar de a la propia terminal.):)
desde:(
el finalProcesamiento,
7866656361 bytes2 bytes guardados gracias a @TuukkaX utilizando en
-a%2
lugar dea%2*-1
2 bytes guardados gracias a @TuukkaX usando
a=-a
La casilla de verificación alterna entre ser blanco y negro.
Explicación
Ahora hay muchas otras alternativas, como usar una instrucción if para procesar esto, pero luego se vuelve extraño y cambia constantemente el fondo mientras se presiona el mouse. Primero lo intenté
mouseButton
, pero luego necesitaría más condiciones y más código que terminará siendo mucho más detallado.Ahora, para
mousePressed()
ser llamado para siempre (de lo contrario, se detendría una vez que el programa acaba de comenzar), necesitamos unadraw()
función.Una casilla de verificación más pequeña sería de 90 bytes (la casilla de verificación está en la esquina superior izquierda, por lo que podemos eliminar algunas condiciones del mouse):
fuente
fill(-1)
a
a 1 en lugar de 0. Cambiara++
aa=-a
, lo que hace-a%2
justoa
. Esto alternaráa
entre 1 y -1. Sin embargo, no sé qué color produce.color(1)
produce#010101
que está muy cerca del negroHTML + JavaScript,
323025 caracteresfuente
this
es implícito y se puede eliminar. Además,innerHTML
es más corto.<input>
elementoUnix Shell (+ x11-apps), 3 bytes
Descargo de responsabilidad
La respuesta a continuación es aburrida, limítrofe y "hace trampa" (al menos para mí).
Sin embargo, no parece violar ninguna de las reglas de desafío "tal como están escritas" o "lagunas predeterminadas", así que lo estoy publicando.
(Si puede señalar una regla específica que no cumple, ¡comente!)
Golfed
La pantalla xgc en realidad está llena de varias casillas de verificación:
y "botones adhesivos" (que califican como casillas de verificación, bajo las reglas de este desafío):
fuente
Markit con sabor a GitHub - 6 bytes
(Hay un espacio final)
En una esencia:
fuente
AHK , 25 bytes
Salida -
fuente
Scratch, 2 bloques
Pon este script en el sprite predeterminado (que viene con 2 disfraces)
fuente
Python REPL, 45 bytes
fuente
tkinter
es una biblioteca estándar para Python (pero incluso si no fuera así, solo tendría que declarar Python REPL + tkinter). Esto significa que puedo usar sus funciones simplemente importándolas. La penalización que sugiere es similar a pedirles a los usuarios que incluyan en el recuento de bytes el número de bytes en la fuente del idioma en el que están escribiendo. Aquí permitimos que cualquier idioma o módulo compita siempre que se haya escrito y publicado públicamente antes El desafío fue publicado.GeoGebra , 10 bytes
Ingresado en la barra de entrada.
Aquí hay un gif de la ejecución:
fuente
Tcl / Tk, 21 bytes
Golfed
fuente
HTML con JavaScript -
13612412011511311110979 bytes-2 con agradecimiento a @KritixiLithos
Reducido a 79 después de un fantástico golf de @Jan. Aunque la nueva versión cumple con los requisitos, he mantenido la versión anterior por razones de orgullo profesional.
Si bien es perfectamente válido usar elementos integrados, pensé que era más divertido crear el mío desde cero. Probado con Chrome y Firefox.
border:solid
está ahí para la compatibilidad con IE, pero no sé si realmente es necesario en las versiones más nuevas de IE; no tengo IE disponible para probar.La
px
altura está ahí para el beneficio de "Ejecutar fragmento de código", por lo que no se incluye en el recuento de bytes "real". Funciona bien en el navegador sin él.Versión previa:
fuente
id=d
para eliminard=this
?this
, guardará la configuración de la identificación. Si almacenathis
en una propiedad, ahorrará algunos bytes. Elalign
es innecesario. Como no hay espacios en las cadenas de atributos, no necesita las comillas.<p style=height:20px;border:solid onClick=t=this;t.innerHTML=(t.e=!t.e)?'x':''>
79 bytesMinecraft 1.0.0, 1 byte
Una palanca en Minecraft cumple con todos los criterios para una casilla de verificación. Esta respuesta solo es válida para versiones anteriores del juego donde golpear una palanca todavía la alterna.
Anotado usando el conteo de bytes sugerido de @Connor O'Brien.
fuente
n
en Conor, por cierto :)1 block
? ¿Por qué1 byte
? No creo que mc almacene cada bloque como un byte ...TI-Basic, 15 bytes
Bastante sencillo. La casilla de verificación cubre aproximadamente el 40% de la pantalla y alterna entre blanco y negro. Cuando está marcada, la pantalla se verá así:
fuente
Cualquier versión de la línea de comandos de Windows, 3 bytes.
(cmd.exe, lote, powershell, inicio-> ejecutar, lo que sea)
Abre el teclado en pantalla que tiene varias "casillas de verificación" como shift, ctrl, alt, teclas de mayúsculas Similar a la respuesta xgc, e inspirado en la captura de pantalla de respuesta SmileBASIC.
fuente
Octava,
3620 bytes¡Gracias a @LuisMendo ahorró 16 bytes!
fuente
uicontrol('sty','c')
también funcionaKV Lang , 8 bytes
suponiendo un entorno Python realmente básico para que kv lang incluso se ejecute:
Esto funciona básicamente porque
CheckBox
es un widget Kivy incluido enkivy.Factory
cada widget de la biblioteca estándar.Esa cadena simple crea una instancia de
CheckBox
y debidorunTouchApp
a que espero que se ejecute un widget que puedo usarBuilder.load_string
.El fondo de
load_string
maneja básicamente cada cadena kv y si hay una sola instancia de un widget definido (por ejemploCheckBox
), entonces se eleva a una posición de widget raíz , por ejemplo:fuente
SmileBASIC, 49 bytes
y
son una casilla vacía y una casilla marcada en la fuente de SB.Cambie la casilla de verificación tocando la pantalla (lo más parecido a hacer clic con el mouse)
Hacer trampa respuestas:
0 bytes:
(el teclado en pantalla tiene botones que actúan como casillas de verificación, como el bloqueo de mayúsculas y las teclas de inserción)
14 bytes:
Abre el editor de gráficos incorporado, que tiene varios botones tipo casilla de verificación
fuente
T<O
es cierto cuando deja de tocar la pantalla y!=
se usa como un XOR lógico.X=X XOR (O && !T)
C #,
124120 bytesahorrado 4 bytes gracias a grabthefish.
nota: debido a las ediciones, la imagen no representa exactamente lo que hace el código, el "checkBox1" no se muestra con el código actual.
sin golf:
using System.Windows.Forms; class P{ static void Main(){ var a=new Form(); a.Controls.Add(new CheckBox());
Application.Run(a);a.ShowDialog(); } }fuente
var a = new Form();
.a.ShowDialog();
para guardar algunos bytesRubí con zapatos, 16 personajes
Salida de muestra:
fuente
HTML con JavaScript,
463328 bytesv2
v1
Esta es una variante de la respuesta de @ ElPedro: Crear una casilla de verificación . Se redujo a 28 bytes con la ayuda de @Albert Renshaw Se podría reducir aún más, pero eso lo haría idéntico a Crear una casilla de verificación
Se puede hacer clic en toda el área de aplicación. Se mostrará
0
en eloff
estado y1
en elon
estado. Pruébelo en https://jsbin.com/nuhetiyocu/1/editfuente
<body onclick=t=this;t.innerHTML^=t?1:0
Sin embargo, la regla de 16 píxeles entre el cambio de estado está en debate.<body onclick=this.innerHTML^=this?1:0
<body onclick=innerHTML^=1>0
body
a un elemento diferente. Pero me di cuenta de que eso lo haría idéntico a otra respuesta codegolf.stackexchange.com/questions/109155/create-a-checkbox/…, así que lo dejo como estáPowershell v5 +, 94 bytes
Esto es bastante terrible, pero no puedo acortar las declaraciones con ninguno
Add-Type
ousing namespace
- y la variable es obligatoria, ya que necesito reutilizar el objeto para mostrar el formulario yControls.Add()
no devuelve nada utilizable.ShowDialog
es obligatorio en mi sistema que el cuadro sea interactivo después de ejecutar este comando; de lo contrario, el formulario está congelado.También
System.Windows.Forms.Form
solo se puede acortar aWindows.Forms.Form
antes (al menos el mío) el sistema deja de completarlo automáticamente en una nueva sesión.fuente
Excel VBA,
38323129 BytesFunción de ventana inmediata que inserta una casilla de verificación de altura = 9 y ancho = 9, en la celda
A1
en la primera hoja del proyecto VBA de Excel activo-6 Gracias a pajonk por reemplazar
[A1],[A1],9,9
con0,0,9,9
-1 para reemplazar
Sheets(1)
con[Sheet1]
-2 para darse cuenta de lo anterior fue estúpido y usar en su
Sheet1
lugarfuente
1,1,9,9
como argumentos funciona también.Sheet(1).
, puede ejecutar esto lo suficientemente rápido en Excel, peroCheckBoxes
está heredado de la hoja activaCheckBoxes.Add
método arroja un error que indica "Objeto requerido"VBA (Word),
7457 bytes-17 gracias a Taylor Scott
El nombre del archivo del documento debe ser a.
fuente
wdFieldFormCheckBox
con71
(el valor entero de lawdFieldFormCheckBox
constante) para un ahorro de 17 bytesPug, 20 bytes
fuente
Clojure,
201195145127 bytes-6 bytes eliminando la necesidad de
m/fun-mode
.-50 bytes eliminando las opciones
:setup
y:size
, ya que son predeterminadas e innecesarias en non-fun-mode
. También se eliminó la importación innecesaria de middleware.-18 bytes gracias a @ ASCII-only. Cambió a colores "más pequeños" y eliminó un espacio innecesario antes del operador de desreferencia (
@
).Crea un boceto de Quil (una biblioteca Clojure que proporciona una capa sobre el procesamiento), por lo tanto, esto requiere que se ejecute la biblioteca Quil.
fuente
[0 0 99]
entonces? (algún tipo de azul oscuro)Lenguaje de script Operation Flashpoint , 273 bytes
Para mostrar la casilla de verificación:
Pero primero debe definirse:
Guarde lo siguiente en un archivo nombrado
description.ext
en la carpeta de la misión:La casilla de verificación en acción:
fuente
AutoIt , 78 Bytes
Abre una ventana maximizada que puede cerrarse como cualquier otra ventana de ventanas. La maximización y ... en la parte superior es un efecto secundario del golf.
fuente
wine AutoIt3.exe script.au3
, donde elscript.au3
archivo contiene este código.Python, 62 bytes
fuente