Rumah > pembangunan bahagian belakang > Tutorial Python > Kemunculan Kod &#- Day Claw Contraption

Kemunculan Kod &#- Day Claw Contraption

Barbara Streisand
Lepaskan: 2024-12-30 06:30:10
asal
1017 orang telah melayarinya

Advent of Code

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).

Tugasnya adalah untuk:

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.

Penyelesaian

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:

Pecahan Masalah

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.

Mengapa Peraturan Cramer Berguna

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).

Bagaimanakah pembangun tahu untuk masa depan menggunakan Peraturan Cramer ?

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.

Contoh: Mesin Cakar Pertama

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.
Salin selepas log masuk
Salin selepas log masuk

Kami mempunyai sistem persamaan:

94 * A + 22 * B = 8400   (Equation for X-axis)
34 * A + 67 * B = 5400   (Equation for Y-axis)
Salin selepas log masuk

Langkah 1: Kira Penentu
Penentu Utama D:
Penentu D dikira menggunakan formula:

D = a1 * b2 - a2 * b1
Salin selepas log masuk

Menggantikan nilai:

D = (94 * 67) - (34 * 22)
D = 6298 - 748
D = 5550
Salin selepas log masuk

Penentuan untuk A, D_x:
Seterusnya, kita mengira penentu D_x menggunakan formula:

D_x = c1 * b2 - c2 * b1
Salin selepas log masuk

Menggantikan nilai:

D_x = (8400 * 67) - (5400 * 22)
D_x = 562800 - 118800
D_x = 444000
Salin selepas log masuk

Penentuan untuk B, D_y:
Sekarang, kirakan penentu D_y menggunakan formula:

D_y = a1 * c2 - a2 * c1
Salin selepas log masuk

Menggantikan nilai:

D_y = (94 * 5400) - (34 * 8400)
D_y = 507600 - 285600
D_y = 222000
Salin selepas log masuk

Langkah 2: Selesaikan untuk A dan B
Menggunakan Peraturan Cramer, kami kini menyelesaikan A dan B:

A = D_x / D
B = D_y / D
Salin selepas log masuk

Selesaikan untuk A:

A = 444000 / 5550
A = 80
Salin selepas log masuk

Selesaikan untuk B:

B = 222000 / 5550
B = 40
Salin selepas log masuk

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.
Salin selepas log masuk
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan