Hari 13: Claw Contraption (Matematik, Matematik dan banyak lagi Matematik).
Pautan ke Penyelesaian
Cabaran Hari Ini telah dilakukan dalam Python untuk perubahan. Pilihan ini dibuat untuk:
a) uji ular sawa saya / pelajari lebih lanjut ular sawa
b) ia kelihatan seperti teka-teki matematik yang sangat berat hari ini, jadi merasakan Python akan menjadi sempurna, dan saya TIDAK salah - ia sepantas kilat.
Selamat datang ke teka-teki hari ini, pelajaran Matematik muka sedih, saya tidak tahu bagaimana untuk menyelesaikan yang ini (Bahagian2), pada mulanya saya secara kasar memaksanya, berpusing ( maksimum 100 kali) sehingga menemui "laluan" yang betul.
Yang berfungsi dengan baik untuk bahagian 1 seperti yang dijangkakan. Walau bagaimanapun, untuk Bahagian 2 saya tahu ini tidak akan berlaku, jadi kembali dan mencari pendekatan Matematik, saya mempunyai firasat ini mesti menjadi apa yang pasukan itu mendorong kami ke arah itu. Googling sekitar, dan selepas banyak memburu saya terjumpa Peraturan Cramers (kali pertama saya mendengarnya tbh).
Kira kos minimum untuk mencapai hadiah menggunakan butang menekan.
Untuk Bahagian 1, tentukan sama ada anda boleh mencapai sasaran dengan menekan butang, dan jika ia adalah jumlah hadiah terbanyak yang anda boleh menangi dalam masa 100 tekanan dan kos untuk berbuat demikian.
Untuk Bahagian 2, optimumkan prestasi dengan mengendalikan offset koordinat besar pada dasarnya mengeluarkan had 100 butang tekan dan menolak lokasi hadiah ke dalam jurang.
Peraturan Cramer nampaknya merupakan pendekatan yang sangat baik untuk menyelesaikan masalah ini kerana ia membolehkan anda menyelesaikan persamaan linear dengan cekap yang menerangkan cara menggerakkan cakar untuk mencapai hadiah dalam setiap mesin. Mari kita pecahkan sebab dan cara Peraturan Cramer terpakai:
Untuk setiap mesin cakar, kami mempunyai dua persamaan:
Persamaan 1 (dari Butang A):
a1 * A b1 * B = c1
Persamaan 2 (dari Butang B):
a2 * A b2 * B = c2
Di mana a1 dan b1 ialah pergerakan di sepanjang paksi X dan Y untuk Butang A, A ialah bilangan kali butang A ditekan, dan c1 ialah kedudukan sasaran pada paksi X (lokasi hadiah).
dengan a2 dan b2 ialah pergerakan di sepanjang paksi X dan Y untuk Butang B, B ialah bilangan kali butang B ditekan dan c2 ialah kedudukan sasaran pada paksi Y (lokasi hadiah).
Untuk setiap mesin cakar, kami ingin menyelesaikan bilangan penekanan butang A dan B (bilangan kali butang A dan B perlu ditekan) yang akan menyelaraskan cakar dengan hadiah pada koordinat (c1, c2) pada paksi X dan Y.
Peraturan Cramer direka khusus untuk menyelesaikan sistem persamaan linear. Sistem persamaan linear hanyalah satu set dua atau lebih persamaan yang berkongsi pembolehubah sepunya dan matlamatnya adalah untuk mencari nilai bagi pembolehubah tersebut yang memenuhi semua persamaan sekaligus.
Dalam istilah yang lebih mudah:
Bayangkan anda mempunyai berbilang persamaan yang menerangkan bagaimana perkara berkaitan.
Setiap persamaan menggunakan pembolehubah yang sama (cth., x dan y), dan anda cuba mencari nilai untuk pembolehubah ini yang menjadikan semua persamaan benar pada masa yang sama.
Dalam kes ini, konfigurasi butang setiap mesin boleh diwakili sebagai sistem persamaan linear 2x2, di mana kita sedang menyelesaikan dua perkara yang tidak diketahui, A (tekanan butang A) dan B (tekanan butang B).
Sistem Persamaan: Perkara pertama yang dilakukan oleh pembangun ialah mengenal pasti bahawa masalah memerlukan penyelesaian sistem persamaan linear.
Pengiktirafan Corak: Pembangun menyedari bahawa ini ialah sistem 2x2 dan Peraturan Cramer ialah cara yang mudah untuk menyelesaikannya.
*Penentuan dan Matriks: * Mereka ingat bahawa penentu boleh digunakan untuk menyelesaikan yang tidak diketahui dalam persamaan linear, dan jika penentu adalah sifar, ia menunjukkan masalah (tidak atau penyelesaian tak terhingga).
Kesederhanaan dan Kejelasan: Peraturan Cramer menyediakan kaedah mudah dan langsung untuk mencari nilai A dan B tanpa memerlukan kaedah berulang atau algebra kompleks.
Pergerakan butang dan lokasi hadiah adalah seperti berikut:
Button A moves the claw X+94, Y+34. Button B moves the claw X+22, Y+67. Prize location is at X=8400, Y=5400.
Kami mempunyai sistem persamaan:
94 * A + 22 * B = 8400 (Equation for X-axis) 34 * A + 67 * B = 5400 (Equation for Y-axis)
Langkah 1: Kira Penentu
Penentu Utama D:
Penentu D dikira menggunakan formula:
D = a1 * b2 - a2 * b1
Menggantikan nilai:
D = (94 * 67) - (34 * 22) D = 6298 - 748 D = 5550
Penentuan untuk A, D_x:
Seterusnya, kita mengira penentu D_x menggunakan formula:
D_x = c1 * b2 - c2 * b1
Menggantikan nilai:
D_x = (8400 * 67) - (5400 * 22) D_x = 562800 - 118800 D_x = 444000
Penentuan untuk B, D_y:
Sekarang, kirakan penentu D_y menggunakan formula:
D_y = a1 * c2 - a2 * c1
Menggantikan nilai:
D_y = (94 * 5400) - (34 * 8400) D_y = 507600 - 285600 D_y = 222000
Langkah 2: Selesaikan untuk A dan B
Menggunakan Peraturan Cramer, kami kini menyelesaikan A dan B:
A = D_x / D B = D_y / D
Selesaikan untuk A:
A = 444000 / 5550 A = 80
Selesaikan untuk B:
B = 222000 / 5550 B = 40
Langkah 3: Semak Integer Sah
Kedua-dua A dan B adalah integer, yang bermaksud bahawa adalah mungkin untuk memenangi hadiah untuk mesin cakar ini.
Langkah 4: Kira Jumlah Kos
Kos untuk menekan Butang A ialah 3 token, dan kos untuk menekan Butang B ialah 1 token. Jadi, jumlah kos untuk memenangi hadiah ialah:
Button A moves the claw X+94, Y+34. Button B moves the claw X+22, Y+67. Prize location is at X=8400, Y=5400.
Bahagian2 - menggunakan logik yang sama cuma perbezaannya ialah kami menambah offset 10^13 pada kedua-dua paksi X dan Y bagi koordinat Hadiah.
Saya tahu itu banyak, dan percaya saya mengambil banyak masa untuk memahami / memahaminya juga. Senang dapat berbual , anda boleh menghubungi saya di Twitter.
Atas ialah kandungan terperinci Kemunculan Kod - Day Claw Contraption. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!