素数大富豪が8121013倍強くなりたい

素数大富豪の攻略・布教活動をしていきます

札の組の記法〜拡張・換装などを添えて

この記事は「合成数大富豪 Advent Calendar 2024 - Adventar」の15日目の記事になります。昨日はカステラさんの「(公開次第ここにURLを入れる)」でした。

 

はじめに

今日のお話は、札の組を多重集合っぽく考えていきましょうという話になります。(怪しい部分があるので要相談。)

合成数大富豪のように出せる札の組み合わせが少ないゲームにおいて、組と組がどれだけ近いのか、離れているのかを測ったりすることは重要そうです。

ということで今回は、札の組を多重集合として捉えて、拡張・換装のお話を少ししましょう。話のメインは記法そのものになります。

未完成なのでご意見募集中です。

 

札の組の記法(ジョーカー抜き)

まず、札の組の記法を定めましょう。ジョーカーについては後から別途考えます。

札の組をトランプの札と括弧とカンマを使って [A,2,2,3,5,5]のように書くことにします。

 [A,2,2,3,5,5]という表記と全く同じものを表す方法としては、次のような方法が考えられます。

  •  [(0,0),(A,1),(2,2),(3,1),(4,0),(5,2),(6,0),(7,0),(8,0),(9,0),(T,0),(J,0),(Q,0),(K,0)]←長すぎる
  •  [0,1,2,1,0,2,0,0,0,0,0,0,0,0]←コンピュータに読ませるならこれ。

 

また、素数合成数富豪的な使いやすさを考えて以下のように書く場合もあります。

  •  [K,J,Q,J]のように並びを意識した書き方もあり。もちろん [K,J,Q,J]=[J,J,Q,K]
  • 合成数出しも [6=2*3]のようにカンマを=,*^に置き換えておくという手もある
  •  [A22355]←カンマが邪魔なので正直これでもいいよね

 

以下、 Cを札の組とします。

 N \in \{A,2,3,...,T,J,Q,K\}として、 Cに対して m_{C}(N) Nの重複度とします。要するに、

 m_{C}(N)=(札の組CのNの枚数)

とします。

 

札の組 C,Dについて、

全ての Nについて m_{C}(N) \leq m_{D}(N)が成り立つとき、 C\leq Dと書くことにします。*1

※当然、必ずしも C \leq  Dまたは C\geq Dが成り立つわけではない。

 

 C \leq  Dかつ C\geq Dのとき、 C=Dとします。

 

 C \leq  Dかつ、ある Nについて m_{C}(N) \lt m_{D}(N)となるとき、

  C\lt Dと書くことにします。

 

札の組 C,Dについて、

 C\cap D

 C\cup D

 C\setminus D

 C\bigtriangleup D=(C\setminus D)\cup(D\setminus C)

 C+D

という組を重複度を用いて以下のように決めます。なお、 \bigtriangleupは対称差を表します。

 

 m_{C\cap D}(N)=\min(m_C(N),m_D(N))

 m_{C\cup D}(N)=\max(m_C(N),m_D(N))

 m_{C\setminus D}(N)=\max(m_C(N)-m_D(N),0)

 m_{C\bigtriangleup D}(N)=\vert m_C(N)-m_D(N)\vert

 m_{C+D}(N)=m_{C}(N)+m_{D}(N)

とします。

 

 C+Dを今後多用する都合上、"+"を用いていますが、本当は C\uplus Dを使う方がよいのでしょうかね......?

 

 

例:
 C=[A,4,5,5,7,8,Q,K,K]
 D=[2,5,9,Q]

として、

 

 C\cap D=[5,Q]

 C\cup D=[A,2,4,5,5,7,8,9,Q,K,K]

 C\setminus D=[A,4,5,7,8,K,K]

 C\bigtriangleup D=[A,2,4,5,7,8,9,K,K]

 C+D=[A,2,4,5,5,5,7,8,9,Q,Q,K,K]

