2014-08-31 70 views
8

您可能知道兩個機器人在需要編程時遇到問題。兩個機器人在一條線上

使用降落傘將兩個機器人從飛機上掉落並落在一條線上(離散位置),該降落傘留在着陸點。機器人都面向北方,它們之間距離未知,一個直接落在另一個的東面。

機器人現在被編程,使他們相遇。可以指示他們向左或向右移動到相鄰位置,並檢查當前位置是否存在降落傘。如果符合另一個機器人,那麼兩個機器人都會在那裏停下來,並從此過上幸福的生活。

降落傘檢查可能有條件地執行任意數量的指令,並且任何指令塊可能無條件地重複。寫下一個機器人可以同時遵循的程序以及他們遇到的那些門衛。

您必須創建一個適用於兩個機器人的通用算法(有點pleonastic),以確保機器人會見。他們把降落傘放在他們掉落的地方,他們可以檢查當前位置是否有降落傘。

原來的聲明在這裏:http://en.wikibooks.org/wiki/Puzzles/Logic_puzzles/Parachuted_Robots 還有一個我不明白的解決方案。如果有人能夠理解它,請幫我解釋一下。任何其他解決方案將不勝感激。

我對這個問題,首先想到的是對機器人進行編程,以選擇隨機先去左邊或右邊,然後做出類似指數搜索:先去2個職位,以正確的,那麼4到左等。如果在機器人發現第二個降落傘(被另一個機器人使用的降落傘)中的一個「行程」,機器人將只在該方向上搜索。這有意義嗎?

非常感謝!

回答

10

您的「第一個想法」解決方案也應該可以工作,但機器人會比the solution you cited at wikibooks需要一段時間。總括來說,在維基解決方法是:

  • 10轉到右邊
  • 20轉到左邊
  • 30轉到右邊
  • 40如果不降落傘GOTO 10
  • 50轉到右邊
  • 60 GOTO 50

如果你不認識語法,作者試圖模仿BASIC,其中數字1 0-60是行號,GOTO是代碼跳轉。

第10-40行兩個機器人都向右緩慢移動。「右,左,右」步驟減慢向右移動。它可能很容易就是「正確,等待」。第40行檢查降落傘。當兩臺機器人都在線上時,其中一臺機器人在另一臺機器人的左邊。左邊的機器人最終會找到另一個降落傘。權利永遠不會。當左邊的機器人找到合適的機器人的降落傘時,它會進入50-60行,在那裏它向右移動而不會減速。現在左邊的機器人比右邊的機器人移動得更快,左邊的機器人最終會迎頭趕上。

就我個人而言,我認爲你提出的算法更有趣,因爲這兩個機器人會來回擺動很多。在某種程度上,它是一種類似的算法,但每次減速都會呈線性增長。

+0

實際上,所提出的算法將無法使用所給出的指令來執行,因爲沒有辦法計算,因此無法進行指數搜索。 – 2015-10-31 07:58:25

+0

同意,OP的指數搜索建議需要計數器。這裏提出的線性搜索沒有。 – ldgabbay 2015-11-05 16:34:14

2

在我看來,你的算法應該工作。發佈的解決方案中的想法是,兩個機器人保持右移右側的模式,這意味着他們正在以一定速度前進。但是當左邊的機器人找到另一個的降落傘時,它會以更快的速度開始向右移動,因爲它不會一步一步地走到左邊,作爲其行走模式的一部分,但保持正確,最終趕上機器人對。

1

兩個機器人向左移動,直到右側機器人找到左側機器人的降落傘並開始向左側機器人衝刺。然後他們碰撞。

start: left 
     skipNext 
     goto start 
     goto moveLeftFast 

moveLeftFast: left 
       goto moveLeftFast 
+0

http://stackoverflow.com/a/33393887/1027842 - 這個答案其實是一樣的,但是我做的和你做的一樣 – Benjamin 2015-11-02 14:15:25

1

我做了這個:

start: left 
     skipNext 
     goto start 
fastL: left 
     left 
     goto fastL 

的想法很簡單:我們向左走一個位。其中一個機器人(右邊的那個)最終會撞上降落傘,然後它會跳出第一個迴路,然後進入第二個機器人,這使得他離開兩倍的速度。