뒤섞인 카드 덱 인쇄


23

입력

없음

산출

52 장. 중복이 없습니다. 카드는 유니 코드 문자로 표시됩니다 (예 : 🂹).

유니 코드 코드 포인트는 다음과 같은 형식을 따릅니다 :

  • 처음 세 자리는 1F0입니다.
  • 다음 자리 인 A, B, C, 또는 D각각 스페이드, 하트, 다이아몬드, 클럽합니다.
  • 다음 숫자는 1을 통해 C그리고 E다양한 번호 / 얼굴 카드를. 1에이스입니다 2- A숫자 카드, 그리고 B, D그리고 E잭, 여왕, 왕이 각각 있습니다. ( C대부분의 덱에는없는 기사입니다.)

출력 예 :

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

규칙 :

  • 이것은 입니다. 최단 답변이 이깁니다.
  • 금지 된 허점 은 금지되어 있습니다.
  • 데크는 실제로 무작위로 지정되어야합니다. 20 회 실행하는 경우 20 개의 임의 (및 가장 고유 한) 출력이 생성되어야합니다.

노트

상자 만 표시 되면 DejaVu 글꼴을 설치 하십시오 .


2
각 문자 사이에 공백이있을 수 있습니까?
전적으로 인간

3
나는 그것이 무작위이어야하고 모든 순열이 0의 발생 확률을 가져서는 안된다고 생각합니다.
Notts90

4
또 누가 상자를보고 있습니까?
SuperJedi224

1
@ Mendeleev는 또한 다운로드가 거의 기가 바이트라는 경고를 게시해야합니다!
국수 9

2
상자 만 표시되면 Google의 Noto 글꼴을 설치하십시오. 그래, 난 내 휴대 전화에서 할 수 없습니다 ...
데니스

답변:


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
왜 항상이 젤리가 젤리입니까?
그리폰-복원 모니카

8

