Untitled
unknown
plain_text
a year ago
3.0 kB
10
Indexable
import time
# Lista przechowująca dane wejściowe
input_data = []
winning_rooms = [] # zbiór kluczowy do wygranej - X
lista_polozen = [] # gdzie jest dziecko w danym kroku, lista ta zawiera słowniki licząc dzieci
siatka = [] # siatka polega na liście 2 wymiarowej
# Odczyt danych z pliku
with open('input_0', 'r') as data_in:
for i in data_in:
line = []
for element in i.split():
line.append(int(element) if element.isdigit() else element) # Konwersja elementów na liczby całkowite oprocz drzwi ABCD
input_data.append(line)
print(input_data)
rooms = int(input_data[0][0]) # liczba pokoi
kids = int(input_data[1][0]) # liczba dzieci
input_pattern = str(input_data[4][0]) # Cały ciąg wprowadzonego patternu czyli np CAD
pattern = [] # tu przechowywane są odzielne kroki potem zamieniane na przypisane krokom wartości
for i in range(len(input_pattern)):
pattern.append(input_pattern[i]) # kroki drzwi np CAD zamieniane na 'C' 'A' 'D'
if pattern[i] == 'A': # od tego momentu zamieniamy na wartości liczbowe
pattern[i] = 0
elif pattern[i] == 'B':
pattern[i] = 1
elif pattern[i] == 'C':
pattern[i] = 2
elif pattern[i] == 'D':
pattern[i] = 3
print(pattern)
for i in input_data[3]: # wrzucamy do listy kluczowe pokoje zapewniające wygraną
winning_rooms.append(int(i))
for i in range(kids): # pętla przypisuje każdemu dziecku numer pokoju startowego
lista_polozen.append({i: int(input_data[2][i])})
print(lista_polozen)
# tworzenie siatki
for i in range(5, 5 + rooms): # od piątego wiersza zaczyna się definicja siatki
siatka.append(input_data[i])
print(siatka)
# Używamy patternu ABCD, pokoi w zwiazku z połozeniem dzieci na siatce
step = 1
pattern_choice = 0 #sledzi i pilnuje aby pattern był pokolei np C -> A -> D (i od poczatku)
timeout = time.time() + 5 # 5 sekund od tego momentu w programie
while True:
output = 0 # pokazuje czy gra się skończy sukcesem
zmiany = [] # lista przechowująca zmienione miejsca
for kid_movement in range(kids):
x = lista_polozen[kid_movement] #x to zmienna pomocnicza ktora przechowuje słownik aktualnego dziecka
current_room = x[kid_movement] #numer pokoju w ktorym aktualnie jest
next_room = siatka[current_room - 1][pattern[pattern_choice]] # -1 bo indexy zaczynają się od 0, a pokój jest oznaczany od 1
x[kid_movement] = next_room
# Sprawdzenie, czy dziecko dotarło do pokoju wygrywającego
if next_room in winning_rooms:
output += 1
if output == kids or time.time() > timeout:
break
pattern_choice += 1
if pattern_choice >= len(pattern):
pattern_choice = 0
step += 1
if output == kids:
print("\nGra została wygrana po",step, "krokach.")
else:
print("\nNIE")Editor is loading...
Leave a Comment