Drucken Sie ein gemischtes Kartenspiel

23

Eingang

Keiner

Ausgabe

52 Karten. Keine Duplikate. Karten werden als Unicode-Zeichen dargestellt, z. B. 🂹.

Die Unicode-Codepunkte haben folgendes Format:

  • Die ersten drei Ziffern sind 1F0.
  • Die nächste Ziffer ist A, B, C, oder Dfür Pik, Herz, Karo und Kreuz ist.
  • Die nächste Ziffer ist 1durch Cund Efür die verschiedenen Zahlen / Bildkarten. 1ist Ass, 2- Asind die Zahlenkarten und B, Dund Esind der Bube, die Dame und der König. ( CIst der Ritter, der in den meisten Decks nicht vorkommt.)

Beispielausgabe:

🂶🃁🃛🃎🂧🂵🃗🂦🂽🂹🂣🃊🃚🂲🂡🂥🂷🃄🃃🃞🂺🂭🃑🃙🂪🃖🂳🃘🃒🂻🃆🂮🃍🂱🂴🃋🂸🃈🃅🃂🂨🃓🃉🂾🃇🂩🂢🂫🃔🃕 🂤🃝

Regeln:

  • Das ist . Kürzeste Antwort gewinnt.
  • Verbotene Schlupflöcher sind verboten.
  • Dein Deck muss zufällig ausgewählt sein. Bei einer 20-maligen Ausführung müssen 20 zufällige (und höchstwahrscheinlich eindeutige) Ausgaben generiert werden.

Hinweis

Wenn Sie nur Kästchen sehen, installieren Sie die DejaVu-Schriftarten .

dkudriavtsev
quelle
2
Darf zwischen den einzelnen Zeichen ein Leerzeichen stehen?
Totalhuman
3
Ich denke, Sie meinen, es sollte zufällig sein und dass alle Permutationen eine Eintrittswahrscheinlichkeit von Null haben sollten.
Notts90
4
Wer sieht noch ein paar Kisten?
SuperJedi224,
1
@ Mendeleev du solltest auch eine Warnung posten, dass dieser Download fast ein Gigabyte ist!
Noodle9
2
Wenn Sie nur Kästchen sehen, installieren Sie die Noto-Schriftarten von Google. Ja, das kann ich auf meinem Handy nicht machen ...
Dennis

Antworten:

9

Jelly ,  25 23  21 Bytes

62R%⁴g180<11T+“¢¬⁷’ẊỌ

Ein Niladic-Link, der eine Liste von Zeichen zurückgibt, oder ein vollständiges Programm, das das gemischte Deck druckt.

Probieren Sie es online!

Wie?

62R%⁴g180<11T+“¢¬⁷’ẊỌ - Main link: no arguments
62                    - literal 62
  R                   - range(62) -> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47, 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62]
    ⁴                 - literal 16
   %                  - modulo    -> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,  0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,  0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,  0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14]
      180             - literal 180
     g                - G.C.D.    -> [1,2,3,4,5,6,1,4,9,10, 1,12, 1, 2,15,180, 1, 2, 3, 4, 5, 6, 1, 4, 9,10, 1,12, 1, 2,15,180, 1, 2, 3, 4, 5, 6, 1, 4, 9,10, 1,12, 1, 2,15,180, 1, 2, 3, 4, 5, 6, 1, 4, 9,10, 1,12, 1, 2]
          11          - literal 11
         <            - less than?-> [1,1,1,1,1,1,1,1,1, 1, 1, 0, 1, 1, 0,  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0,  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0,  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]
            T         - truthy    -> [1,2,3,4,5,6,7,8,9,10,11,   13,14,       17,18,19,20,21,22,23,24,25,26,27,   29,30,       33,34,35,36,37,38,39,40,41,42,43,   45,46,       49,50,51,52,53,54,55,56,57,58,59,   61,62]
              “¢¬⁷’   - base 250 number 127136
             +        - addition (vectorises) -> card character ordinals
                   Ẋ  - shuffle the list
                    Ọ - convert to characters
                      - full program has an implicit print
Jonathan Allan
quelle
4
Warum macht immer Jelly diese Magie?
Gryphon - Reinstate Monica
8

JavaScript (ES6), 107 106 108 Bytes

a=[]
for(S of'ABCD')for(N of'123456789ABDE')a.splice(Math.random()*-~a.length,0,eval(`'\\u\{1F0${S+N}}'`))
a

-1 Byte dank @nderscore


