Stampa un mazzo di carte mischiato


23

Ingresso

Nessuna

Produzione

52 carte. Nessun duplicato. Le carte sono rappresentate come caratteri unicode, ad es. 🂹.

I punti di codice Unicode seguono il seguente formato:

  • Le prime tre cifre sono 1F0.
  • La cifra successiva è A, B, C, o Dper picche, cuori, quadri e fiori rispettivamente.
  • La cifra successiva è 1passata Ce Eper i vari numeri / figure. 1è un asso, 2- Asono le carte numeriche e, e B, rispettivamente D, Eil jack, la regina e il re. ( Cè il cavaliere, che non è nella maggior parte dei mazzi.)

Esempio di output:

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

Regole:

  • Questo è . Vince la risposta più breve.
  • Sono vietate le scappatoie proibite.
  • Il tuo mazzo deve essere effettivamente randomizzato. Se eseguito 20 volte, devono essere generati 20 output casuali (e molto probabilmente unici).

Nota

Se vedi solo caselle, installa i caratteri DejaVu .


2
Possono esserci spazi tra ogni personaggio?
totalmente umano il

3
Penso che intendi che dovrebbe essere casuale e che tutte le permutazioni dovrebbero avere una probabilità zero di accadimento.
Notts90

4
Chi altro sta vedendo un mucchio di scatole?
SuperJedi224,

1
@Mendeleev dovresti anche inviare un avviso che quel download è quasi un gigabyte!
Noodle9,

2
Se vedi solo caselle, installa i caratteri Noto di Google. Sì, non posso farlo sul mio telefono ...
Dennis,

Risposte:


9

Gelatina ,  25 23  21 byte

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

Un collegamento niladico che restituisce un elenco di personaggi o un programma completo che stampa il mazzo mischiato.

Provalo online!

Come?

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

4
Perché è sempre Jelly a fare questa magia?
Gryphon - Ripristina Monica il

8

JavaScript (ES6), 107 106 108 byte

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

-1 byte grazie a @nderscore


JavaScript (ES6), 120 119 121 byte

Versione precedente.

a=[],[...'ABCD'].map(S=>[...'123456789ABCE'].map(N=>a.splice(Math.random()*-~a.length|0,0,eval("'\\u\{1F0"+S+N+"}'")))),a

Whoa, mai visto [...'ABCD']prima. È fantastico :)
Steve Bennett il

@SteveBennett Indeed! È bello che le stringhe siano iterabili da char in quel modo. :)
darrylyeo,

Ma non puoi ancora fare cose del genere "ABCD".map(...). Sono sicuro che ci sono ragioni ragionevoli per cui è così.
Steve Bennett,

@SteveBennett Sì, immagino sia perché è ambiguo se un metodo del genere restituisca una stringa o un array.
darrylyeo,

1
Molto bello. Mi sono preso la libertà di modificare lo snippet per un output più grafico, ma mi sento libero di tornare indietro.
Arnauld,

7

Python 3 ,  106  94 byte

-5 byte grazie a musicman523 (1. utilizzare sample(...,52)come inline equivalente a shuffle[grazie a totalmente umano]; 2. utilizzare ~v&2invece di v%4<2; più un ulteriore 1 byte di conseguenza in quanto uno spazio può essere rimosso)

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

Provalo online!


2
Beh, non sono riuscito a ottenere la mia soluzione Python meglio, ma ho ridotto la tua a 97 usando il passaggio totalmente a Human sample. Provalo online!
musicman523

1
Inoltre, è possibile passare v%4<2a ~v&2per salvare un altro byte.
musicman523

Ben fatto! Avevo pensato che forse un'altra randomfunzione potesse aiutare lì. Un altro byte in cima come or ~...può essere or~....
Jonathan Allan,

6

05AB1E , 22 21 byte

Salvato 1 byte grazie al carusocomputing .

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

Provalo online!

Spiegazione

…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

1
…1F0A4£14L13KhJâ«Hç.rper 21 byte (modificato perché ho dimenticato di rimuovere i cavalieri). Ti aiuta però a legare la gelatina.
Magic Octopus Urn

@carusocomputing: buona idea fare il cartesiano prima della concatenazione, così possiamo saltare la divisione. Grazie!
Emigna,

