这项挑战的目标是编写一个程序或函数,以返回完成给定课程所需的最少罢工量。
输入项
- 课程的布局可以采用您喜欢的任何合适方式和格式。(从控制台读取,作为输入参数传递,从文件或任何其他多行字符串,字符串数组,二维字符/字节数组读取)。
- 球的起始位置和球洞也可以作为输入传递,不必从输入中解析。在测试用例中,它们包含在课程中,以确保对实际位置没有混淆。
- 您可以将输入字符重新映射到其他字符,只要它们仍可识别为不同的字符(例如,可打印的ASCII字符)。
输出量
- 对于以合理格式(字符串,整数,浮点数或描述结果的ku句)作为输入传递的任何路线,程序必须返回最低的得分(到达空洞所需的最少击球次数)
- 如果该课程无法克服,则返回
-1
(或您选择的其他任何不正确的值,对于可击败的课程都不会返回)。
例:
在此示例中,位置以从0开始,X / Y,从左到右,自上而下的方式标记-但是您可以使用任何喜欢的格式,因为结果无论如何都与格式完全无关。
输入:
###########
# ....#
# ...#
# ~ . #
# ~~~ . #
# ~~~~ #
# ~~~~ #
# ~~~~ o #
# ~~~~ #
#@~~~~ #
###########
Ball (Start-Position): 1/9
Hole (End-Position): 8/7
输出:
8
规则和领域
该课程可以包含以下领域:
'@'
球 -课程开始'o'
Hole-课程目标'#'
墙 -碰到墙时球将停止'~'
水 -必须避免'.'
沙 -球会立即停在沙上' '
冰 -球将继续滑动直到碰到东西
游戏的基本规则和限制:
- 球不能对角移动,只能向左,向右,向上和向下移动。
- 球不会停在水面,只会停在墙前,沙地和洞中。
- 射入水中是无效的/不可能的
- 球会留在洞中,不会像在冰上那样跳过它
- 路线始终为矩形。
- 路线始终被水或墙壁包围(无需边界检查)。
- 总有一个球和一个洞。
- 并非所有课程都可以打败。
- 可能有多个路径导致相同(最低)分数。
漏洞和获胜条件
- 禁止出现标准漏洞
- 程序必须终止
- 您无法制定其他规则(很难击中球,以至于跳过水面,从墙反弹,越过沙田,拐角处弯曲等等)
- 这是code-golf,所以用最少字符数的解决方案获胜。
- 解决方案必须能够处理所有提供的测试用例,如果由于所用语言的限制而无法实现,请在答案中注明。
测试用例
路线1(2次打击)
####
# @#
#o~#
####
课程2(不可能)
#####
#@ #
# o #
# #
#####
路线#3(3击)
~~~
~@~
~.~
~ ~
~ ~
~ ~
~ ~
~.~
~o~
~~~
路线#4(2次打击)
#########
#~~~~~~~#
#~~~@~~~#
## . ##
#~ ~ ~ ~#
#~. o .~#
#~~~ ~~~#
#~~~~~~~#
#########
课程5(不可能)
~~~~~~~
~... ~
~.@.~.~
~... ~
~ ~ ~.~
~ . .o~
~~~~~~~
更多测试用例:
1
相关:一,二。
—
AdmBorkBork
如果我们使用二维字节数组作为输入,是否允许对符号使用自定义映射?
—
Arnauld
@Arnauld不知道在这方面通常达成的共识是什么,但是我想说只要确定输入仍然可以。我已经更新了输入部分。
—
Manfred Radlwimmer
如果直接输入目的地,我们可以要求目的地的位置是“ sand”符号吗?
—
l4m2
@ l4m2当然可以,它将与所有其他规则保持一致。
—
Manfred Radlwimmer