aboutsummaryrefslogtreecommitdiff
path: root/challenge-334/hvukman/lua/334_p2.lua
blob: 4bec919b4fb31abe6e00038e4c2657a2ae29c8fe (plain)
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