JavaScript (ES6), 120 119 121 Byte

Vorherige Version.

a=[],[...'ABCD'].map(S=>[...'123456789ABCE'].map(N=>a.splice(Math.random()*-~a.length|0,0,eval("'\\u\{1F0"+S+N+"}'")))),a
darrylyeo
quelle
Whoa, noch nie gesehen [...'ABCD']. Das ist cool :)
Steve Bennett
@SteveBennett In der Tat! Es ist schön, dass Zeichenfolgen von char so iterabel sind. :)
darrylyeo
Aber so etwas kann man immer noch nicht machen "ABCD".map(...). Ich bin sicher, dass es vernünftige Gründe dafür gibt.
Steve Bennett
@SteveBennett Ja, ich denke, das liegt daran, dass es nicht eindeutig ist, ob eine solche Methode einen String oder ein Array zurückgibt.
Darrylyeo
1
Sehr schön. Ich habe mir die Freiheit genommen, das Snippet für eine grafischere Ausgabe zu modifizieren, kann aber jederzeit einen Rollback durchführen.
Arnauld
7

Python 3 ,  106  94 Bytes

-5 Bytes dank musicman523 (1. Verwendung sample(...,52)als Inline-Äquivalent zu shuffle[dank totalhuman]; 2. Verwendung ~v&2anstelle von v%4<2; plus ein weiteres Byte als Folge, da ein Leerzeichen entfernt werden kann)

from random import*
print(*sample([chr(v+127137)for v in range(63)if~v&2or~v%16>4],52),sep='')

Probieren Sie es online!

Jonathan Allan
quelle
2
Nun, ich war nicht in der Lage, meine eigene Python-Lösung besser zu bekommen, aber ich habe Ihre auf 97 reduziert, indem ich totalhuman's Wechsel zu verwendet habe sample. Probieren Sie es online!
musicman523
1
Darüber hinaus können Sie ändern , v%4<2um ~v&2ein weiteres Byte zu speichern.
musicman523
Schön gemacht! Ich hatte gedacht, da könnte vielleicht eine andere randomFunktion helfen. Ein weiteres Byte oben wie or ~...kann or~....
Jonathan Allan
6

05AB1E , 22 21 Bytes

1 Byte dank Carusocomputing eingespart .

…1F0A4£14L13KhJâ«Hç.r

Probieren Sie es online!

Erläuterung

…1F0                    # push the string "1F0"
    A4£                 # push the string "abcd"
       14L              # push range [1 ... 14]
          13K           # remove 13
             h          # convert to hexadecimal
              J         # join to string "123456789ABCE"
               â        # cartesian product
                «       # prepend the string to each char in the list
                 H      # convert to decimal
                  ç     # get the chars with those code points
                   .r   # randomize
Emigna
quelle
1
…1F0A4£14L13KhJâ«Hç.rfür 21 Bytes (bearbeitet, weil ich vergessen habe, Ritter zu entfernen). Hilft Ihnen zwar, Gelee zu binden.
Magic Octopus Urn
@carusocomputing: Gute Idee, den Kartesischen vor der Verkettung durchzuführen, damit wir den Split überspringen können. Vielen Dank!
Emigna
6

Bash + Coreutils, 56 Bytes

printf %b\\n \\U1F0{A..D}{{1..9},A,B,D,E}|shuf|tr -d \\n

Wir printfschreiben jede Karte in eine eigene Zeile, mischen die Zeilen und verketten dann alle Zeilen, indem wir die Zeilenumbrüche entfernen.

Beachten Sie, dass der printfBefehl coreutils genau 8 Hexadezimalziffern benötigt. Mit \Uder integrierten Bash-Funktion printfkönnen Sie jedoch führende Nullen weglassen.

Toby Speight
quelle
Ich bin so weit gekommen echo 16iF09F8{2A,2B,38,39}{{1..9},A,B,D,E}0AP|dc|shuf|tr -d \\n, aber deine ist besser. Ich wusste es nicht %b.
Digital Trauma
1
@Digital - ich auch nicht, bis ich diese Antwort geschrieben habe!
Toby Speight
3

Python 3 , 112 Bytes

from random import*
*a,=map(chr,range(127136,127200))
del a[::16],a[::-15],a[11::14]
shuffle(a)
print(*a,sep='')

Probieren Sie es online!

