Criar uma caixa de seleção


51

Escreva um programa que crie uma caixa de seleção de dois estados com a qual as pessoas possam interagir usando um mouse.

Especificamente, seu programa deve atingir todos os seguintes itens:

  1. Tenha uma região de 8 × 8 pixels (ou maior, se desejado) da tela, que é a área clicável da caixa de seleção. A partir de agora, essa região é chamada simplesmente de caixa de seleção.

  2. Quando o cursor do mouse é movido dentro da caixa de seleção e o botão * padrão do mouse é pressionado, a caixa de seleção deve alternar entre os estados.
    Marcado fica desmarcado. Desmarcado fica marcado.

  3. A caixa de seleção não deve se mover quando estiver alternada.

  4. No estado marcado, a caixa de seleção pode ser de qualquer cor.

  5. No estado desmarcado, a caixa de seleção pode ter qualquer cor , desde que pelo menos 16 pixels sejam visualmente distintos do estado verificado .

  6. Em uma única instância do programa, todos os estados verificados devem ser visualmente idênticos um ao outro e todos os estados não verificados devem ser visualmente idênticos um ao outro.

  7. Não termine o programa até que ele seja explicitamente finalizado (por exemplo, via botão de saída ou Alt + F4), para que um usuário possa clicar na caixa de seleção o quanto quiser.

* Você pode presumir que o botão padrão do mouse sempre é clique esquerdo, mas também é bom usar o padrão conforme definido pelo software do mouse ou pelo sistema operacional, que pode não ser realmente clique esquerdo dependendo do usuário.

Notas

  • Não importa o que está fora da região da sua caixa de seleção. Poderia ser apenas a área de trabalho. Pode ser uma parte de um console que muda a cada alternância.

  • Não importa em que estado sua caixa de seleção começa.

  • A região da caixa de seleção pode ter dimensões iguais ou superiores a 8 × 8 pixels. Não precisa ser quadrado.

  • Você pode fazer pequenas concessões para configurações que estão fora de seu controle, como tamanho da fonte do console, zoom do navegador, resolução do monitor, etc. Desde que o seu programa funcione em uma configuração de teste razoável, ele deverá ser válido.

  • Se o seu programa abrir uma janela, você pode assumir que foi arrastado para um local apropriado na tela, se necessário (por exemplo, canto superior esquerdo).

  • Você pode usar linguagens de marcação como HTML ou outras linguagens que normalmente não consideramos como linguagens de programação completas.

  • Sua caixa de seleção deve ser alternada usando o botão padrão do mouse. Tudo bem se também alternar para outras formas de entrada (por exemplo, botão direito do mouse), com exceção do movimento do mouse . ou seja, o estado não deve mudar se o mouse for movido apenas dentro da caixa de seleção.

  • As capturas de tela da sua caixa de seleção em ação são altamente recomendadas!

Pontuação

O código mais curto em bytes vence.

Exemplo

Um exemplo de HTML canônico em 23 bytes.

<input type="checkbox">

Para mim, no Google Chrome, isso faz uma caixa de seleção 12 × 12 pixels e cerca de 30 pixels mudam claramente entre os estados marcado e não marcado.

Eu concordo que o zoom do navegador esteja em 100%.


2
A caixa de seleção pode cobrir a tela inteira?
Kritixi Lithos

@KritixiLithos Sim, isso seria válido. Embora você possa, se desejar, contar uma região 8x8 específica como a caixa de seleção oficial, mesmo que uma região maior funcione.
Hobbies de Calvin

@Helka Homba - é permitido que um aplicativo exiba outros controles, além da própria caixa de seleção?
Zeppelin

É permitido que a caixa de seleção alterne com outros tipos de entrada? (Por exemplo, uma solução está correta se a caixa de seleção alternar qualquer tipo de entrada do usuário, independentemente de se tratar de um clique do mouse, de um movimento do mouse ou de um pressionamento de tecla? Alternaria em um clique do mouse, mas alternaria em outros estímulos também.)

11
@zeppelin "Não importa o que está fora da região da sua caixa de seleção. Pode ser apenas a área de trabalho. Pode ser uma parte de um console que muda a cada alternância." Portanto, desde que a caixa de seleção esteja lá, não importa o que mais seja.
Hobbies de Calvin

