Pierwszą sztuczką z magiczną kartą, której nauczyłem się jako dziecko, była:
- Posiadaj 1 talię kart, w której wzór na odwrocie nie jest symetryczny w pionie.
- Ułóż wszystkie karty tak, aby były skierowane w jednym kierunku.
- Poproś osobę, by „wybrała kartę, dowolną kartę, zapamiętaj ją i oddaj tobie”.
- Przejdź do umieszczenia go na pokładzie (w złym kierunku).
- Energicznie tasuj, dając iluzję, że nie będziesz wiedział, gdzie jest ich karta.
- Wykaż swoją kartę ku ich zdumieniu.
Ta sztuczka jest oczywiście nieco pozbawiona blasku w przyrodzie, jednak stanowi spore wyzwanie. Napisz program, który jeśli nie otrzyma danych wejściowych, generuje losowo potasowaną talię kart z jedną z losowo wybranych kart odwróconą. Jednakże, gdy wejściem jest talia kart z odwróconą jedną kartą, musisz wydać odwróconą kartę (we właściwej kolejności).
Talia kart
Talia kart jest zdefiniowana jako:
[2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS,
2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD,
2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH,
2C,3C,4C,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC]
Kartę definiuje się jako jej liczbę, a następnie pierwszą literę jej koloru. Odwrotna strona karty jest dokładnie odwrotna, pierwsza litera koloru, po której następuje liczba.
Wyciągnięta karta
Przykład: jeśli karta, którą losowo wybraliśmy do odwrócenia, byłaby taka 4 of Clubs (4C)
, otrzymalibyśmy (bez tasowania, oczywiście):
[2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS,
2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD,
2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH,
2C,3C,C4,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC]
Tasowanie
Następnie po przetasowaniu:
[2H,2C,6S,4D,QH,6C,TD,8C,7H,5H,C4,3D,7S,7C,KC,QD,QC,JS,7D,6D,2S,5C,KD,3C,3S,2D,8H,KH,6H,AH,8S,JH,TS,AD,5D,9H,4H,JD,QS,4S,JC,3H,8D,TC,AS,TH,KS,AC,9C,9S,5S,9D]
To jest prawidłowy wynik, biorąc pod uwagę puste dane wejściowe.
Wejście na pokład
Jednak odwrotnie, gdy nasz program odbiera powyższe dane wyjściowe jako dane wejściowe, powinien on generować dane wyjściowe 4C
. To znaczy, dla danych wejściowych:
[2H,2C,6S,4D,QH,6C,TD,8C,7H,5H,C4,3D,7S,7C,KC,QD,QC,JS,7D,6D,2S,5C,KD,3C,3S,2D,8H,KH,6H,AH,8S,JH,TS,AD,5D,9H,4H,JD,QS,4S,JC,3H,8D,TC,AS,TH,KS,AC,9C,9S,5S,9D]
Powtarzaj, dopóki nie znajdziesz odwróconej karty, i zwróć ją z powrotem do normalnego stanu. Przekonamy się więc C4
, że C nie jest liczbą i zwracamy ją jako 4C
, co jest poprawne.
Zasady
- Nie możesz ładować talii z jakichkolwiek zewnętrznych źródeł.
- Puste wejście powinno spowodować losowo potasowaną talię z odwróconą 1 losową kartą.
- Talia kart z odwróconą 1 kartą jako wejściem powinna skutkować odwróconą kartą.
- Wszelkie inne wkłady mogą spowodować wybuchowe lamy jeżdżące segwayami przez futurystyczną rurkę.
- Lub cokolwiek innego, jeśli o to chodzi.
- Zarówno wybrana karta, jak i kolejność losowania muszą być jednakowo losowe.
- IE wszystkie karty mają równe szanse, że zostaną wybrane do odwrócenia.
- IE wszystkie kombinacje kart mają jednakową szansę pojawienia się.
- Możesz użyć
SHCD
lubshcd
do garniturów, ale zachowaj spójność:- Jeśli wybierzesz wielkie litery (
SHCD
), musisz także użyćTJQKA
. - Jeśli wybierzesz małe litery (
shcd
), musisz także użyćtjqka
.
- Jeśli wybierzesz wielkie litery (
- To jest golf golfowy , zwycięzca ma najmniej bajtów.
źródło
Odpowiedzi:
Siatkówka ,
616059 bajtówWypróbuj online! Edycja: Zapisano
12 bajty dzięki @MartinEnder. Wyjaśnienie:Usuń wszystkie nieodwrócone karty. To powinno zostawić jedną odwróconą kartę lub nie mieć żadnej karty.
Jeśli wejście jest (teraz) puste, utwórz paczkę kart.
Losowo wybierz jedną kartę i odwróć ją (odwraca pojedynczą odwróconą kartę).
Potasuj kartę (karty).
źródło
05AB1E , 29 bajtów
Wypróbuj online!
źródło
1
i drugiea
.Y9ŸJ
jako9LJ
PowerShell v2 lub nowszy, 175 bajtów
Długa wersja:
Stosowanie:
Utwórz potasowaną talię i przechowuj ją w zmiennej:
Na przykład sprawdź zmienną do woli
Wklej talię z powrotem do skryptu:
źródło
Python 2 , 175 bajtów
Wypróbuj online! puste wejście jest oznaczone jako
[]
źródło
> <> ,
215193 bajtówWypróbuj online!
Pobiera dane wejściowe jako nierozdzielone karty i dane wyjściowe jako takie same (np
KCAC5C6S...
)Aby ułatwić testowanie, oto wersja która pobiera dane wejściowe jako oddzielone przecinkami, a dane wyjściowe - jako separację nowego wiersza.
Wszystkie
x0
s to tylko próba stworzenia półjednolitego generatora liczb losowych. Więcej z nich zwiększa zakres możliwych wartości, a wręcz przeciwnie za mniej. 10 z nich uznałem za wystarczająco losowe.Pamiętaj, że przestrzega następujących zasad:
Ale nie wszystkie tasowane kombinacje są możliwymi wyjściami (a tak naprawdę zdecydowana większość nie jest).
źródło
Galaretka , 26 bajtów
Monadyczny link akceptujący listę list znaków (odcinek 0 kart lub pełna talia 52 kart z odwróconą jedną kartą) i zwracający listę list znaków (odcinek 1 odwróconej karty, ale do przodu lub pełna - pokład z odwróconą jedną losową kartą).
Wypróbuj online!(stopka do dopasowania reprezentacji wejściowych i wyjściowych - jako pełny program Python-kod Jelly analizuje argument i rozbija znaki razem dla wyniku)
W jaki sposób?
źródło
Ẋ
przedU
(może uda mi się ustalić na zero bajtów zamiast), ale będzie musiał zrobić to później ...[[number, suit]]
zamiast[number, suit]
reprezentować pojedynczą kartę, gdy dane wejściowe nie są puste.Rubinowy , 95 (lub 100) bajtów
Biorąc pod uwagę pustą tablicę jako dane wejściowe, zwraca talię jako tablicę ciągów znaków. Biorąc pod uwagę niepustą tablicę jako dane wejściowe, zwraca odwróconą kartę jako tablicę zawierającą pojedynczy ciąg. Jeśli odwrócona karta jest wymagana jako ciąg, a nie tablica jednoelementowa zawierająca ciąg, poniższe dodaje 5 bajtów: zmień
s-n
na(s-n)[0]
Wypróbuj online!
Pierwsza linia generuje standardową talię. Druga linia dzieli się w następujący sposób
źródło
Java 8,
275274259 bajtówDane wejściowe to ciąg
java.util.List
znaków , dane wyjściowe to ciąg znaków lub zależnie od danych wejściowych.Wyjaśnienie:
Wypróbuj online.
źródło
Pyth, 45 bajtów
Pobiera pustą listę dla pustych danych wejściowych.
Wypróbuj online
Wyjaśnienie
źródło
R ,
177171 bajtówWypróbuj online!
Biorąc pod uwagę puste dane wejściowe (wywołanie
f
bez danych wejściowych), domyślnie ustawiamyl=1
losową permutacjęm
talii. Zarozumiałysample
jest naprawdę losowy, istnieje prawdopodobieństwo, że każda karta będzie pierwsza na tej liście. Więc modyfikujemy pierwszy, a następnie ponownie tasujemy, zwracając listę.Odwracając go, szukamy karty zaczynającej się od jednej
SDHC
i odwracamy ją.źródło
Python 2 , 135 bajtów
Wypróbuj online!
Karty są krotkami po
(value,suit)
Puste wejście to
[]
źródło