Anders Kaseorg
quelle
Können Sie die Magie erklären, die in der del-Anweisung vor sich geht? Ich habe versucht, es herauszufinden, indem ich es in drei aufeinanderfolgende Anweisungen zerlegte, aber am Ende lösche ich die falschen Elemente in der Liste. Zum Beispiel gibt mir ein [:: 16] eine Karte und drei nicht interpretierte Unicodes.
CCB60
Die delAnweisung gliedert sich nacheinander von links nach rechts. Das erste Element von a[::16]ist U + 1F0A0 PLAYING CARD BACK, das gelöscht werden sollte. Wir müssen auch die Ritter- und Jokerkarten löschen, die zwischen den normalen 52 stecken. Siehe en.wikipedia.org/wiki/… .
Anders Kaseorg
3

Python 3 , 107 Bytes

6 Bytes dank @totallyhuman und 3 dank @ CCB60 gespart!

from random import*
print(*sample([chr(int('1F0'+a+b,16))for a in'ABCD'for b in'123456789ABDE'],52),sep='')

Probieren Sie es online!

musicman523
quelle
Golf es ein wenig. Dies gilt jedoch nur, wenn Leerzeichen als Trennzeichen zulässig sind.
Totalhuman
Das Hinzufügen von @totallyhuman repariert ,sep=''natürlich die Leerzeichen - macht es aber 112 Bytes
vroomfondel
Ich habe es vergessen random.sample! Ich werde das OP über Räume entscheiden lassen. Ich kann hinzufügen ,sep='', um sie loszuwerden und noch 6 Bytes zu sparen.
musicman523
chr (int (f'0x1F0 {a} {b} ', 16)) kann um 3 Byte auf chr (int (' 0x1F0 '+ a + b, 16))
verkürzt werden
@ CCB60 Ich bin ein Idiot. Guter Fang
musicman523
3

PHP > = 7, 102 Bytes

for(;$i++<64;)in_array(($c=127136+$i)%16,[0,12,15])?:$q[]=IntlChar::chr($c);shuffle($q);echo join($q);

Für die Methode IntlChar :: chr ist kein Online-Interpreter verfügbar

PHP , 112 Bytes

for(;$n++<4;shuffle($r))for($i=0;$i++<14;)$i==12?:$r[]=pack("c*",240,159,131-($n>2),$n*16+112+$i);echo join($r);

Probieren Sie es online!

PHP , 116 Bytes

for(;$c=ab89[$n++];shuffle($r))for($i=0;$i++<14;)$i==12?:$r[]=hex2bin(f09f8.(2+($n>2)).$c.dechex($i));echo join($r);

Probieren Sie es online!

PHP, 121 Bytes

for(;$c=ABCD[$n++];shuffle($r))for($i=0;$i++<14;)$i==12?:$r[]=json_decode('"\ud83c\udc'.$c.dechex($i).'"');echo join($r);

Probieren Sie es online!

Jörg Hülsermann
quelle
3

APL (Dyalog) , 40 38 Bytes

Jonathan Allans Methode

UCS((11>18016|⍳62)/127136+⍳62)[?⍨52]

()Auf dem folgenden Array

⍳62 die ersten 62 ganzen Zahlen

127136+ addiere 127136 dazu

()/ Filtern Sie das mit dem Booleschen Wert

  ⍳62 Die ersten 62 ganzen Zahlen

  16| Modul 16

  180∨ GCD von 180 und das

  11> ob 11 ist größer als diese

[]Wählen Sie folgende Elemente aus

?⍨52 mische die ersten 52 Ganzzahlen (nimm 52 zufällige Ganzzahlen aus einem Beutel der ersten 52 Ganzzahlen)

⎕UCS konvertiere in entsprechende Symbole im U nicode C haracter S et


Version 16.0 (derzeit in der Beta) Lösung (33 Zeichen)

UCS(127136+⍸11>18016|⍳62)[?⍨52]

()Auf dem folgenden Array

⍳62 Die ersten 62 ganzen Zahlen

16| Modul 16

180∨ GCD von 180 und das

11> ob 11 ist größer als diese

 Indizes wo wahr

127136+ addiere 127136 dazu

[]Wählen Sie folgende Elemente aus

?⍨52 mische die ersten 52 Ganzzahlen (nimm 52 zufällige Ganzzahlen aus einem Beutel der ersten 52 Ganzzahlen)

⎕UCS konvertiere in entsprechende Symbole im U nicode C haracter S et


Alte Lösung

UCS(126976+16⊥¨,(9+⍳4)∘.,12~⍨⍳14)[?⍨52]

()Auf dem folgenden Array

⍳14 die ersten 14 ganzen Zahlen