Respostas:



31

HTML, 20 bytes

Não sei como isso será válido como resposta. O HTML exige que a tag seja fechada para validar legalmente, mas os navegadores modernos as fecharão automaticamente para que sejam executáveis.

<input type=checkbox


3
Eu estava olhando para isso como uma opção anterior (sem aspas), mas perdi completamente o fechamento >. +1 e IMHO válido.
ElPedro

11
Neste site, os idiomas são definidos por sua implementação, então isso me parece bom.
John Gowers 6/17

11
Obrigado @JohnGowers, estive pensando sobre a definição de quanto abuso é aceitável.
Jan

27

Bash , 67 55 50 35 32 31 bytes

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

O código contém um byte CR (primeira nova linha) e um byte CSI (pequeno suporte de ângulo reto com a codificação Windows-1252). Requer xterm (ou equivalente) e a codificação ISO-8859-1 (ou similar).

O código define uma função chamada :, que exibe alternadamente 1 ou 0 branco em um retângulo preto. Existem exatamente 24 pixels diferentes nas configurações padrão do xterm. ( prova )

Para uma versão mais antiga que alterna a cor de todo o terminal, verifique a revisão 10 desta resposta.

Agradecemos a @ ais523 por sugerir o xterm, que economiza 4 bytes!

Como funciona

:(...)cria uma função nomeada :que é executada ....

