知恵袋の「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++
- 作者: 辻真吾
- 出版社/メーカー: 技術評論社
- 発売日: 2010/04/24
- メディア: 大型本
- 購入: 19人 クリック: 199回
- この商品を含むブログ (59件) を見る