Heute Abend ist Kartenspielabend! Sie sind der Dealer und Ihre Aufgabe ist es, ein Programm zu schreiben, mit dem die Karten an die Spieler ausgegeben werden.
Bei einem vorgegebenen Kartenfeld und der Anzahl der Spieler müssen Sie das Kartenfeld für jeden Spieler in eine Hand aufteilen.
Regeln
Ihr Programm erhält ein nicht leeres Array A
sowie eine positive Ganzzahl ungleich Null n
. Das Array sollte dann in n
Hände aufgeteilt werden. Wenn die Länge der Zeichenfolge durch n
keine verbleibenden Karten am Ende teilbar ist, sollte so gleichmäßig wie möglich verteilt werden.
- In diesem Fall
n==1
müssen Sie ein Array mit ArrayA
als einziges Element zurückgeben Wenn
n
größer als die Länge von istA
, müssen Sie jede Hand und eine leere Hand zurückgeben. wennn = 4
undarray A = [1,2,3]
, solltest du[[1],[2],[3]]
oder zurückgeben[[1],[2],[3],[]]
. Es steht Ihnen frei, die leere Hand mit leer, undefiniert oder null zu behandeln.Das Array kann einen beliebigen Typ anstelle einer Zahl enthalten.
Sie sollten die Reihenfolge des Arrays während des Handels nicht ändern. Zum Beispiel
if n = 2
undA= [1,2,3]
jedes Ergebnis[[1,3],[2]]
ist ungültig.
Testfälle
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],[]]
Demo-Programm
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)
Dies ist Code-Golf , so dass Sie die kürzesten Bytes jeder Sprache gewinnen.
Inspiriert von Create chunks from array von chau giang
quelle
0
?Antworten:
05AB1E ,
31 Byte2 Bytes gespart dank Adnan
Probieren Sie es online! oder als Testsuite
Erläuterung
Tut genau das, wonach die Herausforderung verlangt
quelle
ι
n=7
, aber das ist ein akzeptables Ausgabeformat. Ich habe das eingebaute völlig verpasst: /R ,
4625 BytesProbieren Sie es online!
split
sA
in durch definierte Gruppen einteilen1:n
und recyceln,1:n
bis Länge mit übereinstimmtA
.quelle
Perl 6 ,
3324 BytesProbieren Sie es online!
Anonymer Curry-Codeblock, der eine Zahl annimmt und ein beliebiges Lambda zurückgibt, das eine Liste annimmt und eine Liste von Listen zurückgibt. Dies ist die zweite Option, wenn eine Nummer angegeben wird, die größer als die Länge der Listen ist, z. B.
f(4)([1,2,3])
return[[1],[2],[3]]
Erläuterung:
quelle
Wolfram Language (Mathematica) , 28 Byte
Probieren Sie es online!
quelle
Japt, 2 Bytes
Nimmt das Array als erste Eingabe.
Versuch es
quelle
Python 2 , 37 Bytes
Code:
Probieren Sie es online!
quelle
Gelee ,
62 BytesProbieren Sie es online!
Vielen Dank an @ JonathanAllan für das Speichern von 4 Bytes
quelle
sZ
nichtJ ,
13,11,10, 9 BytesProbieren Sie es online!
wie (vorherige Erklärung, im Grunde das gleiche)
quelle
Kohle , 9 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Nimmt Eingaben in der Reihenfolge vor
[n, A]
und gibt jeden Wert in einer eigenen Zeile und mit doppeltem Abstand zum vorherigen Zeiger aus. Erläuterung:quelle
Haskell , 39 Bytes
Hinweis:
Data.Lists
ist von den Dritt Bibliothek Listen , die nicht auf Stackage ist und daher nicht auf Hoogle angezeigt.quelle
Data.Lists
scheint nicht zu existieren. Ich würde annehmen, dass Sie meintenData.List
, aber es enthält nichtchunksOf
.chunksOf
scheint nur mit der Unterschrift zu erscheinenInt -> Text -> [Text]
. 1lists
Paket.split
Paket enthalten und wird vom Paket erneut exportiertlists
. Es gibt Versionen vonchunksOf
für Listen, Text, Sequenzen und wahrscheinlich andere Dinge.Kotlin ,
535149 BytesDie alte, falsche Lösung funktionierte nur für Teiler der Arraylänge. Ich bin mir sicher, dass man damit Golf spielen kann.
Probieren Sie es online!
quelle
n
kein Teiler der Länge der Liste istJavaScript (Node.js) , 51 Byte
Probieren Sie es online!
JavaScript (Node.js) , 53 Byte
Probieren Sie es online!
quelle
APL + WIN 26 oder 31 Bytes
Wenn einzelne Hände als Spalten einer 2D-Matrix dargestellt werden können, addieren sich 26 Byte, wenn ein Array von Arrays vorhanden ist, zu 5 Byte.
Probieren Sie es online! Mit freundlicher Genehmigung von Dyalog Classic
oder
Probieren Sie es online! Mit freundlicher Genehmigung von Dyalog Classic
Erläuterung:
eine ← ⎕ Aufforderung zur Eingabe eines Kartenarrays
((l ← ⌈ (⍴a) ÷ n) × n ← ⎕) ↑ Aufforderung zur Eingabe einer ganzen Zahl, fülle a mit Nullen auf, um gerade Hände zu erhalten
(l, n) ⍴ Erstelle eine 2D-Matrix mit jeder Spalte, die jede Hand repräsentiert
⊂ [1] ggf. in verschachtelten Vektor konvertieren - APL-Array von Arrays
quelle
TSQL, 44 Bytes
Versuch es
quelle
MathGolf , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
Java (JDK) , 90 Byte
Probieren Sie es online!
Vielen Dank an Olivier Grégoire für das Lambda und das bessere Inkrementieren beim Iterieren.
quelle
Ruby, 81 Bytes
Probieren Sie es online
quelle
each_with_index
Ist zum Beispiel ziemlich teuer im Vergleich zu einem inkrementierenden Zähler,map{[]}
macht im Grunde das Gleiche wie Ihrmap(&:dup)
Trick, anonymer Proc, etc., der Ihren Code auf 59 Bytes reduzieren kann. Probieren Sie es online! Schauen Sie sich auch die Ruby-Tipps anPHP ,
858382 BytesProbieren Sie es online!
Dies wird nicht der kürzeste Eintrag sein, aber ich dachte, es würde Spaß machen, es mit den eingebauten PHP-Array-Funktionen zu versuchen. Ergebnis: lang.
Ausgabe
quelle
print_flat
Sie nurjson_encode
Sandbox machen können - ändert nichts an der Antwort, dachte nur, ich würde es erwähnen, Prost!Wolfram Language (Mathematica) , 25 Byte
Probieren Sie es online!
quelle
;; ;;
: :
;;
nicht;
lol war. Ich habe mir angesehen, wie es "wth isi ; ; ; ; #
"C # (Visual C # Interactive Compiler) , 43 Byte
Probieren Sie es online!
quelle
[1,2,3], 4
sollte ausgeben[[1],[2],[3]]
. Sie geben 3 Karten an 4 Spieler aus. Ich werde die Hauptfrage aktualisieren.C (gcc), 5 Bytes
Das Compiler-Flag
-Df=
(erforderliches führendes Leerzeichen) erfüllt die Spezifikation.f(n_cards,n_hands,card_ptr)
Wertet einen Zeiger auf eine Liste von Händen aus.Erläuterung
In C ist es üblich, Listen von Listen als einzelnes verschachteltes Array zu implementieren, wenn die Anzahl der Listen konstant bleibt, aber alle Listen erweitert werden können. In diesem Fall, in dem Karten ausgetauscht werden, kommt es beispielsweise häufiger vor, dass mehr Karten zu jeder Hand hinzugefügt werden, als dass mehr Hände hinzugefügt werden. Daher wäre es sinnvoll, eine Liste von Händen als verschachtelte Liste zu implementieren. Zufälligerweise ist das "Deck" eine solche Liste, und daher geben wir den Parameter unverändert zurück.
Diese Herausforderung hätte wahrscheinlich in einer Sandbox stattfinden sollen.
quelle
Perl 5
-la
,6656 BytesProbieren Sie es online!
quelle