In một cỗ bài xáo trộn


23

Đầu vào

không ai

Đầu ra

52 thẻ. Không trùng lặp. Thẻ được biểu diễn dưới dạng các ký tự unicode của chúng, ví dụ.

Các bảng mã Unicode theo định dạng sau:

  • Ba chữ số đầu tiên là 1F0.
  • Các chữ số tiếp theo là A, B, C, hoặc Dcho Spades, trái tim, kim cương, và các câu lạc bộ tương ứng.
  • Chữ số tiếp theo là 1thông qua CEcho các số / thẻ mặt khác nhau. 1là ace, 2- Alà những thẻ số, và B, DElà jack, hoàng hậu, và vua tương ứng. ( Clà hiệp sĩ, không có trong hầu hết các sàn.)

Ví dụ đầu ra:

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

Quy tắc:

  • Đây là . Câu trả lời ngắn nhất thắng.
  • Cấm sơ hở bị cấm.
  • Bộ bài của bạn phải thực sự ngẫu nhiên. Nếu chạy 20 lần, 20 đầu ra ngẫu nhiên (và rất có thể là duy nhất) phải được tạo.

chú thích

Nếu bạn chỉ thấy các hộp, hãy cài đặt phông chữ DejaVu .


2
Có thể có khoảng cách giữa mỗi nhân vật?
hoàn toàn là

3
Tôi nghĩ bạn có nghĩa là nó phải là ngẫu nhiên và tất cả các hoán vị sẽ không có xác suất xảy ra.
Notts90

4
Ai khác đang nhìn thấy một loạt các hộp?
SuperJedi224

1
@Mendeleev bạn cũng nên đăng một cảnh báo rằng tải xuống gần như là một gigabyte!
Noodle9

2
Nếu bạn chỉ thấy các hộp, hãy cài đặt phông chữ Noto của Google. Vâng, tôi không thể làm điều đó trên điện thoại của mình ...
Dennis

Câu trả lời:


9

Thạch ,  25 23  21 byte

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

Một liên kết niladic trả về một danh sách các ký tự hoặc một chương trình đầy đủ in ra bộ bài xáo trộn.

Hãy thử trực tuyến!

Làm sao?

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
Tại sao nó luôn luôn là Jelly mà làm điều kỳ diệu này?
Gryphon - Tái lập Monica

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 nhờ @nderscore


JavaScript (ES6), 120 119 121 byte

Phiên bản trước.

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

Whoa, chưa từng thấy [...'ABCD']trước đây. Thật tuyệt :)
Steve Bennett

@SteveBennett Thật vậy! Thật tuyệt khi các chuỗi được lặp lại bởi char như thế. :)
darrylyeo

Nhưng bạn vẫn không thể làm những việc như thế "ABCD".map(...). Tôi chắc chắn có những lý do hợp lý tại sao lại như vậy.
Steve Bennett

@SteveBennett Vâng, tôi đoán là vì nó mơ hồ liệu một phương thức như vậy sẽ trả về một chuỗi hay một mảng.
darrylyeo

1
Một cái rất đẹp Tôi đã tự do sửa đổi đoạn trích cho đầu ra đồ họa nhiều hơn, nhưng cảm thấy thoải mái để quay trở lại.
Arnauld

7

Python 3 ,  106  94 byte

-5 byte nhờ Musicman523 (1. sử dụng sample(...,52)như một nội tuyến tương đương với shuffle[cảm ơn hoàn toàn]; 2. sử dụng ~v&2thay vì v%4<2; cộng thêm 1 byte do hậu quả là không gian có thể bị xóa)

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

Hãy thử trực tuyến!


2
Chà, tôi đã không thể có được giải pháp Python của riêng mình tốt hơn, nhưng tôi đã giảm xuống còn 97 bằng cách sử dụng chuyển đổi hoàn toàn của con người sample. Hãy thử trực tuyến!
sĩ523

1
Ngoài ra, bạn có thể thay đổi v%4<2để ~v&2tiết kiệm một byte hơn.
sĩ523

Làm tốt lắm! Tôi đã nghĩ có lẽ một randomchức năng khác có thể giúp đỡ ở đó. Một byte khác trên đầu trang or ~...có thể or~....
Jonathan Allan

6

05AB1E , 22 21 byte

Đã lưu 1 byte nhờ tính toán carusocomputing .

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

Hãy thử trực tuyến!

Giải trình

…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ç.rcho 21 byte (được chỉnh sửa vì tôi quên xóa các hiệp sĩ). Có giúp bạn buộc thạch mặc dù.
Bạch tuộc ma thuật Urn

@carusocomputing: Ý tưởng hay để thực hiện cartesian trước khi nối, vì vậy chúng ta có thể bỏ qua phần tách. Cảm ơn!
Emigna

