Krupier był niechlujny i stracił kontrolę nad tym, jakie karty zawiera jego / jej talia i jakich kart brakuje, czy możesz mu pomóc?
Kompletna talia składa się z 52 kart do gry, a mianowicie:
Każdy kolor w talii (kier, karo, pik, trefl) zawiera:
- Liczby [2–10]
- Lewarek
- Królowa
- Król
- As
Zadanie
Twój program będzie czytał zawartość talii ze STDIN aż do odczytania nowej linii. Możesz założyć, że dane wejściowe będą miały postać „nX nX nX nX” itd. Gdzie:
- n - dowolna liczba między [2–10] lub „J”, „Q”, „K” lub „A”. (Wielkie litery można założyć tylko dla znaków nienumerycznych)
- X - dowolny z poniższych: „H”, „D”, „S”, „C” (można założyć tylko wielkie litery)
Gdzie:
- „J” = walety
- „Q” = królowa
- „K” = król
- „A” = as
I
- „H” = serca
- „D” = Diamenty
- „S” = pik
- „C” = trefl
Możesz założyć, że na wejściu nie będzie duplikatów.
Twój program musi następnie wydrukować brakujące karty w talii do STDOUT w taki sam sposób jak wejście („nX nX nX”) lub wydrukować „Brak brakujących kart”, jeśli wszystkie 52 karty są dostarczone. Nie ma ograniczeń co do kolejności wydawania kart.
Przykładowe dane wejściowe:
9H AH 7C 3S 10S KD JS 9C 2H 8H 8C AC AS AD 7D 4D 2C JD 6S
Wynik:
3H 4H 5H 6H 7H 10H JH QH KH 2D 3D 5D 6D 8D 9D 10D QD 2S 4S 5S 7S 8S 9S QS KS 3C 4C 5C 6C 10C JC QC HC
Miłej gry w golfa!
T
zamiast10
?J
reprezentuje10
jednak?2 3 4 5 6 7 8 9 10 J Q K A
.J
reprezentuje11
.J
to dziesiąta litera alfabetu, ale nie o to chodzi. :)Odpowiedzi:
Windows Batch (CMD),
205204 bajtówPętle i kolory tworzą kompletną talię, a następnie usuwa karty wejściowe. Zapisz 1 bajt, jeśli
T
jest dozwolone zamiast10
. Zapisz 11 bajtów, jeśli argumenty wiersza poleceń są akceptowalnymi danymi wejściowymi. Edycja: Zapisano 1 bajt dzięki @ user202729.źródło
/v
do CMD (+3 bajt?), AbyEnableDelayedExpansion
wyeliminowaćcall
w pętli for. / Wydaje się, że masz dodatkową przestrzeń między(%c%)
ido
?Pyton,
147146145138131129127125120 bajtówPobiera wszystkie możliwe karty jako zestaw i odejmuje karty wejściowe.
-1 bajt dzięki mbomb007 wskazując dodatkowe miejsce w moim kodzie.
-1 bajt dzięki mbomb007 za wskazanie, niektóre golfa, które mogą być wykonane z Python 2 (-5 bajtów i + 4 bajty
raw_
wraw_input
)-7 bajtów, przełączając się z użyciem zestawów i są ustawione odejmowania listy listowe
-7 bajty dzięki ValueInk za wskazanie, że nie potrzebuję
list
pakietów-2 bajtów dzięki Datastream za zwrócenie uwagi, że samo zapisanie wszystkich wartości jest bardziej efektywne bajtowo niż dziwna rzecz, którą miałem wcześniej
-2 bajty dzięki ValueInk za wskazanie że zestawy mogą przyjmować generatory, więc nie muszę umieszczać ich w liście
-2 bajty dzięki Datastream za wskazanie, że mogę jeszcze bardziej pograć w golfa, jeśli ponownie przełączę się na Python 3 ... (+2 za parens po wydrukowaniu, -4 za
raw_
)-5 bajtów dzięki Lulhum i mnie za wskazanie poza tym przejście z powrotem do Pythona 2 (!!!) może pomóc mi zaoszczędzić bajty (ponowne użycie zakresu, użycie odwrotności zamiast
str(
i +4 z powoduraw_
)źródło
`d`
zamiast,str(d)
jeśli używasz Python 2, oprócz usuwania parens dlaprint
.for y in 'HDSC'
Działa również w celu uzyskania wszystkich postaci. (Nadal jednak potrzebujeszlist('JQKA')
drugiej części.)'1 2 3 4 5 6 7 8 9 10 J Q K A'.split()
Może zaoszczędzić kilka bajtów zamiast trwającej manipulacji[
dfor d in range(2,11)]+list('JQKA')
.1
nie trzeba go dodawać. Możesz także usunąć nawiasy zewnętrzne dla pierwszego zrozumienia listy, ponieważset
konstruktor dobrze przyjmuje obiekty generatora.05AB1E , 39 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
CJam ,
4947 bajtówWypróbuj online!
Wyjaśnienie
źródło
Galaretka , 39 bajtów
Wypróbuj online!
W jaki sposób?
źródło
C #, 343 bajtów
Po raz pierwszy opublikowałem jeden z moich golfów, ale niezbyt dobry kandydat. Jestem pewien, że mogę to jeszcze bardziej zmniejszyć.
Ideą tego jest rzadka tablica przechowująca wystąpienia kart, z indeksami obliczonymi przez wartości ASCII różnych wartości i kolorów pomnożonych względem siebie (np. As pik (AS) byłby przechowywany w obszarze o indeksie (65 * 83 = 5395)). W ten sposób każdy typ karty otrzymuje unikalny indeks, który można później sprawdzić pod kątem istnienia w tablicy „map”.
źródło
PowerShell ,
114111110 bajtówWypróbuj online!
Pobiera dane wejściowe
$n
jako ciąg rozdzielany spacjami lub ciąg znaków nowej linii. Konstruuje tablicę z zakresu2..10
konkatenowanego zJQKA
(indeksowany za pomocą,[0..3]
aby uczynić jąchar
tablicą). Ta tablica jest wprowadzana do pętli,|%{}
która ustawia pomocnika,$i
a następnie pętle nad kolorami, aby połączyć wyniki razem z$i$_
. Na końcu tej pętli mamy tablicę ciągów takich jak("2C", "2S", "2H", ... "AH", "AD")
. Tablica ta jest wprowadzana doWhere-Object
(|?{}
) z filtrem jako elementy,$_
które regexują-notmatch
dane wejściowe$n
. Wynik tego filtrowania jest zapisywany w$a
.Następnie używamy pseudo trójskładnikowymi
( , )[]
wybrać czy wyjście'No missing cards'
lub$a
, na podstawie tego, czy!!$a
zwojów do Boolean$false
lub$true
. Jeśli$a
jest pusty (co oznacza, że każda karta w talii znajduje się na wejściu), to!!$a
jest0
, więc"No missing cards"
jest zaznaczone. Odwrotnie za$a
wybór. W obu przypadkach pozostaje to w potoku, a dane wyjściowe są niejawne.źródło
Bash + coreutils, 89
I / O jako lista rozdzielana znakiem nowej linii.
Wyjaśnienie
sort
odczytuje dane rozdzielane znakiem nowej linii z STDIN i sortuje jecomm
printf %s\\n {10,{2..9},A,J,K,Q}{C,D,H,S}
jest rozszerzeniem nawiasów klamrowych w celu wygenerowania pełnej talii kart.printf
Drukuje każdą kartę na własnej linii. Kolejność jest podana w taki sposób, że dane wyjściowe są takie same, jak gdyby zostały potokowanesort
comm
porównuje pełny deck z posortowanym wejściem i wyprowadza różnicę.-3
tłumi wyjście z kolumny 3 (te wspólne)comm
jest przesyłane dogrep .
. Jeśli nie było danych wyjściowychcomm
(tzn. Wszystkie karty były na wejściu), wówczas||
klauzula „lub” wyświetla wymagany komunikat. W przeciwnym raziegrep .
dopasowuje wszystkie linie wyjściowecomm
.Wypróbuj online .
źródło
Python 2 ,
104,93,130, 114 bajtówWypróbuj online!
źródło
list('23456789JQKA')+['10']
jest sprytne. Zrozumiałem, że nie ma lepszego sposobu na rozdzielenie10
listy pojedynczych znaków w drugiej odpowiedzi pytona, ale to działa pięknie.Rubinowy, 108 + 1 = 109 bajtów
Używa
-p
flagi.źródło
PHP, 143 bajtów
źródło
sed , 157 + 1 (
-r
flaga) =170158 bajtówWypróbuj online!
To generuje wszystkie możliwe karty, a następnie usuwa każdą kartę z wejścia z wygenerowanych kart.
źródło
C # , 282 bajtów
Grał w golfa
Nie golfił
Nieczytelny czytelny
Pełny kod
Prasowe
282 bytes
- Wstępne rozwiązanie.Notatki
Nic do dodania
źródło
JavaScript (ES6),
117114111 bajtówWykorzystuje to fakt, że niezdefiniowane wpisy w tablicy generowanej przez
map()
są wymuszane na pustych ciągach kiedyjoin()
'd.Próbny
Pokaż fragment kodu
źródło
Siatkówka , 76 bajtów
Wejścia / wyjścia to lista kart rozdzielonych spacjami. Wyjście ma wiodącą przestrzeń.
Wypróbuj online!
Wyjaśnienie
Większość kodu dotyczy budowania pełnej listy kart, które powinny znajdować się w talii:
Najpierw wstawiamy nowy wiersz do danych wejściowych, ze wszystkimi możliwymi wartościami kart, a następnie dla każdego znaku tej linii (lub kilku znaków
10
) tworzymy listę wszystkich możliwych kolorów tej karty.Jest to etap deduplikacji, dzieli łańcuch na części składające się ze spacji i niektórych spacji oraz zachowuje tylko jedno wystąpienie każdej części. Modyfikator
r
sprawia, że działa to od prawej do lewej, zachowując wtedy ostatnie wystąpienie każdej porcji.Trzymamy tylko pierwszą linię, która teraz zawiera brakujące karty.
Jeśli wynik jest pusty, zamieniamy go na „Brak brakujących kart”
źródło
Python 3, 106 bajtów
Kombinacja dwóch poprzednich odpowiedzi w pythonie zmieszana z niektórymi shenaniganami rozpakowującymi ciągi.
źródło
Julia , 116 bajtów
Wypróbuj online!
Bardzo podobne do rozwiązania python Kyle Gullions. Setdiff zamiast - i lambda do testowania pustej struny jeszcze gorzej.
źródło
Japt, 39 bajtów
Spróbuj
źródło
Tcl ,
270228 znaków(Skrócono z pomocą Wit Wisarhda)
Wypróbuj online!
Wyjaśnienie:
Ta implementacja buduje słownik składający się z flagi logicznej dla każdej karty reprezentowanej przez kartezjański produkt HDSC i 2-do-A. Czyta wiersz ze standardowego wejścia, który, jeśli jest podany jako specyfikacja zgodnie z żądaniem, jest właściwie dobrze uformowaną listą Tcl. Podczas odczytywania każdej karty w słowniku wprowadzana jest wartość logiczna true dla tej karty.
Na koniec parser zapętla się przez słownik i dodaje do listy brakujących kart dowolną kartę, która nie ma wartości true w słowniku. Jeśli długość listy brakujących kart wynosi zero, wyślij „Brak brakujących kart”, w przeciwnym razie wypisz listę brakujących kart.
źródło
PHP , 138 bajtów
Biegałem z
-n
i-d error_reporting=0
Ponownie używam kodu ze starej dokumentacji, którą poprosiłem o utworzenie talii kart
Kod
Wypróbuj online!
Wyjaśnienie
źródło
$argv
może tak działać, dzięki @gwaughC # (.NET Core) , 197 bajtów
Bez LINQ.
Wypróbuj online!
źródło
Perl 6 , 73 bajtów
Wypróbuj online!
Proste odejmowanie zestawu między talią kart a wejściem.
źródło
Python 3 , 102 bajty
Wypróbuj online!
źródło