Tichu to gra karciana, w której gracze na zmianę grają zestawami kart z talii składającej się ze standardowej talii 52 kart plus 4 dodatkowe karty:
- smok , który ma wartość większą niż jakakolwiek inna karta
- feniks , który może działać jako zamiennika
- pies , który przechodzi kolejno do swojego partnera
- Mah Jong , który ma wartość 1 (a osoba posiadająca to gra pierwszy)
Pierwszy gracz (o którym mówi się, że ma „lead”) może zagrać w jeden z następujących rodzajów kombinacji kart:
- pojedynczy (na przykład
6
) - pary (
JJ
) - potrójne (
555
) - full (
QQQ33
) - potrójne i parę - prostym (
56789
) - 5 lub więcej kolejnych kart - ciągnik (
223344
) - każdy z rzędu sekwencji par
Kolejni gracze mogą wtedy zagrać tylko zestaw kart tego samego typu, ale ściśle wyższych. Na przykład QQ
można na nim grać JJ
, ale QQKK
nie można (to ciągnik, a nie para). Potrójne domy są sortowane według potrójnego (np. 77722
> 44499
), A strity i traktory muszą być tej samej długości ( 456789
nie można na nich grać 23456
). Asy są wysokie.
Jest jeden wyjątek: dowolna 4 z tej samej karty jest bombą i można na nią zagrać z wyjątkiem dowolnej wyższej bomby. 1
W smoka można grać samodzielnie na dowolnym singlu lub ołowiu (ale nigdzie indziej). Feniksa, oprócz tego, że jest symbolem wieloznacznym, można również grać na dowolnym singlu oprócz smoka. 2 Z psem można grać samemu ołowiem i natychmiast kończy on turę. 3)
Twoim wyzwaniem jest ustalenie, czy dana gra Tichu jest ważna, biorąc pod uwagę poprzednią grę.
Możesz zaakceptować obie gry w dowolnej kolejności jako listy liczb całkowitych lub ciągów znaków - w obu przypadkach możesz wybrać dowolne mapowanie kart na liczby całkowite / postacie. Jeśli była poprzednia gra, zawsze będzie ważna, a jeśli nie (tj. Gracz ma lead), pierwszym wejściem będzie pusta tablica / ciąg znaków (odpowiadający typowi drugiego wejścia). Nie gwarantuje się, że karty zostaną wydane w określonej kolejności.
Twój wynik musi być wybrany z zestawu dokładnie dwóch różnych wartości, z których jedna wskazuje, że gra jest legalna, a druga nie.
Nie ma potrzeby sprawdzania, czy zestaw kart faktycznie istnieje w talii (np. 77766
Po nim 88877
jest niemożliwe, ponieważ są tylko cztery 7) - takie przypadki nigdy nie zostaną podane.
W poniższych przypadkach testowych 234567890JQKA
reprezentuj od 2 do asa i RPD1
odpowiednio smok, feniks, pies i Mah Jong. Pusty ciąg jest pokazany tutaj jako -
. Te sztuki są legalne:
6 J
JJ QQ
555 KKK
44499 77722
23456 56789
223344 QQKKAA
49494 72727
A R
A P
P R
66 7P
P6 77
58304967 6P0594J7
5P304967 680594J7
57446765 788657P5
- D
- 1
- 12345
3344556677889900 JJJJ
5555 7777
A to nie są:
9 3
66 55
888 444
44 888
77722 44499
44499 777
44499 777JJJ
45678 34567
34567 456789
556677 334455
5566 778899
72727 49494
A A
R A
R P
77 RP
77 6P
P7 66
680594J7 5P304967
6P0594J7 58304967
57446765 3645P536
1 D
2 D
2 1
- 1234
7777 5555
- 223355
1: w rzeczywistości strit jest również bombą, ale ponieważ jest to jedyne miejsce w grze, w którym ma znaczenie kolor kart, postanowiłem go pominąć dla uproszczenia
2: wartość feniksa zagranego na karcie o wartości n wynosi w rzeczywistości n + 0,5 (feniks na 9 to 9 i pół); ponieważ wymaga to znajomości dodatkowej historii, żadne przypadki testowe nie obejmują pojedynczego granego na jednym feniksie
3: więc pierwszym wejściem nigdy nie będzie pies
777JJJ
,1234
,223355
). NieRP
jest to jednak ważne: „ Smok może być rozgrywany samodzielnie na dowolnym singlu lub ołowiu (ale nigdzie indziej). ”5555 777P
powinna być nieważna, ale obie aktualne odpowiedzi oznaczają ją jako prawidłową.Odpowiedzi:
JavaScript (ES6),
274273 bajtów(a)(b)
Zwraca false dla poprawnego lub true dla niepoprawnego.
Wypróbuj online!
W jaki sposób?
o[]
Dla każdej rangi karty w ręce zwiększa się odpowiadające jej miejsce
o[]
. Po ponownym połączeniu z ciągiem znaków możemy zastosować następujące wyrażenia regularne, aby wykryć każdy typ ręki:Jeśli ręka nie wyzwala żadnego z tych wyrażeń regularnych, jest niepoprawna.
(20*)
wzoru.Feniks (tj. Symbol wieloznaczny) jest po prostu zastępowany każdą możliwą rangą karty, zaczynając od najwyższej, aż do wykrycia dopasowania.
źródło
Python 3 ,
466455403401399 bajtówWypróbuj online! Dane wejściowe to lista rąk, gdzie ręka to lista liczb całkowitych 1 z następującym odwzorowaniem wartości:
1: Chociaż w połączonych testach TIO są wyrażane za pomocą listy ciągów ze względu na wygodę, które są tłumaczone zgodnie z mapowaniem wartości przed wywołaniem
f
źródło