背景
您醒来后发现自己迷失在一维迷宫中!出现一个神秘的精灵(或其他东西),并解释说出口位于您的面前,但是您与出口之间的挑战是一系列的。当您前行时,您会意识到所有所谓的挑战仅仅是锁着的门。首先,您会看到带有T形钥匙孔的门,而自己却没有这样的钥匙,请后退步伐,寻找具有T
形状的钥匙。
沮丧的是,您在地面上发现了字母键的汤,这些汤都不符合您遇到的门。出于某种天才(或愚蠢)的考虑,您决定如果将小写字母t
形的钥匙塞入足够的强度,则它可能可以装入该插槽中。当您用t
手握小写字母的方式接近门时,T
孔会发出绿色的光,并且门会在您面前溶解。
一倒,还有更多...
挑战
挑战的目标是标记退出迷宫需要花费多少步骤。
挑战的输入是迷宫:一个仅包含字符的字符串[A-Za-z^$ ]
。词汇表:
^
-起始空间。输入将只包含一个^
。$
-出口(自由!)。输入将只包含一个$
。[A-Z]
-大写字母表示大门。如果您已经收集了必需的密钥,则只能通过此门。[a-z]
-小写字母表示按键。通过走到包含密钥的空间中来收集这些密钥。
输入中每个大写字母最多包含一个。这意味着门的总数将在0-26之间(含0和26)。
每个锁着的门上[A-Z]
都有一个对应的小写钥匙[a-z]
。输入中可以有任意数量的空格()。
所有的门将在起点的右侧,在出口的左侧。这样就不会有多余的门。所有输入都是可解的。
此挑战的输出将是一个数字,即退出迷宫所采取的步骤数。
算法
您退出这个令人毛骨悚然的地方的有条理的方法如下:
- 从开头(
^
)开始,然后向前(向右)收集遇到的所有键。 - 当您碰到一扇门时,如果您拥有正确的钥匙,则可以继续前进到门上。如果没有正确的钥匙,您将向后走(左)收集碰到的钥匙,直到找到您无法打开的最新门的钥匙。
- 收集到当前麻烦门的钥匙后,您将返回右侧并继续前进。
- 重复此过程,直到您进入出口(
$
)。
有经验的高尔夫球手会理解,只要您的代码输出的结果与运行此算法相同,就不必实施此特定算法。
数数
每次您从一个正方形移到另一个正方形时,这都算是一个步骤。转动180º不会产生任何附加步骤。如果没有必需的钥匙,您将无法前进到门上。您必须踩到钥匙才能捡起来,并且必须踩到出口才能赢。首次移动后,起始空格(^
)的行为与其他任何常规空格相同。
例子
在这些示例中,我将空格留作下划线以供人类阅读。
输入为_a_^_A__$__
。输出为11
。您1
往前走,注意没有A
门钥匙,然后没有脸。您向后走,直到占据了包含a
(3
向后走,现在4
总计)的空间。然后,您可以向前走直到占据包含出口的空间(7
向前走,11
总计)。
输入为b__j^__a_AJB_$
。输出是,41
您在迷宫的后面进行了两次单独的行程,一次行程获取j
钥匙,而下一次行程获取b
钥匙。
输入为__m__t_^__x_T_MX_$____
。输出为44
。x
从头到门的途中捡起钥匙,您将不需要花费额外的时间就可以拿到钥匙T
。
输入为g_t_^G_T$
。输出为12
。如果G
没有钥匙,您将无法直接进入空间。您很幸运在拿到t
钥匙的路上拿起g
钥匙,从而在通往自由的道路上打开了两扇门。
输入为_^_____$
。输出为6
。那很简单。
I / O准则和制胜标准
适用标准I / O规则。这是一个代码高尔夫挑战。
A
在bA^aB$
不会是多余的要么。;)