Skip to content

Latest commit

 

History

History
27 lines (17 loc) · 2.32 KB

README.md

File metadata and controls

27 lines (17 loc) · 2.32 KB

Robot

Разполагаме с много прост робот, който се движи по числова права. Няма значение дали правата е с цели или реални числа. По подразбиране роботът потегля от точка 0, но може да му бъде указана коя да е друга точка от правата за начало. Роботът може да изпълнява две прости команди – move, която го премества с 1 позиция надясно и mark, която го кара да съобщи текущите си координати.

Задачата е да се имплементира следният прост DSL:

Да се създаде функция robot, която приема един аргумент – началната позиция на робота (аргументът има стойност по подразбиране 0).

robot    # Роботът ще стартира от позиция 0
robot 42 # Роботът ще стартира от позиция 42

robot също така трябва да приема блок, който да съдържа серия от команди move и mark:

robot 42 do
  move
  mark
end

robot връща като резултат масив, съдържащ позициите, които роботът е маркирал:

robot { move; move; mark; move; mark; } # => [2, 3]
robot(9) { move; mark; mark; move; move; mark; } # => [10, 10, 12]
robot(1000000) {} # => []

Забранено е използването на глобални променливи. Не използвайте долари и други парични знаци. :-) Забранено е и използването на дефакто глобални променливи (дефинирани някъде извън robot, например) за съхранение на информацията.

Hint: разгледайте instance_eval и напишете помощен клас, който да помни информацията, необходима на робота.