Dzisiaj jest noc gier karcianych! Jesteś rozdającym, a Twoim zadaniem jest napisanie programu rozdawania kart graczom.
Biorąc pod uwagę zestaw kart i liczbę graczy, musisz podzielić zestaw kart na rękę dla każdego gracza.
Zasady
Twój program otrzyma niepustą tablicę A
, a także niezerową liczbę całkowitą dodatnią n
. Tablicę należy następnie podzielić na n
ręce. Jeśli długość łańcucha nie jest podzielna przez n
resztki kart na końcu, należy je rozłożyć możliwie równomiernie.
- Jeśli
n==1
musisz zwrócić tablicę,A
ponieważ jest to jedyny element Jeśli
n
jest większa niż długośćA
, musisz zwrócić każdą rękę i pustą rękę. jeślin = 4
iarray A = [1,2,3]
powinieneś powrócić[[1],[2],[3]]
lub[[1],[2],[3],[]]
. Możesz obsługiwać pustą rękę z pustą, niezdefiniowaną lub zerową.Tablica może zawierać dowolny typ, a nie liczbę.
Podczas transakcji nie powinieneś zmieniać kolejności tablicy. Na przykład
if n = 2
iA= [1,2,3]
dowolny wynik zamiast[[1,3],[2]]
będzie nieprawidłowy.
Przypadki testowe
n A Output
1 [1,2,3,4,5,6] [[1,2,3,4,5,6]]
2 [1,2,3,4,5,6] [[1,3,5],[2,4,6]]
3 [1,2,3,4,5,6] [[1,4],[2,5],[3,6]]
4 [1,2,3,4,5,6] [[1,5],[2,6],[3],[4]]
7 [1,2,3,4,5,6] [[1],[2],[3],[4],[5],[6]] // or [[1],[2],[3],[4],[5],[6],[]]
Program demonstracyjny
def deal(cards, n):
i = 0
players = [[] for _ in range(n)]
for card in cards:
players[i % n].append(card)
i += 1
return players
hands = deal([1,2,3,4,5,6], 2)
print(hands)
To jest golf golfowy , więc wygrasz najkrótsze bajty każdego języka.
Zainspirowany przez Utwórz fragmenty z tablicy przez chau giang
źródło
0
?Odpowiedzi:
05AB1E ,
31 bajtZaoszczędzono 2 bajty dzięki Adnan
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
Robi dokładnie to, o co prosi wyzwanie
źródło
ι
n=7
, ale jest to akceptowalny format wyjściowy. Całkowicie tęskniłem za tym wbudowanym: /R ,
4625 bajtówWypróbuj online!
split
sA
na grupy zdefiniowane przez1:n
, recykling,1:n
aż do dopasowania długościA
.źródło
Perl 6 ,
3324 bajtówWypróbuj online!
Anonimowy blok kodu curry, który przyjmuje liczbę i zwraca wartość Lambda, która pobiera listę i zwraca listę list. To bierze drugą opcję, gdy podano liczbę większą niż długość list, np
f(4)([1,2,3])
Zwraca[[1],[2],[3]]
Wyjaśnienie:
źródło
Wolfram Language (Mathematica) , 28 bajtów
Wypróbuj online!
źródło
Japt, 2 bajty
Pobiera tablicę jako pierwsze wejście.
Spróbuj
źródło
Python 2 , 37 bajtów
Kod:
Wypróbuj online!
źródło
Galaretka ,
62 bajtyWypróbuj online!
Dzięki @JonathanAllan za zapisanie 4 bajtów
źródło
sZ
działa?J ,
13,11,10, 9 bajtówWypróbuj online!
jak (poprzednie wyjaśnienie, zasadniczo takie same)
źródło
Węgiel drzewny , 9 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Pobiera dane wejściowe w kolejności
[n, A]
i wyświetla każdą wartość w osobnym wierszu i każdą rękę w podwójnym odstępie od poprzedniego. Wyjaśnienie:źródło
Haskell , 39 bajtów
Uwaga:
Data.Lists
pochodzi z list bibliotek stron trzecich , których nie ma na Stackage i dlatego nie pojawi się na Hoogle.źródło
Data.Lists
wydaje się nie istnieć. Zakładam, że miałeś na myśliData.List
, ale nie zawierachunksOf
.chunksOf
wydaje się, że pojawia się tylko z podpisemInt -> Text -> [Text]
. 1lists
pakiecie.split
pakiecie i ponownie eksportowany przezlists
pakiet. Istnieją wersjechunksOf
list, tekstu, sekwencji i prawdopodobnie innych rzeczy.Kotlin ,
535149 bajtówStare, niepoprawne rozwiązanie działało tylko w przypadku dzielników o długości tablicy. Jestem pewien, że można to zagrać w golfa.
Wypróbuj online!
źródło
n
nie jest dzielnikiem długości listyJavaScript (Node.js) , 51 bajtów
Wypróbuj online!
JavaScript (Node.js) , 53 bajty
Wypróbuj online!
źródło
APL + WIN 26 lub 31 bajtów
Jeśli poszczególne wskazówki mogą być reprezentowane jako kolumny macierzy 2D, wówczas 26 bajtów, jeśli tablica tablic dodaje 5 bajtów.
Wypróbuj online! z firmy Dyalog Classic
lub
Wypróbuj online! Dzięki uprzejmości Dyalog Classic
Wyjaśnienie:
monit ← ⎕ o tablicę kart
((l ← ⌈ (⍴a) ÷ n) × n ← ⎕) ↑ monit o liczbę całkowitą, wstaw a z zerami do podanych parzystych rąk
(l, n) ⍴ utwórz macierz 2D z każdą kolumną reprezentującą każdą rękę
⊂ [1] w razie potrzeby przekonwertować na wektor zagnieżdżony - tablicę APL
źródło
TSQL, 44 bajty
Wypróbuj to
źródło
MathGolf , 9 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Java (JDK) , 90 bajtów
Wypróbuj online!
Dzięki Olivier Grégoire za lambda i lepsze zwiększanie podczas iteracji.
źródło
Ruby, 81 bajtów
Wypróbuj online
źródło
each_with_index
jest dość drogi w porównaniu do licznika inkrementującego, wmap{[]}
zasadzie robi to samo, comap(&:dup)
sztuczka, anonimowy proces itp., który może zredukować kod do 59 bajtów. Wypróbuj online! Sprawdź także stronę ze wskazówkami RubyPHP ,
858382 bajtyWypróbuj online!
To nie będzie najkrótszy wpis, ale pomyślałem, że fajnie byłoby spróbować zrobić to za pomocą wbudowanych funkcji tablicy PHP. Wynik: długi.
Wynik
źródło
print_flat
ciebie , zamiast ciebie możesz po prostu zrobićjson_encode
piaskownicę - tak naprawdę nie zmieniam żadnej odpowiedzi, po prostu pomyślałem, że o tym wspomnę, na zdrowie!Wolfram Language (Mathematica) , 25 bajtów
Wypróbuj online!
źródło
;; ;;
jest tylko plasterkiem, mniej więcej równoważnym pythonowi: :
; dostaje to plasterki każdego;;
nie;
lol. patrzył na to „wth isi ; ; ; ; #
”C # (interaktywny kompilator Visual C #) , 43 bajty
Wypróbuj online!
źródło
[1,2,3], 4
powinien generować[[1],[2],[3]]
. Rozdajesz 3 karty 4 graczom. Zaktualizuję główne pytanie.C (gcc), 5 bajtów
Flaga kompilatora
-Df=
(wymagana przestrzeń wiodąca) jest zgodna ze specyfikacją.f(n_cards,n_hands,card_ptr)
tworzy wskaźnik do listy rąk.Wyjaśnienie
W C powszechną praktyką jest implementowanie list list jako pojedynczej tablicy z przeplotem, gdy liczba list pozostaje stała, ale wszystkie listy można rozszerzyć. Na przykład, w tym przypadku rozdawania kart, do każdej ręki dodaje się więcej kart niż więcej rąk, więc rozsądne byłoby wdrożenie listy rąk jako listy przeplatanej. Nawiasem mówiąc, „talia” jest taką listą, dlatego zwracamy parametr niezmodyfikowany.
To wyzwanie powinno być prawdopodobnie piaskownicą.
źródło
Perl 5
-la
,6656 bajtówWypróbuj online!
źródło