Sprawdź się
Zadanie 3. Robot przenoszący krążki
Inżynier Nowak jest członkiem zespołu odpowiedzialnego za zaprojektowanie i konstrukcję robota przenoszącego krążki między palami, w celu prezentacji problemu Wież Hanoi. Robot ma przenosić wybraną liczbę krążków ze słupka początkowego, na słupek końcowy z wykorzystaniem słupka pomocniczego.
Zespół konstruujący robota dysponuje pewną liczbą krążków i słupkami oznaczonymi literami A, B i C. W celu urozmaicenia planowanej prezentacji zespół postanowił, że robot powinien poradzić sobie z różną liczbą krążków i różnym przypisaniem ról słupkom (dowolny słupek może być słupkiem początkowym, końcowym i pomocniczym, ale może na raz pełnić tylko jedną rolę).
Inżynier Nowak, po spotkaniu z zespołem, wypisał planowane prezentacje w postaci listy. Dane te są zapisane w pliku dane.txt
. W pliku znajduje się 10 wierszy, w których znajdują się kolejno: liczba krążków, słupek początkowy, słupek końcowy i słupek pomocniczy. Każdy wiersz zapisany jest w nowej linii, a poszczególne informacje oddzielone są od siebie pojedynczym znakiem odstępu.
Napisz program, który wypisze sekwencje ruchów, jakie będzie musiał wykonać robot dla podanych ustawień, by poprawnie przenieść wszystkie krążki ze słupka początkowego na słupek końcowy
Przykładowe dane:
Wyniki uzyskane dla przykładowych danych:
Uzyskane sekwencje zapisz w pliku wyniki.txt
. Każda sekwencja powinna być zapisana w nowej linii. Sekwencje powinny być zapisane w takiej kolejności, w jakiej zapisane są dane wejściowe użyte do ich wygenerowania. Poszczególne kroki w sekwencji oddzielone są od siebie pojedynczym znakiem odstępu.
Pojedynczy ruch zapisz za pomocą znaku ->
i symboli słupków. Np. A -> B
oznacza przeniesienie krążka ze słupka A na słupek B.
Do oceny oddajesz:
plik
wyniki.txt
zawierający odpowiedź (wygenerowane sekwencje w kolejności takiej, w jakiej zapisane były w pliku z danymi wejściowymi, dane do ich wygenerowania),plik(i) z komputerową realizacją zadania (kodem programu).
Napisz implementację zadania lokalnie na swoim komputerze, w wybranym języku: C++, Java, Python. Zadbaj o prawidłowe wczytanie danych z pliku tekstowego do swojego programu. Odpowiedź do zadania dla danych z pliku znajdziesz na samym końcu zadania.
Napisz program, który wypisze listę kroków potrzebnych do rozwiązania problemu dla podanej liczby krążków przy przenoszeniu krążków ze słupka początkowego na słupek końcowy dla podanych dwóch przykładowych ustawień.
Liczba krążków, słupek początkowy, słupek końcowy i słupek pomocniczy dla danych ustawień podane są w odpowiednio nazwanych tablicach.
Jako znak przesunięcia krążka z jednego słupka na drugi użyj symbolu: ->
Zakończ listę kroków pojedynczym znakiem średnika.
Wynikowa sekwencja dla każdego ustawienia powinna być wyświetlana w nowej linii.