Einige Sammelkarten haben einen echten Wert und können für Geld verkauft werden. Das Biegen der Karten ist verpönt, weil es ihnen den Wert nimmt und sie weniger neu aussehen lässt. Angenommen, Sie haben ein Kartenspiel (Pokemon, Magie usw.) und möchten diese mischen. Anstatt die Brücke zu machen, die alle Karten biegt, besteht eine andere einfache Möglichkeit, Karten zu mischen, darin, sie in Stapel zu legen. Hier ist was ich meine.
Hintergrund
Mit einem 60-Karten-Deck, das gemischt werden muss, können Sie die 60 Karten in drei Stapel von 20 Karten aufteilen. Es gibt mehrere Möglichkeiten, dies zu tun. Die einfachste besteht darin, eine Karte in Stapel A, dann eine in Stapel B und eine in Stapel C zu legen. Eine andere Möglichkeit besteht darin, eine Karte in Stapel C, dann in B und dann in A zu legen Es gibt auch Möglichkeiten, die Karten ungleichmäßig über die Stapel zu verteilen. Hier ist eine: Lege eine Karte in Stapel A, lege eine weitere Karte in A, lege dann eine Karte in Stapel B und lege dann eine Karte in Stapel C.
Herausforderung
Erstellen Sie ein vollständiges Programm, das ausgegeben wird, even
wenn eine bestimmte Art des Mischens in Stapel die Karten in den Stapeln gleichmäßig verteilt und uneven
ansonsten die Anzahl der Karten in jedem Stapel ausgibt .
Eingang
Die Eingabe erfolgt über STDIN oder die nächstgelegene Alternative (keine Funktionen).
[sequence] [deck size]
sequence
ist eine Zeichenfolge. Es zeigt das Muster an, in dem die Karten in die Stapel gelegt werden. Jedes unterschiedliche Zeichen entspricht einem einzelnen Stapel. Diese Zeichenfolge befindet sich immer unter der Deckgröße und enthält nur Großbuchstaben AZ.deck size
ist eine Ganzzahl, die angibt, wie viele Karten sich im Deck befinden. Wenn die Deckgröße 60 beträgt, beträgt die Anzahl der Karten im Deck 60.
Ausgabe
even
Wenn die Anzahl der Karten in jedem Stapel am Ende des Shuffle gleich ist, sollte Ihr Programm dies ausgeben.
uneven [pile1] [pile2] [...]
Wenn die Anzahl der Karten in jedem Stapel am Ende des Mischens nicht gleich ist, sollte Ihr Programm Folgendes ausgeben uneven
und die Anzahl der Karten in jedem Stapel wie uneven 20 30
folgt : Wenn Stapel A 20 Kanonen enthält und Stapel B 30 enthält. Die Reihenfolge der Stapelnummern spielen keine Rolle.
Andere Informationen
- Dies ist eine Code-Golf-Herausforderung, daher gewinnt der kürzeste Code in Bytes am 25. September. Wenn die Anzahl der Bytes gleich ist, gewinnt der zuerst übermittelte Code.
- Ihr Programm muss ein Programm sein, keine Funktion.
- Wenn möglich, fügen Sie Ihrer Antwort einen Link zu einem Online-Dolmetscher oder einen Link zu einem Ort hinzu, an dem ich einen Dolmetscher für Ihre Sprache herunterladen kann.
- Alles, was ich in dieser Herausforderung nicht spezifiziere, ist faires Spiel. Wenn ich es nicht sage, liegt es an Ihnen. Wenn etwas vage ist, sag es mir und ich werde die Antwort entsprechend bearbeiten. (Hoffentlich läuft das reibungsloser als meine letzte Herausforderung.)
Beispiele
Input | Output | Alternate outputs (if uneven)
|
ABC 30 | even
ABC 31 | uneven 11 10 10 | uneven 10 11 10 | uneven 10 10 11
BCA 60 | even
BBA 24 | uneven 8 16 | uneven 16 8
ABACBC 120 | even
BBABA 50 | uneven 20 30 | uneven 30 20
AABBB 12 | even
sequence
wie es aussieht oder wie es funktioniert. Könnten Sie bitte einige Testfälle hinzufügen?:P
ABDD 12
eine gültige Eingabe? Was soll die Ausgabe sein? Verstehe ich auch richtig, dass geradeAABBB 12
ist?Antworten:
Pyth,
3331 BytesBeispieleingabe:
quelle
Python 3.x, 106
128138BytesDies dupliziert die Eingabesequenz (öfter als nötig, was gut genug ist) und nimmt dann nur die ersten
n
Zeichen auf. Diese werden gezählt und entwederuneven
odereven
ausgewählt, und wenn erstere, werden auch die Zählungen mit gedrucktprint(*z)
, diez
für mich automatisch ausgepackt werden .32 Bytes dank xnor und Sp3000 gespart!
Außerdem verfügt Python 3.5 über eine neue Funktion, die diese 102-Byte-Lösung ermöglicht:
len({*z})>1
entpackt die Listez
, erstellt daraus einen Satz und prüft dann, ob mehr als ein Element vorhanden ist. Es ist{*z}
speziell neu.quelle
[t.count(x) for x in set(t)]
kann wie folgt erfolgenmap
:map(t.count,set(t))
. Die Frage erlaubt die Stapel in beliebiger Reihenfolge, daher denke ich, dass Sie dies vermeiden könnensorted
, auch wenn dies bedeutet, dass Sie etwas länger alsz==z[::-1]
gewünscht tun müssenz[1:]==z[:-1]
.print*
die Elemente einer Liste durch Leerzeichen getrennt drucken. Dies ist normalerweise kürzer als' '.join
.CJam, 35 Bytes
Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
quelle