辞書式配列の問題をPythonで解いてみた。

 辞書式配列の問題Pythonで解いてみました。(^_^;
 と、いうより、Javaから翻訳してみました。(^_^;

 ABCDEFの6文字を全て使ってできる順列をABCDEFを1番目として、辞書式に並べる時、次の問いに答えよ。
(1)140番目の文字列を求めよ。
(2)FBCDAEは何番目の文字列か。

 Pythonの順列は、辞書式順序が崩れるので、こういった問題には不向きかと思っていましたが、sortしてから使えばよかったんですね。(^_^;

● DicPerm.py

# coding: UTF-8
# DicPerm.py

import itertools
from time import time

def toStr(li,sp=',',fm='%s'):
    return fm%sp.join(li)

def main():
    tm = time() # Timer Start
    P = 'ABCDEF'
    sortedPerms = sorted(itertools.permutations(P))     # 辞書式順序
    # //--- (1) ---//
    count = 0
    for p in sortedPerms:
        count+=1
        s1 = toStr(p,'')
        if count==140: break

    # //--- (2) ---//
    count = 0
    for p in sortedPerms:
        count+=1
        s2 = toStr(p,'')
        if s2=='FBCDAE': break

    print('(1) %s'%s1)
    print('(2) %d番目'%count)
    print("Runtime : %.3f [sec]"%(time()-tm))   # Timer Stop & Disp

if __name__ == '__main__':
    main()

●実行結果

(1) BAFCED
(2) 633番目
Runtime : 0.000 [sec]

※参考URL
辞書式配列の問題をJavaで解いてみた。 - rscのブログ
辞書式配列の問題を十進BASICで解いてみた。 - rscのブログ









文字を2行に並べる順列の問題をPythonで解いてみた。

 ネットで見つけた文字を2行に並べる順列の問題Pythonで解いてみました。(^_^;

 下のような枠がある。小文字a,a,b,cを第1行の枠に入れ、大文字A,A,B,Cを第2行の枠に入れて並べる。
    第 第 第 第
    1 2 3 4
    行 行 行 行
第1行| | | | |
第2行| | | | |

1.並べ方は何通り?
2.同じアルファベット(例 aとA)からなる列が存在しない並べ方は全部で何通り?
3.同じアルファベットからなる列がちょうど1つある並べ方は全部で何通り?

 いつものように、すべての場合をループで回して、条件に合うものをカウントしました。(^_^;
 ちなみに、LookUp()関数は、リストla中の要素xに対応するリストlb中の要素yを返します。返値はリストで、la中にxが2個以上あれば、リストですべて返します。ExcelのxLookUp(検索値, 検索範囲, 戻り配列)関数を参照して下さい。

● perm2row.py

# coding: UTF-8
# perm2row.py

import itertools
from time import time

# リストla中の要素xに対応するリストlb中の要素をリストですべて返す
# ExcelのxLookUp()関数を参照
def LookUp(x,la,lb):
    return [lb[i] for i in range(len(la)) if la[i]==x]

def toStr(li,sp=',',fm='%s'):
    return fm%sp.join(li)

def printRows(cnt,r1,r2):
    print('[%d]'%(cnt))
    print(toStr(r1))
    print(toStr(r2))

def main():
    tm = time() # Timer Start
    L = 'aabc'
    U = L.upper()   #'AABC'
    cnt1 = cnt2 = cnt3 = 0
    for p in set(itertools.permutations(L)):        #第1行 同じものを含む順列
        for q in set(itertools.permutations(U)):    #第2行   〃
            cnt1+=1
##            printRows(cnt1,p,q)
##            print(LookUp('a',p,q))
            aA = LookUp('a',p,q).count('A')     #aとAからなる列の個数
            bB = LookUp('b',p,q).count('B')     #bとBからなる列の個数
            cC = LookUp('c',p,q).count('C')     #cとCからなる列の個数
            if aA+bB+cC==0:
                cnt2+=1
##                printRows(cnt2,p,q)
            if aA+bB+cC==1:
                cnt3+=1
##                printRows(cnt3,p,q)

    print('(1) %d'%cnt1)
    print('(2) %d'%cnt2)
    print('(3) %d'%cnt3)
    print("Runtime : %.3f [sec]"%(time()-tm))   # Timer Stop & Disp

if __name__ == '__main__':
    main()

●実行結果

(1) 144
(2) 24
(3) 48
Runtime : 0.000 [sec]

※参考URL
第210回「総合的研究 数学I+A -20- 第8章 順列と組合せ」|令和元年(から)のプログラミング
XLOOKUP 関数 - Office サポート

3種類の【新型コロナワクチン】のアンケート

 皆さん、アンケートの回答ありがとうございました。
 結果は、ファイザー製ワクチンが人気のようです。それから、約1/4ぐらいの人が受けたくないようです。(^_^;
 個人的には、アストラゼネカ製以外なら、どっちもいいかな。(^_^;

【ビールのCM】のアンケート

 皆さん、アンケートの回答・コメントありがとうございました。
 個人的には、「まずくはないが、言ってるほど、うまくはない。ふつう。」といった感じです。
 たまに、瓶がいいのか食事との食べ合わせがいいのか、理由はよく分かりませんが、まぁ、確かに、瓶のコップやジョッキで飲むとき、たまに、凄くうまいと感じるときがあります。(^_^;

【2021春アニメ】の質問

 皆さん、質問の回答ありがとうございました。
 回答の参考URLの春アニメ一覧は、とても参考になりました。
 ちなみに、個人的なおすすめは、「戦闘員、派遣します!」です。ラノベ原作者が「このすば」の人です。(^_^;

※参考URL
2021春アニメ一覧|今期4月放送開始 新作アニメ・再放送アニメ情報 | アニメイトタイムズ

戦闘員、派遣します! (角川スニーカー文庫)

戦闘員、派遣します! (角川スニーカー文庫)

【バイデン大統領】と日本の景気のアンケート

 皆さん、アンケートの回答・コメントありがとうございました。
 結果は「いいえ」が多いようです。まぁ、日本の景気について言えば、民主党より共和党の方よいと言われてますから、そうなるのかな。(^_^;