Loading...
yetoshimo avatar yetoshimo 2 Точки

Multidimensional Lists - Exercise - 09. Radioactive Mutate Vampire Bunnies

Здравейте,

Линк към Judge е тук

Моят код:

09. Radioactive Mutate Vampire Bunnies

Test #4, Test #5, Test #8, Test #9 дава грешка (60/100).

Пропускам нещо, но не успях да видя.

Може ли малко помощ?

Благодаря предварително.

Поздрави

 

0
Python Advanced 05/04/2021 14:09:02
Martinzca avatar Martinzca 11 Точки

Привет

Най-вероятно е вече късно, но нека има отговор за да има завършек пост-а.

Линка, към pastebin e невалиден вече, затова ще карам с основните неща, които трябва да се покрият.

Правило номер едно, когато тестовете не минават е човек да си разпише всички възможни сценарии, които могат да се случат на база условието на задачата. Най-често проблемни са т.нар "edge" случаи.

В конкретния пример, при мен също не минаваше тест #8, затова си измислих долния тест. Оказа се, че не прекъсвам правилно цикъла и размножавам зайците повече отколкото трябва и съответно финалната матрица е изцяло запълнена с "B".

4 4
....
..B.
..B.
...P
RRRR

Returns:
..B.                                                                                                            
.BBB                                                                                                            
.BBB                                                                                                            
..B.                                                                                                            
won: 3 3 

Алгоритъмът, който съчиних е:

1. Намирам позицията на играча

2. За всяка команда

  • Местя играча - проверявайки дали стъпва на заек (умира) или излиза извън матрицата (печели)
  • Размножавам зайчиците - проверявайки дали някой от тях стъпва върху играча (играта приключва)
  • Проверявам дали играчът е излязъл или е имал среща със заек (е умрял)

3. Проверявам дали играчът е умрял и принтирам съответния израз

Ето и моя код:

rows, cols = [int(item) for item in input().split()]
matrix = []

for _ in range(rows):
    matrix.append(list(input()))

commands = input()

# End of inputs


def find_player(matrix):
    stop = False
    postion = ()
    for r in range(rows):
        if stop:
            break
        for c in range(cols):
            if matrix[r][c] == 'P':
                postion = (r, c)
                stop = True
    return postion


def multiply_bunny(matrix, dead):
    bunnies_location = []
    for r in range(len(matrix)):
        for c in range(len(matrix[r])):
            if matrix[r][c] == 'B':
                bunnies_location.append((r, c))

    for bun in bunnies_location:
        up = (bun[0] - 1, bun[1])
        down = (bun[0] + 1, bun[1])
        left = (bun[0], bun[1] - 1)
        right = (bun[0], bun[1] + 1)

        if 0 <= up[0] < rows and 0 <= up[1] < cols:
            if matrix[up[0]][up[1]] == 'P':
                dead = True
            matrix[up[0]][up[1]] = 'B'
        if 0 <= down[0] < rows and 0 <= down[1] < cols:
            if matrix[down[0]][down[1]] == 'P':
                dead = True
            matrix[down[0]][down[1]] = 'B'
        if 0 <= left[0] < rows and 0 <= left[1] < cols:
            if matrix[left[0]][left[1]] == 'P':
                dead = True
            matrix[left[0]][left[1]] = 'B'
        if 0 <= right[0] < rows and 0 <= right[1] < cols:
            if matrix[right[0]][right[1]] == 'P':
                dead = True
            matrix[right[0]][right[1]] = 'B'

    return dead, matrix


def move_player(loc, go, matrix, dead):
    out = False
    last = loc
    if go == 'U':
        new = (loc[0] - 1, loc[1])
        if 0 <= new[0] < rows and 0 <= new[1] < cols:
            last = new
            if matrix[new[0]][new[1]] == 'B':
                dead = True
                return last, dead, out, matrix
            else:
                matrix[new[0]][new[1]] = 'P'
                matrix[loc[0]][loc[1]] = '.'
                return last, dead, out, matrix
        else:
            out = True
            matrix[last[0]][last[1]] = '.'
            return last, dead, out, matrix

    elif go == 'D':
        new = (loc[0] + 1, loc[1])
        if 0 <= new[0] < rows and 0 <= new[1] < cols:
            last = new
            if matrix[new[0]][new[1]] == 'B':
                dead = True
                return last, dead, out, matrix
            else:
                matrix[new[0]][new[1]] = 'P'
                matrix[loc[0]][loc[1]] = '.'
                return last, dead, out, matrix
        else:
            out = True
            matrix[last[0]][last[1]] = '.'
            return last, dead, out, matrix

    elif go == 'L':
        new = (loc[0], loc[1] - 1)
        if 0 <= new[0] < rows and 0 <= new[1] < cols:
            last = new
            if matrix[new[0]][new[1]] == 'B':
                dead = True
                return last, dead, out, matrix
            else:
                matrix[new[0]][new[1]] = 'P'
                matrix[loc[0]][loc[1]] = '.'
                return last, dead, out, matrix
        else:
            out = True
            matrix[last[0]][last[1]] = '.'
            return last, dead, out, matrix

    elif go == 'R':
        new = (loc[0], loc[1] + 1)
        if 0 <= new[0] < rows and 0 <= new[1] < cols:
            last = new
            if matrix[new[0]][new[1]] == 'B':
                dead = True
                return last, dead, out, matrix
            else:
                matrix[new[0]][new[1]] = 'P'
                matrix[loc[0]][loc[1]] = '.'
                return last, dead, out, matrix
        else:
            out = True
            matrix[last[0]][last[1]] = '.'
            return last, dead, out, matrix

    return last, dead, out, matrix

# Main 
dead = False
where = find_player(matrix)
for ch in commands:
    where, dead, out, matrix = move_player(where, ch, matrix, dead)
    dead, matrix = multiply_bunny(matrix, dead)
    if dead or out:
        break

if dead:
    for row in matrix:
        print(*row, sep="")

    print("dead: ", end='')
    print(*where, sep=' ')
else:
    for row in matrix:
        print(*row, sep="")
    print("won: ", end='')
    print(*where, sep=' ')


 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.