Wprowadzenie
Moja siostrzenica chce zrobić tor wyścigowy. Ma drewniane elementy, które pasują do siebie, tworząc tor. Każda część ma kwadratowy kształt i zawiera inny kształt. Wykorzystam znaki rysunkowe do zilustrowania:
│
: droga prowadząca w pionie─
: droga prowadząca poziomo┌
┐
└
┘
: drogi skręcające w określonym kierunku┼
: Most z przejściem podziemnym
Co ciekawe, nie ma trójników.
Oto przykład możliwego toru wyścigowego:
┌─┐
│ │┌─┐
│ └┼─┘
└──┘
Zasady obowiązującego toru wyścigowego są następujące:
- Żadne drogi nie prowadzą do nikąd.
- Musi tworzyć pętlę (a wszystkie elementy muszą być częścią tej samej pętli).
- Na mostach / przejazdach podziemnych nie możesz skręcić (więc musisz przejść prosto przez nie).
Niestety kawałki toru wyścigowego, które moja siostrzenica i ja mamy, są ograniczone. Ale zdecydowanie chcemy wykorzystać je wszystkie na torze. Napisz program, który, biorąc pod uwagę listę elementów znajdujących się w naszym ekwipunku, generuje tor samochodu wyścigowego, który wykorzystuje wszystkie te elementy.
Opis wejścia
Chcielibyśmy, aby dane wejściowe były wprowadzane za pośrednictwem STDIN, argumentów wiersza poleceń, odczytu plików lub funkcji wprowadzania danych przez użytkownika (np. raw_input
Lub prompt
). Dane wejściowe to oddzielone przecinkami dodatnie liczby całkowite w formularzu
│,─,┌,┐,└,┘,┼
gdzie każdy z nich reprezentuje ilość tego konkretnego kawałka, który mamy. Na przykład dane wejściowe:
1,1,1,1,1,1,1
oznaczałoby to, że mieliśmy po jednym z każdego kawałka.
Opis wyjścia
Wyprowadź tor samochodu wyścigowego, używając znaków rysowania rur wymienionych powyżej. Tor samochodu wyścigowego powinien wykorzystywać dokładnie numer każdego elementu podany na wejściu - nie więcej i nie mniej. Dla każdego wejścia będzie co najmniej jeden ważny tor wyścigowy.
Przykładowe wejścia i wyjścia
Wejście: 3,5,2,2,2,2,1
Możliwe wyjście:
┌─┐
│ │┌─┐
│ └┼─┘
└──┘
Wejście: 0,0,1,4,4,1,3
Możliwe wyjście:
┌┐
└┼┐
└┼┐
└┼┐
└┘
Odpowiedzi:
Rubinowy 664
671 677 687 701(678 bajtów)To nie jest najkrótszy program, jaki mogłem wymyślić, ale poświęciłem trochę zwięzłości dla szybkości wykonywania.
Możesz eksperymentować z programem tutaj . Należy pamiętać, że ideone ma limit czasu wykonania, więc dla danych wejściowych składających się z ponad 12 elementów program prawdopodobnie przekroczy limit czasu.
Istnieje również pakiet testowy dla programu. Zwróć uwagę, że ostatnie dwa testy są wyłączone na ideone, ze względu na wyżej wspomniany limit czasu. Aby włączyć te testy, usuń
x_
prefiks z ich nazw.Program znajduje rozwiązanie za pomocą wyszukiwania w pierwszej kolejności; umieszcza elementy pojedynczo i śledzi luźne końce. Wyszukiwanie kończy się, gdy nie ma już luźnych (niepołączonych) końców i wszystkie elementy zostały umieszczone.
To jest program bez golfa:
źródło