O comando read faz a mágica real.

  • -p especifica um prompt de entrada, impresso em STDOUT.

    • $[i^=1]é uma expansão aritmética que XORs a variável i com 1 . eu posso inicialmente estar desconfigurado; quando isso ocorrer, será tratado como 0 .

    • O retorno de carro coloca o cursor de volta no início da linha.

    • ›?9hcaptura o mouse nos terminais suportados. Cada clique envia seis caracteres para o terminal, ou seja ←[Mbxy, onde representa o byte ESC ( 0x1b ). ←[indica uma sequência de escape, Mo mouse, bo botão ( 0x20 + o número do botão), xa coordenada x do clique ( 0x20 + coordenada) e ya coordenada y .

    • -sn6torna a leitura silenciosa (a entrada do mouse não será ecoada para STDERR) e para após a leitura exata de 6 bytes. Ele salva a entrada na variável REPLY , mas não estamos interessados ​​na saída que ela produz.

Finalmente, uma vez que a leitura termina (após exatamente um clique do mouse), :chama-se recursivamente, inserindo um loop infinito.

Criação e invocação

$ 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

Resultado

screencast


Eu mesmo estava trabalhando em uma solução semelhante a essa (embora em um idioma diferente, me forçando a desistir porque não consegui encontrar uma maneira de obter informações sem uma nova linha). Uma provável melhoria: mude 1000hpara 9h(a diferença é que 1000hlida com a liberação e o pressionamento do mouse e 9hsomente com a liberação do mouse). Isso pode ou não precisar de alterações em outras partes do código.

@ ais523 Tentei isso, mas pelo menos o meu emulador de terminal (Konsole) não parece suportá-lo. Você conhece alguém que conhece?
Dennis

gnome-terminalparece funcionar, era isso que eu estava usando para testar (editar: mas não acho que ele suporte um CSI de 1 byte). xtermtambém deve funcionar e pode ser mais fácil de instalar se você tiver um sistema KDE. (Eu só testei este mim mesmo, que funciona com \x1b[, mas não com \x9b, por algum motivo, possivelmente relacionadas com as minhas configurações stty, em vez de para o terminal em si.)

@ ais523 Eu tenho xterm. Vou verificar quando voltar ao meu PC.
Dennis

8
Eu amo como ela se torna :)a partir :(até o final
Andras Deak

22

Processando, 78 66 65 63 61 bytes

2 bytes salvos graças a @TuukkaX usando em -a%2vez dea%2*-1

2 bytes salvos graças a @TuukkaX usando a=-a

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

A caixa de seleção alterna entre preto e branco.

Explicação

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

Agora, existem muitas outras alternativas, como usar uma instrução if para processar isso, mas fica estranho e muda constantemente o plano de fundo enquanto o mouse está sendo pressionado. Tentei pela primeira vez mouseButton, mas precisaria de mais condições e mais código que acabariam muito mais detalhados.

Agora, para mousePressed()sermos chamados para sempre (caso contrário, ele apenas pararia depois que o programa acabou de ser iniciado), precisamos de uma draw()função.

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
}

insira a descrição da imagem aqui


Uma caixa de seleção menor seria de 90 bytes (a caixa de seleção fica no canto superior esquerdo, para que possamos remover algumas condições do mouse):

int a=1;void draw(){fill(a);rect(0,0,8,8);}void mousePressed(){if(mouseX<9&mouseY<9)a=-1;}

2
Uso inteligente de como o Processing aceita números inteiros únicos como cores em escala de cinza!
FlipTack 5/02

Parece que @FlipTack branco pode também ser expressa comofill(-1)
Kritixi Lithos

11
Eu tenho uma ideia. Inicialize apara 1 em vez de 0. Altere a++para a=-a, o que faz -a%2just a. Isso alternará aentre 1 e -1. Não sei que cor 1 produz.
Yytsi 5/02

@TuukkaX Sim, funciona. color(1)produz #010101o que é muito próximo de negro
Kritixi Lithos

22

HTML + JavaScript, 32 30 25 caracteres

<p onclick=innerHTML^=1>0


3
thisestá implícito e pode ser removido. Além disso, innerHTMLé mais curto.
Dennis

@ Dennis, estranho com isso ... Obrigado.
Qwertiy

+1 por não usar o <input>elemento
RedClover 3/11

20

Shell Unix (+ x11-apps), 3 bytes

aviso Legal

A resposta abaixo é chata, limítrofe e "parece trapaça" (pelo menos para mim).

No entanto, ele não parece violar nenhuma das regras de desafio "conforme escritas" ou "brechas padrão", por isso estou publicando.

(Se você pode apontar uma regra específica que quebra, por favor, comente!)

Golfe

xgc

O programa xgc demonstra vários recursos das primitivas de gráficos X.

A tela xgc é realmente preenchida com várias caixas de seleção:

insira a descrição da imagem aqui

e "botões fixos" (que se qualificam como caixas de seleção, de acordo com as regras deste desafio):

insira a descrição da imagem aqui


20

Markdown com sabor do GitHub - 6 bytes

- [ ] 

(Há um espaço à direita)

Em uma essência: verificar / não verificar


Certifique-se de que isso corresponda à segunda metade da 1ª frase, "Escreva um programa que crie uma caixa de seleção de dois estados com a qual as pessoas possam interagir usando um mouse ".
Manatwork

11
Sim, se você o colar em uma essência e criar a essência (para "compilação"), você poderá interagir com ela.
Axel

Interessante. Obrigado @ Ax31. Eu nunca usei essência.
Manatwork

11
Eu não teria esperado "Github Flavored Markdown".
Jonas Schäfer



14

Python REPL, 45 bytes

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

Não participo de CG nem leio frequentemente esses posts. No entanto, realmente me surpreende que você tenha permissão para usar módulos externos. Isso não é trapaça? Não sei quantos bytes tem o código-fonte Tk, mas esses bytes realmente não deveriam ser adicionados à sua contagem de bytes?
FMaz 11/02

11
O @Krazor tkinteré uma biblioteca padrão para Python (mas, mesmo que não fosse, eu teria apenas que declarar o Python REPL + tkinter). Isso significa que eu posso usar seus recursos simplesmente importando-os. A penalidade que você sugere é semelhante a pedir que os usuários incluam na contagem de bytes o número de bytes na origem do idioma em que está escrevendo. Aqui, permitimos que qualquer idioma ou módulo concorra desde que tenha sido escrito e publicado publicamente antes o desafio foi publicado.
Azul

Ok, obrigado pelo esclarecimento.
FMaz 11/02/19

14

GeoGebra , 10 bytes

Checkbox[]

Introduzido na barra de entrada.

Aqui está um gif da execução:

Execução do programa


7
Whoo, GeoGebra. Eu lembro disso. Faz algum tempo.
Nic Hartley

Sei que isso é fora de tópico, mas você estuda no Waterloo Collegiate Institute? Apenas por curiosidade, com base no seu nome. Eu não sou um stalker não se preocupe :)
HyperNeutrino


11

HTML com JavaScript - 136 124 120 115 113 111 109 79 bytes

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

-2 com agradecimentos a @KritixiLithos

Reduzido para 79 depois de um golfe fantástico de @Jan. Embora a nova versão atenda aos requisitos, mantive a versão antiga por motivos de orgulho profissional.

Embora seja perfeitamente válido o uso de embutidos, achei mais divertido criar o meu a partir do zero. Testado com Chrome e Firefox. border:solidexiste para compatibilidade com o IE, mas não sei se ele é realmente necessário nas versões mais recentes do IE - não tenho o IE disponível para teste.

A pxaltura está lá para o benefício do "Trecho de código de execução", portanto, não está incluído na contagem de bytes "real". Funciona bem no navegador sem ele.

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

Versão anterior:

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


11
Você pode fazer id=dpara remover d=this?
Kritixi Lithos

11
@KritixiLithos - Na verdade eu posso. Graças e bem manchado :)
ElPedro