12~⍨ außer 12

()∘., Kartesisch verknüpft mit

  ⍳4 die ersten 4 ganzen Zahlen

  9+ hinzugefügt zu 9

, ravel (platt machen) das

16⊥¨ bewerten Sie jeweils in Basis 16

126976+ dazu kommen 126976

[]Wählen Sie folgende Elemente aus

?⍨52 mische die ersten 52 Ganzzahlen (nimm 52 zufällige Ganzzahlen aus einem Beutel der ersten 52 Ganzzahlen)

⎕UCS konvertiere in entsprechende Symbole im U nicode C haracter S et

Adam
quelle
3

Holzkohle , 50 Bytes

A¹²⁷¹³⁶χA⪫E…χ⁺⁶⁴χ℅ιωσWσ«A‽σχA⪫⪪σχωσ¿﹪﹪﹪℅χ¹⁶¦¹⁵¦¹³χ

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erstellt die Zeichenfolge aller 64 Zeichen im Block, filtert jedoch ungültige Karten heraus, da diese zufällig ausgewählt werden. (Apropos, die zufällige Auswahl ohne Ersetzung aus einer Zeichenfolge beträgt nur 11 Byte, verglichen mit 17 für ein Array.)

Bearbeiten: Subtraktion von einem Array und andere Kohle Verbesserungen haben die Größe auf 41 Bytes reduziert: Probieren Sie es online!

Neil
quelle
2

Alice , 34 Bytes

'?rwd.n$@U,!6?44*%a7+-F$K?'🂡+OK

Probieren Sie es online!

Erläuterung

'?r                               push numbers 0-63 onto stack
   w                              store return address (start main loop)
    d                             get stack depth
     .n$@                         if zero, terminate
         U                        random number in [0, depth)
          ,                       move corresponding stack element to top
           !                      store on tape
             ?                    copy back from tape
              44*%                mod 16
                  a7+-            subtract 17
            6         F           does the result divide 6?
                       $K         if so, return to start of main loop
                         ?        copy card number from tape again
                          '🂡+     add 0x1F0A1
                             O    output
                              K   return to start of main loop
Nitrodon
quelle
2

> <> , 49 50 49 Bytes

