Akordeon to gra w pasjansa, którą ostatnio spotkałem, w której prawie każdy układ jest do rozwiązania, ale niezwykle trudny. Możesz zagrać tutaj .
Zasady
52 odkryte karty są umieszczane odkryte w losowej kolejności. W każdej turze zamieniasz kartę na późniejszą, w której dwie karty :
- Udostępnij garnitur lub numer i
- Są w odległości 1 (sąsiadujące) lub 3 (dwie karty pomiędzy nimi).
Gra zostaje wygrana, gdy pozostała tylko 1 karta . Możesz założyć, że każde wejście można rozwiązać. Wymieniona karta musi zawsze poprzedzać kartę zastępującą.
Przykład
Jako przykład rozważ następujący układ:
2H,2S,1S,2D (H: Hearts, S: Spades, D: Diamonds)
Istnieją tutaj 3 możliwe ruchy:
- Zamień na
2H
sąsiednie2S
, więc skończymy z2S,1S,2D
- Zamień na
2S
sąsiednie1S
, więc skończymy z2H,1S,2D
- Wymienić
2H
z2D
(w odległości 3), tak, że kończy się z2D,2S,1S
Z tych 3 ruchów tylko ostatni ma możliwość wygranej (wygrywasz 2D <- 2S
wtedy, zastępując 2S <- 1S
).
Wejście wyjście
Twoim zadaniem jest napisanie solwera do akordeonu . Otrzymałeś listę kart i musisz zwrócić listę ruchów, aby rozwiązać grę.
Otrzymujesz listę kart jako ciąg rozdzielany przecinkami, gdzie każda karta jest przekazywana jako liczba całkowita reprezentująca ich wartość liczbową, a następnie znak reprezentujący ich kolor.
Musisz zwrócić listę zamienników jako ciąg rozdzielany przecinkami, gdzie każda zamiana ma format Card <- Card
(zgodny z formatem karty opisanym powyżej). Pierwsza karta w każdej parze to karta zastępowana.
Przypadki testowe:
5H,1C,12S,9C,9H,2C,12C,11H,10C,13S,3D,8H,1H,12H,4S,1D,7H,1S,13D,13C,7D,12D,6H,10H,4H,8S,3H,5D,2D,11C,10S,7S,4C,2H,3C,11S,13H,3S,6C,6S,4D,11D,8D,8C,6D,5C,7C,5S,9D,10D,2S,9S
5H,9C,11H,7S,7D,12D,6H,10S,3H,4D,12C,2S,3C,5C,7H,6S,1H,8S,2H,11S,4C,10D,12H,9H,2D,4H,6C,13H,11C,2C,10H,8C,1S,11D,3S,12S,7C,5D,13S,8D,4S,6D,13C,3D,8H,13D,1D,9D,9S,1C,5S,10C
7H,11C,8C,7S,10D,13H,4S,10C,4D,2C,4H,13D,3C,2H,12C,6C,9H,4C,12H,11H,9S,5H,8S,13S,8H,6D,2S,5D,11D,10S,1H,2D,5C,1C,1S,5S,3H,6S,7C,11S,9C,6H,8D,12S,1D,13C,9D,12D,3D,7D,10H,3S
Podczas gdy te zawody to gra w golfa , jestem szczególnie zainteresowany rozwiązaniami oszczędzającymi czas i prawdopodobnie nagrodzę pomysłowe rozwiązania nagrodami. To powiedziawszy, rozwiązania wymagające astronomicznej ilości czasu są nadal akceptowalne (zalecałbym testowanie z mniejszą talią, taką jak talia 16 kart, 4 kolory).
źródło
Odpowiedzi:
Python 3,
274272271 bajtów2 bajty zapisane dzięki @orlp .
To jest bardzo wolne. Możesz jednak spróbować z notatką . To ma kilka dodatkowych
list
-tuple
konwersje, ale jest inaczej równoważne.Nawet ten jest astronomicznie wolny z pewnymi wejściami.
Kod używa ciągów, a nie liczb, więc obsługuje również notację typu
KH
zamiast13H
.Przykład:
źródło
functools.lru_cache
zamiast pisać własne.list
jest nie do powstrzymania, to nie działa.str.split
zwrotówlist
). Wolałbym, żeby te dwa programy były funkcjonalnie równoważne.h=lambda p:lru_cache(None)(g)(''.join(p))
.