11
Você não precisa definir a largura, as regras dizem que pode ter qualquer dimensão. Se você armazenar o estado em uma propriedade, thissalvará a configuração do ID. Se você armazenar thisem uma propriedade, você salvará alguns bytes. O aligné desnecessário. Como não há espaços nas sequências de atributos, você não precisa de aspas. <p style=height:20px;border:solid onClick=t=this;t.innerHTML=(t.e=!t.e)?'x':''>79 bytes
Jan

@ Jan - Obrigado! O bit de largura é meu próprio orgulho profissional. Se eu não definir, parece feio e, como essa resposta nunca vai vencer e foi postada como alternativa, provavelmente a deixarei lá. Fora isso, algumas ótimas dicas. Muito Obrigado. Será atualizado amanhã.
ElPedro

Obrigado @Easterly. Atualizado o código, mas esqueceu os outros bits. Está ficando tarde.
ElPedro

9

Minecraft 1.0.0, 1 byte

Uma alavanca no Minecraft atende a todos os critérios para uma caixa de seleção. Esta resposta é válida apenas para versões mais antigas do jogo em que apertar uma alavanca ainda a alterna.

insira a descrição da imagem aqui

Marcado com a contagem de bytes sugerida por @Connor O'Brien.


Uma diferença de 3 entre duas respostas dificilmente faz ou quebra um consenso, mas considerando que a resposta de Conor é bastante controversa (atualmente em + 24 / -10 ) e que a resposta aceita é extremamente bem recebida ( + 17 / -0 ), acho o último deve ser usado para obter respostas do Minecraft.
Dennis

No entanto, não há blocos de estrutura no Minecraft 1.0.0
ev3commander

11
É um nno Conor, btw :)
Conor O'Brien

Ou você pode religar os botões esquerdo e direito do mouse em qualquer versão mais recente para torná-lo válido; D
seadoggie01

@ ConorO'Brien Não é 1 block? Por que 1 byte? Eu não acho que as lojas mc cada bloco como um byte ...
RedClover

8

TI-Basic, 15 bytes

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

Bastante direto. A caixa de seleção cobre aproximadamente 40% da tela e alterna entre preto e branco. Quando marcada, a tela será mais ou menos assim:

tela


8

Qualquer versão da linha de comando do Windows, 3 bytes

(cmd.exe, lote, PowerShell, iniciar-> executar, qualquer que seja)

osk

Abre o teclado na tela, que possui várias "caixas de seleção", como teclas Shift, Ctrl, Alt e Capslock. Semelhante à resposta xgc e inspirado na captura de tela da resposta SmileBASIC.



7

KV Lang , 8 bytes

CheckBox

insira a descrição da imagem aqui


assumindo um ambiente Python realmente básico para o kv lang executar:

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

Isso funciona basicamente porque o CheckBoxwidget Kivy está incluído em kivy.Factorycada widget da biblioteca padrão.

Essa sequência simples cria uma instância CheckBoxe, por runTouchAppesperar que um widget seja executado, eu posso usar Builder.load_string.

