打印一张随机播放的纸牌


23

输入项

没有

输出量

52张牌。无重复。卡用其Unicode字符表示,例如🂹。

Unicode代码点遵循以下格式:

  • 前三位数字是1F0
  • 下一个数字是ABC,或D分别为黑桃,红桃,方块,和俱乐部。
  • 下一个数字是1通过CE用于各种数字/花牌。1是王牌2- A是数字牌,和BDE分别是千斤顶,王后和国王。(C是骑士,不是大多数甲板上的骑士。)

输出示例:

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

规则:

  • 这是。最短答案胜出。
  • 禁止漏洞
  • 您的卡组实际上必须是随机的。如果运行20次,则必须生成20个随机(并且很可能是唯一的)输出。

注意

如果仅看到方框,请安装DejaVu字体


2
每个字符之间可以有空格吗?
6

3
我认为您的意思是应该是随机的,并且所有排列都应该具有不为零的出现概率。
Notts90

4
还有谁在看一堆箱子?
SuperJedi224

1
@Mendeleev,您还应该发布警告,说下载量将近1 GB!
Noodle17年

2
如果您仅看到方框,请安装Google的Noto字体。是的,我无法通过手机执行此操作……
丹尼斯,

Answers:


9

果冻 25 23  21 字节

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

一个尼拉度链接,返回一个字符列表,或一个完整的程序,打印出经过打乱的牌组。

在线尝试!

怎么样?

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
为什么魔术总是总是果冻呢?
狮ry-恢复莫妮卡

8

的JavaScript(ES6),107 106 108个字节

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

-1个字节感谢@nderscore


的JavaScript(ES6),120个 119 121字节

以前的版本。

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

哇,从未见过[...'ABCD']。太酷了:)
Steve Bennett

@SteveBennett确实!字符串可以像这样通过char进行迭代很不错。:)
darrylyeo

但是你仍然不能做这样的事情"ABCD".map(...)。我敢肯定有这种情况的合理原因。
史蒂夫·贝内特

@SteveBennett是的,我想是因为这样的方法返回字符串还是数组是模棱两可的。
darrylyeo

1
很好 我随意修改了代码段以获取更多图形输出,但可以随意回滚。
Arnauld

7

Python 3中 106个  94字节

感谢musicman523 --5个字节(1. sample(...,52)用作内联等效于shuffle[感谢totalhuman]; 2.使用~v&2代替v%4<2;再加上1个字节,因此可能会删除空格)

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

在线尝试!


2
好吧,我无法更好地获得自己的Python解决方案,但是我使用完全人类的切换到,将您的Python解决方案降低到了97 sample在线尝试!
musicman523

1
此外,你可以改变v%4<2,以~v&2节省多一个字节。
musicman523

做得很好!我以为也许其他random功能可以帮上忙。or ~...可以在顶部再加上一个字节or~...
乔纳森·艾伦,

6

05AB1E22 21字节

借助carusocomputing,节省了1个字节

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

在线尝试!

说明

…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ç.r21字节(已编辑,因为我忘记了删除骑士)。确实可以帮助您扎冻。
Magic Octopus Urn

@carusocomputing:在连接前先进行笛卡尔运算,所以我们可以跳过拆分。谢谢!
Emigna

6

Bash + coreutils,56个字节

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

我们用 printf将每张卡写在自己的行上,混洗行,然后通过删除换行符来连接所有行。

请注意,尽管coreutils printf命令在之后精确要求8个十六进制数字\U,但Bash内置功能printf使我们可以省略前导零。


我了解到echo 16iF09F8{2A,2B,38,39}{{1..9},A,B,D,E}0AP|dc|shuf|tr -d \\n,但您的情况更好。我不知道%b
Digital Trauma'6

1
@Digital-在编写此答案之前,我也没有!
Toby Speight

3

Python 3,112字节

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

在线尝试!


您能解释一下del语句中发生的魔术吗?我一直试图通过将其分解为三个连续的语句来弄清楚它,但是最终我删除了列表中的错误项。例如,a [:: 16]给我一张卡片和三个未解释的unicode。
CCB60

del语句确实从左到右依次分解。的第一个元素a[::16]是U + 1F0A0 PLAYING CARD BACK,应将其删除。我们还需要删除卡在普通52卡之间的Knight卡和Joker卡。请参阅en.wikipedia.org/wiki/…
Anders Kaseorg

3

Python 3,107个字节

@totallyhuman节省了6个字节,@ CCB60节省了3个字节!

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

在线尝试!


打一点球。但是,仅当允许空格作为分隔符时才有效。
–totalhuman

@totallyhuman添加可以,sep=''固定空间,但是可以使它
变为