などととなります。

 

 

次に、 \vert\cdot\vertを総枚数を表す記号とします。


 \vert C\vert=\sum\limits_{N} m_{C}(N)

 

要するに札の組における札の枚数を仰々しく書いただけです。

 

例:
 C=[A,4,5,5,7,8,Q,K,K]
 D=[2,5,9,Q]

として、

 \vert C\vert =9

 \vert D \vert =4

 \vert C\cap D\vert =2

 \vert C\cup D\vert =11

 \vert C\setminus D\vert =7

 \vert C\bigtriangleup D\vert =9

 \vert C+D\vert =13

となりますね。

 

また、合成数大富豪特有の記号として、 \getsを用いて C\gets Fと書くことで、 Fを素因数として素数場に Cを出せる組ということにします。記号については矢印にするかは要相談。

 

例:

  [9,9] \gets [2,3,J]

  [Q,K,K] \gets [2,2,2,3,4,8,9]

 

さらに、必要かはわかりませんが、 \oplusを用いて H=C\oplus Fと書くことで、 H=C+Fかつ C\gets Fということにします。直和で書いていますが、正直、@でも \dot{+}でもなんでもいいです。(ここら辺は要相談)

 

例:

  [2,3,9,9,J]=[9,9] \oplus [2,3,J]

 

 

ジョーカーありの札の組

きちんと考えだすとジョーカーの扱いというのは難しいです。ジョーカーには大きく分けて4つの役割があります。

  • 2枚出し以上でA~Kまでの代わりとしてのジョーカー
  • トランプには存在しない0としてのジョーカー
  • 1枚出し最強カードとしてのジョーカー
  • 手札にある、まだ何として使うかを決めていない不定のジョーカー

 

なお、公式ルールでは素数場への1枚出しジョーカーは最強カードとして『扱う』というものがあります。『扱うことができる』ではないので1枚出しの素数場においてはXはA~Kの代替としては扱えません。例えば、X|X=K,X=2*2|X=4のような出し方は禁止されています。

 

ジョーカーの扱い方については用途に合わせてケースバイケースで考えるのが良いでしょう。

 

1.素数合成数を探索するだけなら、そもそもジョーカーを考えないのもあり

単に素数合成数探索をするだけならジョーカーについて考える必要はあまりないです。

特にトランプ1組で考える場合、ジョーカーが高々2枚しかないことから、 N \in \{A,2,3,...,T,J,Q,K\}として、

 0\leq m_{C}(N)\leq6,0\leq m_{C}(0)\leq2,0\leq m_{C}(\infty)\leq2

の範囲で札の組を考えればよいだけです。イメージとしては0,[\infty]またはA~Kの5,6枚目にジョーカーを充当するといった感じでしょうか。

実際にはXを \inftyとして扱う意味もそんなになさそうなので、 m_{C}(\infty)については正味考えなくても良さそうですね。

 

また、ジョーカー枚数が高々2枚なことから

 \max(m_{C}(0)-2,0)+\sum\limits_{N} \max(m_{C}(N)-4,0)+\max(m_{C}(\infty)-2,0)\leq 2

という制約もあったりします。

 

 

2.きちんと区別する

実際の手札を考えるときは C=[2,2,3,X]という組をXを動かしつつ考えたいときもあります。

 X(N)は、札 Xのことを Nの札として扱っていることを表します。

 

 \{A,2,3,......,,Q,K,X(0),X(A),......X(K),X(\infty)\}の範囲で重複度を考えます。

 

 C=[2,2,3,Q],D=[2,2,3,X]でXをQとしたとき、

 m_{C}(Q)=1

 m_{D}(Q)=0

 m_{C}(X(Q))=0

 m_{D}(X(Q))=1

 

となるため、 [2,2,3,Q]\neq[2,2,3,X(Q)]となりますね。

 

