未提供项目描述
项目描述
哇,整理这个包,这是一个并行混乱!
Bagnon是由Jaliborc为World of Warcraft (WOW)制作的插件,其中包含排序功能。这个挑战的目标是使这种排序更快。胜者将被移植到Lua,并提议合并到WildPants排序库,该库是Bagnon和Combductor所依赖的。这将影响许多WOW玩家。请不要用劣质的算法骚扰Jaliborc,这个人很忙。
- 在WOW中,最多有5个包,每个包有若干个槽位。从20个槽位(仅仅是起始包)到164个槽位(20 + 4 = 36槽位包)。还有一个98槽位的包(试剂库),以及银行本身,其空间从28(起始银行空间)到最大280个槽位(28 + 7 = 36槽位包)。
- 包和物品有类型:有只能包含一种对象的特殊包。例如,箭袋只能放箭,但箭可以存放在任何地方。
- 物品有堆叠大小:200支箭的堆占用一个槽位,但一把剑只占用一个槽位。
- 物品不能在同一个槽位中堆叠:一支单独的箭占用整个槽位。
Bagnon通过创建一个可以排序的单个包来隐藏这些信息。银行包和试剂包的排序不如玩家包频繁,且独立于玩家包。
为了整理包,需要移动物品。移动是通过调用WOW API来完成的。
- 如果槽位不接受此类对象,移动操作可能会失败。
- 将某物移动到已存在其他物品的槽位会反转物品位置,如果其中一个槽位不接受这些类型的物品,则可能会失败。
- 将可堆叠的物品从槽位A移动到存在相同对象的槽位B,会使槽位B中的堆叠变大,所有溢出的物品都将进入槽位A(槽位A可能会因此变为空)。
移动物品需要服务器调用,是两个限制因素之一。我们称这个为serverDelayTime
。如果您尝试在serverDelayTime
之前再次移动物品,它将失败。
排序可以并行化:每次serverDelayTime
,只要没有任何操作作用于其中的任何物品,就可以交换多个物品的位置。尽管一些客户端在同时移动过多对象时可能会冻结。这可能会因客户端的PC性能而异。我们将第二个限制因素称为maxConcurrentMove
(值从一次移动两个对象到同时移动最大银行中的每个对象为140)。
输入:包含其id、背包、槽位、堆叠中物品数量和类型的物品列表。包含其数量、接受的类型和大小背包。
items = [
{"id": 1, "bag": 1, "slot": 4, "stack": 20, "type": 0},
{"id": 5, "bag": 1, "slot": 5, "stack": 200, "itemCount": 187, "type": 3},
{"id": 5, "bag": 1, "slot": 15, "stack": 200, "itemCount": 25, "type": 3},
]
bags = [
{"bag": 0, "types": [0, 1, 2, 3], "size": 20},
{"bag": 1, "types": [0, 1, 2, 3], "size": 16},
{"bag": 2, "types": [0, 1, 2, 3], "size": 14},
{"bag": 2, "types": [3], "size": 14},
]
输出:包含tick调用的列表。每个tick是一个移动调用的列表。
[
[
"b1 s4 => b0 s0",
"b1 s5 => b2 s0",
"b1 s15 => b2 s0", # This stack overflow, and 12 items will stay in b1 s15
],
[
"b1 s15 => b2 s1",
],
]
应用所有移动必须返回排序后的背包。即:物品的id从小到大。
这是一个实际世界的算法,所以当然,理论上的更快算法获胜!目标是尽可能少地在serverDelayTime
的ticks中排序背包,同时遵守maxConcurrentMove
限制,并且不将任何物品移动到禁止的背包中。对于相同数量的ticks,获胜者是移动调用最少的。
项目详情
关闭
code-golf-bagnon-sort-0.0.1.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bce263a25a0815dc5d5ced70eabb4f3ba225cd142ea1a5769288afdb74f1fa52 |
|
MD5 | b48396b22d3e9270fafc72489dc1971c |
|
BLAKE2b-256 | 3d3da74568ecef3f58983a752278716584bbb403b78e9c13d1b0e914f538a42c |