6

Bash + coreutils, 56 byte

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

Chúng tôi sử dụng printfđể viết mỗi thẻ trên một dòng riêng, xáo trộn các dòng, sau đó ghép tất cả các dòng bằng cách loại bỏ các ký tự dòng mới.

Lưu ý rằng mặc dù printflệnh coreutils yêu cầu chính xác 8 chữ số thập lục phân sau đó \U, hàm Bash tích hợp printfcho phép chúng ta bỏ qua các số 0 đứng đầu.


Tôi đã đi xa echo 16iF09F8{2A,2B,38,39}{{1..9},A,B,D,E}0AP|dc|shuf|tr -d \\n, nhưng của bạn là tốt hơn. Tôi không biết về %b.
Chấn thương kỹ thuật số

1
@Digital - Tôi cũng không, cho đến khi viết câu trả lời này!
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='')

Hãy thử trực tuyến!


Bạn có thể giải thích điều kỳ diệu đang diễn ra trong tuyên bố del? Tôi đã cố gắng tìm ra nó bằng cách chia nó thành ba câu lệnh liên tiếp, nhưng cuối cùng tôi đã xóa các mục sai trong danh sách. Ví dụ: [:: 16] đưa cho tôi một thẻ và ba unicodes chưa được giải thích.
CCB60

Các deltuyên bố phá vỡ tuần tự từ trái sang phải. Yếu tố đầu tiên của a[::16]là U + 1F0A0 PLAYING CARD BACK, cần được xóa. Chúng ta cũng cần xóa các thẻ Hiệp sĩ và Joker bị kẹt ở giữa 52 bình thường. Xem en.wikipedia.org/wiki/ .
Anders Kaseorg

3

Python 3 , 107 byte

Đã lưu 6 byte nhờ @totallyhuman và 3 nhờ @ CCB60!

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

Hãy thử trực tuyến!


Chơi gôn một chút. Điều này chỉ hợp lệ nếu không gian được phép là dấu phân cách.
hoàn toàn là

@totallyhuman thêm ,sep=''sửa chữa các không gian, tất nhiên - nhưng làm cho nó 112 byte
vroomfondel

Tôi quên mất random.sample! Tôi sẽ để OP quyết định về không gian. Tôi có thể thêm ,sep=''để loại bỏ chúng, và vẫn tiết kiệm được 6 byte.
sĩ523

chr (int (f'0x1F0 {a} {b} ', 16)) có thể được rút ngắn 3 byte thành chr (int (' 0x1F0 '+ a + b, 16))
CCB60

@ CCB60 Tôi là một kẻ ngốc. Bắt tốt
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);

Không có Trình thông dịch trực tuyến khả dụng cho phương thức 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);

Hãy thử trực tuyến!

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

Hãy thử trực tuyến!

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

Hãy thử trực tuyến!


3

APL (Dyalog) , 40 38 byte

Phương pháp của Jonathan Allan

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

(Liên kết )trên mảng sau

⍳62 62 số nguyên đầu tiên

127136+ thêm 127136 vào đó

(... )/ bộ lọc với Boolean

  ⍳62 62 số nguyên đầu tiên

  16| mô đun 16

  180∨ GCD 180 và đó

  11> liệu 11 có lớn hơn những

[... ]chọn các yếu tố sau

?⍨52 xáo trộn 52 số nguyên đầu tiên (chọn 52 số nguyên ngẫu nhiên trong số 52 số nguyên đầu tiên)

⎕UCS chuyển đổi thành các ký hiệu tương ứng trong U nicode C haracter S et


Giải pháp phiên bản 16.0 (hiện đang trong giai đoạn thử nghiệm) (33 ký tự)

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

(Liên kết )trên mảng sau

⍳62 62 số nguyên đầu tiên

16| mô đun 16

180∨ GCD 180 và đó

11> liệu 11 có lớn hơn những

 chỉ số nơi đúng

127136+ thêm 127136 vào đó

[... ]chọn các yếu tố sau

?⍨52 xáo trộn 52 số nguyên đầu tiên (chọn 52 số nguyên ngẫu nhiên trong số 52 số nguyên đầu tiên)

⎕UCS chuyển đổi thành các ký hiệu tương ứng trong U nicode C haracter S et


Giải pháp cũ

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

(Liên kết )trên mảng sau

⍳14 14 số nguyên đầu tiên

12~⍨ ngoại trừ 12

(... )∘., Cartesianly nối để

  ⍳4 4 số nguyên đầu tiên

  9+ thêm vào 9

, ravel (flatten) mà

16⊥¨ đánh giá từng người trong cơ sở 16

126976+ thêm 126976 vào đó

[... ]chọn các yếu tố sau

