Sobsno there is such a gruel, as will be presented below. Improvement notes and constructive criticism are always held in high esteem. The question is, is there a possibility to determine the position of an element in an array, somehow without shamanism, and now for this I use something like:
function minArr(arr,value) -- ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ΅Π½ΠΈΡ Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ for i = 1, #arr do if(arr[i] == value) then return i end end end and the whole code:
points = {} -- ΡΠΎΠ±ΡΠ½Π° ΡΠΎΡΠΊΠΈ (Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°) --[[ ΡΠ°Π±Π»ΠΈΡΠ° ΡΠΎΡΠΊΠΈ ΡΠ²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ ΡΠ°Π±Π»ΠΈΡ Ρ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΡΡ
ΡΠΎΡΠ΅ΠΊ points[1] = point1 --> point1 = {}; point1.x = value point1.y = value points[2] = point2 --> point2 = {}; point2.x = value point2.y = value points[3] = point3 --> point3 = {}; point3.x = value point3.y = value ΠΈ ΡΠ΄ ]] local marks = {} -- ΠΌΠ΅ΡΠΊΠΈ ΡΠΎΡΠ΅ΠΊ Π·Π°Π½ΡΡΠ°/ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Π° for i = 1, #points do -- ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠ΅ ΡΠΎΡΠΊΠΈ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Ρ marks[i] = false end function path(arr) -- ΡΠΎΠ±ΡΠ½Π° ΡΡΠΊΠ°Π΅ΠΌ ΠΏΡΡΡ local p_arr = {} p_arr = arr local counter = 1 local minim = 0 local position = 0 local length_arr ={} -- ΡΠ°Π±Π»ΠΈΡΠ° Π΄Π»ΠΈΠ½ Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΈ while(counter ~= #p_arr ) do marks[counter] = true -- ΡΡΠ°Π·Ρ ΠΌΠ°ΡΠΊΠΈΡΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΡΡ ΡΠΎΡΠΊΡ ΠΊΠ°ΠΊ Π·Π°Π½ΡΡΡΡ for i = 1, #p_arr do -- ΠΏΠΎΡΡΠΈΡΠ°Π»ΠΈ, Π·Π°ΠΏΠΈΡΠ°Π»ΠΈ Π΄Π»ΠΈΠ½Ρ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΈ ΠΊ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌ length_arr[i] = leng(p_arr[counter], p_arr[i]) end minim = compare(length_arr) -- Π½Π°ΡΠ»ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΈΠ· ΠΏΠΎΡΡΠΈΡΠ°Π½ΡΡ
Π΄Π»ΠΈΠ½ position = minArr(length_arr,minim) -- Π½Π°ΡΠ»ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠ° Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π΄Π»ΠΈΠ½ if(marks[position] == true) then -- Π΅ΡΠ»ΠΈ Π²Π΅ΡΡΠΈΠ½Π° Π·Π°Π½ΡΡΠ° ΡΠΎ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΠΈΡΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠ° ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΉ while(marks[position] == true) do length_arr[position] = math.huge minim = compare(length_arr) position = minArr(length_arr,minim) end print("nearest to point " .. counter .. " is " .. position) else -- Π΅ΡΠ»ΠΈ Π²Π΅ΡΡΠΈΠ½Π° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Π° ΡΠΎ Π΅Π΄Π΅ΠΌ Π΄Π°Π»ΡΡΠ΅ print("nearest to point " .. counter .. " is " .. position) end counter = counter + 1 end end function minArr(arr,value) -- ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ΅Π½ΠΈΡ Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ for i = 1, #arr do if(arr[i] == value) then return i end end end function compare(arr) -- ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅Π³ΠΎ local minim = math.huge for i = 1, #arr do if minim > arr[i] then minim = arr[i] end end return minim end function leng(point1, point2) -- ΡΠ°ΡΡΠ΅Ρ Π΄Π»ΠΈΠ½Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΡΠΊΠ°ΠΌΠΈ local n = 0 n = math.sqrt(math.pow((point2.x - point1.x),2) + math.pow((point2.y - point1.y),2)) return n end