Tak naprawdę nigdy nie było ostatecznego wyzwania dla kart ASCII AFAIK. Korzystając z następującej talii kart ASCII:
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) |
| :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------''------'
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: |
| :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------'
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: |
| (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------''------'
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): |
| ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------''------'
Weź dwie liczby całkowite p
i q
jako dane wejściowe; gdzie p
jest liczba graczy i q
liczba kart, które otrzymuje każdy gracz.
- Losowo tasuj talię kart (jest to niejednoznaczne, ale oznacza, że wszystkie karty muszą się jednakowo pojawić gdziekolwiek).
- Rozdaj 1 rundę kart na gracza, wyprowadzając
q
rzędyp
kart w każdym rzędzie.
Zasady:
- Wyniki powinny być równomiernie losowe, każda karta powinna równie dobrze pojawić się w dowolnym miejscu.
- Gwarantujemy
0 < p*q <= 52 and p < 10
, że zachowanie może być niezdefiniowane w scenariuszach, w których nie jest to spełnione. - Powinieneś wypisywać
q
rzędy kart zp
kartami w rzędzie. - Każda kolumna powinna być oddzielona
|
(znak rury otoczony spacjami); jeśli wybierzesz inny znak niż ten, wyjaśnij dlaczego. Przestrzenie otaczające tutaj NIE są opcjonalne. - Każdy wiersz musi mieć między sobą 1 lub więcej nowych wierszy, więcej niż jeden jest akceptowalny, 0 nie jest (1 nowy wiersz oznacza domyślnie nowy wiersz).
- Każdy wiersz powinien być oznaczony odtwarzaczem, który jest jego właścicielem, w formacie „Gracz N” (0 lub 1 indeksowany jest w porządku).
- Żadna karta nie może pojawić się więcej niż raz.
T
jest dla dziesięciu.
Przykłady:
Funkcja ( p=1,q=1
):
Player 1 # Can also be 0.
.------.
|2.--. |
| (\/) |
| :\/: |
| '--'2|
'------'
Funkcja ( p=2,q=1
):
Player 1 | Player 2 # Can also be "Player 0 | Player 1"
.------. | .------.
|2.--. | | |T.--. |
| (\/) | | | (\/) |
| :\/: | | | :\/: |
| '--'2| | | '--'T|
'------' | '------'
Funkcja ( p=2,q=2
):
Player 1 | Player 2 # Can also be "Player 0 | Player 1"
.------. | .------.
|J.--. | | |3.--. |
| (\/) | | | :/\: |
| :\/: | | | :\/: |
| '--'J| | | '--'3|
'------' | '------'
.------. | .------.
|8.--. | | |6.--. |
| :(): | | | :/\: |
| ()() | | | (__) |
| '--'8| | | '--'6|
'------' | '------'
Kredyt artystyczny czcionki: http://patorjk.com/software/taag
code-golf
ascii-art
random
card-games
Urna Magicznej Ośmiornicy
źródło
źródło
Each row must have 1 or more newlines inbetween them, more than one is acceptable, 0 is not.
... Ale twoje przypadki testowe nie mają znaków nowej linii między kartami ..?Odpowiedzi:
Węgiel drzewny ,
142133125 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisałem 9 bajtów, ulepszając mój losowy kod próbkowania. Zaoszczędziłem kolejne 8 bajtów, poprawiając kod drukowania kombinezonu. Wyjaśnienie:
Wczytaj liczbę kart do
q
.Pętla nad każdym graczem.
Jeśli nie jest to pierwszy odtwarzacz, wydrukuj linię pionową między poprzednim a tym odtwarzaczem.
Wydrukuj numer gracza.
Pętla nad każdą kartą.
Wydrukuj krawędź karty.
Wybierz indeks karty, który nie został jeszcze wybrany, i dodaj go do listy wybranych indeksów kart.
Wybierz i wydrukuj rangę karty, cyklicznie indeksując ją do szeregu prawidłowych rang kart (
2-9, T, J, Q, K, A
).Wydrukuj górę garnituru.
Wydrukuj środek kombinezonu, krojąc go na sznurek. Wycinek zaczyna się od indeksu karty modulo 4 i zajmuje co 4 znak, dopóki łańcuch się nie skończy (lub nie zostanie osiągnięty
f
= 1000 znak). Ponieważ 4 i 13 są chronione prawem autorskim, zapewnia to, że wszystkie 52 karty są możliwe.Wydrukuj spód koloru i kopię rangi, a następnie przejdź do punktu, który dogodnie nie jest zbyt daleko od kopii rangi, początku następnej karty lub początku linii podziału dla następny gracz.
źródło
Python 2 , 357 bajtów
Wypróbuj online!
Nie mam cholernego pomysłu.
źródło
Galaretka , 126 bajtów
Wypróbuj online!
źródło
JavaScript (ES6),
328... 312 bajtówPobiera dane wejściowe w składni curry
(p)(q)
. Gracze mają indeks 0.Próbny
Pokaż fragment kodu
W jaki sposób?
Jest to funkcja rekurencyjna, budująca dane wyjściowe od dołu do góry. Podczas głównej części, w której dobierane są karty,
i
jest inicjowanyp*q*6
i zmniejszany aż do osiągnięcia0
. Następnie rysujemy nagłówek poprzez dalsze zmniejszaniei
aż do osiągnięcia-p
.Sztuka ASCII jest podzielona na małe elementy przechowywane w tablicy
a[]
. Poniższa tabela opisuje zawartośća[]
, co ułatwia zrozumienie pozostałej części kodu.Sformatowane i skomentowane
źródło
Python 2 ,
382358346338332 bajtówWypróbuj online!
źródło
SOGL V0.12 , 106 bajtów
Wypróbuj tutaj!
Generowanie karty:
Tasowanie:
Postępowanie:
źródło
Rubinowy, 262 bajty
Trudniejsze do naśladowania, ale krótsze!
Rubinowy, 279 bajtów
Tworzy format dla każdego wiersza, a następnie używa
%
operatora,sprintf
aby go wypełnić.Fakt, że wartość karty pojawia się w każdym 3 rzędzie, jest przydatny. Wartości kart są prezentowane w systemie szesnastkowym z cyframi
01BC
podstawionymi naTJQK
.Zapisano 4 bajty z symboli koloru, biorąc pod uwagę, że góra diamentów i pik są takie same, ale dodano 2 z powrotem na
-4
końcuj%4*4-4
kodów koloru - -4 0 4 lub 8, co[-4,4]
oznacza 4 znaki rozpoczynające 4. ostatni znak w strunowy.Prawdopodobnie można zaoszczędzić jeszcze kilka bajtów. Powtarzanie kodu identyfikującego gracza jest brzydkie.
źródło
PHP, 509 bajtów
Wypróbuj online!
To moja pierwsza próba gry w golfa kodowego, więc prawdopodobnie można ją znacznie poprawić. Uznałem, że muszę gdzieś zacząć. :)
źródło
Java (OpenJDK 8) ,
784835843826815781775 bajtówWypróbuj online!
Dlaczego głosowanie negatywne jest zgodne ze specyfikacją
źródło
Function<String,String>
: ta ostatnia jest bardzo, bardzo kosztowna. Zarówno przy tworzeniu, jak i przy użyciu.n[c]=t<2?"A":t<10?""+t:""+"TJQK".charAt(t-10)
;for(j=0;j<p;j++){o+=...;l++;}
może byćfor(j=0;j<p;l++,j++)o+=...;
; możeszreturn o;
zamiast tegoSystem.out.print(o);
użyć sekundyFunction
zamiastConsumer
;,y=p*q
można usunąć i można użyćp*q
dwa razy bezpośrednio zamiasty
. W golfa jest bez wątpienia dużo więcej, ale nie mam teraz czasu, aby się tyms[l]<2?":/\\:":s[l]<3?":/\\:"
może byćs[l]<3?":/\\:"
is[i*p+j]<1?":\\/:":s[i*p+j]<2?":\\/:"
może byćs[i*p+j]<2?":\\/:"
. @ OlivierGrégoire I jestem świadomy, że najprawdopodobniej może być prawie o połowę, więc rozumiem zdanie negatywne. Ale jest to głównie brak doświadczenia i rzeczywiście nie przeczytanie wszystkich wskazówek wiele razy. Niektóre rzeczy w odpowiedzi, którą zrobiłem w przeszłości, i nie jest to szczególnie łatwe wyzwanie dla Javy. Przy okazji, jeśli masz odpowiedź o długości 400–450 bajtów, dlaczego nie opublikujesz jej jako oddzielnej odpowiedzi (jeśli jest wystarczająco różna)? Miałbyś moją opinię. ;)Python 3, 332 bajtów
źródło