理系母の趣味はプログラミング

理系院卒、メーカー技術職の二児の母が、PythonやVBAで色々と作ってアップしていくブログです。

基本情報技術者アルゴリズムの問題をPythonでコーディングしてみた【平成28年秋】

過去問コーディング。
今回の問題は、数値の編集プログラムです。

過去問PDF「出典:平成28年度 秋期 基本情報技術者試験 午後 問8」

プログラム

def edit(Pattern,Value):

    #上書きするために、リスト型のPatternを作っておく
    Pattern_l = list(Pattern)
    
    fill = Pattern[0]
    signif = 'off'
    v = 0
    for p in range(0,len(Pattern)):
        if Pattern[p]=='▯' or Pattern[p]=='▮':  #ケース1-7の処理
            if signif == 'off':                 # signif = offの場合の処理
                if Pattern[p] =='▯' and Value[v]=='0':
                    pass                        #何もしない ケース1
                else:
                    if Value[v+1] != '+':
                        signif = 'on'           #ケース2,4
                if Value[v] == '0':
                    Pattern_l[p] = fill         #ケース1,2,3
                else:
                    Pattern_l[p] = Value[v]     #ケース4,5
            else:                               #signif = onの場合の処理
                if Value[v+1] == '+':
                    signif = 'off'              #ケース7
                Pattern_l[p] = Value[v]         #ケース6,7
            v = v + 1

        else:                                   #ケース8,9の処理
            if signif == 'off':                 #ケース8
                Pattern_l[p] = fill             #ケース8
            else:
                pass                            #ケース9 何もしない(追加)

    Pattern = "".join(Pattern_l)                #リストを文字列に戻す
    return Pattern


print('例: ' + edit('__▯▯,▯▯▯','01234+'))
print('設問1-a: '+ edit('*▯▯,▯▯▯#','00000+'))
print('設問1-b: '+ edit('*▯▯▯.▯▯#','00012-'))
print('設問1-c: '+ edit('*▯▯▮.▯▯#','00012+'))

出力結果

例: ___1,234
設問1-a: ********
設問1-b: *****12#
設問1-c: ****.12*

【過去問との主な相違点】
・Pattern文字列の上書きをするために、リスト型のPatternを新たに作った。
Pythonの文字列はイミュータブル(変更不可)のため文字列のままだと上書きできない。リストはミュータブル。)

【感想】
ほぼ問題文通りです。
ifの入れ子が多すぎてごちゃごちゃしてますが、問題文を忠実に再現した結果ということで…。
elseのあとにifってelifと同等ですか?だれか教えて下さい。ピヨピヨ。
あとこの問題、トレースがしんどいですね!
ルールに当てはめるのがまあめんどい。
時間かかるし、なんか焦るし。
このルールを理解するのがこの問題のカギっぽいですね、この設問3とか。難し。

本番もこういう問題でたらまずいなと思うのでした。


最近はPythonでDeepLearningの勉強してます。
FEから横道それてます。はい。

おもしろいけど、そっちは難しすぎて記事にはできそうにないです。

いつかここに、「Pythonで今日の献立を提案してくれるAI作ってみた」とかアップしてみたいものです。^^

それではまた^^