O plano de fundo de load_stringmanipula basicamente todas as cadeias de caracteres kv e, se houver uma única instância de um widget definida (por exemplo CheckBox), ela será elevada a uma posição de widget raiz , por exemplo:

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

7

SmileBASIC, 49 bytes

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

e são uma caixa vazia e uma caixa marcada na fonte do SB.
Alterne a caixa de seleção tocando na tela (a coisa mais próxima a clicar com o mouse)

insira a descrição da imagem aqui insira a descrição da imagem aqui

Trapaça respostas:

0 bytes:

(o teclado na tela possui botões que funcionam como caixas de seleção, como as maiúsculas e a tecla de inserção)

14 bytes:

EXEC"SYS/SBGED

Abre o editor gráfico incorporado, que possui vários botões semelhantes a caixas de seleção


Isso é simplesmente brilhante, embora eu realmente não entenda o que a quarta linha está fazendo. Você poderia explicar?
snail_

T<Oé verdadeiro quando você para de tocar na tela e !=é usado como um XOR lógico. X=X XOR (O && !T)
12Me21

7

C #, 124 120 bytes

economizou 4 bytes graças ao grabthefish.

caixa de seleção marcada e não marcada nota: devido às edições, a imagem não representa exatamente o que o código faz, a "checkBox1" não é exibida com o código atual.

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


Se você não encontrou nada sobre isso na meta, pergunte sobre isso na meta.
Matthew Roh

Você pode se livrar dos espaços em var a = new Form();.
Clismique

@ Qwerp-Derp Eu os removi para contar, apenas colei a coisa errada, obrigado.
Satibel

você poderia usar a.ShowDialog();para salvar alguns bytes
grabthefish

obrigado @grabthefish, embora o c # ainda perca para o java :(
satibel


6

HTML com JavaScript, 46 33 28 bytes

<body onclick=innerHTML^=1>0

v2

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

v1

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

Esta é uma variante da resposta do @ ElPedro: Crie uma caixa de seleção . Desceu para 28 bytes com a ajuda de @Albert Renshaw. Poderia ser reduzido ainda mais, mas isso tornaria idêntico a Criar uma caixa de seleção

Toda a área de aplicação é clicável. Ele será exibido 0no offestado e 1no onestado. Experimente em https://jsbin.com/nuhetiyocu/1/edit


11
Aqui está uma variação elegante de 39 bytes. <body onclick=t=this;t.innerHTML^=t?1:0A regra de 16 pixels entre a mudança de estado está em debate.
Albert Renshaw

38<body onclick=this.innerHTML^=this?1:0
Albert Renshaw

11
Ah, não com a sua ajuda Eu estou de 33 já :)
Jan

11
28<body onclick=innerHTML^=1>0
Albert Renshaw

11
Agora que sempre há um valor dentro do contêiner, ele pode ser alterado de bodypara um elemento diferente. Mas eu só notei que tornaria idêntica a outra resposta codegolf.stackexchange.com/questions/109155/create-a-checkbox/... por isso estou apenas deixando-a como é
Jan

6

PowerShell v5 +, 94 bytes

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

insira a descrição da imagem aqui insira a descrição da imagem aqui

Isso é terrível, mas não posso obter as instruções mais curtas com Add-Typeor using namespace- e a variável é necessária, pois preciso reutilizar o objeto para mostrar o formulário e Controls.Add()não retorna nada útil.

ShowDialog é necessário no meu sistema para que a caixa seja interativa após a execução deste comando, caso contrário, o formulário será congelado.

também System.Windows.Forms.Formpode ser reduzido para Windows.Forms.Formantes que o sistema (pelo menos o meu) pare de concluir automaticamente em uma nova sessão.


Agradável! Pode-se acrescentar que isso requer a versão 5+.
Briantist

@ briantist atualizado, obrigado.
colsw

6

Excel VBA, 38 32 31 29 bytes

Função Janela do intermediário que insere uma caixa de seleção de altura = 9 e largura = 9, na célula A1na primeira planilha do projeto ativo do VBA do Excel

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

-6 Agradecimentos a pajonk por substituir [A1],[A1],9,9por0,0,9,9

