問題
固定サイズのチャンクにデータを分割するのは、プログラムが結果をページ分けしたり、データベースへの書き込みをまとめたり、データをパケットで送ったりするときによく使われます。
リストとチャンクサイズが与えられたら、リストを size 個ずつの連続したチャンクに、順番どおりに分割してください。最後のチャンクには残りすべてが入り、短くなってもかまいません。
split_into_chunks(values, size) を実装してください。
Input
values: 分割するリスト。
size: チャンクサイズ。
Output
チャンクのリストを返してください。空のリストならチャンクはありません。
制約
0 ≤ 値の数 ≤ 10,000
1 ≤ size ≤ 10,000
例
入力:
size = 3
values = [1, 2, 3, 4, 5, 6, 7]
期待される出力:
expected = [
[1, 2, 3],
[4, 5, 6],
[7]
]
入力:
long long size = 3;
std::vector<long long> values = {1, 2, 3, 4, 5, 6, 7};
期待される出力:
std::vector<std::vector<long long>> expected = {
{1, 2, 3},
{4, 5, 6},
{7}
};
入力:
long size = 3;
long[] values = new long[] {1, 2, 3, 4, 5, 6, 7};
期待される出力:
long[][] expected = new long[][] {
new long[] {1, 2, 3},
new long[] {4, 5, 6},
new long[] {7}
};
解説
3個ずつのグループ: [1, 2, 3] と [4, 5, 6]、そして残りの 7 が最後の短いチャンクになります。
入力:
size = 5
values = [8, 9]
期待される出力:
expected = [
[8, 9]
]
入力:
long long size = 5;
std::vector<long long> values = {8, 9};
期待される出力:
std::vector<std::vector<long long>> expected = {
{8, 9}
};
入力:
long size = 5;
long[] values = new long[] {8, 9};
期待される出力:
long[][] expected = new long[][] {
new long[] {8, 9}
};
解説
size がリストより大きいので、すべてが 1 つのチャンクに収まります: [[8, 9]].
解き方のヒント
まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。
ヒント 1
開始位置は 0、size、2·size … です。
ヒント 2
各開始位置から start + size までのスライスを取ります。
ヒント 3
最後のスライスは短くなることがあり、空のリストからはチャンクができません。
目安の計算量
時間 O(n)、追加メモリ O(n)
参考資料
この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。