6

Bash + coreutils, 56 byte

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

Usiamo printfper scrivere ogni carta sulla propria linea, mescolare le linee, quindi concatenare tutte le linee rimuovendo i caratteri di nuova riga.

Nota che sebbene il printfcomando coreutils richieda esattamente 8 cifre esadecimali dopo \U, il Bash integrato printfci consente di omettere gli zeri iniziali.


Ho ottenuto per quanto echo 16iF09F8{2A,2B,38,39}{{1..9},A,B,D,E}0AP|dc|shuf|tr -d \\n, ma la tua è meglio. Non lo sapevo %b.
Digital Trauma,

1
@Digital - nemmeno io, fino a quando non ho scritto questa risposta!
Toby Speight,

3

Python 3 , 112 byte

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

Provalo online!


Puoi spiegare la magia che sta accadendo nella dichiarazione del? Ho cercato di capirlo dividendolo in tre affermazioni sequenziali, ma finisco per eliminare gli elementi sbagliati nell'elenco. Ad esempio, un [:: 16] mi dà una carta e tre unicode non interpretati.
CCB60,

L' delistruzione viene suddivisa in sequenza da sinistra a destra. Il primo elemento di of a[::16]è U + 1F0A0 BACKING CARD BACK, che dovrebbe essere cancellato. Dobbiamo anche eliminare le carte Knight e Joker che sono bloccate tra le normali 52. Vedi en.wikipedia.org/wiki/… .
Anders Kaseorg,

3

Python 3 , 107 byte

6 byte salvati grazie a @totallyhuman e 3 grazie a @ CCB60!

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

Provalo online!


Lo golfò un po '. Ciò è valido solo se gli spazi sono consentiti come separatori.
totalmente umano il

L'aggiunta di @totallyhuman ,sep=''risolve gli spazi, ovviamente - ma lo rende 112 byte
vroomfondel

Me ne sono dimenticato random.sample! Lascerò che l'OP decida sugli spazi. Posso aggiungere ,sep=''per sbarazzarmi di loro e ancora salvare 6 byte.
musicman523

chr (int (f'0x1F0 {a} {b} ', 16)) può essere abbreviato di 3 byte in chr (int (' 0x1F0 '+ a + b, 16))
CCB60

@ CCB60 Sono un pazzo. Buona cattura
musicman523

3

PHP > = 7, 102 byte

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

Nessun interprete online disponibile per il metodo IntlChar :: chr

PHP , 112 byte

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);

Provalo online!

PHP , 116 byte

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);

Provalo online!

PHP, 121 byte

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

Provalo online!


3

APL (Dyalog) , 40 38 byte

Metodo di Jonathan Allan

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

(... )sul seguente array

⍳62 i primi 62 numeri interi

127136+ aggiungi 127136 a quello

(... )/ filtralo con il booleano

  ⍳62 primi 62 numeri interi

  16| modulo 16

  180∨ GCD di 180 e quello

  11> se 11 è maggiore di quelli

[... ]seleziona i seguenti elementi

?⍨52 mescola i primi 52 numeri interi (scegli 52 numeri interi casuali da un sacchetto dei primi 52 numeri interi)

⎕UCS convertire simboli corrispondenti nella U nicode C haracter S et


Soluzione versione 16.0 (attualmente in versione beta) (33 caratteri)

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

(... )sul seguente array

⍳62 primi 62 numeri interi

16| modulo 16

180∨ GCD di 180 e quello

11> se 11 è maggiore di quelli

 indici dove True

127136+ aggiungi 127136 a quello

[... ]seleziona i seguenti elementi

?⍨52 mescola i primi 52 numeri interi (scegli 52 numeri interi casuali da un sacchetto dei primi 52 numeri interi)

⎕UCS convertire simboli corrispondenti nella U nicode C haracter S et


Vecchia soluzione

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

(... )sul seguente array

⍳14 i primi 14 numeri interi

12~⍨ tranne 12

(... )∘., Cartesianamente concatenato a

  ⍳4 i primi 4 numeri interi

  9+ aggiunto a 9

, ravel (appiattire) quello

16⊥¨ valutare ciascuno nella base 16

