【发布时间】:2020-08-25 15:34:39
【问题描述】:
我正在考虑挑战"Bringing a Gun to a Guard Fight" by Google Foobar(为方便起见,也在问题底部定义)。
我在链接的文章中得出了相同的结论,最好通过反映房间来解决问题。然而,文章建议我们首先生成一个镜像房间框,其中高度和宽度由我们可以在枪距离内向上和横向镜像房间的最大次数定义 (ceil((player_position + laser distance) / room_size))。然后,我们将删除所有对角线在框外的部分
但是,这很容易导致效率低下,因为我们必须生成比枪距离允许的更多的点。随着火炮距离的增加,这种低效率会增加。
但是,我无法找到解决此问题的任何方法。为问题生成分数的最佳方法是什么?
=================================
呃-哦 - 你被一名指挥官 Lambdas 精英守卫逼到了墙角! 幸运的是,你从一个废弃的哨所里抓到了一把光束武器 当你跑过车站时,你有机会 争取你的出路。但光束武器对 你和精英守卫一样:它的光束反射墙壁, 这意味着您必须非常小心地射击以避免 向自己弹射!
幸运的是,光束在之前只能行进一定的最大距离 变得太弱而无法造成伤害。你也知道,如果光束击中 拐角处,它会以完全相同的方向弹回。和的 当然,如果光束击中你或守卫,它会停止 立即(尽管很痛苦)。
写一个函数解(dimensions, your_position, guard_position, distance),它给出了一个由 2 个整数组成的数组,其宽度和高度为 房间,你的 x 和 y 坐标的 2 个整数数组 房间,一个由 2 个整数组成的数组,其中包含守卫的 x 和 y 坐标 房间,并返回一个整数的不同方向的数量, 考虑到最大距离,你可以开火击中精英守卫 光束可以传播。
房间的尺寸为整数 [1
例如,如果你和精英守卫被安置在一个房间里, 尺寸 [3, 2]、your_position [1, 1]、guard_position [2, 1] 和 最大拍摄距离为 4,您可以拍摄七种不同的 击中精英守卫的方向(作为来自您的矢量方位) 位置):[1, 0], [1, 2], [1, -2], [3, 2], [3, -2], [-3, 2] 和 [-3, -2]。作为具体例子,方位[1, 0]处的炮弹是距离为1的直线水平炮弹,方位角[-3,-2]处的炮弹 在击中前先从左壁反弹,然后从底壁反弹 精英后卫,总射门距离为 sqrt(13),射门为 轴承 [1, 2] 在击中精英之前仅从顶壁反弹 总射门距离为 sqrt(5) 的后卫。
测试用例 ========== 您的代码应通过以下测试用例。请注意,它也可能针对此处未显示的隐藏测试用例运行。
Python 案例
输入:solution.solution([3,2], [1,1], [2,1], 4) 输出:7
输入:solution.solution([300,275], [150,150], [185,100], 500) 输出: 9
【问题讨论】: