知恵袋の同じものを含む順列の確率の問題をPythonで解いてみた。

 知恵袋の同じものを含む順列の確率の問題Pythonで解いてみました。タイトルがなんか変ですが、お察しください。(^_^;

BALLOON の7文字を並べるとき、母音と子音が交互に並ぶ確率

 確率の問題では見た目が同じものでも区別して考えますが、Pythonの場合、set()を使わないと同じものでも異なるものとして順列を生成するのでitertools.permutations()がそのまま使えます。
 生成した順列を母音(V)と子音(C)の文字列に変換して、「VV」と「CC」を含まないものをカウントして題意の確率を求めました。

● baloon1.py

# coding: UTF-8
# baloon1.py

import itertools
from fractions import Fraction

def isVowel(c):
    return c.upper() in 'AIUEO'

def main():
    P = 'BALLOON'
    total = count = 0
    for p in itertools.permutations(P):
        total+=1
        s = ''
        for q in p:
            if isVowel(q): s+='V'
            else:          s+='C'
        if 'VV' in s: continue
        if 'CC' in s: continue
        # チェックを潜り抜けたものだけをカウント
        count+=1

    print("%d / %d = %s"%(count,total,Fraction(count,total)))

if __name__ == '__main__':
    main()

●実行結果

144 / 5040 = 1/35

※参考URL
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14152580344
知恵袋の男女が並ぶ確率の問題をJavaで解いてみた。

基礎Python 基礎シリーズ

基礎Python 基礎シリーズ