ZAKTUALIZOWANY PUNKTACJA : Ponieważ to wyzwanie jest trudniejsze niż się spodziewałem, poprawiłem punktację. Program, który może rozwiązać pojedyncze wejście lustrzane, jest poprawną odpowiedzią. Bardziej wyrafinowane programy otrzymują premię do swojego wyniku.
Na PPCG pojawiło się kilka zagadek pozwalających znaleźć ścieżkę lasera w pudełku z lustrami. W tej układance musisz stworzyć pudełko luster, które pasują do wielu miejsc laserowych.
Dostajesz pudełko i specyfikację, w której lasery mają wchodzić i wychodzić. Twój program musi umieścić dokładnie N dwustronnych lusterek w pudełku, aby spełnić specyfikację. Lustra muszą być ustawione pod kątem 45 stopni, ale mogą być nachylone do przodu lub do tyłu.
Wejście
Twój program powinien zaakceptować siatkę pól poprzez STDIN, argument wiersza poleceń lub plik w następujących przykładach formatu:
+--G--+ +abcde+
G | f/////d
| /| a// c
+-----+ f |
+-b-e-+
Pary liter (można zastosować [a-zA-Z]) wskazują wejście / wyjście do 52 laserów. Wewnątrz pudełka będzie N /
lusterek. Wymiary pudełka będą wynosić 3 <= W, H <= 200. Pudełko składa się ze +|-
znaków. W pudełku może znajdować się dowolna liczba kopii lustrzanych, w tym zero.
Wynik
Dane wyjściowe powinny pasować do danych wejściowych, z tym wyjątkiem, że /
znaki można przenosić i / lub zamieniać na \
znaki. Twój program powinien wysłać poprawny ciąg kopii lustrzanej do STDOUT lub pliku, opcjonalnie wstawić nowy wiersz. Jeśli żadne umieszczenie serwerów lustrzanych nie może spełnić specyfikacji wejściowej, wyjdź Impossible\n
. Przykłady możliwych rozwiązań:
+--G--+ +abcde+
G / | f \ \ d
| | a/ \ c
+-----+ f / //|
+-b-e-+
Przykład testowy
Wejście:
+abcdefghijklmnopqrstuvwxyA-+
|/////////////// |
|/////////////// |
| |
+-Abcdefghijklmnopqrstuvwxya+
Przykładowe dane wyjściowe:
+abcdefghijklmnopqrstuvwxyA-+
|\ \|
|/ / |
|\\\\\\\\\\\\\\\\\\\\\\\\\\ |
+-Abcdefghijklmnopqrstuvwxya+
Punktacja (AKTUALIZACJA)
To jest golf golfowy z bonusami. Powinieneś wskazać swoją odpowiedzią liczbę kopii lustrzanych, które Twój program może rozwiązać (N). Twój wynik to długość twojego programu w bajtach podzielona przez N. To pozwala ludziom wejść z prostym programem, ale nagradza więcej programistów ambicji premią.
Standardowe luki zabronione.
* 2^30
komponentuOdpowiedzi:
C # -
897862 bajtówZnaleziono poważny błąd polegający na umieszczaniu serwerów lustrzanych w miejscach, w których nie mogą być. Mam nadzieję, że teraz działa! Grałem też trochę w golfa, nie mogłem zostawić tam pętli while ... wstyd.
Kompletny program, pobiera dane wejściowe z STDIN, dane wyjściowe do STDOUT.
To była świetna zabawa, dobrze radzi sobie z problemem 7 na 5 (a kiedy zdejmujesz jedno z lusterek, co uniemożliwia), zajęło około 1 godziny na rozwiązanie 30 na 5.
7 na 5 Przykład:
Wersja niemożliwa:
Coś innego (program nie wygląda na oryginalny układ lustra):
Rozwiązanie 30 na 5:
Po kolei patrzy na każde źródło lasera i buduje dla niego prawidłową trasę (jeśli to możliwe), a następnie przechodzi do następnego. Jest to dość proste wyszukiwanie w głąb, które musi wiedzieć, na które źródło lasera (cel) patrzy, ile luster pozostało, aby je umieścić, bieżącą komórkę, w której jest „w”, kierunku, w którym się porusza oraz każdą komórkę jest już odwiedzony (aby nie umieścił lustra w miejscu, w którym już był). Ostatnie 3 są używane do zestawiania ścieżki dla bieżącego celu i resetowane, gdy cel się zmienia. Po połączeniu wszystkich laserów idzie naprzód i wypełnia luki, których nie potrzebuje pozostawić puste (kolejny powód, dla którego musi wiedzieć wszędzie, gdzie jest odwiedzany).
Kiedy buduje trasy, preferuje pójście „do przodu” zamiast wstawiania lustra, a kiedy to robi, preferuje lustro „\” - najlepiej to widać w powyższym przykładzie „czegoś innego”, w którym pomija pierwszą komórkę poniżej na górze „a”, a następnie stale wypełnia „\”, jeśli może znaleźć rozwiązanie z jednym, w przeciwnym razie „/” (naturalnie, jeśli pominięcie pierwszej komórki spowoduje, że nie będzie w stanie znaleźć rozwiązania, wówczas cofnij się i spróbuj umieścić tam lustro).
źródło
Python,
671654 bajtówNie rozwiązanie, ale próba, czytaj poniżej.
Nie grałem w golfa na maksa, ponieważ nie jestem zadowolony z rozwiązania.
V
sprawdza poprawność danego rozwiązania, chodząc po poluF
dla każdego znaku,C
który znajdzie na linii bocznej. Rozwiązania są generowane losowo. Jest brzydki, działa na wejście1, ale zajmuje dużo czasu na inne wpisy. Ponieważ losowo wypróbowuje rozwiązania, nie uważam tego za rzeczywiste rozwiązanie danego problemu; ale może pomóc innym.Biegać:
echo "entry1.txt" | python script.py
źródło