我忘了random.sample!我让OP决定空间。我可以添加,sep=''以摆脱它们,并且仍然节省6个字节。
musicman523

chr(int(f'0x1F0 {a} {b}',16))可以缩短3个字节到chr(int('0x1F0'+ a + b,16))
CCB60 2015年

@ CCB60我是个傻瓜。好的收获
musicman523

3

PHP > = 7,102字节

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

没有在线解释器可用于IntlChar :: chr方法

PHP,112字节

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

在线尝试!

PHP,116字节

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

在线尝试!

PHP,121字节

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

在线尝试!


3

APL(Dyalog)40 38字节

乔纳森·艾伦的方法

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

()在以下数组上

⍳62 前62个整数

127136+ 加上127136

()/ 用布尔值过滤

  ⍳62 前62个整数

  16| 模数16

  180∨ GCD为180

  11> 11是否大于那些

[]选择以下元素

?⍨52 随机播放前52个整数(从前52个整数的包中选择52个随机整数)

⎕UCS 转换为相应的符号û nicode Ç haracter 小号


16.0版(当前为Beta版)解决方案(33个字符)

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

()在以下数组上

⍳62 前62个整数

16| 模数16

180∨ GCD为180

11> 11是否大于那些

 指数为真

127136+ 加上127136

[]选择以下元素

?⍨52 随机播放前52个整数(从前52个整数的包中选择52个随机整数)

⎕UCS 转换为相应的符号û nicode Ç haracter 小号


旧解决方案

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

()在以下数组上

⍳14 前14个整数

12~⍨ 除了12

()∘., 笛卡尔级联为

  ⍳4 前4个整数

  9+ 加到9

, 弄平

16⊥¨ 以16为基数评估每个

126976+ 加上126976

[]选择以下元素

?⍨52 随机播放前52个整数(从前52个整数的包中选择52个随机整数)

⎕UCS 转换为相应的符号û nicode Ç haracter 小号


3

木炭,50字节

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

在线尝试!链接是详细版本的代码。在块中创建所有64个字符的字符串,但由于随机选择了无效卡而将其过滤掉。(就此而言,不从字符串中进行替换的随机选择只有11个字节,而数组为17个字节。)

编辑:从数组中减去和其他木炭改进已将大小减少到41个字节:在线尝试!


2

爱丽丝,34字节

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

在线尝试!

说明

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

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

在线尝试!

(+1字节以使随机性更好)

我将“随机”解释为“每个可能的结果都具有非零概率”。这不是统一的分布。

此代码分为两个阶段。首先,鱼使用前两行将所有卡放在堆栈上。与黑桃,鱼重复和增量,然后检查的王牌起始如果在0,C或F的前卡的十六进制代码由末端一起乘以X  (X -12)(X -15),其中X是中charCode模16,并检查是否为零。如果是这样,它将从堆栈中删除有问题的卡。重复直到筹码有52张,然后进入阶段2:

  v
{>x
o^>l?!;

这部分代码会随机播放并打印堆栈。在x随机设置鱼的方向:

  • 如果鱼游动了,它会撞到v并返回至x不做任何操作。左方向相似。
  • 如果鱼向右游泳,则将其包裹并击中{,将整个烟囱向左旋转,然后返回到x
  • 如果鱼游走了,它会在堆叠的正面打印卡片,然后返回到x

显然,可以产生卡的所有可能顺序:在阶段2的任何时候,如果鱼向右游动了足够的时间,则可以再次打印所有尚未打印的卡。如果它们已经彼此靠近,那么这种改组技术通常不会将卡移动得很远,但是再说一次,手工改组也不会


2

R,61字节

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

随机采样卡unicode值(可以从utf8ToInt()功能中获得)的整数表示形式的向量,并删除不需要的骑士/小丑卡。



1

C#(146141字节)

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

在线演示

这与混用时使用了非常糟糕的样式Guid.NewGuid(),但这是代码高尔夫。然后,它会手动构建代理对。


这真的有效吗?每当我尝试将动态int转换为char时,都会引发异常吗?
TheLethalCoder

@TheLethalCoder,我没有任何动态值。但是,为了证明它有效,我附加了一个Ideone链接。
彼得·泰勒

我的意思是为代理对的第二部分创建的int。
TheLethalCoder

您可以通过不包括结尾的分号来保存字节
TheLethalCoder

说147个字节,读为146
尼尔A.

0

Perl 5,75个字节

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

请注意,这使用了问题中给出的皇后码点(即最后一位C)。对于实际的代码点(最后一位D),替换51,5647,52


0

Java 8,216字节

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

说明:

在这里尝试。

注意:未经测试,因为即使我已经安装了链接字体,我仍然看到框。可能必须重新启动PC或其他内容。

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.