23
\$\begingroup\$

Input

None

Output

52 cards. No duplicates. Cards are represented as their unicode characters, e.g. ๐Ÿ‚น.

The Unicode codepoints follow the following format:

  • The first three digits are 1F0.
  • The next digit is A, B, C, or D for spades, hearts, diamonds, and clubs respectively.
  • The next digit is 1 through C and E for the various numbers/face cards. 1 is ace, 2-A are the number cards, and B, D, and E are the jack, queen, and king respectively. (C is the knight, which isn't in most decks.)

Example output:

๐Ÿ‚ถ๐Ÿƒ๐Ÿƒ›๐ŸƒŽ๐Ÿ‚ง๐Ÿ‚ต๐Ÿƒ—๐Ÿ‚ฆ๐Ÿ‚ฝ๐Ÿ‚น๐Ÿ‚ฃ๐ŸƒŠ๐Ÿƒš๐Ÿ‚ฒ๐Ÿ‚ก๐Ÿ‚ฅ๐Ÿ‚ท๐Ÿƒ„๐Ÿƒƒ๐Ÿƒž๐Ÿ‚บ๐Ÿ‚ญ๐Ÿƒ‘๐Ÿƒ™๐Ÿ‚ช๐Ÿƒ–๐Ÿ‚ณ๐Ÿƒ˜๐Ÿƒ’๐Ÿ‚ป๐Ÿƒ†๐Ÿ‚ฎ๐Ÿƒ๐Ÿ‚ฑ๐Ÿ‚ด๐Ÿƒ‹๐Ÿ‚ธ๐Ÿƒˆ๐Ÿƒ…๐Ÿƒ‚๐Ÿ‚จ๐Ÿƒ“๐Ÿƒ‰๐Ÿ‚พ๐Ÿƒ‡๐Ÿ‚ฉ๐Ÿ‚ข๐Ÿ‚ซ๐Ÿƒ”๐Ÿƒ•๐Ÿ‚ค๐Ÿƒ

Rules:

  • This is . Shortest answer wins.
  • Forbidden loopholes are forbidden.
  • Your deck must be actually randomized. If run 20 times, 20 random (and most likely unique) outputs must be generated.

Note

If you only see boxes, install the DejaVu fonts.

\$\endgroup\$
19
  • 2
    \$\begingroup\$ Can there be spaces between each character? \$\endgroup\$ Jun 4, 2017 at 22:14
  • 3
    \$\begingroup\$ I think you mean it should be random and that all permutations should have a none zero probability of occurrence. \$\endgroup\$
    – Notts90
    Jun 4, 2017 at 22:39
  • 4
    \$\begingroup\$ Who else is seeing a bunch of boxes? \$\endgroup\$ Jun 5, 2017 at 1:00
  • 1
    \$\begingroup\$ @Mendeleev you should also post a warning that that download is almost a gigabyte! \$\endgroup\$
    – Noodle9
    Jun 5, 2017 at 3:52
  • 2
    \$\begingroup\$ If you only see boxes, install Google's Noto fonts. Yeah, I can't do that on my phone... \$\endgroup\$
    – Dennis
    Jun 6, 2017 at 13:37

19 Answers 19

9
\$\begingroup\$

Jelly,  25 23  21 bytes

62R%โดg180<11T+โ€œยขยฌโทโ€™แบŠแปŒ

A niladic link returning a list of characters, or a full program that prints the shuffled deck.

Try it online!

How?

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
\$\endgroup\$
1
  • 4
    \$\begingroup\$ Why is it always Jelly that does this magic? \$\endgroup\$
    – Gryphon
    Jun 5, 2017 at 0:55
8
\$\begingroup\$

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

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

o.innerHTML = a.join``
<div id=o style="font-size:80px"></div>

-1 byte thanks to @nderscore


JavaScript (ES6), 120 119 121 bytes

Previous version.

a=[],[...'ABCD'].map(S=>[...'123456789ABCE'].map(N=>a.splice(Math.random()*-~a.length|0,0,eval("'\\u\{1F0"+S+N+"}'")))),a
\$\endgroup\$
12
  • \$\begingroup\$ Whoa, never seen [...'ABCD'] before. That's cool :) \$\endgroup\$ Jun 5, 2017 at 1:02
  • \$\begingroup\$ @SteveBennett Indeed! It's nice that strings are iterable by char like that. :) \$\endgroup\$
    – darrylyeo
    Jun 5, 2017 at 1:07
  • \$\begingroup\$ But you still can't do things like "ABCD".map(...). I'm sure there are sensible reasons why that's the case. \$\endgroup\$ Jun 5, 2017 at 1:27
  • \$\begingroup\$ @SteveBennett Yeah, I'd guess it's because it's ambiguous whether such a method would return a string or an array. \$\endgroup\$
    – darrylyeo
    Jun 5, 2017 at 1:35
  • 1
    \$\begingroup\$ Very nice one. I took the liberty of modifying the snippet for a more graphical output, but feel free to rollback. \$\endgroup\$
    – Arnauld
    Jun 5, 2017 at 10:16
7
\$\begingroup\$

Python 3,  106  94 bytes

-5 bytes thanks to musicman523 (1. use sample(...,52) as an inline equivalent to shuffle [thanks to totallyhuman]; 2. use ~v&2 instead of v%4<2; plus a further 1 byte as a consequence as a space may be removed)

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

Try it online!

\$\endgroup\$
3
  • 2
    \$\begingroup\$ Well I wasn't able to get my own Python solution any better, but I got yours down to 97 using totallyhuman's switch to sample. Try it online! \$\endgroup\$ Jun 5, 2017 at 3:09
  • 1
    \$\begingroup\$ Additionally, you can change v%4<2 to ~v&2 to save one more byte. \$\endgroup\$ Jun 5, 2017 at 3:19
  • \$\begingroup\$ Nicely done! I had thought maybe another random function could help there. Another byte on top as or ~... can be or~.... \$\endgroup\$ Jun 5, 2017 at 3:26
6
\$\begingroup\$

05AB1E, 22 21 bytes

Saved 1 byte thanks to carusocomputing.

โ€ฆ1F0A4ยฃ14L13KhJรขยซHรง.r

Try it online!

Explanation

โ€ฆ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
\$\endgroup\$
2
  • 1
    \$\begingroup\$ โ€ฆ1F0A4£14L13KhJâ«Hç.r for 21 bytes (edited because I forgot to remove knights). Does help you tie jelly though. \$\endgroup\$ Jun 5, 2017 at 17:52
  • \$\begingroup\$ @carusocomputing: Good idea to do the cartesian before the concatenation, so we can skip the split. Thanks! \$\endgroup\$
    – Emigna
    Jun 5, 2017 at 18:00
6
\$\begingroup\$

Bash + coreutils, 56 bytes

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

We use printf to write each card on its own line, shuffle the lines, then concatenate all the lines by removing the newline characters.

Note that although the coreutils printf command requires exactly 8 hexadecimal digits after \U, the Bash built-in printf lets us omit leading zeros.

\$\endgroup\$
2
  • \$\begingroup\$ I got as far as echo 16iF09F8{2A,2B,38,39}{{1..9},A,B,D,E}0AP|dc|shuf|tr -d \\n, but yours is better. I didn't know about %b. \$\endgroup\$ Jun 5, 2017 at 16:45
  • 1
    \$\begingroup\$ @Digital - neither did I, until writing this answer! \$\endgroup\$ Jun 5, 2017 at 16:46
3
\$\begingroup\$

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

Try it online!

\$\endgroup\$
2
  • \$\begingroup\$ Can you explain the magic going on in the del statement? I've been trying to figure it out by breaking it down into three sequential statements, but I end up deleting the wrong items in the list. For example, a[::16] gives me one card and three uninterpreted unicodes. \$\endgroup\$
    – CCB60
    Jun 5, 2017 at 0:41
  • \$\begingroup\$ The del statement does break down sequentially from left to right. The first element of of a[::16] is U+1F0A0 PLAYING CARD BACK, which should be deleted. We also need to delete the Knight and Joker cards that are stuck in between the normal 52. See en.wikipedia.org/wiki/…. \$\endgroup\$ Jun 5, 2017 at 1:31
3
\$\begingroup\$

Python 3, 107 bytes

Saved 6 bytes thanks to @totallyhuman and 3 thanks to @CCB60!

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

Try it online!

\$\endgroup\$
6
  • \$\begingroup\$ Golfed it a little. This is only valid if spaces are allowed as separators though. \$\endgroup\$ Jun 4, 2017 at 22:20
  • \$\begingroup\$ @totallyhuman adding ,sep='' fixes the spaces, of course โ€“ but makes it 112 bytes \$\endgroup\$ Jun 4, 2017 at 22:50
  • \$\begingroup\$ I forgot about random.sample! I'll let the OP decide about spaces. I can add ,sep='' to get rid of them, and still save 6 bytes. \$\endgroup\$ Jun 4, 2017 at 22:50
  • \$\begingroup\$ chr(int(f'0x1F0{a}{b}',16)) can be shortened by 3 bytes to chr(int('0x1F0'+a+b,16)) \$\endgroup\$
    – CCB60
    Jun 5, 2017 at 0:17
  • \$\begingroup\$ @CCB60 I'm a fool. Good catch \$\endgroup\$ Jun 5, 2017 at 2:36
3
\$\begingroup\$

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

No Online Interpreter available for the IntlChar::chr method

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

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

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

Try it online!

\$\endgroup\$
3
\$\begingroup\$

APL (Dyalog), 40 38 bytes

Jonathan Allan's method

โŽ•UCS((11>180โˆจ16|โณ62)/127136+โณ62)[?โจ52]

(โ€ฆ) on the following array

โ€ƒโณ62โ€ƒthe first 62 integers

โ€ƒ127136+โ€ƒadd 127136 to that

โ€ƒ(โ€ฆ)/โ€ƒfilter that with the Boolean

โ€ƒโ€ƒโณ62โ€ƒfirst 62 integers

โ€ƒโ€ƒ16|โ€ƒmodulus 16

โ€ƒโ€ƒ180โˆจโ€ƒGCD of 180 and that

โ€ƒโ€ƒ11>โ€ƒwhether 11 is greater than those

[โ€ฆ] select the following elements

โ€ƒ?โจ52โ€ƒshuffle the first 52 integers (pick 52 random integers out of a bag of the first 52 integers)

โŽ•UCSโ€ƒconvert to corresponding symbols in the Unicode Character Set


Version 16.0 (currently in beta) solution (33 characters)

โŽ•UCS(127136+โธ11>180โˆจ16|โณ62)[?โจ52]

(โ€ฆ) on the following array

โ€ƒโณ62โ€ƒfirst 62 integers

โ€ƒ16|โ€ƒmodulus 16

โ€ƒ180โˆจโ€ƒGCD of 180 and that

โ€ƒ11>โ€ƒwhether 11 is greater than those

โ€ƒโธโ€ƒindices where True

โ€ƒ127136+โ€ƒadd 127136 to that

[โ€ฆ] select the following elements

โ€ƒ?โจ52โ€ƒshuffle the first 52 integers (pick 52 random integers out of a bag of the first 52 integers)

โŽ•UCSโ€ƒconvert to corresponding symbols in the Unicode Character Set


Old solution

โŽ•UCS(126976+16โŠฅยจ,(9+โณ4)โˆ˜.,12~โจโณ14)[?โจ52]

(โ€ฆ) on the following array

โ€ƒโณ14โ€ƒthe first 14 integers

โ€ƒ12~โจโ€ƒexcept 12

โ€ƒ(โ€ฆ)โˆ˜.,โ€ƒCartesianly concatenated to

โ€ƒโ€ƒโณ4โ€ƒthe first 4 integers

โ€ƒโ€ƒ9+โ€ƒadded to 9

โ€ƒ,โ€ƒravel (flatten) that

โ€ƒ16โŠฅยจโ€ƒevaluate each in base 16

โ€ƒ126976+โ€ƒadd 126976 to that

[โ€ฆ] select the following elements

โ€ƒ?โจ52โ€ƒshuffle the first 52 integers (pick 52 random integers out of a bag of the first 52 integers)

โŽ•UCSโ€ƒconvert to corresponding symbols in the Unicode Character Set

\$\endgroup\$
3
\$\begingroup\$

Charcoal, 50 bytes

๏ผกยนยฒโทยนยณโถฯ‡๏ผกโชซ๏ผฅโ€ฆฯ‡โบโถโดฯ‡โ„…ฮนฯ‰ฯƒ๏ผทฯƒยซ๏ผกโ€ฝฯƒฯ‡๏ผกโชซโชชฯƒฯ‡ฯ‰ฯƒยฟ๏นช๏นช๏นชโ„…ฯ‡ยนโถยฆยนโตยฆยนยณฯ‡

Try it online! Link is to verbose version of code. Creates the string of all the 64 characters in the block but filters invalid cards out as they are randomly selected. (Speaking of which, random selection without replacement from a string is only 11 bytes, compared to 17 for an array.)

Edit: Subtraction from an array and other Charcoal improvements have cut down the size to 41 bytes: Try it online!

\$\endgroup\$
3
\$\begingroup\$

Vyxal, 23 bytes

kA4แบŽk^แธขแนช\DoแบŠ`1F0`vpHCรžโ„…

Try it Online!

Port of 05AB1E.

How?

kA4แบŽk^แธขแนช\DoแบŠ`1F0`vpHCรžโ„…
kA4แบŽ                    # Get the first 4 letters of the uppercase alphabet
    k^                  # Push string "0123456789ABCDEF"
      แธขแนช                # Remove head and tail: "123456789ABCDE"
        \Do             # Remove the D: "123456789ABCE"
           แบŠ            # Cartesian product of strings: ["A1", "A2", "A3", "A4", ..., "DC", "DE"]
            `1F0`       # Push string "1FO"
                 vp     # Prepend to each: ["1FOA1", "1FOA2", ..., "1FODE"]
                   H    # Convert each from hexadecimal: [127137, 127137, ..., 127198]
                    C   # Convert each to their unicode representation: ["๐Ÿ‚ก", "๐Ÿ‚ข", ... "๐Ÿƒž"]
                     รžโ„… # Randomly shuffle

Port of Jelly is same byte count:

Vyxal, 23 bytes

62ษพ16%180ฤก11<Tยปฦ›ว”แธญยป+Cรžโ„…

Try it Online!

How?

62ษพ16%180ฤก11<Tยปฦ›ว”แธญยป+Cรžโ„…
62ษพ                     # Push range [1, 2, ..., 62]
   16%                  # Modulo each by 16
      180ฤก              # GCD each with 180: [1, 2, 3, 4, 5, 6, 1, 4, 9, 10, ..., 12, 1, 2]
          11<T          # Indices where item is less than 11: [0, 1, 2, 3, ... 13, 16, 17, ..., 26, ...]
              ยปฦ›ว”แธญยป     # Push compressed integer 127137
                   +    # Add to each (vectorizes)
                    C   # Convert each to their unicode representation
                     รžโ„… # Randomly shuffle

For both solutions, add s flag if it needs to be a string instead of a list.

\$\endgroup\$
2
\$\begingroup\$

Alice, 34 bytes

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

Try it online!

Explanation

'?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
\$\endgroup\$
2
\$\begingroup\$

><>, 49 50 49 bytes

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

Try it online!

(+1 byte to make the randomness better)

I'm interpreting "random" to mean "every possible outcome has a non-zero probability". This isn't a uniform distribution.

There are two stages to this code. First, the fish puts all the cards on the stack, using the first two lines. Starting with the ace of spades, the fish duplicates and increments it, then checks if the previous card's hex code ends in 0, C or F by multiplying together xย (x-12)ย (x-15), where x is the charcode mod 16, and checking if that's zero. If it is, it deletes the offending card from the stack. It repeats until the stack has 52 cards, then swims into stage 2:

  v
{>x
o^>l?!;

This bit of code shuffles and prints the stack. The x sets the fish's direction randomly:

  • If the fish swims up, it hits the v and goes back to the x without doing anything. The left direction is similar.
  • If the fish swims right, it wraps and hits the {, rotating the entire stack to the left, then returns to the x.
  • If the fish swims down, it prints the card at the front of the stack then returns to the x.

It's clear that every possible order of the cards can be produced: at any point in stage 2, every card that hasn't been printed yet can be printed next if the fish swims rightwards enough times. This shuffling technique usually doesn't move cards very far apart if they were already near each other, but then again, neither does shuffling by hand.

\$\endgroup\$
2
\$\begingroup\$

R, 61 bytes

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

Randomly sample the vector of integer representations of the cards unicode values (which can be obtained from utf8ToInt() fucntion) and remove the unwanted knight/joker cards.

\$\endgroup\$
1
1
\$\begingroup\$

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

This uses extremely bad style in shuffling with Guid.NewGuid(), but it's code-golf. It then builds the surrogate pairs manually.

\$\endgroup\$
5
  • \$\begingroup\$ Does this actually work? Whenever I tried casting the dynamic int to a char, it threw an exception? \$\endgroup\$ Jun 6, 2017 at 11:04
  • \$\begingroup\$ @TheLethalCoder, I don't have any dynamic values. But as proof that it works, I've attached an Ideone link. \$\endgroup\$ Jun 6, 2017 at 11:06
  • \$\begingroup\$ I meant the int created for the second part of the surrogate pair. \$\endgroup\$ Jun 6, 2017 at 11:07
  • \$\begingroup\$ You can save a byte by not including the trailing semicolon \$\endgroup\$ Jun 6, 2017 at 11:08
  • \$\begingroup\$ Says 147 bytes, reads as 146 \$\endgroup\$
    – Neil A.
    Jun 7, 2017 at 6:38
0
\$\begingroup\$

Perl 5, 75 bytes

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

Note that this uses the code points for queens as given in the question (i.e. last digit C). For the actual code points (last digit D), replace 51,56 with 47,52.

\$\endgroup\$
0
\$\begingroup\$

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

Explanation:

Try it here.

NOTE: Untested because even though I've installed the linked font, I still see boxes. Probably have to restart my PC or something..

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
\$\endgroup\$
0
\$\begingroup\$

Dyalog APL, 35 bytes

โŽ•ucs(โˆŠ127150+(16ร—โณ4)-โŠ‚2~โจโณ14)[?โจ52]

based on Adรกm's answer

uses โŽ•ioโ†0

\$\endgroup\$
0
\$\begingroup\$

Japt, 51 41 39 22 bytes

With some inspiration from Jonathan's Jelly solution.

#?รถยฌk@BยงXuG y#ยดรƒmd##

Try it (or view output with increased font-size)


Explanation

#?                         :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
\$\endgroup\$

Your Answer

By clicking โ€œPost Your Answerโ€, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.