Tuliskan program sesingkat mungkin yang menjebak kursor mouse di dalam segitiga sama sisi menunjuk ke atas dengan panjang sisi 274 piksel dan centroid di tengah-tengah layar.
(Segitiga karena irisan keju.)
Saat program Anda berjalan, ujung kursor seharusnya tidak dapat bergerak di luar segitiga ini, dan harus bergerak dan berfungsi secara normal di dalam. Ketika tombol Esc
ditekan, program harus diakhiri, melepaskan mouse.
Mencetak gol
Ini adalah kode-golf, kode terpendek dalam byte menang. Anda hanya dapat menggunakan ASCII standar.
Detail
- Selain hal-hal seperti mematikan komputer atau mematikan proses atau menekan
Alt-F4
atauCtrl-Alt-Delete
, satu-satunya cara untuk melepaskan kursor adalahEsc
kuncinya. - Jika kursor berada di luar segitiga ketika program dimulai harus diletakkan di suatu tempat di dalam.
- Kursor harus dapat bergerak dengan lancar ke atas dan ke bawah dua sisi siku dari segitiga.
- Jika layar diperluas lebih dari beberapa monitor, segitiga dapat muncul di bagian tengah dari satu monitor atau bagian tengah dari semuanya yang digabungkan. (Jika Anda hanya memiliki satu monitor, Anda tidak perlu menguji ini.)
- Tidak masalah jika pengguna layar sentuh masih dapat mengklik hal-hal di luar segitiga.
Pertanyaan bonus kecil: Dari mana saya dapatkan 274?
Jawaban:
AutoHotKey (249)
Itu tidak memiliki fungsi min / max inbuilt, jadi saya menghabiskan 72 karakter untuk mengimplementasikannya.
Tekan
t
untuk menjebak kursor, saya tidak tahu apakah mungkin untuk melakukan hal-hal tanpa menugaskannya ke hotkey.Gerakannya tidak terlalu mulus, kecuali jika Anda menggerakkan mouse dengan lambat
sumber
Python
418351314300263 BytesSunting: Disimpan
67104118155 Bytes berkat saran dalam komentarDitulis dengan Python 3.4.1 di Windows, pywin perlu diinstal.
Pengiriman golf kode pertama saya. Silakan menyarankan perbaikan
sumber
from ... import*
yang menyimpan 3 byte dalam kode Anda274/2
sebagai137
untuk menyimpan 2 karakter. Menetapkan subekspresi umumy-2*S/c
ke var satu huruf dan merujuknyad
dane
harus menyimpan lebih banyak. Theif b<X:b=int(X)
pola mungkin dapat ditulis sepertib=max(b,int(X))
(dan>
ditulis ulang dengan min, masing-masing). Akhirnya, mungkin ada lebih banyak ruang putih untuk dimatikan, misalnya antarakbhit()
danand
.G=GetSystemMetrics;x=G(0)/2;y=G(1)/2
(karena resolusi selalu berupa bilangan bulat dan 2, Anda dapat menyimpan 2 garis miring), sama untuk SetCursorPos. Dan jika Anda menggunakan c = 3 **. 5 maka Anda tidak perlu mengimpor matematikamap
:b=min(max(b,*map(int,[c*a+d,-c*a+e,y+s/c])))
. Anda juga tidak memerlukan parens sekitara
danb
:a,b=GetCursorPos()
yang menghemat 2bytes. Anda JUGA tidak perlu menghitung ulang dan menyimpana
danb
. Sederhananya perhitungan ke dalam panggilan keS
:S((min(max(a,x-s),x+s),min(max(b,int(c*a+d),int(-c*a+e)),int(y+s/c))))
yang menyimpan 4bytes.and
, Anda dapat menggantikbhit()and ord(getch())==27
dengankbhit()*ord(getch())==27
untuk menyimpan 3 karakter, karena True dilemparkan ke 1 dan False dilemparkan ke 0 dengan Python. Anda juga dapat meletakkan baris pertama dan kedua dari loop sementara pada baris yang sama, dipisahkan oleh tanda titik koma, untuk menyimpan karakter lain. Akhirnya, Anda hanya menggunakand
dane
sekali masing-masing, sehingga tidak ada gunanya mendefinisikan mereka sebagai variabel. Masukkan sajaY-c*x
danY+c*x
di lokasi yang tepat.