Codifique um programa ou função para construir uma tela interativa na tela com pelo menos 400 pixels x 400 pixels de tamanho. A tela pode ser da cor que você desejar, com ou sem borda, com ou sem uma barra de título, etc., apenas alguma forma de tela óbvia.
O usuário clicará em duas áreas distintas da tela e o programa deverá gerar a distância euclidiana (em pixels) entre esses dois cliques de alguma forma (STDOUT, exibindo um alerta etc.). Os dois cliques podem ser apenas cliques à esquerda, apenas cliques com o botão direito, um clique com o botão esquerdo no primeiro e clique com o botão direito no segundo, dois cliques com o duplo esquerdo, etc., qualquer combinação é aceitável. Nota especial: Clicar e arrastar (por exemplo, usando MOUSEUP como o segundo ponto) não é especificamente permitido; eles devem ser dois cliques distintos.
O usuário deve ser capaz de fazer isso várias vezes e deve obter uma saída a cada vez, até que o programa seja fechado / forçado a sair / interrompido / etc. Você pode escolher o método de fechamento (clicando em um X, ctrl-C, etc.), independentemente do seu código.
Regras
- Um programa completo ou uma função são aceitáveis. Se uma função, no entanto, você ainda deve exibir a saída para o usuário de alguma forma (simplesmente retornar o valor não é aceitável).
- A saída pode ser no console, exibida como um alerta, preenchida na tela, etc.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
fonte
n
vezes, emn-1
vez defloor(n/2)
números serem impressos) Isso é permitido?Respostas:
LOGO ( FMSLogo ),
5452 bytesInfelizmente, não consigo encontrar nenhum mouse on-line com suporte para intérpretes de logotipo, como o FMSLogo.
Este é um "modelo de slot explícito", que é semelhante ao lambda em outras linguagens de programação. Clique com o botão esquerdo do mouse no primeiro ponto e o botão direito no segundo ponto (distância de impressão).
Explicação: (O logotipo é uma linguagem de programação gráfica de tartaruga)
A
"
é uma palavra vazia. Normalmente, espera-se que o modelo seja uma lista (onde[]
, uma lista vazia, não faz nada), passar uma palavra é aceitável (é agrupado em uma lista) e, nesse caso, salva 2 bytes.Corre:
A
apply
é uma maneira de executar modelo no Logo, a[]
lista de argumentos, para o qual o modelo receber nenhum é.fonte
Mathematica, 94 bytes
A tela é uma imagem aleatória em escala de cinza, o primeiro clique deve ser o botão esquerdo e o segundo, o botão direito. O comportamento exato é que o clique com o botão direito do mouse imprime a distância até o último clique (esquerda ou direita); portanto, se você clicar com o botão direito repetidamente, também poderá obter distâncias consecutivas.
Os resultados são exatos, portanto, eles podem conter uma raiz quadrada.
Se a resolução da sua webcam for de pelo menos 400x400, você poderá usar em
CurrentImage[]
vez da1~RandomImage~400
tela, economizando 3 bytes.fonte
Java 8,
469389388385380357348325 bytesSeria mais curto com o AWT, mas nunca o usei.fonte
true
poderia ser0<1
.main(String args[])
não pode sermain(String[]Z)
?{F f=new F();}
pode ser{new F();}
.setVisible(0<1);
pode ser removido e você pode adicionar.show()
ao quadro;println
pode serprint
.Java (OpenJDK 8) , 282 bytes
Eu não posso testar isso agora; se alguém pudesse me dizer se há algum erro de compilador que seria ótimo.
O AWT provavelmente seria mais curto, mas eu preciso de um IDE real para isso, lol. Eu nunca usei o AWT antes, mas poderia fazê-lo funcionar se tivesse um IDE. Eu poderia usar os documentos, mas isso é realmente difícil lol-10 bytes usando AWT graças a Kevin Cruijssen
-44 bytes usando um bloco inicializador; desenvolvido independentemente de Roberto Graham, mas agora vejo que eles fizeram a mesma coisa, acho que
-6 bytes combinando algumas declarações graças a Kevin
-11 bytes usando
interface
agradecimentos a Kevin-35 bytes eliminando algumas variáveis desnecessárias graças à remoção de mellamokb
-9 bytes a importação desnecessária e o uso de um nome qualificado, graças a mellamokb
-44 bytes, graças a mellamokb e aditsu
fonte
TI-Basic (TI-84 Plus CE), 49 bytes (45 tokens) (possivelmente não concorrente)
-7 bytes com sugestões de kamoroso94
O usuário não 'clica' em si, mas move o cursor na tela do gráfico com as teclas de seta e
enter
pressiona para selecionar um ponto, e o menor movimento é ~ 1,5 para xe ~ 2,4 para y.Explicação:
fonte
8³
maior que 400, mas um byte a menos.Disp
linha em dois bytes com{X-A,Y-B:Disp √(sum(Ans²
(dois pontos ou nova linha funciona obviamente).8^2
, o mesmo número de bytes?8^2
(8 ao quadrado) é 64 e menos que 400. Eu disse8³
(8 em cubos) que é maior que 400 e usa dois tokens, um byte cada:8
e³
.JavaScript (ES6) + HTML, 58 bytes
A própria página da web serve como a "tela" em questão; Eu acho que é bastante seguro supor que a janela do navegador terá pelo menos 400x400 pixels.
JavaScript (ES6) + HTML, 51 bytes
Podemos economizar 7 bytes se ignorarmos a
NaN
saída no primeiro clique. ( @Nate )JavaScript (ES6) + HTML + CSS, 58 + 0 + 13 = 71 bytes
Edit : Com 13 bytes adicionais de CSS, podemos garantir que a área de rolagem seja suficientemente grande para atender ao requisito de 400x400.
fonte
Processamento / Java, 149 bytes
Bem simples, usa 2 variáveis globais e 3 funções internas para fazer tudo.
fonte
Processing.org 126
fonte
Python 2, 144
Imprime a distância entre os últimos cliques (o primeiro imprime a distância de 400.400).
fonte
Autohotkey, 146 bytes
Você pensaria que uma linguagem criada especificamente para capturar e simular ações de teclado e mouse seria mais eficiente nesse desafio ...
Isso cria uma janela com uma caixa de texto de 400 x 400 pixels com uma borda para torná-la óbvia. Sem a borda, há um espaço ao redor da borda que está na janela, mas fora da caixa de texto e você não sabe. Adicionar uma borda era a maneira mais curta de diferenciá-las. A
gC
opção permite executar a sub-rotinaC
sempre que você clica na caixa de texto. A sequência de comandos é, portanto, clique esquerdo, seguida por um clique esquerdo diferente.Encontrei outra solução com 144 bytes, mas que permite cliques em toda a tela, em vez de apenas na "tela óbvia". Também é irritante terminar porque os cliques esquerdo e direito são capturados e não terminam quando você fecha a GUI.
fonte
Python 2 ( TigerJython ),
125123 bytesO TigerJython vem com um tamanho padrão de tela (800x, 600y).
Isso gera uma imagem temporária de tartaruga para cada ponto de 'início' clicado, que desaparece após o próximo ponto de 'início' ser selecionado. Esse comportamento é aprovado pelo OP.
fonte
SmileBASIC, 86 bytes
Usa a tela de toque para entrada.
fonte
Java 8, 228 bytes
Aqui está uma solução Java que usa um método AWT descontinuado
mouseDown
que você precisaria pesquisar profundamente na API para encontrar. Eu só sei disso por causa do curso de programação que fiz no segundo ano do ensino médio, e um dos projetos era fazer um pequeno programa de pintura usando esse método e métodos similares. Eu nunca pensei que teria um bom motivo para usá-lo até agora.fonte
Tcl / Tk, 94
104fonte