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:
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.
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.A caixa de seleção não deve se mover quando estiver alternada.
No estado marcado, a caixa de seleção pode ser de qualquer cor.
No estado desmarcado, a caixa de seleção pode ter qualquer cor , desde que pelo menos 16 pixels sejam visualmente distintos do estado verificado .
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.
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%.
fonte
Respostas:
Mathematica, 10 bytes
Assume o ambiente de notebook do Mathematica .
Os dois estados são assim:
fonte
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.
fonte
>
. +1 e IMHO válido.Bash ,
675550353231 bytesO 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.
›?9h
captura 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,M
o mouse,b
o botão ( 0x20 + o número do botão),x
a coordenada x do clique ( 0x20 + coordenada) ey
a coordenada y .-sn6
torna 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
Resultado
fonte
1000h
para9h
(a diferença é que1000h
lida com a liberação e o pressionamento do mouse e9h
somente com a liberação do mouse). Isso pode ou não precisar de alterações em outras partes do código.gnome-terminal
parece funcionar, era isso que eu estava usando para testar (editar: mas não acho que ele suporte um CSI de 1 byte).xterm
també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.):)
a partir:(
até o finalProcessando,
7866656361 bytes2 bytes salvos graças a @TuukkaX usando em
-a%2
vez dea%2*-1
2 bytes salvos graças a @TuukkaX usando
a=-a
A caixa de seleção alterna entre preto e branco.
Explicação
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 umadraw()
função.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):
fonte
fill(-1)
a
para 1 em vez de 0. Alterea++
paraa=-a
, o que faz-a%2
justa
. Isso alternaráa
entre 1 e -1. Não sei que cor 1 produz.color(1)
produz#010101
o que é muito próximo de negroHTML + JavaScript,
323025 caracteresfonte
this
está implícito e pode ser removido. Além disso,innerHTML
é mais curto.<input>
elementoShell 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
A tela xgc é realmente preenchida com várias caixas de seleção:
e "botões fixos" (que se qualificam como caixas de seleção, de acordo com as regras deste desafio):
fonte
Markdown com sabor do GitHub - 6 bytes
(Há um espaço à direita)
Em uma essência:
fonte
AHK , 25 bytes
Resultado -
fonte
Arranhão, 2 blocos
Coloque esse script no sprite padrão (que vem com duas roupas)
fonte
Python REPL, 45 bytes
fonte
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.GeoGebra , 10 bytes
Introduzido na barra de entrada.
Aqui está um gif da execução:
fonte
Tcl / Tk, 21 bytes
Golfe
fonte
HTML com JavaScript -
13612412011511311110979 bytes-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:solid
existe 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
px
altura 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.Versão anterior:
fonte
id=d
para removerd=this
?this
salvará a configuração do ID. Se você armazenarthis
em uma propriedade, você salvará alguns bytes. Oalign
é 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 bytesMinecraft 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.
Marcado com a contagem de bytes sugerida por @Connor O'Brien.
fonte
n
no Conor, btw :)1 block
? Por que1 byte
? Eu não acho que as lojas mc cada bloco como um byte ...TI-Basic, 15 bytes
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:
fonte
Qualquer versão da linha de comando do Windows, 3 bytes
(cmd.exe, lote, PowerShell, iniciar-> executar, qualquer que seja)
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.
fonte
Oitava,
3620 bytesGraças a @LuisMendo economizou 16 bytes!
fonte
uicontrol('sty','c')
também funcionaKV Lang , 8 bytes
assumindo um ambiente Python realmente básico para o kv lang executar:
Isso funciona basicamente porque o
CheckBox
widget Kivy está incluído emkivy.Factory
cada widget da biblioteca padrão.Essa sequência simples cria uma instância
CheckBox
e, porrunTouchApp
esperar que um widget seja executado, eu posso usarBuilder.load_string
.O plano de fundo de
load_string
manipula basicamente todas as cadeias de caracteres kv e, se houver uma única instância de um widget definida (por exemploCheckBox
), ela será elevada a uma posição de widget raiz , por exemplo:fonte
SmileBASIC, 49 bytes
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)
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:
Abre o editor gráfico incorporado, que possui vários botões semelhantes a caixas de seleção
fonte
T<O
é verdadeiro quando você para de tocar na tela e!=
é usado como um XOR lógico.X=X XOR (O && !T)
C #,
124120 byteseconomizou 4 bytes graças ao grabthefish.
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.
ungolfed:
using System.Windows.Forms; class P{ static void Main(){ var a=new Form(); a.Controls.Add(new CheckBox());
Application.Run(a);a.ShowDialog(); } }fonte
var a = new Form();
.a.ShowDialog();
para salvar alguns bytesRuby com sapatos, 16 caracteres
Saída de amostra:
fonte
HTML com JavaScript,
463328 bytesv2
v1
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
0
nooff
estado e1
noon
estado. Experimente em https://jsbin.com/nuhetiyocu/1/editfonte
<body onclick=t=this;t.innerHTML^=t?1:0
A regra de 16 pixels entre a mudança de estado está em debate.<body onclick=this.innerHTML^=this?1:0
<body onclick=innerHTML^=1>0
body
para 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 éPowerShell v5 +, 94 bytes
Isso é terrível, mas não posso obter as instruções mais curtas com
Add-Type
orusing namespace
- e a variável é necessária, pois preciso reutilizar o objeto para mostrar o formulário eControls.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.Form
pode ser reduzido paraWindows.Forms.Form
antes que o sistema (pelo menos o meu) pare de concluir automaticamente em uma nova sessão.fonte
Excel VBA,
38323129 bytesFunção Janela do intermediário que insere uma caixa de seleção de altura = 9 e largura = 9, na célula
A1
na primeira planilha do projeto ativo do VBA do Excel-6 Agradecimentos a pajonk por substituir
[A1],[A1],9,9
por0,0,9,9
-1 para substituir
Sheets(1)
por[Sheet1]
-2 para a realização do acima era burro e usando
Sheet1
em vezfonte
1,1,9,9
como argumentos, funciona também.Sheet(1).
, você pode executar isso o suficientemente rápido no Excel, masCheckBoxes
é inherint à folha ativaCheckBoxes.Add
método lança um erro informando "objeto necessário"VBA (Word),
7457 bytes-17 agradecimentos a Taylor Scott
O nome do arquivo do documento deve ser a.
fonte
wdFieldFormCheckBox
com71
(o valor inteiro dawdFieldFormCheckBox
constante) para uma economia de 17 bytesPug, 20 bytes
fonte
Clojure,
201195145 145127 bytes-6 bytes, livrando-se da necessidade
m/fun-mode
.-50 bytes removendo as opções
:setup
e:size
, pois elas são padrão e desnecessárias em nãofun-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.
fonte
[0 0 99]
? (algum tipo de azul escuro)Linguagem de script da operação Flashpoint , 273 bytes
Para mostrar a caixa de seleção:
Mas primeiro deve ser definido:
Salve o seguinte em um arquivo nomeado
description.ext
na pasta mission:A caixa de seleção em ação:
fonte
AutoIt , 78 bytes
Abre uma janela maximizada que pode ser fechada como qualquer outra janela. A maximização e ... em cima é um efeito colateral do golfe.
fonte
wine AutoIt3.exe script.au3
, onde oscript.au3
arquivo contém esse código.Python, 62 bytes
fonte