山峰_匹配火线_match-cord

发布于 2020年2月7日
(点击图片进入关卡)

有时敌人雷区可以作为你的武器!

简介

食人魔们准备了一个雷区保护他们的首领。

我们可以利用多米诺效应来把火线接到首领!

默认代码

# 食人魔布雷保护他们的酋长。
# 但是我们可以使用"domino"效应来达到我们的目标
# 侦察员已经准备好了雷区的地图。
# 所有的地雷都放置在相同的距离。
# 地图是一个字符串数组,其中"x"是一个地雷,而"."不是。
# 数组中的第一行是与英雄最近的行。
# 下面列出了地图和有用的常量。
fieldMap = hero.findFriends()[0].getMap()
mine = "x"
empty = "."
mineDistance = 5
firstXPos = 15
firstYPos = 40
# 找到哪一个连锁到食人魔首领。
resultColumn = 21 # ∆ 将此更改为实际结果!
hero.say("我想它是列数: " + resultColumn)
resultX = resultColumn * mineDistance + firstXPos
hero.moveXY(resultX, hero.pos.y)
hero.moveXY(resultX, firstYPos)

概览

你得到一个雷区地图可看为一个字符串数组。"x" 是地雷,"." 是一个空的地方。所有的地雷相距 5 米。当一个地雷爆炸时,它会与相邻的所有地雷(水平和垂直没有对角线的)进行链式反应。

地图的第一行是最接近英雄的行,第一列靠左边缘。

当你发现哪一个将触碰到首领,踏上它,把他轰上天!

匹配火线解法

# 食人魔布雷保护他们的酋长。
# 但是我们可以使用"domino"效应来达到我们的目标
# 侦察员已经准备好了雷区的地图。
# 所有的地雷都放置在相同的距离。
# 地图是一个字符串数组,其中"x"是一个地雷,而"."不是。
# 数组中的第一行是与英雄最近的行。
# 下面列出了地图和有用的常量。
fieldMap = hero.findFriends()[0].getMap()
mine = "x"
empty = "."
mineDistance = 5
firstXPos = 15
firstYPos = 40
resultColumn = 21 # ∆ 将此更改为实际结果!
stack = []
visited = []
# 找到哪一个连锁到食人魔首领。
for j in range(width):
    if fieldMap[height - 1][j] == "x":
        stack.push([height - 1, j])
# Possible neighbours (shifts)
neighbourDiffs = [[-1, 0], [1, 0], [0, -1], [0, 1]]
while stack.length:
    state = stack.pop()
    row = state[0]
    col = state[1]
    # String representation of the current position for 'visited' search
    strPos = row + "-" + col
    if row == 0:
        resultColumn = col
        break

    # If we checked the current position
    if strPos in visited:
        continue
    visited.append(strPos)

    for diff in neighbourDiffs:
        neighRow = row + diff[0]
        neighCol = col + diff[1]
        # Check if it's outside the map
        if neighRow < 0 or neighCol < 0 or neighRow >= height or neighCol >=width:
            continue
        # Don't put in stack the checked nodes
        strNeighPos = neighRow + "-" + neighCol
        if strNeighPos in visited:
            continue
        if fieldMap[neighRow][neighCol] == "x":
            stack.push([neighRow, neighCol])
hero.say("我想它是列数: " + resultColumn)
resultX = resultColumn * mineDistance + firstXPos
hero.moveXY(resultX, hero.pos.y)
hero.moveXY(resultX, firstYPos)