любые идеи как построить логику

VadymS

Client
Регистрация
27.09.2015
Сообщения
92
Благодарностей
19
Баллы
8
Пробил графическую каптчу с перевёрнутыми картинками. На выходе имею цвета в RGB. Нужно взять номера двух максимально похожих строк.
Вот что на выходе:

143,91,34
204,148,46
203,148,100
172,176,170
170,125,128
170,126,128
138,105,102

Ломаю голову как определять две самые похожие строки.
Совпадения не точные, как видите, есть разбежности. В данном примере нужно чтобы определило, что самые похожие строки #5 и 6.

Любые идеи как это можно обработать.. Крайне признателен :-)
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Кладем в таблицу, где разделитель столбцов - запятая.
Далее берем первую строку и раскладываем значения в 3 переменные.
После берем вторую, третью и т.д. строки, и сравниваем с первой. Погрешность определяем самостоятельно.
Записываем результат.
 
  • Спасибо
Реакции: VadymS

VadymS

Client
Регистрация
27.09.2015
Сообщения
92
Благодарностей
19
Баллы
8
Спасибо за ответ!
Я наверное немного не доганяю именно что касается погрешности.
Строки в таблицу разложил - ок
Взял одну строку в три переменных 1a 1b 1c - ок
Взял вторую строку в три переменных 2a 2b 2c - ок
Сравниваем. Вычитаю 2a из 1a. если разница не больше +/- 2 (погрешность) то... установить значение переменной COMPARE 1
Если вторая и третьи пары переменных тоже в рамках погрешности... то увеличивать переменную COMPARE на 1.
Если в конце стравнения она равна 3 - то строки похожи.

Вроде как будет работать. Но сравнить все эти строки между собой... уфф... как громоздко.
Видимо другой логики не существует.
 
Последнее редактирование:

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Спасибо за ответ!
Я наверное немного не доганяю именно что касается погрешности.
Строки в таблицу разложил - ок
Взял одну строку в три переменных 1a 1b 1c - ок
Взял вторую строку в три переменных 2a 2b 2c - ок
Сравниваем. Вычитаю 2a из 1a. если разница не больше +/- 2 (погрешность) то... установить значение переменной COMPARE 1
Если вторая и третьи пары переменных тоже в рамках погрешности... то увеличивать переменную COMPARE на 1.
Если в конце стравнения она равна 3 - то строки похожи.

Вроде как будет работать. Но сравнить все эти строки между собой... уфф... как громоздко.
Видимо другой логики не существует.
Про погрешность Вы все правильно поняли.
Это читается "громоздко", а на деле, когда Вы начнете все это кубиками собирать, увидите, что их не так и много получится.
 
  • Спасибо
Реакции: VadymS

VadymS

Client
Регистрация
27.09.2015
Сообщения
92
Благодарностей
19
Баллы
8
Спасибо большое что уделили внимание :-)
Приступим..)))
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Спасибо большое что уделили внимание :-)
Приступим..)))
Небольшой подарок - решение на C# :-)
Код:
var table = project.Tables["Таблица 1"];
lock(SyncObjects.TableSyncer)
{
    for(int i=0; i < table.RowCount; i++)
    {
        var source = table.GetRow(i).ToArray();
      
        for (int d=0;d < table.RowCount;d++) {
            var comparison = table.GetRow(d).ToArray();
            if (i!=d) {
               if (Math.Abs(Convert.ToDouble(source[0])-Convert.ToDouble(comparison[0]))<3&Math.Abs(Convert.ToDouble(source[1])-Convert.ToDouble(comparison[1]))<3&Math.Abs(Convert.ToDouble(source[2])-Convert.ToDouble(comparison[2]))<3)
               {
                    return "Строка "+String.Join(",", table.GetRow(i))+" совпадает с "+String.Join(",", table.GetRow(d));
               }
            }
        }
    }
}
return "Нет совпадений";
 
  • Спасибо
Реакции: VadymS

VadymS

Client
Регистрация
27.09.2015
Сообщения
92
Благодарностей
19
Баллы
8
этот подарок превыше всех моих ожиданий)))
Спасибо Вам! :-)
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)