자바 스크립트 (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

@nderscore 덕분에 -1 바이트


자바 스크립트 (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 1

@SteveBennett 실로! 문자열을 char로 반복 할 수 있다는 것이 좋습니다. :)
darrylyeo 2018 년

그러나 여전히 같은 일을 할 수 없습니다 "ABCD".map(...). 그럴만한 이유가 있다고 확신합니다.
스티브 베넷

@SteveBennett 그래, 그런 메소드가 문자열 또는 배열을 반환하는지 여부가 모호하기 때문입니다.
darrylyeo

1
아주 좋은 것입니다. 더 많은 그래픽 출력을 위해 스 니펫을 자유롭게 수정할 수 있지만 자유롭게 롤백 할 수 있습니다.
Arnauld

7

파이썬 3 ,  106  94 바이트

-5 (1. musicman523 덕분 바이트 sample(...,52)에 인라인 동등 shuffle; 2. [totallyhuman 덕분] ~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
글쎄, 나는 더 나은 내 자신의 파이썬 솔루션을 얻을 수 없었지만 totallyhuman의 스위치를 사용하여 97까지 줄 sample였습니다. 온라인으로 사용해보십시오!
musicman523

1
또한, 당신은 변경할 수 있습니다 v%4<2~v&2또 하나의 바이트를 저장합니다.
musicman523

잘 했어요! 다른 random기능이 도움이 될 수 있다고 생각 했습니다. 상단에 또 다른 바이트가있을 or ~...수 있습니다 or~....
Jonathan Allan

6

05AB1E , 22 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 바이트 (나이트 제거를 잊어 버렸기 때문에 편집 됨). 그래도 젤리를 묶는 데 도움이됩니다.
매직 문어 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 자리 16 진수가 필요 하지만 \UBash 내장을 printf사용하면 선행 0을 생략 할 수 있습니다.


나는까지는 echo 16iF09F8{2A,2B,38,39}{{1..9},A,B,D,E}0AP|dc|shuf|tr -d \\n있지만 당신의 것이 좋습니다. 에 대해 몰랐습니다 %b.
디지털 외상

1
@ Digital-이 답변을 쓸 때까지 나도 마찬가지였습니다!
Toby Speight

3

파이썬 3 , 112 바이트

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

온라인으로 사용해보십시오!


델 문에서 진행되는 마술에 대해 설명해 주시겠습니까? 세 개의 순차적 문장으로 나누어서 알아 내려고했지만 목록에서 잘못된 항목을 삭제하게됩니다. 예를 들어, a [:: 16]은 하나의 카드와 3 개의 해석되지 않은 유니 코드를 제공합니다.
CCB60

del문은 왼쪽에서 오른쪽으로 순차적으로 분해 않습니다. 의 첫 번째 요소 a[::16]는 U + 1F0A0 PLAYING CARD BACK이며 삭제해야합니다. 또한 일반 52 사이에 붙어있는 기사 및 조커 카드도 삭제해야합니다 . en.wikipedia.org/wiki/…
Anders Kaseorg 1

3

파이썬 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='')

온라인으로 사용해보십시오!


조금 골프를 쳤다. 공백이 구분자로 허용되는 경우에만 유효합니다.
전적으로 인간

@totallyhuman 추가 ,sep=''수정을 공백 물론이 - 그러나하게 그것은 112 바이트
vroomfondel

나는 잊었다 random.sample! OP가 공백을 결정하도록하겠습니다. 나는 ,sep=''그들을 제거하기 위해 추가 할 수 있으며 여전히 6 바이트를 절약 할 수 있습니다 .
musicman523

chr (int (f'0x1F0 {a} {b} ', 16))을 3 바이트 단축하여 chr (int ('0x1F0 '+ a + b, 16))
CCB60

@ 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∨ 180의 GCD와

  11> 11이 그보다 큰지 여부

[]다음 요소를 선택하십시오

?⍨52 첫 52 개의 정수를 섞으십시오 (처음 52 개의 정수 백에서 52 개의 임의 정수를 선택하십시오)

⎕UCS 에 대응하는 심볼을 변환 U nicode C haracter S


버전 16.0 (현재 베타 버전) 솔루션 (33 자)

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

()다음 배열에서

⍳62 처음 62 개의 정수

16| 계수 16

180∨ 180의 GCD와

11> 11이 그보다 큰지 여부

 어디에 인덱스

127136+ 그것에 127136을 추가하십시오

[]다음 요소를 선택하십시오

?⍨52 첫 52 개의 정수를 섞으십시오 (처음 52 개의 정수 백에서 52 개의 임의 정수를 선택하십시오)

⎕UCS 에 대응하는 심볼을 변환 U nicode C haracter S


오래된 솔루션

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 에 대응하는 심볼을 변환 U nicode C haracter S


3

, 50 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 블록에 64 자 모두의 문자열을 생성하지만 무작위로 선택된 유효하지 않은 카드를 걸러냅니다. (즉, 문자열의 대체없이 무작위 선택은 배열의 17에 비해 11 바이트에 불과합니다.)

편집 : 배열에서 뺄셈과 다른 숯 개선으로 크기가 41 바이트로 줄었 습니다. 온라인으로보십시오!


2

Alice , 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이 아닌 확률을 가짐"으로 해석하고 있습니다. 이것은 균일 한 분포가 아닙니다.

이 코드에는 두 가지 단계가 있습니다. 먼저 물고기는 처음 두 줄을 사용하여 모든 카드를 스택에 넣습니다. 스페이드 에이스로 시작하여 물고기는 복제하고 증가시킨 다음 이전 카드의 16 진수 코드가 x  ( x -12) ( x -15) 를 곱하여 0, C 또는 F로 끝나는 지 확인합니다. 여기서 x 는 문자 코드 모드입니다 16이고 0인지 확인합니다. 맞으면 해당 카드를 스택에서 삭제합니다. 스택에 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)])))

카드 유니 코드 값의 정수 표현 벡터를 무작위로 샘플링하고 (기능에서 얻을 수 있음 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()하지만 코드 골프입니다. 그런 다음 대리 쌍을 수동으로 빌드합니다.


이것이 실제로 작동합니까? dynamic int를 char로 캐스팅하려고 할 때마다 예외가 발생합니까?
TheLethalCoder

@ TheLethalCoder, 동적 값이 없습니다. 그러나 그것이 작동한다는 증거로 Ideone 링크를 첨부했습니다.
피터 테일러

나는 대리 쌍의 두 번째 부분을 위해 int가 생성되었음을 의미합니다.
TheLethalCoder

후미 세미콜론을 포함하지 않음으로써 바이트를 절약 할 수 있습니다
TheLethalCoder

147 바이트, 146 번으로 읽음
Neil A.

0

펄 5, 75 바이트

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

이것은 질문에 주어진 여왕의 코드 포인트 (즉, 마지막 숫자 C)를 사용합니다. 실제 코드 포인트 (마지막 자리의 경우 D) 교체 51,56와 함께 47,52.


0

자바 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


0

apt , 51 41 39 22 바이트

Jonathan의 Jelly 솔루션 에서 영감을 얻었습니다 .

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

시도해보십시오 (또는 증가 된 출력보기font-size )


설명

#?                         :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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.