Easy JというJ言語の本(onlineです、無料)を読んでいたら15ページ目にトランプの手を計算している例が載っていました。ちょっとおもしろかったのでご紹介。52枚から13枚をランダムに選んだ手を作るだけです。トランプは1から13で、ダイヤ、クラブ、ハート、スペードとします。
n種類のものからm個重複なしに選ぶ方法はm?nですので、今回13枚をとりますので13?52です。それをhandという変数に入れますが、入れると同時に表示させるために頭に+をつけます。
+hand=.13?52 30 19 10 43 6 13 29 27 23 7 24 31 32
さて、この結果を13で割って切り捨てると0 1 2 3の4種類になることを利用して、DCHS(ダイヤ、クラブ、ハート、スペード)に割り振ります。切捨ては<.(小なりドット)です。0 1 2 3の結果でDCHSを選ぶには{(波カッコ、ブレイス)を使います。あと変数suitに入れた結果を同時に表示させるのにこんどは,(カンマ)を使います。これはさっきは数字で、今回は文字列だからです。
,suit=.(<.hand%13){'DCHS' HCDSDCHHCDCHH
同様に13で割った余りをカードの値にしますが、これも文字列で23456789TJQKAから{(波カッコ、ブレイス)で作ります。xをnで割った余りは|(たてぼう、バー)を使いますが、n|xの順で書くのがルールですので13|handとなります。
,value=.(13|hand){'23456789TJQKA' 68Q68253Q9K78
最後に見やすくするためにvalueとsuitを上下にならべたテーブルにしますが、縦に結合する動詞(関数、演算子)は,;(カンマコロン、ラミネート)を用います。
value,:suit 68Q68253Q9K78 HCDSDCHHCDCHH
割り算の余りを出すための二項動詞のx,yの順序が気に食わないと思います。逆にするには~(なみ、チルダ)という副詞があって、x v~ yがy v xになったり、v~ yがy v yになったりしてけっこう便利です。
13|~5 3 ,value=.(hand|~13){'23456789TJQKA' 68Q68253Q9K78
以上