#board-game #max-score #ticket-to-ride

bin+lib ticket2ride

一个小程序,用于计算 Ticket to Ride Europe 游戏的理论最高分

6 个版本

0.3.1 2021 年 11 月 7 日
0.3.0 2021 年 11 月 3 日
0.2.8 2021 年 11 月 1 日
0.2.7 2021 年 10 月 31 日

#37 in #board-game

Apache-2.0

45KB
899

Ticket2ride 项目

目的

这个项目最初是一个思维练习,当我问自己这个游戏的理论最高分是多少。在我开始之前,我在几个地方看到了关于高分路线的看法,但没有证据表明这些是最佳解决方案。所以我告诉自己,这是一个很好的项目,可以用来提高我在 Rust 中编程技能和探索解决这个问题的算法。

架构

这是第一次尝试,没有使用特定的算法逻辑,基本上只用了暴力搜索。

用户在执行命令行程序时,可以使用 -c--city 选项为算法提供起始城市。如果没有提供城市或提供的城市不存在,则默认使用爱丁堡。

程序执行包含两个步骤。第一步,从起始城市开始探索所有可能的路线。第二步,对所有的这些可能路线进行评分,然后找到评分最高的路线。

程序的正确性尚未确定。它似乎可以创建有效的路线,并且在修复一个逻辑错误后,评分是正确的,考虑到

  • 一张大票
  • 所有覆盖的小票
  • 连接路线使用的火车的分数
  • 10 分的特快列车加分
  • 3 个未使用的车站的 12 分

此外,我猜由于使用了 HashMap,每次计算的路线数量不同。我的推理是,由于 HashMap 不是有序的,每次存储在内存中的方式都是任意的一种,因此计算的路线也有所不同。也许我的逻辑中存在一些错误,需要检查。

一个最后的考虑是,所有路线都从起始城市开始,没有创建起始城市位于路线中间的路线。

未来的考虑

我将来可以做的事情

  • 添加路线的颜色
  • 尝试不同的算法遍历网络
  • 使用车站来满足更多的票

依赖项

~3.5MB
~55K SLoC