﻿

# pathfind.lua

Dec 1st, 2020
713
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. --simulated program for OpenComputers Robots
2. -- OC:robot = require("robot")
3. cords = {112, 21,398, 0}
4. dest  = {103, 64, 85, 2}
5. steps = 0
6.
7. N=0 S=2 -- +z -z
8. E=1 W=3 -- +x -x
9.
10. function ChangeDirection(dir)
11.  while cords[4] ~= dir do
12.   robot.turnRight()
13.   cords[4] = (cords[4]+1)%4
14.  end
15. end
16.
17. function run() -- OC:*remove this line*
18.  while not(cords[1]==dest[1] and cords[2]==dest[2] and cords[3]==dest[3]) do
19.   print("\\My Cords are: ["..tostring(cords[1])..", "..tostring(cords[2])..", "..tostring(cords[3]).."] |  Dir:"..tostring(cords[4]))
20.   print(" \\My current distance is: "..tostring(math.sqrt(math.pow((dest[1]-cords[1]),2)+math.pow((dest[2]-cords[2]),2)+math.pow((cords[3]-dest[3]),2))))
21.   distsum = {
22.    {math.sqrt(math.pow((dest[1]-(cords[1]+1)),2)+math.pow((dest[2]- cords[2]   ),2)+math.pow((dest[3]- cords[3]   ),2)),"+x"},
23.    {math.sqrt(math.pow((dest[1]-(cords[1]-1)),2)+math.pow((dest[2]- cords[2]   ),2)+math.pow((dest[3]- cords[3]   ),2)),"-x"},
24.    {math.sqrt(math.pow((dest[1]- cords[1]   ),2)+math.pow((dest[2]-(cords[2]+1)),2)+math.pow((dest[3]- cords[3]   ),2)),"+y"},
25.    {math.sqrt(math.pow((dest[1]- cords[1]   ),2)+math.pow((dest[2]-(cords[2]-1)),2)+math.pow((dest[3]- cords[3]   ),2)),"-y"},
26.    {math.sqrt(math.pow((dest[1]- cords[1]   ),2)+math.pow((dest[2]- cords[2]   ),2)+math.pow((dest[3]-(cords[3]+1)),2)),"+z"},
27.    {math.sqrt(math.pow((dest[1]- cords[1]   ),2)+math.pow((dest[2]- cords[2]   ),2)+math.pow((dest[3]-(cords[3]-1)),2)),"-z"},
28.   } table.sort(distsum, function(a,b) return a[1]<b[1] end)
29.   print("  \\My best directions is on the "..tostring(distsum[1][2]).." axis distance: "..tostring(distsum[1][1]))
30.   i=1
31.   while true do
32.    if distsum[i][2] == "+x" then ChangeDirection(E); if robot.forward() == true then cords[1]=cords[1]+1; break end end
33.    if distsum[i][2] == "-x" then ChangeDirection(S); if robot.forward() == true then cords[1]=cords[1]-1; break end end
34.    if distsum[i][2] == "+y" then                     if robot.up()      == true then cords[2]=cords[2]+1; break end end
35.    if distsum[i][2] == "-y" then                     if robot.down()    == true then cords[2]=cords[2]-1; break end end
36.    if distsum[i][2] == "+z" then ChangeDirection(N); if robot.forward() == true then cords[3]=cords[3]+1; break end end
37.    if distsum[i][2] == "-z" then ChangeDirection(W); if robot.forward() == true then cords[3]=cords[3]-1; break end end
38.    print("  /My Cords are: ["..tostring(cords[1])..", "..tostring(cords[2])..", "..tostring(cords[3]).."] |  Dir:"..tostring(cords[4]))
39.    print(" /My current distance is: "..tostring(math.sqrt(math.pow((cords[1]-dest[1]),2)+math.pow((cords[2]-dest[2]),2)+math.pow((cords[3]-dest[3]),2))))
40.    i=i+1; print("/ Redirecting...")
41.   end steps=steps+1
42.  end ChangeDirection(dest[4])
43.  print("\\My Cords are: ["..tostring(cords[1])..", "..tostring(cords[2])..", "..tostring(cords[3]).."] | Dir:"..tostring(cords[4]))
44.  print(" \\Number of Steps: "..tostring(steps))
45. end -- OC:*from here and below remove*
46.
47. --simulating blocks
48. blocks = {
49.  ["111,22,390"] = 1, ["112,22,390"] = 1, ["112,22,389"] = 1,
50.  ["111,21,390"] = 1, ["112,21,390"] = 1, ["112,21,389"] = 1,
51.  ["111,20,390"] = 1, ["112,20,390"] = 1, ["112,20,389"] = 1,
52. }
53. --simulating robot
54. robot = {
55.  ["facing"] = 0,
56.  ["turnLeft"] =  function() robot.facing=(robot.facing-1)%4 end,
57.  ["turnRight"] = function() robot.facing=(robot.facing+1)%4 end,
58.  ["forward"] = function()
59.   for i,k in pairs(blocks) do
60.    if     robot.facing == E then
61.     if tostring(cords[1]+1)..","..tostring(cords[2])..","..tostring(cords[3]  ) == i then cords[1]=cords[1]+1; return false end
62.    elseif robot.facing == W then
63.     if tostring(cords[1]-1)..","..tostring(cords[2])..","..tostring(cords[3]  ) == i then cords[1]=cords[1]-1; return false end
64.    elseif robot.facing == N then
65.     if tostring(cords[1]  )..","..tostring(cords[2])..","..tostring(cords[3]+1) == i then cords[3]=cords[3]+1; return false end
66.    elseif robot.facing == S then
67.     if tostring(cords[1]  )..","..tostring(cords[2])..","..tostring(cords[3]-1) == i then cords[3]=cords[3]-1; return false end
68.    end
69.   end return true
70.  end,
71.  ["back"] = function()
72.   for i,k in pairs(blocks) do
73.    if     robot.facing == E then
74.     if tostring(cords[1]+1)..","..tostring(cords[2])..","..tostring(cords[3]  ) == i then cords[1]=cords[1]-1; return false end
75.    elseif robot.facing == W then
76.     if tostring(cords[1]-1)..","..tostring(cords[2])..","..tostring(cords[3]  ) == i then cords[1]=cords[1]+1; return false end
77.    elseif robot.facing == N then
78.     if tostring(cords[1]  )..","..tostring(cords[2])..","..tostring(cords[3]+1) == i then cords[3]=cords[3]-1; return false end
79.    elseif robot.facing == S then
80.     if tostring(cords[1]  )..","..tostring(cords[2])..","..tostring(cords[3]-1) == i then cords[3]=cords[3]+1; return false end
81.    end
82.   end return true
83.  end,
84.  ["up"] = function()
85.   for i,k in pairs(blocks) do
86.    if tostring(cords[1])..","..tostring(cords[2]+1)..","..tostring(cords[3]) == i then
87.     return false
88.    end
89.   end return true
90.  end,
91.  ["down"] = function()
92.   for i,k in pairs(blocks) do
93.    if tostring(cords[1])..","..tostring(cords[2]-1)..","..tostring(cords[3]) == i then
94.     return false
95.    end
96.   end return true
97.  end,
98. }
99. run()
RAW Paste Data