跳转到主要内容

未提供项目描述

项目描述

哇,整理这个包,这是一个并行混乱!

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 (11.3 kB 查看哈希)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面