"🂡"v
=?v>:1+}:88+%:c-:3-**?!~{l4d*
{>x
o^>l?!;

Probieren Sie es online!

(+1 Byte, um die Zufälligkeit zu verbessern)

Ich interpretiere "zufällig" als "jedes mögliche Ergebnis hat eine Wahrscheinlichkeit ungleich Null". Dies ist keine einheitliche Verteilung.

Dieser Code besteht aus zwei Schritten. Zuerst legt der Fisch alle Karten mit den ersten beiden Zeilen auf den Stapel. Beginnend mit dem Pik-As dupliziert und erhöht der Fisch es und überprüft dann, ob der Hex-Code der vorherigen Karte mit 0, C oder F endet, indem er x  ( x -12) ( x -15) multipliziert , wobei x der Zeichencode-Mod ist 16, und überprüfen, ob das Null ist. Wenn dies der Fall ist, wird die betreffende Karte vom Stapel gelöscht. Es wiederholt sich, bis der Stapel 52 Karten hat, und schwimmt dann in Stufe 2:

  v
{>x
o^>l?!;

Dieses Codebit mischt und druckt den Stapel. Der xlegt die Richtung des Fisches nach dem Zufallsprinzip fest:

  • Wenn der Fisch aufschwimmt, trifft er den vund kehrt zum zurück, xohne etwas zu tun. Die linke Richtung ist ähnlich.
  • Wenn der Fisch nach rechts schwimmt, wickelt er sich ein und schlägt auf den ein {, dreht den gesamten Stapel nach links und kehrt dann zum zurück x.
  • Wenn der Fisch nach unten schwimmt, druckt er die Karte vorne auf den Stapel und kehrt dann zum zurück x.

Es ist klar, dass jede mögliche Reihenfolge der Karten hergestellt werden kann: Zu jedem Zeitpunkt in Stufe 2 kann jede Karte, die noch nicht gedruckt wurde, als nächstes gedruckt werden, wenn der Fisch genügend oft nach rechts schwimmt. Diese Mischtechnik bewegt Karten normalerweise nicht sehr weit auseinander, wenn sie sich bereits in der Nähe befunden haben, aber auch nicht von Hand .

Kein Baum
quelle
2

R, 61 Bytes

cat(intToUtf8(sample(c(127137:127198)[-c(12,28,44,47,60)])))

Stichprobenweise den Vektor der ganzzahligen Darstellungen der Karten-Unicode-Werte (die von utf8ToInt()fucntion erhalten werden können) und entfernen Sie die unerwünschten Ritter- / Jokerkarten.

Andrew Haynes
quelle
57 Bytes
Giuseppe
1

C # ( 146 141 Bytes)

using System.Linq;()=>Enumerable.Range(0,52).OrderBy(i=>System.Guid.NewGuid()).Aggregate("",(s,i)=>s+"\uD83C"+(char)(56481+i+i/13*3+i%13/12))

Online-Demo

Dies verwendet extrem schlechten Stil beim Mischen mit Guid.NewGuid(), aber es ist Code-Golf. Anschließend werden die Ersatzpaare manuell erstellt.

Peter Taylor
quelle
Funktioniert das eigentlich? Wann immer ich versuchte, das dynamische int in ein char umzuwandeln, gab es eine Ausnahme?
TheLethalCoder
@TheLethalCoder, ich habe keine dynamischen Werte. Aber als Beweis, dass es funktioniert, habe ich einen Ideone-Link angehängt.
Peter Taylor
Ich meinte das int, das für den zweiten Teil des Ersatzpaares erstellt wurde.
TheLethalCoder
Sie können ein Byte speichern, indem Sie das nachgestellte Semikolon
TheLethalCoder
Sagt 147 Bytes, liest sich wie 146
Neil A.
0

Perl 5, 75 Bytes

@c=map{7946+$_%4+$_/64}4..51,56..59;print chr(16*splice@c,@c*rand,1)while@c

Beachten Sie, dass hierbei die in der Frage angegebenen Codepunkte für Damen verwendet werden (dh die letzte Ziffer C). Für die tatsächlichen Codepunkte (letzte Ziffer D), ersetzen 51,56mit 47,52.

faubi
quelle
0

Java 8, 216 Bytes

import java.util.*;()->{List<Long>l=new ArrayList();for(long i=52;i-->0;l.add(i));Collections.shuffle(l);for(Long x:l)System.out.print((char)(x.parseLong("1F0"+(char)(65+x/12)+((x%=4)>9?(char)(x>2?69:65+x):x),16)));}

Erläuterung:

Probieren Sie es hier aus.

HINWEIS: Ungetestet, da trotz Installation der verknüpften Schriftart weiterhin Kästchen angezeigt werden. Vermutlich muss mein PC neu gestartet werden oder so ..

import java.util.*;               // Required import for List, ArrayList and Collections
()->{                             // Method without parameter nor return-type
  List<Long>l=new ArrayList();    //  List
  for(long i=52;i-->0;l.add(i));  //  Fill the list with 1 through 52
  Collections.shuffle(l);         //  Randomly shuffle the list
  for(Long x:l)                   //  Loop over the shuffled list
    System.out.print(             //   Print the following character:
      (char)(x.parseLong(         //    Convert the following String to a character:
        "1F0"+                    //     The literal String "1F0" +
         (char)(65+x/12)+         //     either A, B, C or D by using x/12, adding 65,
                                  //      and casting it to a char +
         ((x%=4)>9?               //     If the current item mod-4 is 10 or higher:
            (char)(x>2?69:65+x)   //      Convert it to A, B, C or E
           :                      //     Else (1 through 9):
            x)                    //      Simply add this digit
      ,16))
    );
}                                 // End of method
Kevin Cruijssen
quelle
0

Dyalog APL, 35 Bytes

⎕ucs(∊127150+(16×⍳4)-⊂2~⍨⍳14)[?⍨52]

basierend auf Adáms Antwort

Verwendet ⎕io←0

ngn
quelle
0

Japt , 51 41 39 22 Bytes

Mit etwas Inspiration von Jonathans Jelly-Lösung .

#?ö¬k@B§XuG y#´Ãmd##

Probieren Sie es aus (oder zeigen Sie die Ausgabe mit erhöhter Geschwindigkeit anfont-size )


Erläuterung

#?                         :63
  ö¬                       :Random permutation of range [0,63)
    k                      :Remove elements that return true
     @                     :When passed through this function
      B                    :  11
       §                   :  Less than or equal to
        X                  :  Current element
         u                 :  Modulo
          G                :  16
            y              :  GCD
             #´            :  180
               Ã           :End function
                m          :Map
                  ##       :  Add 127136
                 d         :  Get character at that codepoint
Zottelig
quelle