Napisz kod, aby ustalić, kto wygrywa lewą lewą lewę w grze pik . Wygrywa najmniej bajtów.
Dane wejściowe to ciąg znaków, który zawiera listę czterech kart zagranych w kolejności, takich jak TH QC JH 2H
(Dziesiątka kier, Królowa trefl, Walet kier, Dwóch kier). Karta jest dana przez dwie postacie: kolor od CDHS
i wartość od 23456789TJQKA
. Masz gwarancję, że dane wejściowe są prawidłowe, a karty są różne.
Powinieneś wypisać liczbę 1, 2, 3 lub 4 dla zwycięzcy lewy. W tym przykładzie TH QC JH 2H
walet kier wygrywa lewę, więc powinieneś wyrzucić 3.
Twoje dane wejściowe i wyjściowe muszą być dokładnie takie, jak opisano, z wyjątkiem tego, że końcowe znaki nowej linii są opcjonalne.
Oto zasady pik do wygrania lewy. Zwycięska karta jest najwyższą z czterech, z pewnymi zastrzeżeniami. Pik jest atutem , więc każdy pik przewyższa każdy pik. Kolor pierwszej zagranej karty jest kolorem wiodącym i tylko karty tego koloru lub pik mogą wygrać lewę. Karty tego samego koloru są porównywane według ich wartości, które są podane w kolejności rosnącej jak 23456789TJQKA
.
Przypadki testowe:
TH QC JH 2H
3
KC 5S QS 9C
3
QD 2D TD 5D
1
9S 5D AD QS
4
3D 4C 3H JH
1
9S 4S TS JS
4
5H 9H 2C AD
2
5S 4C 3H QD
1
2H 2S KH AH
2
źródło
.e
to było tego warte - użycieo
jest o 1 postać krótsze..e
rozwiązaniem 28. Ale rozwiązanie 27 zakończyło się na „a”)
i dlatego miało również 28 bajtów. : ups:+@z1"KTA"
na"KTAZ"
, ale zamiast używać ciągów, użyj bezpośrednioJ"KTAZ"
na początku i+@z1J
doJ
.X
opcjonalnym (tylko jeśli aib są ciągami znaków). Ale nie jestem do końca pewien, czyXab)
powinienem ocenićXab_b
(odwrócony b, byłby miły dla takich rzeczy jakXa"</\>"
) lubXab+tbhb
(b przesunięty). Jakie masz preferencje?CJam,
3433 bajtyAlgorytm
Logika jest prosta. W tej chwili mam niestandardowy rodzaj, w którym pierwszeństwo ma druga postać reprezentująca kolor. W tym przypadku pik ma najwyższy priorytet, a następnie pierwszy rzucony zestaw. Reszta wszyscy są
-1
. Potem porządek na pierwszy znak z zamianaT
zA
iQ
zeK
mieć leksykalny sortowania.Wyjaśnienie kodu
Po pierwsze, zobaczmy, jaki jest porządek leksykalny wartości nominalnych kart:
Tak więc wszystkie liczby są w prawidłowej pozycji.
J
jest również w prawidłowej pozycji. Musimy zamienićK
iQ
iJ
iA
do porządkowania leksykalny.Wypróbuj online tutaj
źródło
JavaScript (ES6), 112
Zeskanuj listę i zwróć pozycję o najwyższej znalezionej wartości.
Uruchom fragment kodu, aby przetestować (w przeglądarce Firefox)
źródło
Perl, 73 bajty
Spróbuj mnie .
Konwertuje nazwy kart, aby kolejność wartości w grze była zgodna z kolejnością alfabetyczną, a następnie wybiera najwyższą, sortując i wyszukuje ją w oryginalnym ciągu znaków dla pozycji.
źródło
Rubin, 59 + 2 = 61
Z flagami wiersza poleceń
na
uruchomźródło
J, 47 bajtów
Stosowanie:
Metoda:
'S[second char of input]AKQJT9876543'
ciągu. Nieznane znaki uzyskują wartośćlast position + 1
domyślnie. Kolejne znaki mają znacznie mniejszą wartość (value=(16-position)!
).TH_
QC_
9S_
I8S
).(J niestety nie może bezpośrednio porównywać znaków lub ciągów. Może jedynie sprawdzić ich równość, co wykluczyło inne podejścia do tego wyzwania.)
Wypróbuj online tutaj.
źródło
C #, 237
Jak to działa: Iteruj każdą ręką, aby obliczyć „wartość” karty. Zapisz indeks o najwyższej wartości. Wartość karty jest określana jako ranga karty pomnożona przez 0, jeśli nie jest to pik lub kolor otwarcia, 1, jeśli jest to kolor otwarcia, a 9, jeśli jest to pik, ale nie kolor otwarcia. (9 wybranych b / c 2 * 9 = 18> A = 14 i 9 to pojedynczy znak)
źródło
Pyth,
3633 bajtówDość proste podejście, wykorzystuje sortowanie z niestandardową funkcją klucza, a następnie znajduje indeks o najwyższej wartości.
źródło
e
) możesz uzyskać ostatni element, więc znalezienie najwyższej wartości jest po prostu sortowaniem, a następnie uzyskaniem ostatniego elementu.Pyth, 31 bajtów
Wypróbuj tutaj.
Jak to działa:
Właściwy sposób na przeczytanie tej procedury jest od początku do końca. Procedura sortuje żądaną kartę na końcu listy, a następnie wyciąga ją i znajduje indeks na oryginalnej liście.
cz
: Generuje listę ciągów kart.c
, chop, jest zwykle funkcją binarną (arity 2), ale gdy jest wywoływana tylko na jednym wejściu, służy jako.split()
metoda łańcuchowa.S
: Stosuje się normalne zachowanie sortowania, które sortuje karty o niższych numerach przed kartami o wyższej wartości.ox"TJQKA"hN
: Porządkuje karty według indeksu (x
) w ciągu"TJQKA"
pierwszej litery karty (hN
). W przypadku kart z cyframi nie znaleziono pierwszej litery, co daje wynik-1
. Ponieważ funkcja sortowania Pytha jest stabilna, nie ma to wpływu na kolejność kart numerowanych.o}@z1Z
: Następnie ustalamy, czy kolor pierwszej zagranej karty (@z1
) znajduje się na danej karcie. PonieważTrue
sortuje się za sobąFalse
, wysyła karty koloru wiodącego na plecy.o}\SN
: Jest to to samo co poprzednio, aleS
zależy od tego, czy litera znajduje się na karcie, wysyłając pik do tyłu.hxczde
: Wyodrębnia ostatnią kartę posortowaną w ten sposób (e
), znajduje jej indeks na liście kart (xczd
) i zwiększa ją o 1 (h
), podając pożądaną lokalizację gracza.źródło