Неправильный ввод Python при работе со списками - PullRequest
1 голос
/ 24 июня 2019

Я работаю с этой проблемой (https://open.kattis.com/problems/whowantstoliveforever).. Как говорится в проблеме, моя программа должна определить, живет ли или не погибает вселенная, на основе введенных значений 0 и 1.

to determine the next value of the i-th bit, look at the current value of the bits at positions i−1 and i+1 (if they exist; otherwise assume them to be 0). If you see exactly one 1, then the next value of the i-th bit is 1, otherwise it is 0. All the bits change at once, so the new values in the next state depend only on the values in the previous state. We consider the universe dead if it contains only zeros.

Myтекущее решение работает с входным файлом примера, однако не удается отправить его в Kattis. (Неправильный ответ)

Ниже приведен мой код.

import sys


def get_bit(bits, i):
    if 0 <= i < len(bits):
        return int(bits[i])
    else:
        return 0


def get_new_state(old_state):
    new_state = []
    for index in range(len(old_state)):
        if (get_bit(old_state, index-1) == 0 and get_bit(old_state, index+1) == 0) or (get_bit(old_state, index-1) == 1 and get_bit(old_state, index+1) == 1):
            new_state.append(0)
        elif(get_bit(old_state, index-1) == 0 and get_bit(old_state, index+1) == 1) or (get_bit(old_state, index-1) == 1 and get_bit(old_state, index+1) == 0):
            new_state.append(1)
    return new_state


def is_dead(state):
    if len(set(state)) == 1:
        return True
    else:
        return False


def foresee_fate(state):
    seen = []
    while True:
        if is_dead(state):
            return False
        if state in seen:
            return True
        seen.append(state)
        state = get_new_state(state)


def print_result(boolean):
    print("LIVES" if boolean else "DIES")


num_cases = int(sys.stdin.readline().strip())
for i in range(num_cases):
    cur_state = []
    case = sys.stdin.readline().strip()
    for char in case:
        cur_state.append(char)
    print_result(foresee_fate(cur_state))

Пожалуйста, дайте мне знать, что я могу сделатьулучшить эту программу.

1 Ответ

0 голосов
/ 24 июня 2019

Как и предполагалось, я добавил следующее в мой код, и теперь он работает. Однако я столкнулся с новой проблемой. теперь я получаю "Time Limit Exceeded" > 3.00 s.

def is_dead(state):
    if set(state).pop() == 1:
        return False
    elif len(set(state)) == 1:
        return True
    else:
        return False

Пожалуйста, дайте мне знать, если есть какие-либо предложения по решению этой проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...