Für die Zwecke dieser Frage wird ein Kartenspiel folgendermaßen formatiert:
[
"AS", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "JS", "QS", "KS",
"AD", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D", "10D", "JD", "QD", "KD",
"AH", "2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "10H", "JH", "QH", "KH",
"AC", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "JC", "QC", "KC",
"J", "J"
]
Karten werden immer als Wert formatiert, gefolgt von Farben. ZB AS
ist das Pik-As. Die beiden Single J's sind Joker. Wir wollen dieses Kartenspiel mischen, aber das Mischen muss Superb ™ sein.
Ein Superb Shuffle ™ ist eines, bei dem:
- Es liegen keine zwei Karten (außer Joker) derselben Farbe nebeneinander.
- Keine Karte (außer Joker) grenzt an eine Karte mit demselben Wert.
- Keine Karte (außer Joker) grenzt an einen benachbarten Wert (einen höheren oder einen niedrigeren in dieser Reihenfolge). A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A. Beachten Sie, dass Ace weder an eine 2 noch an einen König angrenzt.
- Die Joker können in jeder Position sein.
- Die Definition eines Superb Shuffle ™ erfordert nicht, dass die Karten bei jedem Mischen in einer anderen Reihenfolge vorliegen. Das ist nicht besonders gut, aber es ist Superb ™.
Denn das ist Superb ™.
Ein Beispiel könnte sein:
[
"AS", "5D", "9H", "KC", "2D", "6H", "10C", "QS", "3H", "7C", "9S",
"KD", "4C", "6S", "10D", "AC", "3S", "7D", "JH", "J", "4D", "8H",
"QC", "AD", "5H", "9C", "JS", "2H", "6C", "8S", "QD", "3C", "5S",
"9D", "KH", "2S", "6D", "10H", "J", "3D", "7H", "JC", "KS", "4H",
"8C", "10S", "AH", "5C", "7S", "JD", "2C", "4S", "8D", "QH"
]
Die Herausforderung:
- Schreiben Sie Code, um ein hervorragendes Shuffle auszuführen
- Verwenden Sie eine beliebige Sprache.
- Die Eingabe kann entweder sein :
- ein Kartenspiel wie oben beschrieben in der gleichen Reihenfolge , als Array oder andere Listenstruktur.
- Keine Eingabe (der Code generiert ein Kartenspiel in dieser Reihenfolge)
- Die Ausgabe muss ein vollständiges Kartenspiel in einem Superb Shuffle ™ sein, wie oben beschrieben.
- Versuchen Sie, Ihren Superb Shuffle ™ in der kleinsten Anzahl von Bytes auszuführen.
- Ein Link zu einem Online-Dolmetscher wie Try It Online ist bevorzugt, aber optional.
Viel Spaß beim Mischen!
T
statt10
?Antworten:
Japt,
654 BytesTeilt das Eingabearray in Unterarrays jedes 16. Elements auf und glättet es.
Versuch es
quelle
Ruby , 31 Bytes
Probieren Sie es online!
Erläuterung:
Ich wähle eine Karte aus, überspringe dann die nächsten 16 und beginne mit der ersten Karte, wenn ich die letzte Karte des Decks erreicht habe. 17 und 54 sind gegenseitig primitiv, also werde ich sicher alle Karten auswählen.
Die 17. Position ist garantiert eine andere Farbe und die Wertdifferenz beträgt mindestens 2: Die 13. (oder 15.) Karte hat den gleichen Wert und eine andere Farbe. Wenn Sie also andere 4 (oder 2) überspringen, stimmt der Wert .
quelle
Python 3 , 21 Bytes
Probieren Sie es online!
Erläuterung:
Die gleiche Idee wie meine Ruby-Antwort, aber in Python noch kürzer: Ich benutze 17 Decks und wähle jede 17. Karte aus.
quelle
JavaScript, 35 Bytes
Probieren Sie es online!
Nehmen Sie eine Reihe von Decks als Eingabe und ersetzen Sie jeden ungeraden Wert durch eine andere Karte, die "20 Karten" auf dem Deck entfernt ist.
quelle
Java 10,
7265 BytesÄhnlich wie die Ruby-Antwort von @ GB , jedoch mit
i*7%54
dem Ergebnis-Array anstelle desi*17%54
Eingabe-Arrays, um ein Byte zu speichern.Probieren Sie es online aus.
Erläuterung:
quelle
AS, 6S, JS, 3D, 8D, KD,
.Perl 6 ,
21 2018 BytesVielen Dank an Brad Gilbert b2gills für -2 Bytes
Probieren Sie es online!
Noch eine Portierung der Antwort von GB .
Beachten Sie, dassWird$!
der Wert keine Rolle spielt , während die globale Variable zwischen Funktionen nicht zurückgesetzt wird, da jede Reihenfolge der Ausgabe gültig ist.$
jedoch zurückgesetzt.Erläuterung:
quelle
$
wie mit$!
oder$/
. Auch wenn Sie$_
anstelle von verwenden, können@_
Sie es mit starten,.[…]
anstatt ein@_[…]
anderes Byte zu speichern.05AB1E ,
975 BytesPort of @GBs Ruby-Antwort , also stelle sicher, dass du ihn positiv bewertest!
-2 Bytes, indem Sie jede Karte mit einem Trennzeichen für neue Zeilen drucken, anstatt sie
dank @ Mr.Xcoder in eine Ergebnisliste mit -2 Bytes zu packen
Probieren Sie es online aus.
Erläuterung:
quelle
ā17*è
sollte 2 weitere Bytes speichernJavaScript, 27
Eine andere basiert auf der rubinroten Antwort
Bearbeitet in einer offensichtlichen Verkürzung
quelle
T-SQL, 31 Bytes
Wenn Ihnen eine zusätzliche Spalte in der Ausgabe egal ist, kann ich sie auf 29 Bytes reduzieren :
Sie können also überprüfen, ob meine Ausgabe "Hervorragend" ist. Hier ist das Deck, das sie produziert:
(Mit dem neuen SQL 2017-Zusatz generiert
STRING_AGG
):Der schwierige Teil für mich war nicht der Auswahlcode, er füllte die Eingabetabelle (die gemäß unseren E / A-Regeln für SQL zulässig ist ).
Da SQL von Natur aus ungeordnet ist (es garantiert nur dann eine bestimmte Reihenfolge, wenn Sie eine explizite
ORDER BY
Klausel angeben), musste ich diese ursprüngliche Reihenfolge als Feld i in die Eingabetabelle t aufnehmen . Dies bedeutet auch, dass ich damit sortieren kann, wobei derselbe "relativ primäre" Faktor / Mod-Prozess verwendet wird, den alle anderen verwenden. Ich fand, dasi*7%54
hat genauso gut funktioniert wiei*17%54
.Hier sind die Befehle zum Einrichten und Auffüllen der Eingabetabelle t , basierend auf meiner Lösung für diese verwandte Frage :
quelle
i
nicht als zusätzlicher Input zu werten?Gelee ,
54 BytesProbieren Sie es online!
Es stellt sich heraus, wie
alle anderen, mit Ausnahme des zufälligen Mannes , ein Byte spart :(Gutschrift an GB für ihre Methode .
Der Weg, den ich ging ...
Probieren Sie es online!
Wie?
Befestigen Sie jede zweite Karte und verteilen Sie sie mit einer Drehung des Kartensatzes um 20 Stellen (18 und 22 Stellen funktionieren ebenfalls; dies gilt auch für die Drehrichtung sowie für das Befestigen von ungeraden oder geraden Karten).
Das ist (mit
T
für10
undrj
&bj
für dieJ
s):quelle
PowerShell 3.0,
3026 Bytes-4 dank Mazzy
Old Code bei 30 Bytes
Ein weiterer Port der GB-Methode.
quelle
$args[(0..53|%{$_*17%54})]
.The input can be either:... in the same order, as *an array*
.$args
ist ein Array. und Sie können ein Splatting verwenden . zum beispiel$a=@("AS", ..., "J"); &{} @a
. Versuch es. :)&{
und zu zählen}
. Sie könnenparam($d)0..53|%{$d[$_*17%54]}
in eine Datei speichern. und diese Datei ohne aufrufen&{...}
Kohle , 8 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Ein weiterer Port von @ GBs Ruby-Antwort. Erläuterung:
quelle
Rot , 44 Bytes
Probieren Sie es online!
Eine weitere Interpretation des GB-Codes. Ich hänge 16 Kopien des Decks an sich selbst an und extrahiere dann jede 17. Karte.
quelle