同じものを含む円順列の問題をPythonで解いてみた。

 知恵袋で見つけた同じものを含む円順列の問題Pythonで解いてみました。(^_^;

 赤玉2個、青玉2個、白玉4個を円形に並べる方法の総数を求めよ。

 拙ブログのNecklacePerm01.javaを参考にして作りました。
 場合の数・確率の問題は、検算が難しいため、答えに確信が持てないことが多いですね。(^_^;

● CircularPerm1.py

# coding: UTF-8
# CircularPerm1.py

import itertools
from time import time

def main():
    tm = time() # Timer Start
    P = '赤赤青青白白白白'
    s = ''      # 発見したものの保存用
    cnt = 0
    for p in sorted(set(itertools.permutations(P))):    # 同じものを含む順列
        t = ''.join(p)
        if t not in s:
            cnt+=1
            print(t)
            s+=t+t+'|'

    print(f'計: {cnt}')
    print(f'Runtime : {time()-tm:.3f} [sec]')   # Timer Stop & Disp

if __name__ == '__main__':
    main()

●実行結果

白白白白赤赤青青
白白白白赤青赤青
白白白白赤青青赤
   …(省略)…
白白青青白赤白赤
白赤白赤白青白青
白赤白青白赤白青
計: 54
Runtime : 0.016 [sec]

※参考URL
【神回】秒で解ける!同じものを含む円順列 - YouTube
同じものを含む数珠順列の問題をJavaで解いてみた。 - rscのブログ
同じものを含む円順列の問題をPythonで解いてみた。(2) - rscのブログ
同じものを含む円順列の問題をPythonで解いてみた。(3) - rscのブログ