基本情報技術者アルゴリズムの問題を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作ってみた」とかアップしてみたいものです。^^
それではまた^^