Escriba el programa más corto posible que atrape el cursor del mouse dentro de un triángulo equilátero que apunta hacia arriba con una longitud lateral de 274 píxeles y un centroide en el centro exacto de la pantalla.
(Triángulo debido a las cuñas de queso).
Mientras su programa se está ejecutando, la punta del cursor nunca debería poder moverse fuera de este triángulo, y debería moverse y funcionar normalmente dentro. Cuando se Esc
presiona la tecla, el programa debe finalizar, soltando el mouse.
Puntuación
Este es el código de golf, gana el código más corto en bytes. Solo puede usar ASCII estándar.
Detalles
- Además de cosas como apagar la computadora o matar el proceso o presionar
Alt-F4
oCtrl-Alt-Delete
, la única forma de soltar el cursor debería ser laEsc
tecla. - Si el cursor está fuera del triángulo cuando se inicia el programa, debe colocarse en algún lugar dentro.
- El cursor debe poder moverse suavemente hacia arriba y hacia abajo en los dos lados angulados de los triángulos.
- Si la pantalla se extiende sobre varios monitores, el triángulo puede aparecer en el centro de cualquier monitor o en el centro de todos ellos combinados. (Si solo tiene un monitor, no necesita probarlo).
- Está bien si los usuarios de la pantalla táctil aún pueden hacer clic fuera del triángulo.
Pequeña pregunta extra: ¿de dónde obtuve 274?
Respuestas:
AutoHotKey (249)
No tiene funciones mín. / Máx. Incorporadas, así que pasé 72 caracteres reimplementándolas.
Presione
t
para atrapar el cursor, no sé si es posible hacer cosas sin asignarlo a una tecla de acceso rápido.El movimiento no es muy suave, a menos que mueva el mouse lentamente
fuente
Python
418351314300263 BytesEditar: Guardado
67104118155 bytes gracias a los consejos en los comentariosEscrito en Python 3.4.1 en Windows, pywin necesita ser instalado.
Mi primer envío de código de golf. Por favor, siéntase libre de sugerir mejoras
fuente
from ... import*
que ahorra 3 bytes en tu código274/2
como137
para guardar 2 caracteres. Asignar la subexpresión comúny-2*S/c
a una variable de una letra y hacer referencia a ellad
ye
debería guardar algo más. Elif b<X:b=int(X)
patrón probablemente puede escribirse comob=max(b,int(X))
(y>
reescribirse con min, respectivamente). Finalmente, probablemente haya más espacio en blanco para exprimir, por ejemplo, entrekbhit()
yand
.G=GetSystemMetrics;x=G(0)/2;y=G(1)/2
(dado que las resoluciones son siempre un número entero y múltiplo de 2, puede guardar 2 barras), lo mismo para SetCursorPos. Y si usa c = 3 **. 5, entonces no necesita importar matemáticasmap
:b=min(max(b,*map(int,[c*a+d,-c*a+e,y+s/c])))
. Tampoco necesita los parensa
yb
: loa,b=GetCursorPos()
que ahorra 2bytes. Tampoco es necesario volver a calcular y almacenara
yb
. Simplemente ponga los cálculos en la llamada aS
:S((min(max(a,x-s),x+s),min(max(b,int(c*a+d),int(-c*a+e)),int(y+s/c))))
que ahorra 4bytes.and
, puede reemplazarkbhit()and ord(getch())==27
conkbhit()*ord(getch())==27
para guardar 3 caracteres, porque True se convierte en 1 y False se convierte en 0 en Python. Además, puede colocar las líneas primera y segunda del ciclo while en la misma línea, separadas por un punto y coma, para guardar otro carácter. Por último, sólo vas a usard
ye
una vez cada uno, por lo que no hay ningún punto en definirlos como variable. Simplemente pongaY-c*x
yY+c*x
en los lugares adecuados.