Скрипт сортировки по Y, затем по X (для Y с разницей меньше $limit)
LOGCLEAR
// Допустим координаты цифр хранятся в массиве X, Y
// 92,75 // цифра 2
// 100,52 // цифра 5
// 130,50 // цифра 3
STRSEPARATE("92:75:100:52:130:50", ":", $corr)
// Какие это цифры в другом массиве (в том же порядке)
STRSEPARATE("2:5:3", ":", $num)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUB(LOG_ARR) //=================================================================
//LOGWRITE("Размер массива: ", ARRSIZE($corr))
FOR($INARR=0, $INARR < ARRSIZE($corr), 2)
LOGWRITE($corr[$INARR], " - ",$corr[$INARR+1])
END_CYC
LOGWRITE("Порядок num: ", $num[0], $num[1], $num[2])
LOGWRITE(" ")
END_SUB
SUB(sort_x, $st, $en) //========================================================
//LOGWRITE("$st / $en ", $st, " / ", $en)
IF($st ! $en)
FOR($a=$st, $a < ($en-2), 2)
$min = $corr[$a]
$ind = $a
FOR($b=$a+2, $b < $en, 2)
IF($corr[$b] < $min)
$min = $corr[$b]
$ind = $b
END_IF
END_CYC
$X = $corr[$ind]
$Y = $corr[$ind+1]
$N = $num[INT($ind/2)]
$corr[$ind] = $corr[$a]
$corr[$ind+1] = $corr[$a+1]
$num[INT($ind/2)] = $num[INT($a/2)]
$corr[$a] = $X
$corr[$a+1] = $Y
$num[INT($a/2)] = $N
END_CYC
END_IF
END_SUB
//==============================================================================
// сортируем массив по Y, попутно переставляя второй массив чтоб не потерять очерёдность
$len = ARRSIZE($corr)
LOG_ARR()
FOR($a=1, $a < ($len-2), 2)
$min = $corr[$a]
$ind = $a
FOR($b=$a+2, $b < $len, 2)
IF($corr[$b] < $min)
$min = $corr[$b]
$ind = $b
END_IF
END_CYC
$X = $corr[$ind-1]
$Y = $corr[$ind]
$N = $num[INT($ind/2)]
//LOGWRITE("$min = ", $min, " ", $X, " - ", $Y)
$corr[$ind-1] = $corr[$a-1]
$corr[$ind] = $corr[$a]
$num[INT($ind/2)] = $num[INT($a/2)]
$corr[$a-1] = $X
$corr[$a] = $Y
$num[INT($a/2)] = $N
END_CYC
LOG_ARR()
// сортируем по X, пары с одинаковым Y (в пределах 10)
$limit = 10
$start = 0
$end = 0
$old = $corr[1]
FOR($i=3, $i < ($len-2), 2)
IF(($corr[$i] - $old) < $limit)
$old = $corr[$i]
$end = $i + 1
ELSE
sort_x($start, $end)
$start = $i + 1
$end = $i + 1
END_IF
END_CYC
sort_x($start, $end)
LOG_ARR()
HALT
Лог:
11:55:50 92 - 75
11:55:50 100 - 52
11:55:50 130 - 50
11:55:50 Порядок num: 253
11:55:50
11:55:50 130 - 50
11:55:50 100 - 52
11:55:50 92 - 75
11:55:50 Порядок num: 352
11:55:50
11:55:50 100 - 52
11:55:50 130 - 50
11:55:50 92 - 75
11:55:50 Порядок num: 532
11:55:50