Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите понять задание. / 9 сообщений из 9, страница 1 из 1
22.08.2016, 20:42
    #39295775
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять задание.
Здравствуйте.

Сразу оговорюсь, что я НЕ прошу решения задания.

Мне нужно понять суть.
Вчитывался много раз и от условия какая то двойственность.
Пробовал связаться и уточнить моменты у постановщика задачи, но он молчит...

Эта "задачка" не новая, и возможно "стара как мир", и наверняка, какие-то варианты её решения можно найти на просторах сети.
Но это не мой метод - решить хочу самостоятельно.

Для наглядности, пункты задания я пронумерую, чтобы было удобнее ссылаться на непонятные места.

Вот условие:

Реализовать интерфейс механизма "умной" сортировки.

Код: java
1.
2.
3.
public interface IStringRowsListSorter {
    void sort(List<String[]> rows, int columnIndex);
}



Сортирует переданный список записей (каждая запись - набор колонок) таблицы по указанной колонке по следующим правилам:

1) в колонке могут быть null и пустые значения - строки с null-значениями должны быть первыми, затем строки с пустым значением, затем все остальные.

2) строка бьется на подстроки следующим образом: выделяем непрерывные максимальные фрагменты строки,
состоящие только из цифр, и считаем набором подстрок эти фрагменты и все оставшиеся от такого разбиения фрагменты строки

3) при сравнении строк осуществляется последовательное сравнение их подстрок до первого несовпадения,
если обе подстроки состоят из цифр - то при сравнении они интерпретируются как целые числа (вначале должно идти меньшее число), в противном случае - как строки.

4) сортировка должна быть устойчива к исходной сортировке списка - т.е., если строки (в контексте указанных правил сравнения) неразличимы, то сортировка не должна менять их местами.

rows список записей таблицы (например, результат sql select), которые нужно отсортировать по указанной колонке

columnIndex индекс колонки, по которой нужно провести сортировку

МОИ КОММЕНТАРИИ:

Пункт 1) абсолютно понятен - при любой сортировке сначала идут null, затем пустышки, потом всё остальное (это в принципе логично)

Пункт 2) для меня не совсем ясен: Что имеется в виду под "строкой"? - Это вся запись (т.е. набор колонок) или же это значение одного поля записи по которому надо сортировать?

Далее пункт 2) гласит: "выделяем непрерывные максимальные фрагменты строки, состоящие только из цифр" Что значит "максимальные"? Если будет такая строка: "12, ABCD, 3455667, 3A, DEF" - Я должен выделить "3455667" а "12" куда? Идет лесом?



Короче пункты 2 и 3 меня вводят в ступор. Если кто-то сможет показать набор строк под этот алгоритм, буду благодарен.
...
Рейтинг: 0 / 0
23.08.2016, 09:30
    #39295939
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять задание.
MAULER,

Напишите свою реализацию, отправьте заказчику с вопросами, исправьте если нужно.
Как-то так.

С уважением, Валентин
...
Рейтинг: 0 / 0
23.08.2016, 09:54
    #39295958
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять задание.
Насколько я понимаю этот аргумент

Код: java
1.
List<String[]> rows



семантически являет собой уже готовую таблицу. Что там выделять - непонятно.

В то-же время пункт (2) и (3) этому противоречат и вводят новые смысловые надстройки
над некими "строками" и "подстроками" и эмулируют свои таблицы.

И техно-писатель который писал это задание был неопытен и запутал нас еще больше.

Вобщем нужен диалог с тем кто это написал. Лучше всего на языке TDD и модульных тестов.
Тоесть написать утверждение и с просить автора - ЭТО ИМЕЛОСЬ в виду?
...
Рейтинг: 0 / 0
23.08.2016, 11:03
    #39296059
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять задание.
Пообщался на другом форуме с человеком, который мне разъяснил суть задания.
Признаться честно, оно понимается НЕ однозначно, и даже коряво. И если бы не помощь, то понять суть очень не просто.

Суть в том, чтобы "распарсить" на отдельные подстроки значение поля записи, индекс которого указан в качестве входного параметра.
К примеру есть запись, значение одного из полей которой равно: 111хх25dddd03.

В результате бьём его так: ["111", "xx", "25", "dddd", "03"]

Бьем поле второй записи : Исходное значение которого такое: bda777tt28d08fff
После парсинга имеем массив подстрок: ["bda", "777", "tt", "28", "d", "08", "fff"]

Теперь их сравниваем.
...
Рейтинг: 0 / 0
23.08.2016, 11:24
    #39296089
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять задание.
MAULERКороче пункты 2 и 3 меня вводят в ступор. Если кто-то сможет показать набор строк под этот алгоритм, буду благодарен.
В принципе задача называется в простонародье - "как windows файлы сортирует".
(Хотя там почти все настраиваемо и на самом деле Windows Explorer это делает не совсем так, как должен был бы согласно документации, но так уж повелось :) ).

Прин6цип сравнения прост как две копейки. Просто представьте себе что строки это имена файлов.

Итак берем строку из входного списка, например "aЯ23,5х3".
Пункт 2 заставляет разбить ее на упорядоченное множество элементов (состоящее из null (если вся строка такова),пустой строки (если вся строка такова), подстрок или чисел (целочисленных)) (и отдельного индекса в исходном множестве чтоб удовлетворить п.4).

Получаем что-то типа List<Comparable> ll = {"аЯ",Integer.valueOf(23),",",Integer.valueOf(5),"x",Integer.valueOf(3)}

Ну и дальше сравниваем первые элементы двух множеств (если оба null - равенство, иначе если один null неравенство, иначе если обе пустые равенство и т.д)
Пробегаем до неравенства или окончания множеств (если что-то осталось в одном из подмножеств неравенство).

Если после сравнения равенств все еще равенство - то по сохраненному id из оригинального списка.

Ну, вкратце, компаратор готов.

Как отсортировать при наличии компаратора - см Гугл. :)
...
Рейтинг: 0 / 0
23.08.2016, 12:27
    #39296164
Паша01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять задание.
я такие задачки во сне делаю
...
Рейтинг: 0 / 0
23.08.2016, 12:34
    #39296175
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять задание.
Сергей Арсеньев,

У меня вот эта запись не проходит:

Получаем что-то типа List<Comparable> ll ={"аЯ",Integer.valueOf(23),",",Integer.valueOf(5),"x",Integer.valueOf(3)}
...
Рейтинг: 0 / 0
23.08.2016, 13:27
    #39296231
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять задание.
MAULERУ меня вот эта запись не проходит:
И не должна. Там фраза: "что-то типа".

Вам надо самому понять, как приводить строку к списку.

Ибо MAULERя НЕ прошу решения задания
...
Рейтинг: 0 / 0
23.08.2016, 13:41
    #39296245
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять задание.
Сергей Арсеньев,

Да, всё верно.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите понять задание. / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]