Saya melihat keluar dari jendela loteng ke halaman tetangga saya. Mereka memiliki seekor anjing yang dirantai ke sebuah pos di tengah halaman. Anjing berlari di sekitar halaman tetapi selalu berada di ujung rantai, sehingga akhirnya meninggalkan jejak di tanah. Biasanya lintasan ini akan melingkar sempurna, tetapi tetangga saya memiliki beberapa tiang lain di halaman mereka yang rantai anjingnya tertangkap. Setiap kali rantai anjing mengenai kutub, anjing mulai memutar tentang kutub baru dengan panjang rantai yang tersisa sejauh jari-jarinya. Karena kutub, anjing dan rantai semuanya memiliki lebar nol (tetangga saya adalah ahli matematika) rantai dapat berputar di sekitar kutub tanpa batas tanpa jari-jari lingkaran memendek. Anjing juga dapat melewati rantai (bukan kerahnya) jika rantai ada di jalurnya. Setelah mengamati keanehan ini untuk sementara waktu saya memutuskan saya akan menulis beberapa kode untuk mensimulasikan anjing tetangga saya. Kode akan mengambil lokasi kutub tengah, tempat anjing itu dirantai, lokasi kutub lain di halaman tetangga saya, panjang rantai, dan lokasi awal anjing, dan akan menampilkan diagram yang menunjukkan jalan di mana anjing telah memakai rumput. Anda dapat mengasumsikan bahwa kombinasi apa pun dari berikut ini konstan (dan karenanya tidak menjadikannya sebagai input):
Lokasi tiang tempat anjing itu dirantai
Panjang rantai
Lokasi awal anjing
Matahari terbit, jadi ruang di lantai loteng saya yang diterangi oleh jendela menyusut, memberi saya semakin sedikit ruang untuk menulis kode saya. Silakan coba untuk meminimalkan jumlah byte kode Anda sehingga saya memiliki ruang untuk menyusunnya di lantai loteng saya.
Uji kasus
Di sini saya berasumsi bahwa anjing mulai 3 unit selatan dari yang tiang itu dirantai (titik merah), terletak di 0,0
. Saya telah menunjukkan di mana kutub dengan titik-titik untuk kejelasan, Anda tidak perlu memasukkannya dalam output Anda.
Poles at 1,2 -1,2
Poles at 0,.5
Poles at 0,1 1,1 -2,1 -1,-.5
Poles at 0,1 1,1
sumber
{0,-.5}
?{0,.5}
membalik secara vertikal tanpa lingkaran terbesar. Anjing itu pada dasarnya mulai tertangkap di tiang kedua.Jawaban:
Python 3 menggunakan matplotlib, 457 byte
Karena tetangga Anda adalah ahli matematika, saya berasumsi bahwa taman tetangga Anda menempati domain kompleks dan karenanya koordinat objek di taman itu adalah bilangan kompleks. Untuk menggunakan fungsi ini, Anda harus memberikannya daftar bilangan kompleks yang menandakan lokasi kutub di taman tetangga Anda. Representasi sistem koordinat default telah dipilih, di sebelah kanan adalah bilangan real positif dan ke atas adalah bilangan imajiner positif. Ini berarti contohnya menjadi:
Selanjutnya, program mengasumsikan hal-hal berikut: tali terikat ke titik 0, tali adalah 3 unit, dan area plot 10 oleh 10 berpusat di sekitar 0. Untuk parameter ini, hasilnya cocok persis dengan contoh, dan beginilah hasilnya (untuk contoh terakhir):
Algoritma ini cukup sederhana, hanya membutuhkan satu syarat untuk membedakan searah jarum jam dan pencarian berlawanan arah jarum jam. Keadaan algoritma ditentukan oleh titik rotasi saat ini dan orientasi / panjang tali yang tersisa ketika mengenai titik rotasi saat ini. Ia bekerja sebagai berikut:
Algoritma ini kemudian dilakukan pertama dalam arah searah jarum jam, setelah itu negara diatur ulang dan dijalankan dalam arah berlawanan arah jarum jam. Kesederhanaan algoritma berarti bahwa sekitar setengah dari program bytecount dihabiskan untuk fungsi menggambar. Jika rutinitas gambar dilucuti, itu akan menghapus 218 byte dari ukuran program.
Berikut ini adalah versi yang tidak dikenali yang juga berisi kode debug, yang juga menampilkan poin dan tabrakan tali:
Output yang dihasilkannya terlihat seperti ini:
sumber
Memproses 3, 815
833835876879byteDisimpan dua byte berkat @ZacharyT dengan menghapus tanda kurung yang tidak perlu
Jalankan program ini seperti ini:
(fungsi
s
mengambil afloat[][]
). Ini pada dasarnya adalah testcase # 3, tetapi dikalikan dengan 100 agar sesuai dengan jendela.Beberapa hal yang perlu diperhatikan:
pushMatrix()
danpopMatrix()
beroperasi hanya dapat menampung 32 matriks.Contoh output untuk testcase di atas.
Jika Anda ingin melihat output yang sudah diprogram, tambahkan baris ini tepat setelah
translate(w,w);
fungsi ins
.Dan ini memberi kita hasil ini:
Tanpa
f()
penjelasan dan penjelasan(mengandung kode debug juga)
Singkatnya, program mengirim dua "pencari", satu berjalan berlawanan arah jarum jam dan yang lainnya searah jarum jam. Masing-masing pencari menemukan kutub terdekat dan menggambar busur ke sana jika rantai cukup panjang, jika tidak, ia menggambar lingkaran. Setelah menggambar busur, ia mengirimkan pencari lain ke kutub itu dan proses berlanjut.
f()
berisi proses setiap pencari. Penjelasan yang lebih rinci akan datang segera setelah saya bermain golf ini lagi.sumber
L-d
?LOGO,
305298297293 byteCoba kodenya di FMSLogo.
Tentukan fungsi
draw
(golfed asd
) yang, diberikan input sebagai daftar koordinat kutub (misalnyadraw [[0 100] [100 100] [-200 100] [-100 -50][0 0]]
, akan menggambar pada layar hasilnya.Persyaratan:
[0 0]
harus dimasukkan dalam daftar kutub. Jika kode debug (draw pole) dihidupkan, maka[0 0]
harus menjadi item terakhir.x=0, y=-300
(seperti dalam deskripsi masalah)Kemungkinan pengoptimalan:
>=
dengan>
Kode golf:
Kode tidak digabung (
;
memulai komentar sebaris (digunakan untuk penjelasan), dan:
memulai nama variabel):sumber
Python 2 + PIL, 310 byte
Script membaca daftar poin dari stdin sebagai daftar bilangan kompleks.
sumber