Wprowadzenie
Skat to tradycyjna niemiecka gra karciana dla 3 graczy. Talia składa się z 32 kart: as, król, królowa, walet, 10, 9, 8, 7 we wszystkich 4 kolorach (trefl, pik, kier, karo).
W każdej rundzie jeden gracz gra solo, a pozostali dwaj grają przeciwko niemu. Na początku rundy każdy gracz otrzymuje 10 kart, pozostałe 2 karty nazywane są skat i kładzie się je zakryte na środku. Gracz solo zależy od fazy licytacji. Jest to część gry, z którą będziesz musiał zmierzyć się w tym wyzwaniu, więcej szczegółów na ten temat poniżej.
Gracz, który wygra fazę licytacji, zostaje graczem solo. Podnosi skata, a następnie upuszcza dwie karty (które mogą być takie same, druga drużyna nie wie), wybiera kolor atutowy i rozpoczyna się runda.
Jedna runda składa się z dziesięciu lew. Gracz, który wygrywa lewę, prowadzi następną, dopóki wszystkie karty nie zostaną zagrane. Nie wyjaśnię tutaj zasad, ale powinieneś wiedzieć, że posiadanie wielu kart atutowych jest dobre. Jeśli chcesz poznać zasady, sprawdź artykuł w Wikipedii, który zamieściłem na początku tego postu, ale nie jest potrzebny do tego wyzwania.
Wyzwanie
Chcesz nauczyć swoich dwóch synów, jak grać w skata. Zasady nie są tak trudne, więc szybko się w to angażują. Jedyną rzeczą, która sprawia im trudność, jest licytacja, w szczególności obliczanie wartości gry ich ręki. Więc decydujesz się napisać mały program, który generuje maksymalną wartość gry, jaką mogą licytować, biorąc pod uwagę bieżącą rękę.
Obliczanie wartości gry
Każde rozdanie ma określoną wartość gry. Jest to określane przez liczbę sekwencyjnych waletów, które masz i kolor, który chcesz wybrać jako atut. Zacznijmy od pierwszego czynnika - gniazd!
The Jack Factor
Walety są zawsze kartami atutowymi i biją każdą inną kartę atutową. Kolejność siły między czterema waletami jest następująca:
- Jack of Clubs (najwyższy)
- Jack of Spades
- Jack of Hearts
- Jack of Diamonds (najniższy)
W dalszym objaśnieniu odniosę się do nich wraz z przypisanymi im numerami.
Pamiętasz, że z ręki walety masz jakiś czynnik, który jest częścią wartości gry? Świetny! Oto jak to zdobyć:
Ten współczynnik Jacka to liczba najwyższych waletów (patrz kolejność powyżej) w sekwencji plus 1. Więc jeśli masz wszystkie 4 walety, to 4 + 1 = 5. Jeśli masz tylko pierwsze 2 walety, to 2 + 1 = 3)
Ewentualnie, aby nieco skomplikować sprawę, Czynnikiem Jacka może być również liczba najwyższych Jacków w sekwencji, których brakuje , plus 1. Więc jeśli brakuje pierwszego, wynosi 1 + 1 = 2. Jeśli brakuje pierwszego 3, to jest 3 + 1 = 4. Oto kilka przykładów, używając powyższej numeracji:
[1, 4] -> 1 + 1 = 2
[1, 2, 4] -> 2 + 1 = 3
[2, 3, 4] -> 1 + 1 = 2
[1, 2, 3, 4] -> 4 + 1 = 5
[] -> 4 + 1 = 5
To był pierwszy czynnik. Oto jak zdobyć drugi:
Współczynnik koloru atutowego
Ten jest o wiele prostszy. Drugi czynnik zależy od koloru atutowego, który gracz solo wybiera przy użyciu następującego odwzorowania:
Clubs -> 12
Spades -> 11
Hearts -> 10
Diamonds -> 9
To było łatwe, prawda?
Wartość gry
Wartość gry jest wypadkową dwóch czynników. Całkiem łatwe, myślisz? Źle! Podczas gdy Jack-Factor jest stały, współczynnik koloru nie jest. Kolor, który ostatecznie wybierasz jako atut, zależy od liczby atutów i wartości kart innych niż atuty w twojej ręce. Byłoby zbyt skomplikowane wyjaśnienie, jak wygląda dobra ręka, więc użyjesz następującego algorytmu:
Algorytm Which-Trump-do-I-Pick
Nie musisz brać udziału w licytacji. Jeśli uznasz, że twoja ręka jest zbyt zła, aby grać w pojedynkę, możesz po prostu spasować. Twoja ręka musi spełniać następujące kryteria, aby grać:
Posiadaj co najmniej 6 kart atutowych (karty wybranego koloru atutowego + liczba waletów). Jeśli jest to możliwe w przypadku więcej niż jednego koloru, wybierz ten, który dałby więcej kart atutowych. Jeśli nadal jest remis, wybierz kolor z najwyższą oceną podaną powyżej.
Z kart innych niż atuty masz przynajmniej 1 asa.
Jeśli Twoja ręka nie spełnia obu tych kryteriów, spasujesz. Jeśli tak, wyliczysz obliczoną wartość gry i wybrany kolor atutowy.
Krótka uwaga: Oczywiście jest to bardzo uproszczony algorytm. Osadzanie rozdań wymaga zbyt wiele strategii i doświadczenia, niż moglibyśmy kiedykolwiek podjąć w takim wyzwaniu.
Wejście
Każda karta ma unikalny identyfikator. Pierwsza część to kolor ( C lubs, S pades, H earts, D iamonds), druga część to wartość podana przez to mapowanie:
Ace -> A
King -> K
Queen -> Q
Jack -> J
10 -> 0
9 -> 9
8 -> 8
7 -> 7
Obie części razem tworzą jedną kartę. Na pierwszym miejscu jest wartość, a potem kolor. Możesz wziąć karty w dowolnym formacie, jak chcesz.
Wynik
Jeśli rozdanie jest grywalne, wypisz wartość gry i wybrany kolor atutowy (kolejność nie ma znaczenia). Jeśli nie, wypisz „pass”.
Zasady
- Jak wspomniano, możesz wziąć dane wejściowe w najwygodniejszym dla siebie formacie. Przykłady patrz poniżej w przypadkach testowych.
- Dane wejściowe mogą być dostarczane za pomocą argumentów wiersza poleceń, danych wejściowych użytkownika lub argumentów funkcji.
- Dane wyjściowe można podać jako wartość zwrotną lub po prostu wydrukować na ekranie.
- Kart na wejściu nie można w żaden sposób zamówić. Twój program musi być w stanie poradzić sobie z dowolnym losowym zamówieniem karty.
- Wygrywa najniższa liczba bajtów!
Przypadki testowe
Dane wejściowe w przypadkach testowych to lista ciągów 2-znakowych.
1. ["JC", "JS", "JD", "AC", "KC", "9C", "AS", "7H", "QD", "8D"] -> 36 Clubs
2. ["JD", "AS", "0S", "KS", "QS", "9S", "8S", "AD", "8C", "9C"] -> 44 Spades
3. ["JH", "JD", "0S", "KS", "9C", "8C", "QH", "KH", "AD", "9D"] -> pass
4. ["JD", "AS", "KS", "QS", "0S", "9S", "8D", "7D", "0C", "QH"] -> pass
Wyjaśnienie:
- Dwa walety z rzędu z treflami. Wartość gry to 3 x 12 = 36
- Brak trzech waletów z rzędu z pikami jako atutem. Wartość gry to 4 x 11 = 44
- Możliwe są maksymalnie 4 karty atutowe, więc zdasz.
- Sześć kart atutowych z pikami, ale bez asa bez atutów, więc spasujesz.
Jeśli niektóre zasady są niejasne, śmiało i komentuj. Dorastałem w tej grze, więc trudno mi ocenić, czy opisałem wszystko wystarczająco szczegółowo.
A teraz ... Szczęśliwego kodowania!
edytuj: Jak wskazano mi w komentarzach (dzięki isaacg), istnieje zasada, która liczy następujące najwyższe atuty po 4 waletach do „współczynnika waluta”, aby mogło wzrosnąć do 11. Aby utrzymać to wyzwanie proste i aby nie mylić ludzi, zaproponowane przeze mnie zasady pozostaną takie, jakie są. Zatem maksymalny współczynnik pozostaje na poziomie 5.
źródło
Odpowiedzi:
Python 2, przykładowa implementacja
Ponieważ nie ma jeszcze żadnych zgłoszeń, zapisałem przykładową implementację w Pythonie. Format wejściowy jest taki sam, jak w testach w wyzwaniu.
Może to motywuje was do działania, to nie jest takie trudne :)
źródło
Java, 256 bajtów
Bierze wkład w postaci tablicy tablic znaków w formacie
A4
, w którym4
jest kluby ,3
jest Spades ,2
jest Miłość i1
jest Diamonds . Wyjście jest36 4
dla licytacji 36 z klubami atutowymi ,p
za podanie.Wypróbuj online tutaj .
Wersja bez golfa:
źródło
C, 235 bajtów
Port mojej Java odpowiedzi .
Wypróbuj online tutaj .
Zajmuje wejście jako tablica znaków w formacie
A4
, w którym4
jest kluby ,3
jest Spades ,2
jest Miłość i1
jest Diamonds . Dane wyjściowe dotyczą36 4
oferty 36 w kolorze atutowym klubami ,p
za podanie.Wersja bez golfa:
źródło