?⍨52 xáo trộn 52 số nguyên đầu tiên (chọn 52 số nguyên ngẫu nhiên trong số 52 số nguyên đầu tiên)

⎕UCS chuyển đổi thành các ký hiệu tương ứng trong U nicode C haracter S et


3

Than , 50 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Tạo chuỗi gồm tất cả 64 ký tự trong khối nhưng lọc các thẻ không hợp lệ khi chúng được chọn ngẫu nhiên. (Nói về điều này, lựa chọn ngẫu nhiên mà không thay thế từ một chuỗi chỉ có 11 byte, so với 17 cho một mảng.)

Chỉnh sửa: Phép trừ từ một mảng và các cải tiến Than khác đã giảm kích thước xuống còn 41 byte: Hãy thử trực tuyến!


2

Alice , 34 byte

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

Hãy thử trực tuyến!

Giải trình

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

Hãy thử trực tuyến!

(+1 byte để làm cho tính ngẫu nhiên tốt hơn)

Tôi đang diễn giải "ngẫu nhiên" có nghĩa là "mọi kết quả có thể có xác suất khác không". Đây không phải là một phân phối thống nhất.

Có hai giai đoạn cho mã này. Đầu tiên, cá đặt tất cả các thẻ lên ngăn xếp, sử dụng hai dòng đầu tiên. Bắt đầu với ace of spades, cá nhân đôi và tăng nó, sau đó kiểm tra xem mã hex của thẻ trước kết thúc bằng 0, C hay F bằng cách nhân với nhau x  ( x -12) ( x -15), trong đó x là mod charcode 16, và kiểm tra nếu đó là số không. Nếu có, nó sẽ xóa thẻ vi phạm khỏi ngăn xếp. Nó lặp lại cho đến khi ngăn xếp có 52 thẻ, sau đó chuyển sang giai đoạn 2:

  v
{>x
o^>l?!;

Bit mã này xáo trộn và in ngăn xếp. Các xhướng đặt ngẫu nhiên của cá:

  • Nếu con cá bơi lên, nó đâm vào vvà quay trở lại xmà không làm gì cả. Hướng trái là tương tự.
  • Nếu cá bơi sang phải, nó quấn và đánh vào {, xoay toàn bộ chồng sang trái, sau đó quay trở lại x.
  • Nếu cá bơi xuống, nó sẽ in thẻ ở phía trước ngăn xếp rồi quay lại x .

Rõ ràng là mọi thứ tự có thể của thẻ đều có thể được tạo ra: tại bất kỳ thời điểm nào trong giai đoạn 2, mọi thẻ chưa được in đều có thể được in tiếp theo nếu cá bơi đủ lần. Kỹ thuật xáo trộn này thường không di chuyển các thẻ cách nhau rất xa nếu chúng đã ở gần nhau, nhưng sau đó, một lần nữa, không xáo trộn bằng tay .


2

R, 61 byte

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

Lấy mẫu ngẫu nhiên vectơ biểu diễn số nguyên của các giá trị unicode của thẻ (có thể lấy từ utf8ToInt()fucntion) và loại bỏ các thẻ hiệp sĩ / joker không mong muốn.



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

Bản demo trực tuyến

Điều này sử dụng phong cách cực kỳ xấu trong việc xáo trộn Guid.NewGuid(), nhưng đó là môn đánh gôn. Sau đó, nó xây dựng các cặp thay thế bằng tay.


Điều này thực sự làm việc? Bất cứ khi nào tôi thử truyền int int cho char, nó đã ném một ngoại lệ?
TheLethalCoder

@TheLethalCoder, tôi không có bất kỳ giá trị động nào. Nhưng để chứng minh rằng nó hoạt động, tôi đã đính kèm một liên kết Ideone.
Peter Taylor

Tôi có nghĩa là int được tạo cho phần thứ hai của cặp thay thế.
TheLethalCoder

Bạn có thể lưu một byte bằng cách không bao gồm dấu chấm phẩy
TheLethalCoder

Nói 147 byte, đọc là 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

Lưu ý rằng điều này sử dụng các điểm mã cho các nữ hoàng như được đưa ra trong câu hỏi (tức là chữ số cuối cùng C). Đối với các điểm mã thực tế (chữ số cuối D), thay thế 51,56bằng 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)));}

Giải trình:

Hãy thử nó ở đây.

LƯU Ý: Chưa được kiểm tra vì mặc dù tôi đã cài đặt phông chữ được liên kết, tôi vẫn thấy các hộp. Có lẽ phải khởi động lại PC của tôi hoặc một cái gì đó ..

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

Với một số cảm hứng từ giải pháp Jelly của Jonathan .

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

Hãy thử nó (hoặc xem đầu ra với tăngfont-size )


Giải trình

#?                         :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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.