解決方案連結
模擬機器人運動:
模擬首先解析機器人數據,其中包括機器人的初始位置和速度。每個機器人的資料都表示為一個元組 (p_x, p_y, v_x, v_y) - 沿 x 和 y 軸的位置和速度分量。
模擬函數使用以下公式計算 t 秒後機器人的新位置:
p_x = (p_x + t * v_x) % width p_y = (p_y + t * v_y) % height
公式考慮了機器人的運動,在每個時間步更新其位置,並在超出邊緣時環繞網格(由於模運算)。然後機器人會被放回網格上更新的位置。
象限計數:
在 t = 100 處模擬機器人後,程式碼計算網格四個像限中每個象限中的機器人數量。網格根據 middle_row_gap 和 middle_column_gap 劃分為象限,分別計算為網格寬度和高度的一半。
對於 100 秒後每個機器人的位置 (x, y),程式檢查機器人佔據哪個象限:
然後我們使用 Math.prod() 函數得到 4 象限總數的乘積。
我對此任務做了一些假設,例如形成的圖像將位於中間/集中。當機器人形成形狀時,它們必須全部凝聚在一起 - 形成樹。
機器人以可預測的方式移動,並且它們的位置可以隨著時間的推移形成特定的形狀。為了偵測「聖誕樹」模式,程式會尋找機器人聚集成類似樹形狀的緊密隊形的時間。該方法的重點是發現機器人何時聚集在網格的特定區域。
程式首先在所有機器人周圍定義一個大邊界框。隨著時間的推移,這個盒子的尺寸逐漸減少。這個想法是,隨著時間的推移,機器人將聚集成一個較小的區域。
對於每個時間步長(機器人的每個位置),程式會計算這個縮小的盒子內有多少機器人。它測量密度,即盒子內機器人的數量除以盒子麵積。盒子裡的機器人越多,密度就越高。
程式會追蹤密度最高的時間。當密度最大時,機器人排列得最緊密,這很可能是在它們形成可識別的形狀(聖誕樹)時發生的。
這個方法之所以有效,是因為「聖誕樹」模式會導致機器人聚集在網格的特定區域。透過縮小邊界框並計算該區域中機器人的密度,程式可以識別機器人何時形成這種緊湊的形狀。密度最高表示機器人的分組最緊密,對應聖誕樹的排列。
因此,密度最高的時間步是機器人創造聖誕樹圖案的時間。
一如既往,隨時在 Twitter 上聯繫和聊天
以上是代碼日的到來:廁所堡壘的詳細內容。更多資訊請關注PHP中文網其他相關文章!