知恵袋の「chocolateの文字を並べ替えてできる順列」の問題をPythonで解いてみた。

 知恵袋の「chocolateの文字を並べ替えてできる順列」の問題をPythonで解いてみました。もう過ぎてしまいましたが、バレンタインデーがらみの問題のようです。(^_^;

chocolateの9文字を並べ替えてできる順列のうち、同じアルファベットが隣り合わないものは何通りあるでしょうか??

 場合の数・確率の問題は、検算が難しいため、答えに確信が持てないことが多いのですが、そういう場合は、プログラムを作って検算すればいいと思います。

● chocolate1.py

# coding: UTF-8
# chocolate1.py

import itertools
from time import time

def main():
    pass    # main code goes here
    tm=time()  # Timer Start
    s = 'chocolate'
    count = 0
    for p in set(itertools.permutations(s)):    # 同じものを含む順列
        t = ''.join(p)
        if 'cc' in t: continue
        if 'oo' in t: continue
        # チェックを潜り抜けたものだけをカウント
        count += 1
##        print(t)

    print(count)

    tm=time()-tm  # Timer Stop
    print("Runtime : %.3f [sec]"%tm)

if __name__ == '__main__':
    main()

●実行結果

55440
Runtime : 0.256 [sec]

 ちなみに、'girichoco'の場合は、21960になるようです。(^_^;
 次のようにsを書き換えて、if文を追加すればいいです。

s = 'girichoco'
if 'ii' in t: continue

※参考URL
文字列操作の比較表: Ruby, Python, JavaScript, Perl, C++

Pythonスタートブック

Pythonスタートブック