Ambil kisi 2 dimensi dan gambar sejumlah segmen garis di atasnya untuk mewakili cermin. Sekarang pilih titik untuk meletakkan laser teoretis dan sudut untuk menentukan arah yang ditunjuknya. Pertanyaannya adalah: jika Anda mengikuti jalur sinar laser untuk jarak tertentu, di titik koordinat manakah Anda?
Contoh:
Dalam gambar ini, L
adalah lokasi laser, t
adalah sudut itu (diukur dari sumbu X positif), M1
, M2
, dan M3
semua cermin segmen garis, dan E
adalah titik pada jalur sinar laser setelah D = d1 + d2 + d3 + d4
unit, mulai dari L
.
Tujuan
Menulis program terpendek (dalam byte) yang output E
yang diberikan L
, t
, D
, dan daftar cermin.
(Gunakan http://mothereff.in/byte-counter untuk menghitung byte.)
Masukkan format
Masukan akan datang dari stdin dalam format:
Lx Ly t D M1x1 M1y1 M1x2 M1y2 M2x1 M2y1 M2x2 M2y2 ...
- Semua nilai-nilai akan mengambang poin pencocokan regex ini:
[-+]?[0-9]*\.?[0-9]+
. - Selalu ada satu ruang di antara setiap angka.
- Membutuhkan kutipan di sekitar input diperbolehkan.
t
dalam derajat, tetapi tidak harus dalam[0, 360)
kisaran. (Jika Anda lebih suka menggunakan radian saja, katakan saja dalam jawaban Anda.)D
mungkin negatif, secara efektif memutar laser 180 derajat.D
mungkin juga 0.- Mungkin ada banyak mirror yang berubah-ubah (termasuk tidak sama sekali).
- Urutan cermin seharusnya tidak masalah.
- Anda dapat berasumsi bahwa input akan datang dalam kelipatan 4 angka. misalnya
Lx Ly t
atauLx Ly t D M1x1
tidak valid dan tidak akan diuji. Tidak ada input sama sekali juga tidak valid.
Tata letak di atas mungkin dimasukkan sebagai:
1 1 430 17 4.8 6.3 6.2 5.3 1.5 4.8 3.5 6 6.3 1.8 7.1 3
(Perhatikan bahwa gambar digambar secara bebas dan nilai-nilai ini hanya perkiraan. Nilai input Martin Büttner dari
1 1 430 17 4.8 5.3 6.2 4.3 1.5 4.8 3.5 6 6.3 1.8 7.1 3
akan memberikan lebih banyak tabrakan meskipun tidak cocok dengan sketsa.)
Format output
Output harus masuk ke stdout dalam format:
Ex Ey
Ini juga mengapung dan mungkin dalam bentuk eksponensial.
Catatan
- Cermin dapat saling berpotongan.
- Kedua sisi cermin bersifat reflektif.
- Sinar mungkin mengenai cermin yang sama beberapa kali.
- Sinar itu berlangsung selamanya.
Case yang tidak terdefinisi
Anda dapat mengasumsikan bahwa kasus-kasus itu ada di mana
- laser dimulai pada segmen garis cermin
- sinar laser menyentuh titik akhir cermin
- sinar laser menyentuh persimpangan antara dua cermin
tidak terdefinisi dan tidak akan diuji. Program Anda dapat melakukan apa saja jika ini terjadi, termasuk melempar kesalahan.
Bonus
Hanya untuk bersenang-senang, saya akan memberikan 200 poin hadiah untuk pengajuan dengan suara terbanyak yang menghasilkan representasi grafis dari masalah (Anda bahkan bisa menulis skrip interaktif). Pengajuan bonus ini tidak perlu di-golf dan bisa ringan dengan bagaimana input dan output ditangani. Mereka berbeda dari kiriman golf yang sebenarnya tetapi keduanya harus diajukan dalam jawaban yang sama .
Catatan: Hanya mengirimkan jawaban bonus baik-baik saja, Anda tidak akan menjadi jawaban yang diterima. Untuk dapat diterima, Anda harus benar-benar mengikuti spesifikasi input / output (mis. Output hanya melibatkan Ex Ey
, bukan gambar), dan menjadi yang terpendek.