課題は、シーケンス内の現在の位置に基づいて、シーケンス内の数値の具体的なサイズのサブセットを生成するアルゴリズムを作成することです。
Stack Overflow や Digg のような忙しいサイトでコンテンツの多くのページをナビゲートしているときに、最初のページ、最後のページ、または現在のページに近い特定のページにすばやくジャンプする方法をユーザーに提供することが望ましいことがよくあります。見る。
要件
- 最初と最後のページ番号は常に表示されます
- ページ番号のサブセットには、現在のページ番号とその前後のページ番号が含まれます (現在のページによって異なります)。
- ページ番号のサブセットは常に固定ページ数であり、次の場合を除き、その固定数を超えたり下回ったりすることはありません。
totalPages < fixedWidth
- サブセット内の現在のページ番号の位置は、次の場合を除いて固定されています。
1 <= currentPage < (fixedWidth - defaultPostion)
また(totalPages - currentPage) < (fixedWidth - defaultPostion)
- 出力は、データの最初のページとサブセットの最初のページの間、およびサブセットの最後のページとデータの最後のページの間に0 より大きい差があることを示す必要があります。このインジケータは、いずれかの位置に最大 1 回表示する必要があります。
これをまだ想像できない場合は、質問/回答の下にあるスタック オーバーフロー プロファイルを見てください。どちらかが 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]
- サブセットのいずれかの端と最初または
最後のページと
fixedWidth + 2
の間の距離が 1 未満の場合、ギャップ インジケーターを含める必要はありません。[1][2][3][x][5][6]...[15]
[1][2][3][x][5][6][7]
あらゆる言語でのソリューションを歓迎します。
幸運を!