Na potrzeby tego pytania talia kart jest sformatowana w następujący sposób:
[
"AS", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "JS", "QS", "KS",
"AD", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D", "10D", "JD", "QD", "KD",
"AH", "2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "10H", "JH", "QH", "KH",
"AC", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "JC", "QC", "KC",
"J", "J"
]
Karty są zawsze formatowane jako wartość, po której następują kolory. Np. AS
Jest as pik. Dwa single J to Jokery. Chcemy przetasować tę talię kart, ale musi ona być Superb ™.
Superb Shuffle ™ to taki, w którym:
- Żadne dwie karty (oprócz Jokerów) tego samego koloru nie sąsiadują ze sobą.
- Żadna karta (z wyjątkiem Jokerów) nie sąsiaduje z jedną o tej samej wartości.
- Żadna karta (z wyjątkiem Jokerów) nie sąsiaduje z jedną z sąsiednich wartości (jedną wyższą lub jedną niższą w tej kolejności, A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A. Zauważ, że As nie może sąsiadować z 2 lub Królem).
- Jokery mogą być w dowolnej pozycji.
- Definicja Superb Shuffle ™ nie wymaga, aby karty były w innej kolejności za każdym razem, gdy są tasowane. Co nie jest zbyt wspaniałe, ale jest to Superb ™.
Ponieważ to jest Superb ™.
Przykładem może być:
[
"AS", "5D", "9H", "KC", "2D", "6H", "10C", "QS", "3H", "7C", "9S",
"KD", "4C", "6S", "10D", "AC", "3S", "7D", "JH", "J", "4D", "8H",
"QC", "AD", "5H", "9C", "JS", "2H", "6C", "8S", "QD", "3C", "5S",
"9D", "KH", "2S", "6D", "10H", "J", "3D", "7H", "JC", "KS", "4H",
"8C", "10S", "AH", "5C", "7S", "JD", "2C", "4S", "8D", "QH"
]
Wyzwanie:
- Napisz kod, aby wykonać doskonałe odtwarzanie losowe
- Użyj dowolnego języka.
- Wejście może być albo :
- talię kart, jak opisano powyżej, w tej samej kolejności , jako tablicę lub inną strukturę listy.
- Brak danych wejściowych (kod generuje talię kart w tej kolejności)
- Wyjściem musi być pełna talia kart w Superb Shuffle ™, jak opisano powyżej.
- Spróbuj wykonać Superb Shuffle ™ w najmniejszej liczbie bajtów.
- Link do tłumacza online, takiego jak Try It Online, jest preferowany, ale opcjonalny.
Miłego tasowania!
T
zamiast10
?Odpowiedzi:
Japt,
654 bajtówDzieli tablicę wejściową na podgrupy każdego 16 elementu i spłaszcza.
Spróbuj
źródło
Rubinowy , 31 bajtów
Wypróbuj online!
Wyjaśnienie:
Wybieram jedną kartę, a następnie przeskakuję przez kolejne 16 i zaczynam od pierwszej karty, gdy docieram do ostatniej karty z talii. 17 i 54 są wzajemnie pierwsze, więc z pewnością wybiorę wszystkie karty.
17 pozycja na pewno ma inny kolor, a różnica w wartości wynosi co najmniej 2: 13 (lub 15) karta ma tę samą wartość i inny kolor, więc pomijając inne 4 (lub 2), wartość jest prawidłowa .
źródło
Python 3 , 21 bajtów
Wypróbuj online!
Wyjaśnienie:
Ten sam pomysł, co moja odpowiedź Ruby, ale jeszcze krótszy w Pythonie: używam 17 talii i wybieram co 17 kart.
źródło
JavaScript, 35 bajtów
Wypróbuj online!
Biorąc tablicę talii jako dane wejściowe i zastępując każdą nieparzystą wartość inną kartą, która jest „20 kart” w talii.
źródło
Java 10,
7265 bajtówPodobne do odpowiedzi Ruby @GB , ale przy użyciu
i*7%54
tablicy wynikowej zamiasti*17%54
tablicy wejściowej do zapisania bajtu.Wypróbuj online.
Wyjaśnienie:
źródło
AS, 6S, JS, 3D, 8D, KD,
.Perl 6 ,
21 2018 bajtówDzięki Brad Gilbert b2gills za -2 bajty
Wypróbuj online!
Kolejny port odpowiedzi GB .
Zauważ, że chociaż zmienna globalnaJednak$!
nie jest resetowana między funkcjami, wartość nie ma znaczenia, ponieważ dowolna kolejność danych wyjściowych jest poprawna.$
jest resetowany.Wyjaśnienie:
źródło
$
jak w przypadku$!
lub$/
. Również jeśli użyłeś$_
zamiast tego@_
możesz zacząć od.[…]
zamiast@_[…]
zapisywania kolejnego bajtu.05AB1E ,
975 bajtówPort odpowiedzi Ruby @GB , więc proszę go głosować!
-2 bajty, drukując każdą kartę z separatorem nowej linii zamiast owijania jej na liście wyników
-2 bajty dzięki @ Mr.Xcoder
Wypróbuj online.
Wyjaśnienie:
źródło
ā17*è
powinien zaoszczędzić jeszcze 2 bajtyJavaScript, 27
Kolejna oparta na rubinowej odpowiedzi
Edytowane w oczywisty sposób
źródło
T-SQL, 31 bajtów
Jeśli nie zależy ci na dodatkowej kolumnie w danych wyjściowych, mogę sprowadzić ją do 29 bajtów :
Więc możesz sprawdzić, czy mój wynik to „Superb”, oto talia, którą produkuje:
(Wygenerowano przy użyciu nowego dodatku SQL 2017
STRING_AGG
):Najtrudniejszą częścią dla mnie nie był wybrany kod, zapełniał on tabelę wejściową (która jest dozwolona dla SQL zgodnie z naszymi regułami IO ).
Ponieważ SQL jest z natury nieuporządkowany (gwarantuje tylko pewną kolejność, jeśli dodasz wyraźną
ORDER BY
klauzulę), musiałem zawrzeć tę oryginalną kolejność jako pole i w tabeli wejściowej t . Oznacza to również, że mogę go używać do sortowania, stosując ten sam proces „względnie główny” czynnik / mod, z którego korzystają wszyscy inni. Okazało się, żei*7%54
działało tak samo dobrzei*17%54
.Oto polecenia do skonfigurowania i wypełnienia tabeli wejściowej t , w oparciu o moje rozwiązanie tego powiązanego pytania :
źródło
i
nie byłoby tu uważane za dodatkowy wkład?Galaretka ,
54 bajtówWypróbuj online!
Okazuje się, że sposób
każdy innywszyscy z wyjątkiem losowych facet robi to zapisuje bajt :(kredytową do GB za ich metody .
Sposób, w jaki poszedłem ...
Wypróbuj online!
W jaki sposób?
Napraw każdą inną kartę i przeplataj ją z obrotem talii pozostawionym o 20 miejsc (18 i 22 miejsca również działają; ponadto działa zarówno kierunek obrotu, jak i naprawianie kart nieparzystych lub parzystych)
Że jest (używając
T
do10
irj
zebj
dlaJ
s):źródło
PowerShell 3.0,
3026 bajtów-4 dzięki
kodowi Mazzy Old o wielkości 30 bajtów
Kolejny port metody GB.
źródło
$args[(0..53|%{$_*17%54})]
.The input can be either:... in the same order, as *an array*
.$args
jest tablicą. i możesz użyć rozpryskiwania . na przykład$a=@("AS", ..., "J"); &{} @a
. Spróbuj. :)&{
i}
. Możesz zapisaćparam($d)0..53|%{$d[$_*17%54]}
do pliku. i wywołaj ten plik bez&{...}
Węgiel , 8 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Kolejny port odpowiedzi Ruby @ GB. Wyjaśnienie:
źródło
Czerwony , 44 bajty
Wypróbuj online!
Kolejna interpretacja kodu GB. Dołączam 16 egzemplarzy talii do siebie, a następnie wydobywam każdą 17 kartę.
źródło