1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
local input = { { {1,2},{3,1},{2,4},{2,3} },
{{3, 4}, {2, 3}, {1, 5}, {2, 5}},
{ {2,2},{3,3},{4,4}},
{{0,1}, {1,0}, {0,2}, {2,0}},
{{5,6}, {6,5}, {5,4}, {4,5}}
}
local point = {{3,4},{2,5},{1,1},{0,0},{5,5}}
function Validpoint(X,Y)
local valid = { } -- put valid points in table
for i,v in ipairs(X) do
if v[1]==Y[1] then
local point_ = {}
point_["point"] = v
point_["idx"] = i
table.insert(valid,point_)
elseif v[2]==Y[2] then
local point_ = {}
point_["point"] = v
point_["idx"] = i
table.insert(valid,point_)
end
end
if #valid==0 then
print("no point shared: ", -1)
else
local closest = {}
for idx,m in ipairs(valid) do
local min = 0
local input_p = m["point"]
for i=1,2 do
min = min + math.abs( input_p[i]-Y[i])
end
local toinsert = {}
toinsert["min"] = min
toinsert["idx"] = m["idx"]
table.insert( closest, toinsert )
end
table.sort (closest, function (k1, k2) return k1.min < k2.min end ) -- sorting function for minimum value
local first = closest[1]["idx"]
print("Closest valid point with index: ", first-1) -- subtract for showing index
if(X[first]) then
for _,ii in ipairs(X[first]) do
io.write(ii," ")
end
end
io.write("\n")
end
end
for i=1,#input do
Validpoint(input[i],point[i])
end
|