Задача состоит в том, чтобы создать алгоритм для генерации подмножества чисел определенного размера в последовательности, основанной на текущей позиции в этой последовательности.
Во время навигации по многим страницам контента на занятом сайте, таком как Qaru или Digg, часто желательно дать пользователю возможность быстро перейти на первую страницу, последнюю страницу или конкретную страницу, которая находится рядом с текущей страницы, которую они просматривают.
Требования
- Всегда отображаются номера последних и последних страниц.
- Подмножество номеров страниц будет содержать текущий номер страницы а также номера страниц до и/или после него (в зависимости от текущей страницы)
- Подмножество номеров страниц будет
всегда должно быть фиксированное количество страниц и
никогда не может превышать
это фиксированное число, если:
-
totalPages < fixedWidth
-
- Позиция текущей страницы
число в подмножестве фиксировано
если:
-
1 <= currentPage < (fixedWidth - defaultPostion)
или -
(totalPages - currentPage) < (fixedWidth - defaultPostion)
-
- Выход должен указывать, когда есть разница больше 0 между первым страницы данных и первой страницы подмножество, а также между последняя страница подмножества и последняя страница данных. Этот индикатор должен появиться не более одного раза в любом положении.
Если вы еще не можете это сделать, взгляните на свой профиль в разделе вопросов/ответов. Если у вас более 10 одинаковых, вы должны увидеть пейджинговые ссылки внизу, которые генерируются именно таким образом. Это или прокрутите вниз http://digg.com и наблюдайте за их пейджинговым контролем.
Примеры
Все примеры предполагают размер подмножества 5 и текущую страницу в позиции 3, но эти
должен быть настроен в вашем решении. ...
указывает промежуток между номерами страниц, [x]
указывает текущую страницу.
Текущая страница: 1 из 30
Выход: [x][2][3][4][5]...[30]
Текущая страница: 2 из 30
Выход: [1][x][3][4][5]...[30]
Текущая страница: 13 из 30
Выход: [1]...[11][12][x][14][15]...[30]
Текущая страница: 27 из 30
Выход: [1]...[25][26][x][28][29][30]
Текущая страница: 30 из 30
Выход: [1]...[26][27][28][29][x]
Текущая страница: 3 из 6
Выход: [1][2][x][4][5][6]
Текущая страница: 4 из 7
Выход: [1][2][3][x][5][6][7]
Дополнительные разъяснения
- Первая и последняя страницы не учитываются
numberOfPages
, если они не являются последовательно частьnumberOfPages
, как в[1][x][3][4][5]...[30]
или[1]...[26][27][28][x][30]
, но не в[1]...[8][9][x][11][12]...[30]
- Не следует включать индикатор пробелов, если расстояние
между концом подмножества и первым
или последняя страница меньше 1. Таким образом, возможно
иметь неразрывную последовательность страниц до
fixedWidth + 2
, как в[1][2][3][x][5][6]...[15]
или[1][2][3][x][5][6][7]
Решения на всех языках приветствуются.
Удачи!