シャッフルされたカードのデッキを印刷する


23

入力

なし

出力

52枚。重複なし。カードは、uniなどのユニコード文字として表されます。

Unicodeのコードポイントは、次のフォーマットに従います。

  • 最初の3桁は1F0です。
  • 次の桁であるABC、またはDそれぞれスペード、ハート、ダイヤ、クラブのために。
  • 次の桁がある1経由CしてE様々な数/フェイスカード用。1エースは、ある2- A数のカードです、とBDと、Eそれぞれジャッキ、女王、王です。(Cほとんどのデッキにはない騎士です。)

出力例:

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

ルール:

  • これはです。最短回答が勝ちます。
  • 禁止された抜け穴は禁止されています。
  • 実際にデッキをランダム化する必要があります。20回実行する場合、20のランダムな(そしておそらく最もユニークな)出力を生成する必要があります。

注意

ボックスのみが表示される場合は、DejaVuフォントをインストールしください。


2
各キャラクター間にスペースを入れることはできますか?
完全に人間

3
あなたはそれがランダムでなければならず、すべての順列の発生確率がゼロでないことを意味すると思います。
Notts90

4
他に誰が箱を見ていますか?
SuperJedi224

1
@Mendeleevは、ダウンロードがギガバイトに近いという警告も投稿する必要があります!
Noodle9

2
ボックスのみが表示される場合は、Googleのノートフォントをインストールします。ええ、私は自分の携帯電話に...ということはできません
デニス・

回答:


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

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

@nderscoreのおかげで-1バイト


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']前に見たことがない。それはクールです:)
スティーブベネット

@SteveBennett確かに!文字列がそのようなcharによって反復可能であることは素晴らしいことです。:)
darrylyeo

しかし、あなたはまだのようなことをすることはできません"ABCD".map(...)。それには、理にかなった理由があると確信しています。
スティーブベネット

@SteveBennettうん、そういうメソッドが文字列を返すのか配列を返すのかが曖昧だからだと思う。
-darrylyeo

1
とてもいいです。スニペットをよりグラフィカルな出力に変更する自由を取りましたが、気軽にロールバックしてください。
アーナルド

7

Pythonの3 106の  94バイト

musicman523のおかげで-5バイト(1. [完全に人間に感謝]にsample(...,52)相当するインラインとして使用しshuffleます。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ソリューションをこれ以上うまく得ることができませんでしたが、完全に人間のスイッチを使用して、あなたの97のソリューションを下げましたsampleオンラインでお試しください!
musicman523

1
さらに、を変更v%4<2~v&2て、もう1バイト節約できます。
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バイト(ナイトを削除するのを忘れたため編集)。ただし、ゼリーを結ぶのに役立ちます。
魔法のタコUr

@carusocomputing:連結の前にデカルトを行うことをお勧めします。そのため、分割をスキップできます。ありがとう!
エミグナ

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進数が必要ですが\U、Bashビルトインではprintf先行ゼロを省略できます。


私は限りましたecho 16iF09F8{2A,2B,38,39}{{1..9},A,B,D,E}0AP|dc|shuf|tr -d \\nが、あなたの方が優れています。私は知りませんでした%b
デジタル外傷

1
@Digital-この答えを書くまで、私もそうしなかった!
トビースパイト

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ステートメントで起こっている魔法を説明できますか?私はそれを3つの連続したステートメントに分解することでそれを把握しようとしてきましたが、リスト内の間違ったアイテムを削除することになります。たとえば、a [:: 16]は1枚のカードと3つの未解釈のユニコードを提供します。
CCB60

del声明は、右に左から順に分解しません。の最初の要素a[::16]はU + 1F0A0 PLAYING CARD BACKで、削除する必要があります。また、通常の52の間に挟まっているナイトカードとジョーカーカードを削除する必要があります。en.wikipedia.org/ wiki /…を参照してください。
アンデルスカセオルグ

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

オンラインでお試しください!


少しゴルフをしました。ただし、スペースが区切り文字として許可されている場合にのみ有効です。
完全に人間

@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個のランダムな整数を選択します)

⎕UCSU nicode C haracter S etの 対応するシンボルに変換します


バージョン16.0(現在ベータ版)ソリューション(33文字)

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

()次の配列

⍳62 最初の62個の整数

16| モジュラス16

180∨ 180のGCDと

11> 11がそれらより大きいかどうか

 Trueのインデックス

127136+ それに127136を追加

[]次の要素を選択します

?⍨52 最初の52個の整数をシャッフルします(最初の52個の整数のバッグから52個のランダムな整数を選択します)

⎕UCSU nicode C haracter S etの 対応するシンボルに変換します


古いソリューション

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

()次の配列

⍳14 最初の14個の整数

12~⍨ 12を除く

()∘., デカルト的に連結

  ⍳4 最初の4つの整数

  9+ 9に追加

, ラヴェル(平坦化)

16⊥¨ ベース16でそれぞれを評価します

126976+ それに126976を追加

[]次の要素を選択します

?⍨52 最初の52個の整数をシャッフルします(最初の52個の整数のバッグから52個のランダムな整数を選択します)

⎕UCSU nicode C haracter S etの 対応するシンボルに変換します


3

、50バイト

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

オンラインでお試しください!リンクは、コードの詳細バージョンです。ブロック内の64文字すべての文字列を作成しますが、無効なカードはランダムに選択されるため除外します。(いわば、文字列からの置換なしのランダム選択は、配列の場合は17バイトであるのに対し、11バイトのみです。)

編集:配列からの減算とその他のチャコールの改善により、サイズが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バイト)

私は「ランダム」を「あらゆる可能な結果がゼロ以外の確率を持っている」と解釈しています。これは均一な分布ではありません。

このコードには2つの段階があります。最初に、魚は最初の2行を使用して、すべてのカードをスタックに置きます。0、CまたはFで前カードの進コード終了すると魚の複製および増分はそれがチェックは一緒に乗算することにより、次いで、スペードのエースで始まるX  (X(-12)X -15)、ここで、xは CHARCODEのMODであります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)])))

カードのユニコード値(utf8ToInt()関数から取得可能)の整数表現のベクトルをランダムにサンプリングし、不要なナイト/ジョーカーカードを削除します。



1

C#(146 141バイト)

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リンクを添付しました。
ピーターテイラー

サロゲートペアの2番目の部分用に作成された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


0

ジャプト51 41 39 22バイト

ジョナサンのゼリーソリューションからインスピレーションを得て。

#?ö¬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.