知恵袋のアルファベットを並べる順列の問題をPythonで解いてみた。(3)

 知恵袋のアルファベットを並べる順列の問題Pythonで解いてみました。(^_^;

SUUGAKUの7文字を1列に並べるとき、次の並べ方は何通りあるか。
(1)1列に並べる。
(2)GAUSUという文字列を含むように並べる。
(3)Uはすべて奇数番目にくるように並べる。
(4)Uは2つ以上隣合わないように並べる。

 前回のは、この問題の(4)の部分ですが、これも含めて全部まとめて解いてみました。(^_^;
 この問題で難しいのは(3)ですが、「Uはすべて奇数番目にくる」とは、「偶数番目に'U'を含まない」ということですよね。(^_^;

● SUUGAKU2.py

# coding: UTF-8
# SUUGAKU2.py

import itertools

def main():
    #    0123456
    P = 'SUUGAKU'
    cnt1 = cnt2 = cnt3 = cnt4 = 0
    for p in set(itertools.permutations(P)):    # 同じものを含む順列
        cnt1+=1
        s = ''.join(p)
        t = p[1]+p[3]+p[5]
        if 'GAUSU'  in s: cnt2+=1
        if not 'U'  in t: cnt3+=1   # 偶数番目に'U'を含まない
        if not 'UU' in s: cnt4+=1

    print("(1) %d"%cnt1)
    print("(2) %d"%cnt2)
    print("(3) %d"%cnt3)
    print("(4) %d"%cnt4)

if __name__ == '__main__':
    main()

●実行結果

(1) 840
(2) 6
(3) 96
(4) 240