首頁 > 後端開發 > Python教學 > 代碼的出現 &#- 天爪裝置

代碼的出現 &#- 天爪裝置

Barbara Streisand
發布: 2024-12-30 06:30:10
原創
1015 人瀏覽過

Advent of Code

第 13 天:爪子裝置(數學、數學和更多數學)。

解決方案連結

今天的挑戰是用 Python 完成的,但有所改變。做出此選擇是為了:
a) 測試我的 python / 了解更多 python
b) 今天看起來像是一個非常沉重的數學難題,所以覺得 Python 會是完美的,我沒有錯 - 它快如閃電。

歡迎來到今天的難題,數學課悲傷的臉,我不知道如何解決這個問題(第二部分),一開始我暴力破解,循環(最多100 次)直到找到正確的「路線」。

正如預期的那樣,第 1 部分效果很好。然而,對於第二部分,我知道情況不會如此,所以回去尋找數學方法,我有一種預感,這一定是團隊推動我們前進的方向。谷歌搜尋後,經過大量搜索,我發現了克萊默規則(老實說,我第一次聽說它)。

任務是:

按下按鈕計算獲得獎品的最低成本。

對於第 1 部分,確定是否可以透過按下按鈕到達目標,以及如果按下 100 次即可成功贏得的獎品的最高數量是多少,以及這樣做的成本。

對於第 2 部分,透過處理大座標偏移來優化效能,本質上消除了 100 次按鈕按下限制,並將獎品位置推入深淵。

解決方案

克萊默法則似乎是解決這個問題的絕佳方法,因為它可以讓您有效地求解描述如何移動爪子以在每台機器中獲得獎品的線性方程式。讓我們來分析一下克萊默規則適用的原因和方式:

問題分解

對於每台抓娃娃機,我們有兩個方程式:

方程式 1(取自按鈕 A):
a1 * A b1 * B = c1

方程式 2(來自按鈕 B):
a2 * A b2 * B = c2

其中a1b1是按鈕A沿X軸和Y軸的移動,A是按下A按鈕的次數,c1是目標位置在X 軸上(獎品位置)。

其中a2和b2是按鈕B沿X軸和Y軸的移動,B是按下B按鈕的次數,c2是Y軸上的目標位置(獎品位置)。

對於每台夾娃娃機,我們想要求解按下按鈕A 和B 的次數(需要按下按鈕A 和B 的次數),從而將夾娃娃與坐標(c1, c2) 處的獎品對齊在X 和Y 軸上。

為什麼克萊默規則有用

克萊默法則專門用來求解線性方程組。線性方程組只是一組兩個或多個共享公共變數的方程,目標是找​​到同時滿足所有方程的變數的值。

簡單來說:

想像你有多個方程式來描述事物之間的關係。

每個方程式都使用相同的變數(例如 x 和 y),並且您試圖找到這些變數的值,使所有方程式同時成立。

在這種情況下,每台機器的按鈕配置可以表示為 2x2 線性方程組,其中我們求解兩個未知數,A(按下按鈕 A)和 B(按下按鈕 B)。

開發人員如何知道將來使用克萊默規則?

方程組:開發人員要做的第一件事就是確定問題需要解線性方程組。

模式識別:開發人員認識到這是一個 2x2 系統,並且克萊默規則是解決該問題的直接方法。

*行列式與矩陣:*他們記得行列式可以用來解線性方程式中的未知數,如果行列式為零,則表示有問題(無解或無限解)。

簡單明了:克萊默法則提供了一種簡單、直接的方法來找出 A 和 B 的值,而不需要迭代方法或複雜的代數。

例:第一台夾娃娃機

按鈕動作及獎品位置如下:

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.
登入後複製
登入後複製

我們有方程組:

94 * A + 22 * B = 8400   (Equation for X-axis)
34 * A + 67 * B = 5400   (Equation for Y-axis)
登入後複製

第 1 步:計算行列式
主要決定因素 D:
行列式 D 使用下列公式計算:

D = a1 * b2 - a2 * b1
登入後複製

替換值:

D = (94 * 67) - (34 * 22)
D = 6298 - 748
D = 5550
登入後複製

A、D_x 的行列式:
接下來,我們使用以下公式計算行列式 D_x:

D_x = c1 * b2 - c2 * b1
登入後複製

替換值:

D_x = (8400 * 67) - (5400 * 22)
D_x = 562800 - 118800
D_x = 444000
登入後複製

B、D_y 的行列式:
現在,使用以下公式計算行列式 D_y:

D_y = a1 * c2 - a2 * c1
登入後複製

替換值:

D_y = (94 * 5400) - (34 * 8400)
D_y = 507600 - 285600
D_y = 222000
登入後複製

第 2 步:解 A 和 B
使用克萊默法則,我們現在解決 A 和 B:

A = D_x / D
B = D_y / D
登入後複製

求解 A:

A = 444000 / 5550
A = 80
登入後複製

求解 B:

B = 222000 / 5550
B = 40
登入後複製

第 3 步:檢查有效整數
A和B都是整數,也就是說這個夾娃娃機是有可能中獎的。

第 4 步:計算總成本
按下按鈕 A 的成本是 3 個令牌,按下按鈕 B 的成本是 1 個令牌。所以,贏得獎品的總成本是:

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.
登入後複製
登入後複製

第 2 部分 - 使用相同的邏輯,唯一的區別是我們在獎品座標的 X 軸和 Y 軸上添加 10^13 偏移量。

我知道這很多,並且相信我也花了很多時間來理解/理解它。很高興能與您聊天,您可以透過 Twitter 與我聯繫。

以上是代碼的出現 &#- 天爪裝置的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板