126976+ aggiungi 126976 a quello

[... ]seleziona i seguenti elementi

?⍨52 mescola i primi 52 numeri interi (scegli 52 numeri interi casuali da un sacchetto dei primi 52 numeri interi)

⎕UCS convertire simboli corrispondenti nella U nicode C haracter S et


3

Carbone , 50 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Crea la stringa di tutti i 64 caratteri nel blocco ma filtra le carte non valide mentre sono selezionate casualmente. (A proposito, la selezione casuale senza sostituzione da una stringa è di soli 11 byte, rispetto a 17 per un array.)

Modifica: sottrazione da un array e altri miglioramenti del carbone hanno ridotto la dimensione a 41 byte: provalo online!


2

Alice , 34 byte

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

Provalo online!

Spiegazione

'?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

2

> <> , 49 50 49 byte

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

Provalo online!

(+1 byte per migliorare la casualità)

Sto interpretando "casuale" per indicare "ogni possibile risultato ha una probabilità diversa da zero". Questa non è una distribuzione uniforme.

Esistono due fasi per questo codice. Innanzitutto, il pesce mette tutte le carte in pila, usando le prime due linee. Iniziando con l'asso di picche, il pesce si duplica e lo incrementa, quindi controlla se il codice esadecimale della carta precedente termina con 0, C o F moltiplicando insieme x  ( x -12) ( x -15), dove x è la mod del codice 16, e controllando se è zero. In tal caso, elimina la carta offensiva dalla pila. Si ripete fino a quando la pila non ha 52 carte, quindi passa al livello 2:

  v
{>x
o^>l?!;

Questo pezzetto di codice mescola e stampa lo stack. L' ximposta la direzione del pesce in modo casuale:

  • Se il pesce nuota verso l'alto, colpisce ve ritorna al xsenza fare nulla. La direzione sinistra è simile.
  • Se il pesce nuota a destra, avvolge e colpisce il {, ruotando l'intero stack verso sinistra, quindi ritorna al x.
  • Se il pesce nuota verso il basso, stampa la carta nella parte anteriore della pila e poi ritorna al x.

È chiaro che ogni possibile ordine delle carte può essere prodotto: in qualsiasi momento della fase 2, ogni carta che non è stata ancora stampata può essere stampata successivamente se il pesce nuota verso destra abbastanza volte. Questa tecnica di mescolamento di solito non sposta le carte molto distanti se fossero già vicine l'una all'altra, ma poi di nuovo, né mescola manualmente .


2

R, 61 byte

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

Campiona casualmente il vettore delle rappresentazioni intere dei valori unicode delle carte (che possono essere ottenuti dalla utf8ToInt()fucntion) e rimuovi le carte cavaliere / joker indesiderate.



1

C # ( 146 141 byte)

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))

Demo online

Questo usa uno stile estremamente cattivo nel mescolarsi Guid.NewGuid(), ma è code-golf. Quindi crea manualmente le coppie surrogate.


Funziona davvero? Ogni volta che ho provato a trasmettere l'int dinamico a un carattere, ha generato un'eccezione?
TheLethalCoder il

@TheLethalCoder, non ho valori dinamici. Ma come prova che funziona, ho allegato un link Ideone.
Peter Taylor,

Intendevo l'int creato per la seconda parte della coppia surrogata.
TheLethalCoder il

È possibile salvare un byte non includendo il punto
TheLethalCoder il

Dice 147 byte, legge 146
Neil A.

0

Perl 5, 75 byte

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

Si noti che questo utilizza i punti di codice per le regine come indicato nella domanda (ovvero l'ultima cifra C). Per i punti di codice effettivi (ultima cifra D), sostituire 51,56con 47,52.


0

Java 8, 216 byte

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)));}

Spiegazione:

Provalo qui.

NOTA: non testato perché anche se ho installato il carattere collegato, vedo ancora le caselle. Probabilmente devo riavviare il mio PC o qualcosa del genere ..

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


0

Japt , 51 41 39 22 byte

Con qualche ispirazione dalla soluzione Jelly di Jonathan .

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

Provalo (o visualizza l'output con un aumentofont-size )


Spiegazione

#?                         :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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.