この考え方だと実戦で出た合成数の組を記述したりもできそう。

 

3.例外を除いてXについては区別しない

次は、 X(N)=Nとして扱う考え方です。基本的にはこの考え方でいい気がします。

例えば、 [5,5,J,X]という組は X=5のとき、

 [5,5,J,X]=[5,5,5,J]

となります。この方法だとどの5がXなのかわからないですが、それでも問題ないなら先ほどの方法より楽ですね。

 

また、この考え方だと、 [2,2,3,X] X=Qのとき、

 [2,2,3,X]=[2,2,3,Q]

となってしまいます。

 

そのため、以下の組については例外として注意することにしましょう。

 [2,3,X]
 [3,3,X]
 [2,5,X]
 [2,2,3,X]

 

このような組について扱うときはうまいことやりましょう。(適当)

 

拡張と(札の組についての)換装など

ここでは、合成数出しの枚数表記、拡張・換装・派生の説明(簡易版)にて書いた、拡張や換装について、今回の記号を用いてあっさり整理しましょう。

 

拡張

札の組に何かを追加して合成数を作ることができる組を作ることを拡張と呼びます。

札の組 Cに対して、合成数出し可能な札の組[]tex: D]があって、 C\lt Dとなるとき、 D Cの拡張であるという。

 

例:
 C=[A,2,4,5,Q,K]
 D=[A,2,4,5,9,Q,Q,K]

追加枚数は \vert D-C \vert =3

 

換装

この記事では「札の組についての換装」しか扱わないので単に換装といいます。

札の組についての換装を、 C,D合成数出し可能、 |C|=|D| かつ |C \bigtriangleup D\vert \leq nとしましょう。  n 2,4,6辺りが妥当でしょうか? n \vert C\vertによって適宜決めたほうがよさそうですね。

 

例:

Aと8の入れ替えによる換装

 C=[A,A,2,3,4,5,6]

 D=[A,2,3,4,5,6,8]

 |C \bigtriangleup D\vert =2

 

(4A6=2^5*A3、A458=2*3^6)

 

なお、拡張と換装にはこのような関係があります。

 C\cap D C-D D-Cを追加して拡張できる」

ということもできます。

 C\cap Dには、追加枚数の同じ2通り以上の拡張があるということですね。

 

 

その他、面白そうなトピック

今回のアドベントカレンダーで扱うかは不明だけど、上の記法で簡潔に書ける面白そうだと感じたトピックだけ列挙しておきます。気が向いた人が調べてみてください。

C←CとなるCを探してみる

 C=[A,A,2]など。どれぐらいどんな組があるのか単純に気になります。

 

C←D、(C+D)←FとなるC,D,Fを探索する

 C=[A,6],D=[2,4],F=[2,7,9]として、

A6=2^4、624A=79^2

のような組。単順におもろい。

 

C←F,D←F,C≠D,|C|=|D|について調べる

これはかなり実戦で使えそうです。簡単なところだと C=[6],D=[8],F=[2,3]などありますが、 \vert C \vert=4のときなどを調べてみると役に立ちそうですね。

 

終わりに

今回の記事は、素数大富豪を初めたかなり初期から考えてはいたけど競技素数大富豪をやる上ではそんなに大切でもないかなーと思っていた記法の整理でした。
誰かがいつかやってくれると思っていたけれど誰もやってくれなかったので、えいやで書いてしまいました。

 

叩き台のつもりで読んでもらえると助かります。今回書いたことがベストな記法・定義であるとは思いません。

しかし、札の組に注目しながら合成数について議論するにあたって今回決めたことがら自体は最低限必要だと考えています。合成数の派生を考えるときに、札の組の操作や距離を測るなどは必須なはずです。みんなで議論を深めていきたいですね。

 

明日もOTTYで「割り切れる回数のお話」です。明日は実戦的な内容になるはず!!

 

 

 

*1: \preceq \subseteqの方が良い?