背景
乐高生产的X-Large Grey Baseplate是一块大型积木板,宽 48 个螺柱,高 48 个螺柱,总面积为 2304 个螺柱。作为一个乐高狂热者,我制作了一些马赛克风格的设计模型,这些设计可以放在这些底板上,然后可能挂在墙上或展示中(参见:Android、梦剧场、银河帝国、口袋妖怪)。
挑战
我现在的挑战是以最低的成本购买这些设计。购买 2304 个单独的 1x1 板可能会变得昂贵。使用BrickLink,本质上是乐高的 eBay,我可以找到数据来确定给定颜色最便宜的零件。例如,0.10 美元(或每个螺柱 0.025 美元)的 1x4 板将比 2.16 美元(或每个螺柱 0.06 美元)的 6x6 板便宜。我们还可以确定可用于组合图像的所有可能板块的列表:
1x1
1x2
1x3
1x4
1x6
1x8
1x10
1x12
2x2 corner!
2x2
2x3
2x4
2x6
2x8
2x10
2x12
2x16
4x4 corner!
4x4
4x6
4x8
4x10
4x12
6x6
6x8
6x10
6x12
6x14
6x16
6x24
8x8
8x11
8x16
16x16
问题
对于这个问题,假设我们有一个所有盘子的列表、它们的颜色以及每个盘子的“重量”或成本。为了简单起见,我们甚至可以移除角落部分,但这将是一个有趣的挑战。您如何找到最便宜的组件来创建 48x48 图像?您如何找到使用最少组件(不一定是最便宜)的解决方案?如果我们将角件添加为允许件,您将如何解释它们?
我们可以假设我们有一些通过查询 BrickLink 获得的主列表,获取给定颜色的给定砖的平均价格,并将其作为元素添加到列表中。因此,不会仅仅因为它不是制造或出售的黑色 16x16 板。然而,16x16 亮绿色板的价值为 3.74 美元,按当前可用的平均价格计算。
我希望我对这个问题的描述足够简洁。这是我这几天一直在想的事情,我很好奇你们的想法。我将其标记为“面试问题”是因为它具有挑战性,而不是因为我通过面试得到了它(尽管我认为这将是一个有趣的问题!)。
编辑
这是2x2 角件和4x4 角件的链接。答案不一定需要考虑颜色,但它应该可以扩展以涵盖该场景。这种情况是,并非所有的盘子都提供所有颜色,所以想象我们有一个元素数组来标识一个盘子、它的颜色和该盘子的平均成本(一个例子如下)。感谢本杰明提供赏金!
1x1|white|.07
1x1|yellow|.04
[...]
1x2|white|.05
1x2|yellow|.04
[...]
此列表不会包含以下条目:
8x8|yellow|imaginarydollaramount
这是因为不存在 8x8 黄色板。该列表本身是微不足道的,只应被视为为解决方案提供参考;它不会影响解决方案本身。
编辑2
为了清楚起见,更改了一些措辞。