Escreva o programa mais curto possível que prende o cursor do mouse dentro de um triângulo equilátero apontando para cima, com um comprimento lateral de 274 pixels e um centróide no exato centro da tela.
(Triângulo por causa das fatias de queijo.)
Enquanto seu programa estiver em execução, a ponta do cursor nunca poderá se mover para fora desse triângulo e deve se mover e funcionar normalmente dentro. Quando a Esc
tecla é pressionada, o programa deve terminar, liberando o mouse.
Pontuação
Isso é código-golfe, o código mais curto em bytes vence. Você pode usar apenas o padrão ASCII.
Detalhes
- Além de coisas como desligar o computador ou interromper o processo ou pressionar
Alt-F4
ouCtrl-Alt-Delete
, a única maneira de liberar o cursor deve ser aEsc
tecla. - Se o cursor estiver fora do triângulo quando o programa for iniciado, ele deverá ser colocado em algum lugar dentro.
- O cursor deve poder mover-se suavemente para cima e para baixo nos dois lados angulares dos triângulos.
- Se a exibição for estendida por vários monitores, o triângulo poderá aparecer no centro de qualquer monitor ou no centro de todos eles combinados. (Se você possui apenas um monitor, não precisa testar isso.)
- Tudo bem se os usuários da tela de toque ainda puderem clicar em itens fora do triângulo.
Pequena pergunta sobre bônus: De onde eu recebi 274?
Respostas:
AutoHotKey (249)
Ele não possui funções mínimas / máximas, então gastei 72 caracteres reimplementando-as.
Pressione
t
para prender o cursor, não sei se é possível fazer coisas sem atribuí-lo a uma tecla de atalho.O movimento não é muito suave, a menos que você mova o mouse lentamente
fonte
Pitão
418351314300263 BytesEdit: Saved
67104118155 Bytes, graças aos conselhos dos comentáriosEscrito em Python 3.4.1 no Windows, o pywin precisa ser instalado.
Meu primeiro envio de código de golfe. Sinta-se livre para sugerir melhorias
fonte
from ... import*
o que economiza 3 bytes em seu código274/2
como137
para salvar 2 caracteres. Atribuir a subexpressão comumy-2*S/c
a uma var de uma letra e fazer referência a elad
ee
deve economizar um pouco mais. Oif b<X:b=int(X)
padrão provavelmente pode ser escrito comob=max(b,int(X))
(e>
reescrito com min, respectivamente). Finalmente, provavelmente há mais espaço em branco a ser extraído, por exemplo, entrekbhit()
eand
.G=GetSystemMetrics;x=G(0)/2;y=G(1)/2
(já que as resoluções são sempre um número inteiro e múltiplo de 2, é possível salvar 2 barras), o mesmo para SetCursorPos. . E se você usar c = 3 ** 5, em seguida, você não precisa de matemática importaçãomap
:b=min(max(b,*map(int,[c*a+d,-c*a+e,y+s/c])))
. Você também não precisa dos parâmetrosa
eb
:a,b=GetCursorPos()
que economiza 2 bytes. Você TAMBÉM não precisa recalcular e armazenara
eb
. Basta colocar os cálculos na chamada paraS
: oS((min(max(a,x-s),x+s),min(max(b,int(c*a+d),int(-c*a+e)),int(y+s/c))))
que economiza 4 bytes.and
, poderá substituirkbhit()and ord(getch())==27
porkbhit()*ord(getch())==27
para salvar 3 caracteres, porque True é convertido em 1 e False é convertido em 0 no Python. Além disso, você pode colocar a primeira e a segunda linhas do loop while na mesma linha, separadas por ponto e vírgula, para salvar outro caractere. Por fim, você usa apenas uma vezd
ee
cada uma, para que não faça sentido defini-las como variáveis. Basta colocarY-c*x
eY+c*x
nos locais adequados.