-1 para substituir Sheets(1)por[Sheet1]

-2 para a realização do acima era burro e usando Sheet1em vez


Parece que, 1,1,9,9como argumentos, funciona também.
Pajonk

11
Você não precisa o Sheet(1)., você pode executar isso o suficientemente rápido no Excel, mas CheckBoxesé inherint à folha ativa
Mr.Burns

@ Mr.Burns eu fiz a este, mas sem fazer referência diretamente qualquer objeto planilha, o CheckBoxes.Addmétodo lança um erro informando "objeto necessário"
Taylor Scott

@TaylorScott Você está correto, eu colocar o código em um módulo folha em vez de um módulo normais .. Meu erro xD
Mr.Burns

4

VBA (Word), 74 57 bytes

-17 agradecimentos a Taylor Scott

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

O nome do arquivo do documento deve ser a.


11
É possível substituir o wdFieldFormCheckBoxcom 71(o valor inteiro da wdFieldFormCheckBoxconstante) para uma economia de 17 bytes
Taylor Scott

Eu acho que você pode remover as novas linhas para -2 bytes.
Dev1recher

4

Pug, 20 bytes

input(type=checkbox)

Além do que eu conto, é 23. Se você remover as aspas, ainda funcionará no Firefox e no Chrome (não pode testar no IE) e chegaria aos 21 anos. Nesse caso, consideraria uma melhoria no exemplo e, portanto, válida.
ElPedro

@heonlygusti - de fato, mas sem as aspas eu teria votado :-) btw, o voto negativo não era eu.
ElPedro

Eu teria votado se não fosse por essas citações, que não são necessárias.
NightSkyCode

@theonlygusti de jeito nenhum. De uma chance.
NightSkyCode

4

Clojure, 201 195 145 145 127 bytes

(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 bytes, livrando-se da necessidade m/fun-mode.

-50 bytes removendo as opções :setupe :size, pois elas são padrão e desnecessárias em não fun-mode. Também foi removida a importação desnecessária para o middleware.

-18 bytes graças a @ ASCII-only. Alterado para cores "menores" e removido um espaço desnecessário antes do operador de desreferência ( @).

Cria um esboço Quil (uma biblioteca Clojure que fornece uma camada sobre Processamento), portanto, isso requer que a biblioteca Quil seja executada.

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

insira a descrição da imagem aqui

insira a descrição da imagem aqui


Você não pode substituir 255 por 99? Também eu tente remover espaços antes / depois símbolos e ver se ele ainda funciona
ASCII-only

@ Somente ASCII sim, eu poderia. Ele fez uma cor feia e violenta, embora iirc, e por algum motivo eu priorizei isso na época. E não, infelizmente, é tanto espaço quanto eu posso remover.
Carcigenicate

@ Somente ASCII O problema é que os símbolos podem conter quase qualquer caractere; portanto, os únicos "vizinhos seguros" que você pode remover espaços são qualquer tipo de colchete ou aspas. Felizmente, este é um cisco para o primeiro é bastante prevalente.
Carcigenicate

Hmm, talvez [0 0 99]? (algum tipo de azul escuro)
somente ASCII

@ Somente ASCII Na verdade, acho que posso largar os 0s agora que penso nisso. Eu acho que o Quil auto cobre a frente com 0 se o vetor é muito curto. Se me lembro das últimas, vou consertar. Obrigado por me fazer pensar.
Carcigenicate

4

Linguagem de script da operação Flashpoint , 273 bytes

Para mostrar a caixa de seleção:

createDialog"b"

Mas primeiro deve ser definido:

Salve o seguinte em um arquivo nomeado description.extna pasta mission:

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

A caixa de seleção em ação:


3

AutoIt , 78 bytes

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

Abre uma janela maximizada que pode ser fechada como qualquer outra janela. A maximização e ... em cima é um efeito colateral do golfe.

insira a descrição da imagem aqui


Como eu executaria isso no Linux?
dkudriavtsev

@wat wine AutoIt3.exe script.au3, onde o script.au3arquivo contém esse código.
7777

3

Python, 62 bytes

from tkinter import*
a=Tk()
Checkbutton(a).pack()
a.mainloop()
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.