首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >冰球挑战赛

冰球挑战赛
EN

Code Golf用户
提问于 2018-03-29 10:38:03
回答 1查看 774关注 0票数 24

这个挑战的目标是编写程序或函数,返回完成给定课程所需的最少数量的罢工。

输入

  • 该课程的布局可以通过任何适当的方式和格式,您喜欢。(从控制台读取,作为输入参数传递,从文件或任何其他多行字符串、字符串数组、二维字符/字节数组读取)。
  • 球和洞的起始位置也可以作为输入通过,不需要从输入中解析。在测试用例中,它们包括在课程中,以确保对实际位置没有混淆。
  • 只要输入字符仍然可以识别为不同的字符(例如,可打印的ASCII字符),就可以将输入字符重新映射到其他字符。

输出

  • 对于以合理格式(字符串、整数、浮点数或描述结果的haiku )作为输入传递的任何过程,程序必须返回最低可能的分数(最少的击打量以到达洞)。
  • 如果这个课程是无法击败的,请返回-1 (或者您选择的任何其他不正确的值,而这些值不会被退还给一门不可战胜的课程)。

示例:

在这个例子中,位置不是基于0的,X/Y,从左到右,自上而下,但是你可以使用任何你喜欢的格式,因为结果是完全独立于格式的。

输入:

代码语言:javascript
运行
复制
###########
#     ....# 
#      ...# 
#  ~    . # 
# ~~~   . # 
# ~~~~    # 
# ~~~~    # 
# ~~~~  o # 
# ~~~~    # 
#@~~~~    # 
###########

Ball (Start-Position): 1/9
Hole (End-Position):   8/7

输出:

代码语言:javascript
运行
复制
8

规则和字段

该课程可包括以下几个领域:

  • '@'球-课程的开始
  • 'o'洞-课程目标
  • '#'墙-当球撞到墙上时会停止。
  • '~'水-必须避免
  • '.'沙球会立即停在沙子上
  • ' '冰球会继续滑行,直到碰到什么东西。

游戏的基本规则和限制:

  • 球不能对角移动,只有左、右、上、下。
  • 球不会停在水的前面,只会停在墙前、沙子上和洞里。
    • 射入水中是无效的/不可能的
    • 球会留在洞里,而不是像在冰上那样跳过它。

  • 球场总是长方形的。
  • 这条路线总是被水或墙壁包围(不需要边界检查)。
  • 总是有一个球和一个洞。
  • 并非所有的课程都有可能被打败。
  • 可能有多个路径导致相同(最低)分数。

漏洞与获胜条件

  • 标准漏洞被禁止
  • 程序必须终止
  • 你不能制定额外的规则(击球太用力,跳过水,从墙上反弹,跳过沙场,弯角等)。
  • 这是密码-高尔夫,所以用最少字符的解决方案获胜。
  • 解决方案必须能够处理所有提供的测试用例,如果这是不可能的,因为使用的语言限制,请在您的答案中说明。

测试用例

课程1 (2次罢工)

代码语言:javascript
运行
复制
####
# @#
#o~#
####

课程2(不可能)

代码语言:javascript
运行
复制
#####
#@  #
# o #
#   #
#####

课程3 (3次罢工)

代码语言:javascript
运行
复制
~~~
~@~
~.~
~ ~
~ ~
~ ~
~ ~
~.~
~o~
~~~

课程4 (2次罢工)

代码语言:javascript
运行
复制
#########
#~~~~~~~#
#~~~@~~~#
##  .  ##
#~ ~ ~ ~#
#~. o .~#
#~~~ ~~~#
#~~~~~~~#
#########

课程5(不可能)

代码语言:javascript
运行
复制
~~~~~~~
~...  ~
~.@.~.~
~...  ~
~ ~ ~.~
~ . .o~
~~~~~~~

更多测试用例:

https://pastebin.com/Azdyym00

EN

回答 1

Code Golf用户

发布于 2018-03-29 13:19:10

Python 3,273个字节

代码语言:javascript
运行
复制
def p(g,c,d,k=0):
	while 1>k:c+=d;k=g.get(c,9)
	return-(k==2)or c-d*(k==3)
def f(g):
	c={q for q in g if g.get(q,9)>4};I=0;s=[c]
	while all(g.get(q,9)-4for q in c):
		c={k for k in{p(g,k,1j**q)for k in c for q in range(4)}if-~k}
		if c in s:return-1
		s+=[c];I+=1
	return I

在网上试试!

-41个字节,这要归功于ovs

-1字节,多亏了Jonathan Frech

票数 5
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/160623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档