在 28 张专辑中分发我的硬币 collection
Distributing my coin collection over 28 albums
我有一枚硬币 collection,我想将它 collection 均匀地(或尽可能均匀地)分配到我的相册中。硬币在 353 sheets 中,有 28 张专辑,因此每张专辑需要 12.81 sheets。有 193 个国家,但并非每个国家都拥有相同数量的 sheet。阿富汗有 1 个 sheet,阿尔巴尼亚也有。阿尔及利亚有两个sheet,安道尔和安哥拉都有1个sheet,阿根廷有6个sheet等等。
基本上可以归结为:我有一个 collection 的 193 个号码(每个国家的 sheet 个号码),这些号码需要分成 28 个 collections。每个 collection 的总和应尽可能接近。有两个重要的限制。 collection 的最大数字总和为 15,并且数字的顺序不能更改。这是 collection:
{1,1,2,1,1,6,1,1,6,4,1,2,2,1,1,1,8,1,1,1,1,1,1,5,1,1,1,3,1,1,1,1,1,1,2,2,2,1,2,1,2,2,2,3,1,2,5,1,2,1,2,2,4,1,1,1,1,2,2,1,1,2,3,1,1,1,2,2,5,2,2,1,1,1,1,2,4,2,2,2,1,3,2,3,5,2,3,2,2,3,2,1,1,1,1,1,1,1,1,1,2,3,1,1,1,2,1,3,1,2,3,1,2,1,3,1,1,1,2,1,2,1,1,2,1,3,1,1,2,2,1,2,3,3,5,4,1,1,1,3,1,1,1,2,1,2,2,1,1,2,1,1,1,1,1,6,1,1,6,3,1,3,2,1,1,2,1,3,1,1,1,1,4,1,1,2,4,1,1,2,1,3,1,1,3,3,1,1,1,1,5,1,2}
如果我手动完成,结果会是这样的:
1. {1,1,2,1,1,6,1,1} = 14
2. {6,4,1,2} = 13
3. {2,1,1,1,8} = 13
4. {1,1,1,1,1,1,5,1,1} = 13
5. {1,3,1,1,1,1,1,1,2} = 12
6. {2,2,1,2,1,2,2} = 12
7. {2,3,1,2,5} = 13
8. {1,2,1,2,2,4} = 12
9. {1,1,1,1,2,2,1,1,2} = 12
10. {3,1,1,1,2,2,5} = 15
11. {2,2,1,1,1,1,2} = 10
12. {4,2,2,2,1,3} 14
13. {2,3,5,2} = 12
14. {3,2,2,3,2} = 12
15. {1,1,1,1,1,1,1,1,1,2} = 11
16. {3,1,1,1,2,1,3,1} = 13
17. {2,3,1,2,1,3} = 12
18. {1,1,1,2,1,2,1,1,2} = 12
19. {1,3,1,1,2,2,1,2} = 13
20. {3,3,5} = 11
21. {4,1,1,1,3,1,1,1} = 13
22. {2,1,2,2,1,1,2,1,1} = 13
23. {1,1,1,6,1,1} = 11
24. {6,3,1,3} = 13
25. {2,1,1,2,1,3,1,1,1} = 13
26. {1,4,1,1,2,4} = 13
27. {1,1,2,1,3,1,1,3} = 13
28. {3,1,1,1,1,5,1,2} = 15
我真的不知道我应该如何在代码中做到这一点。有人能指出我正确的方向吗?非常感谢!
我同意@Peter Csala 的观点。
这可以通过示例使用 PowerShell 解决。由您决定如何启动此脚本以查看结果。
$x = @(1,1,2,1,1,6,1,1,6,4,1,2,2,1,1,1,8,1,1,1,1,1,1,5,1,1,1,3,1,1,1,1,1,1,2,2,2,1,2,1,2,2,2,3,1,2,5,1,2,1,2,2,4,1,1,1,1,2,2,1,1,2,3,1,1,1,2,2,5,2,2,1,1,1,1,2,4,2,2,2,1,3,2,3,5,2,3,2,2,3,2,1,1,1,1,1,1,1,1,1,2,3,1,1,1,2,1,3,1,2,3,1,2,1,3,1,1,1,2,1,2,1,1,2,1,3,1,1,2,2,1,2,3,3,5,4,1,1,1,3,1,1,1,2,1,2,2,1,1,2,1,1,1,1,1,6,1,1,6,3,1,3,2,1,1,2,1,3,1,1,1,1,4,1,1,2,4,1,1,2,1,3,1,1,3,3,1,1,1,1,5,1,2)
$sum = 0
$cols = [System.Collections.Generic.List[System.Collections.Generic.List[System.Int32]]]::new()
$col = [System.Collections.Generic.List[System.Int32]]::new();
for($i=0; $i -lt $x.Count - 1; $i++) {
$sum += $x[$i]
if ($sum + $x[$i+1] -gt 15) {
$cols.Add($col)
$col = [System.Collections.Generic.List[System.Int32]]::new();
$sum = 0;
} else {
$col.Add($x[$i])
}
}
for($i=0; $i -lt $cols.Count; $i++) {
Write-Host "Collection $i : $($cols[$i] -join ',')"
}
我有一枚硬币 collection,我想将它 collection 均匀地(或尽可能均匀地)分配到我的相册中。硬币在 353 sheets 中,有 28 张专辑,因此每张专辑需要 12.81 sheets。有 193 个国家,但并非每个国家都拥有相同数量的 sheet。阿富汗有 1 个 sheet,阿尔巴尼亚也有。阿尔及利亚有两个sheet,安道尔和安哥拉都有1个sheet,阿根廷有6个sheet等等。
基本上可以归结为:我有一个 collection 的 193 个号码(每个国家的 sheet 个号码),这些号码需要分成 28 个 collections。每个 collection 的总和应尽可能接近。有两个重要的限制。 collection 的最大数字总和为 15,并且数字的顺序不能更改。这是 collection:
{1,1,2,1,1,6,1,1,6,4,1,2,2,1,1,1,8,1,1,1,1,1,1,5,1,1,1,3,1,1,1,1,1,1,2,2,2,1,2,1,2,2,2,3,1,2,5,1,2,1,2,2,4,1,1,1,1,2,2,1,1,2,3,1,1,1,2,2,5,2,2,1,1,1,1,2,4,2,2,2,1,3,2,3,5,2,3,2,2,3,2,1,1,1,1,1,1,1,1,1,2,3,1,1,1,2,1,3,1,2,3,1,2,1,3,1,1,1,2,1,2,1,1,2,1,3,1,1,2,2,1,2,3,3,5,4,1,1,1,3,1,1,1,2,1,2,2,1,1,2,1,1,1,1,1,6,1,1,6,3,1,3,2,1,1,2,1,3,1,1,1,1,4,1,1,2,4,1,1,2,1,3,1,1,3,3,1,1,1,1,5,1,2}
如果我手动完成,结果会是这样的:
1. {1,1,2,1,1,6,1,1} = 14
2. {6,4,1,2} = 13
3. {2,1,1,1,8} = 13
4. {1,1,1,1,1,1,5,1,1} = 13
5. {1,3,1,1,1,1,1,1,2} = 12
6. {2,2,1,2,1,2,2} = 12
7. {2,3,1,2,5} = 13
8. {1,2,1,2,2,4} = 12
9. {1,1,1,1,2,2,1,1,2} = 12
10. {3,1,1,1,2,2,5} = 15
11. {2,2,1,1,1,1,2} = 10
12. {4,2,2,2,1,3} 14
13. {2,3,5,2} = 12
14. {3,2,2,3,2} = 12
15. {1,1,1,1,1,1,1,1,1,2} = 11
16. {3,1,1,1,2,1,3,1} = 13
17. {2,3,1,2,1,3} = 12
18. {1,1,1,2,1,2,1,1,2} = 12
19. {1,3,1,1,2,2,1,2} = 13
20. {3,3,5} = 11
21. {4,1,1,1,3,1,1,1} = 13
22. {2,1,2,2,1,1,2,1,1} = 13
23. {1,1,1,6,1,1} = 11
24. {6,3,1,3} = 13
25. {2,1,1,2,1,3,1,1,1} = 13
26. {1,4,1,1,2,4} = 13
27. {1,1,2,1,3,1,1,3} = 13
28. {3,1,1,1,1,5,1,2} = 15
我真的不知道我应该如何在代码中做到这一点。有人能指出我正确的方向吗?非常感谢!
我同意@Peter Csala 的观点。 这可以通过示例使用 PowerShell 解决。由您决定如何启动此脚本以查看结果。
$x = @(1,1,2,1,1,6,1,1,6,4,1,2,2,1,1,1,8,1,1,1,1,1,1,5,1,1,1,3,1,1,1,1,1,1,2,2,2,1,2,1,2,2,2,3,1,2,5,1,2,1,2,2,4,1,1,1,1,2,2,1,1,2,3,1,1,1,2,2,5,2,2,1,1,1,1,2,4,2,2,2,1,3,2,3,5,2,3,2,2,3,2,1,1,1,1,1,1,1,1,1,2,3,1,1,1,2,1,3,1,2,3,1,2,1,3,1,1,1,2,1,2,1,1,2,1,3,1,1,2,2,1,2,3,3,5,4,1,1,1,3,1,1,1,2,1,2,2,1,1,2,1,1,1,1,1,6,1,1,6,3,1,3,2,1,1,2,1,3,1,1,1,1,4,1,1,2,4,1,1,2,1,3,1,1,3,3,1,1,1,1,5,1,2)
$sum = 0
$cols = [System.Collections.Generic.List[System.Collections.Generic.List[System.Int32]]]::new()
$col = [System.Collections.Generic.List[System.Int32]]::new();
for($i=0; $i -lt $x.Count - 1; $i++) {
$sum += $x[$i]
if ($sum + $x[$i+1] -gt 15) {
$cols.Add($col)
$col = [System.Collections.Generic.List[System.Int32]]::new();
$sum = 0;
} else {
$col.Add($x[$i])
}
}
for($i=0; $i -lt $cols.Count; $i++) {
Write-Host "Collection $i : $($cols[$i] -join ',')"
}