parent
de0b3a8915
commit
64d9792aed
@ -0,0 +1,95 @@
|
||||
local robot = require('robot')
|
||||
local nav = require('nav')
|
||||
local io = require('io')
|
||||
|
||||
local filename = ...
|
||||
|
||||
if not filename then
|
||||
print('Usage: build_circle <filename>')
|
||||
print('The robot starts in the center')
|
||||
return 1
|
||||
end
|
||||
|
||||
|
||||
local file = io.open(filename, 'r')
|
||||
|
||||
if not file then
|
||||
print('File not found')
|
||||
return 2
|
||||
end
|
||||
|
||||
local radius = tonumber(file:read("*l"))
|
||||
|
||||
if not radius then
|
||||
print('Requires radius on the first line')
|
||||
return 3
|
||||
end
|
||||
|
||||
local rings = {}
|
||||
|
||||
-- parse file:
|
||||
for line in file:lines() do
|
||||
local ring = {}
|
||||
for c in string.gmatch(line, ".") do
|
||||
local n = tonumber(c)
|
||||
if c == 'X' then
|
||||
ring[#ring + 1] = c
|
||||
elseif n then
|
||||
ring[#ring + 1] = n
|
||||
else
|
||||
print('Invalid sequence: ' .. c)
|
||||
return 4
|
||||
end
|
||||
end
|
||||
rings[#rings + 1] = ring
|
||||
end
|
||||
|
||||
file:close()
|
||||
|
||||
local inverted = false
|
||||
|
||||
robot.select(1)
|
||||
|
||||
-- build:
|
||||
nav.forward(radius)
|
||||
robot.turnRight()
|
||||
for _, ring in ipairs(rings) do
|
||||
for _ = 1, 4 do
|
||||
inverted = false
|
||||
for i, n in ipairs(ring) do
|
||||
if n == 'X' then
|
||||
robot.turnRight()
|
||||
inverted = true
|
||||
else
|
||||
-- place sequence
|
||||
for _ = 1, n do
|
||||
robot.placeDown()
|
||||
if robot.count() == 0 then
|
||||
robot.select(robot.select() + 1) -- select the next item slot
|
||||
end
|
||||
nav.forward()
|
||||
end
|
||||
|
||||
if i ~= #ring then
|
||||
-- step level
|
||||
if not inverted then
|
||||
robot.turnRight()
|
||||
nav.forward()
|
||||
robot.turnLeft()
|
||||
else
|
||||
robot.turnLeft()
|
||||
nav.forward()
|
||||
robot.turnRight()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
robot.turnLeft()
|
||||
nav.forward()
|
||||
robot.turnRight()
|
||||
end
|
||||
|
||||
robot.turnRight()
|
||||
nav.forward(radius + #rings)
|
||||
robot.turnAround()
|
Loading…
Reference in new issue