Codifique un programa o función para construir un lienzo interactivo en la pantalla de al menos 400 píxeles x 400 píxeles de tamaño. El lienzo puede ser del color que desee, con o sin bordes, con o sin barra de título, etc., solo alguna forma de lienzo obvio.
El usuario hará clic en dos áreas distintas del lienzo y el programa debe generar la distancia euclidiana (en píxeles) entre esos dos clics de alguna manera (STDOUT, mostrar una alerta, etc.). Los dos clics pueden ser solo clics izquierdos, solo clics derechos, un clic izquierdo para el primer y derecho para el segundo, dos clics dobles, etc., cualquier combinación es aceptable. Nota especial: Hacer clic y arrastrar (por ejemplo, usar MOUSEUP como el segundo punto) no está específicamente permitido; deben ser dos clics distintos.
El usuario debe poder hacer esto varias veces, y debe obtener una salida cada vez, hasta que el programa se cierre / force-quit / kill / etc. Puede elegir el método de cierre (haciendo clic en una X, Ctrl-C, etc.), lo que sea más apropiado para su código.
Reglas
- Un programa completo o una función son aceptables. Sin embargo, si se trata de una función, aún debe mostrar la salida al usuario de alguna manera (simplemente no es aceptable devolver el valor).
- La salida puede ser a la consola, mostrada como una alerta, poblada en el lienzo, etc.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
fuente
n
tiempos, enn-1
lugar defloor(n/2)
imprimir los números) ¿Está permitido?Respuestas:
LOGOTIPO ( FMSLogo ),
5452 bytesDesafortunadamente, no puedo encontrar ningún soporte para el manejo de mouse en línea de intérprete de Logo como FMSLogo.
Esta es una "plantilla de ranura explícita", que es similar a lambda en otros lenguajes de programación. Haga clic con el mouse izquierdo para el primer punto y el mouse derecho para el segundo punto (distancia de impresión).
Explicación: (El logotipo es un lenguaje de programación de gráficos de tortuga)
El
"
es una palabra vacía. Normalmente se espera que la plantilla sea una lista (donde[]
, una lista vacía, no hace nada), pasar una palabra es aceptable (está envuelto en una lista), y en este caso ahorra 2 bytes.Correr:
Esta
apply
es una forma de ejecutar la plantilla en Logo,[]
es la lista de argumentos, para la cual la plantilla no recibe ninguno.fuente
Mathematica, 94 bytes
El lienzo es una imagen aleatoria en escala de grises, el primer clic debe ser izquierdo y el segundo, derecho. El comportamiento exacto es que el clic derecho imprime la distancia hasta el último clic (izquierdo o derecho), por lo que si usa el botón derecho repetidamente, también puede obtener distancias consecutivas.
Los resultados son exactos, por lo que pueden contener una raíz cuadrada.
Si la resolución de su cámara web es de al menos 400x400, puede usarla en
CurrentImage[]
lugar de1~RandomImage~400
su lienzo, ahorrando 3 bytes.fuente
Java 8,
469389388385380357348325 bytesSería más corto con AWT, pero nunca lo he usado.fuente
true
podría ser0<1
.main(String args[])
no puede sermain(String[]Z)
?{F f=new F();}
puede ser{new F();}
.setVisible(0<1);
se puede eliminar y puede agregar.show()
al Marco;println
puede serprint
.Java (OpenJDK 8) , 282 bytes
No puedo probar esto ahora mismo; si alguien pudiera decirme si hay algún error de compilación que sería genial.
AWT probablemente sería más corto, pero necesito un IDE real para eso jajaja. Nunca he usado AWT antes, pero podría hacerlo funcionar si tuviera un IDE. Podría usar los documentos, pero eso es realmente difícil jajaja-10 bytes usando AWT gracias a Kevin Cruijssen
-44 bytes usando un bloque inicializador; desarrollado independientemente de Roberto Graham aunque ahora veo que hicieron lo mismo, creo que
-6 bytes combinando algunas declaraciones gracias a Kevin
-11 bytes usando un
interface
gracias a Kevin-35 bytes eliminando algunas variables innecesarias gracias a la eliminación de mellamokb
-9 bytes la importación innecesaria y el uso de un nombre calificado gracias a mellamokb
-44 bytes gracias a mellamokb y aditsu
fuente
TI-Basic (TI-84 Plus CE), 49 bytes (45 tokens) (posiblemente no compite)
-7 bytes con sugerencias de kamoroso94
El usuario no hace "clic" per se, sino que se mueve alrededor de un cursor en la pantalla del gráfico con las teclas de flecha y
enter
pulsa para seleccionar un punto, y el movimiento más pequeño es ~ 1.5 para xy ~ 2.4 para y.Explicación:
fuente
8³
que es mayor que 400 pero un byte menos.Disp
línea en dos bytes con{X-A,Y-B:Disp √(sum(Ans²
(los dos puntos o la nueva línea funcionan obviamente).8^2
el mismo número de bytes?8^2
(8 al cuadrado) es 64 y menos de 400. Dije8³
(8 al cubo) que es mayor que 400 y usa dos tokens, un byte cada uno:8
y³
.JavaScript (ES6) + HTML, 58 bytes
La página web en sí misma sirve como el "lienzo" en cuestión; Creo que es bastante seguro asumir que la ventana del navegador tendrá al menos 400x400 píxeles.
JavaScript (ES6) + HTML, 51 bytes
Podemos guardar 7 bytes si ignoramos la
NaN
salida en el primer clic. ( @Nate )JavaScript (ES6) + HTML + CSS, 58 + 0 + 13 = 71 bytes
Editar : con 13 bytes adicionales de CSS, podemos asegurarnos de que el área de desplazamiento sea lo suficientemente grande como para ajustarse al requisito de 400x400.
fuente
Procesamiento / Java, 149 bytes
Bastante sencillo, utiliza 2 variables globales y 3 funciones integradas para hacer todo.
fuente
Processing.org 126
fuente
Pitón 2, 144
Imprime la distancia entre los últimos clics (el primero imprime la distancia desde 400.400).
fuente
Autohotkey, 146 bytes
Se podría pensar que un lenguaje creado específicamente para capturar y simular acciones de teclado y mouse sería más eficiente en este desafío ...
Esto crea una ventana con un cuadro de texto de 400 x 400 píxeles con un borde para que sea obvio. Sin el borde, hay un espacio alrededor del borde que está en la ventana pero fuera del cuadro de texto y no se nota. Agregar un borde era la forma más corta de diferenciarlos. La
gC
opción hace que ejecute la subrutinaC
cada vez que hace clic en el cuadro de texto. La secuencia de comandos es, por lo tanto, clic izquierdo seguido de un clic izquierdo diferente.Encontré otra solución que tiene 144 bytes, pero permite clics en toda la pantalla en lugar de solo en el "lienzo obvio". También es molesto terminar porque se capturan los clics izquierdo y derecho y no termina cuando cierra la GUI.
fuente
Python 2 ( TigerJython ),
125123 bytesTigerJython viene con un tamaño predeterminado de lienzo de tamaño (800x, 600y).
Esto genera una imagen temporal de tortuga por cada punto de "inicio" en el que se hace clic, que desaparece después de seleccionar el siguiente punto de "inicio". Este comportamiento es aprobado por el OP.
fuente
SmileBASIC, 86 bytes
Utiliza la pantalla táctil para la entrada.
fuente
Java 8, 228 bytes
Aquí hay una solución Java que utiliza un método AWT en desuso
mouseDown
que tendría que profundizar en la API para encontrarlo. Solo lo sé por el curso de programación que tomé como estudiante de secundaria y uno de los proyectos fue hacer un pequeño programa de pintura usando eso y métodos similares. Nunca pensé que tendría una buena razón para usarlo hasta ahora.fuente
Tcl / Tk,
94104fuente