一些基于文本的流氓行为不会让您走进墙壁,如果尝试的话,也会让您后退。当您可以使播放器朝最接近的有效方向移动时,为什么要这样做?
挑战
编写一个功能程序,给定方向和3 x 3的字符网格,在玩家采取步骤后输出相同的网格。
例如,
9
#..
.@#
#.#
变成
#.@
..#
#.#
输入值
方向由1到9的单个数字给出,每个数字对应于8个基本方向并保持静止。这是从键盘上数字的相对位置得出的:
西北西北 .. \ | / ... 7 8 9 W- 4 5 6 -E ... 1 2 3 ../ | \ 西南
但是,您也可以使用数字123、456、789而不是789、456、123。换句话说,如果您愿意,可以交换顶部和底部2行或数字。这些是仅有的2个可接受的索引组合。3 x 3网格将由3个不同的可打印ASCII字符组成,这些字符代表步行地板,墙壁和播放器。(在测试用例中,
.
用于地板,#
s是墙壁,@
是玩家)- 您可以选择程序使用的字符,但是您必须在答案中说明它们,并且它们在多次试验中必须保持一致。
- 代表角色的角色将始终位于3 x 3网格的中间,并且方向将始终在1到9(包括)之间
- 您可以按任何顺序输入
- 3 x 3网格可以作为char数组,字符串数组,9长度字符串或其他合理的替代输入。
输出量
- 从函数返回,或输出到StdOut或最接近的替代项
- 允许尾随空格和换行符
- 您必须使用与输入相同的字符表示形式
- 输入允许的格式相同,输出允许的格式相同
玩家如何移动
如果指定的方向被墙挡住(例如,如果上面的示例的方向为6),则查看2个最接近的方向:
- 如果一个(只有一个)方向是自由的,请沿该方向移动播放器。
- 如果没有方向可用,请查看下一个最近的2个方向(方向5除外)。如果您一直缠绕并且没有打开方向(玩家被墙壁包围),请不要移动玩家
- 如果两个方向都打开,请随机选择一个方向(尽管不一定要一致)。
如果给定方向为5,请勿移动播放器
测试用例
(#
=墙,.
=地板,@
=玩家)
输入: 9 #.. 。@# #。# 输出: #。@ ..# #。# 输入: 3 #.. 。@# #。# 输出: #.. ..# #@# 输入: 7 ##。 #@# ..# 输出: ## @ ##。 #。# 要么 #。# ..#@。# 输入: 5 ... 。@。 ... 输出: ... 。@。 ... 输入: 2 ### #@# ### 输出: ### #@# ###
计分
这是代码高尔夫球,因此最短的答案以字节为单位。
另外,我不太喜欢“选择其他方向”部分。这与挑战的其他部分有点不同,挑战的另一部分是“将玩家移动到指定的方向并输出”。不过那只是个人喜好。
—
Rɪᴋᴇʀ
这部分令人困惑:“如果没有免费的路线,请查看下一个最近的2个路线。”
—
Leaky Nun
我们可以为每个元素分配一个数字而不是ASCII字符,然后将输入作为二维列表吗?还是必须是字符串?
—
Scott Milner
我可以使用指示
—
Leaky Nun
123;456;789
代替789;456;123
吗?
yuhjklbn
?RIP。