"""
learnstock.pyプログラム
単純な帰納的学習の例題のプログラム
パターン学習器
100個の学習データを読み込んで、適合する10桁のパターンを答えます。
使い方 c:\python learnstock.py < ldata.txt
"""
#モジュールのインポイント
import math
import random
#グローバル関数
SETSIZE=100 #学習データセットの大きさ
CNO=10 #学習データの桁数(10社分)
GENMAX=10000 #解候補生成回数
SEED=7 #乱数のシード
#下請け関数の定義
#readdata()関数
def readdata(data,teacher):
"""学習データセットの読み込み"""
for i in range(SETSIZE):
line=input()
data[i]=[int(num) for num in line.split()]
teacher[i]=data[i][CNO]
return
#readdata関数の終わり
#calcscore関数
def calcscore(data,teacher,answer):
"""解候補パターンのスコア(0~SETSIZE点)の計算"""
score=0 #スコア(0~SETSIZE点)
for i in range(SETSIZE):
#一致度計算
point=0
for j in range(CNO):
if answer[j]==2:
point += 1 #ワイルドカード
elif answer[j]==data[i][j]:
point +=1 #一致
# スコアの計算
if(point==CNO)and(teacher[i]== 1):
score += 1
elif(point != CNO)and(teacher[1]==0):
score += 1
return score
#calcscore()関数の終わり
#メイン実行部
score=0 #スコア(0~SETSIZE点)
answer=[0 for i in range(CNO)] #解候補
data=[[] for i in range(SETSIZE)] #学習データセット
teacher=[0 for i in range(SETSIZE)] #教師データ
bestscore=0 #スコアの最良値
bestanswer=[0 for i in range(CNO)]#探索途中での最良解
#乱数の初期化
random.seed(SEED)
#学習データセットの読み込み
readdata(data,teacher)
#解候補生成と検査
for i in range(GENMAX):
#解候補生成
for j in range(CNO):
answer[j]=random.randint(0,2)
#検査
score=calcscore(data,teacher,answer)
#最良スコアの更新
if(score>bestscore):
bestanswer=answer.copy()
bestscore=score
print(bestanswer,":score=",bestscore)
#最良解の出力
print("最良解")
print(bestanswer,":score=",bestscore)
#learnstock.pyの終わり# your code goes here
IiIiCmxlYXJuc3RvY2sucHnjg5fjg63jgrDjg6njg6AK5Y2Y57SU44Gq5biw57SN55qE5a2m57+S44Gu5L6L6aGM44Gu44OX44Ot44Kw44Op44OgCuODkeOCv+ODvOODs+Wtpue/kuWZqAoxMDDlgIvjga7lrabnv5Ljg4fjg7zjgr/jgpLoqq3jgb/ovrzjgpPjgafjgIHpganlkIjjgZnjgosxMOahgeOBruODkeOCv+ODvOODs+OCkuetlOOBiOOBvuOBmeOAggrkvb/jgYTmlrnjgIBjOlxweXRob24gbGVhcm5zdG9jay5weSA8IGxkYXRhLnR4dAoiIiIKI+ODouOCuOODpeODvOODq+OBruOCpOODs+ODneOCpOODs+ODiAppbXBvcnQgbWF0aAppbXBvcnQgcmFuZG9tCgoj44Kw44Ot44O844OQ44Or6Zai5pWwClNFVFNJWkU9MTAwICPlrabnv5Ljg4fjg7zjgr/jgrvjg4Pjg4jjga7lpKfjgY3jgZUKQ05PPTEwICPlrabnv5Ljg4fjg7zjgr/jga7moYHmlbAoMTDnpL7liIYpCkdFTk1BWD0xMDAwMCAj6Kej5YCZ6KOc55Sf5oiQ5Zue5pWwClNFRUQ9NyAj5Lmx5pWw44Gu44K344O844OJCgoj5LiL6KuL44GR6Zai5pWw44Gu5a6a576pCiNyZWFkZGF0YSgp6Zai5pWwCmRlZiByZWFkZGF0YShkYXRhLHRlYWNoZXIpOgogICIiIuWtpue/kuODh+ODvOOCv+OCu+ODg+ODiOOBruiqreOBv+i+vOOBvyIiIgogIGZvciBpIGluIHJhbmdlKFNFVFNJWkUpOgogICAgICBsaW5lPWlucHV0KCkKICAgICAgZGF0YVtpXT1baW50KG51bSkgZm9yIG51bSBpbiBsaW5lLnNwbGl0KCldCiAgICAgIHRlYWNoZXJbaV09ZGF0YVtpXVtDTk9dCiAgcmV0dXJuCiNyZWFkZGF0YemWouaVsOOBrue1guOCj+OCigoKI2NhbGNzY29yZemWouaVsApkZWYgY2FsY3Njb3JlKGRhdGEsdGVhY2hlcixhbnN3ZXIpOgogICIiIuino+WAmeijnOODkeOCv+ODvOODs+OBruOCueOCs+OCoigw772eU0VUU0laReeCuSnjga7oqIjnrpciIiIKICBzY29yZT0wICPjgrnjgrPjgqIoMO+9nlNFVFNJWkXngrkpCiAgZm9yIGkgaW4gcmFuZ2UoU0VUU0laRSk6CiAgICAj5LiA6Ie05bqm6KiI566XCiAgICBwb2ludD0wCiAgICBmb3IgaiBpbiByYW5nZShDTk8pOgogICAgICBpZiBhbnN3ZXJbal09PTI6CiAgICAgICAgICBwb2ludCArPSAxICPjg6/jgqTjg6vjg4njgqvjg7zjg4kKICAgICAgZWxpZiBhbnN3ZXJbal09PWRhdGFbaV1bal06CiAgICAgICAgICBwb2ludCArPTEgI+S4gOiHtAogICAgICAjIOOCueOCs+OCouOBruioiOeulwogICAgICBpZihwb2ludD09Q05PKWFuZCh0ZWFjaGVyW2ldPT0gMSk6CiAgICAgICAgc2NvcmUgKz0gMQogICAgICBlbGlmKHBvaW50ICE9IENOTylhbmQodGVhY2hlclsxXT09MCk6CiAgICAgICAgc2NvcmUgKz0gMQogICAgICByZXR1cm4gc2NvcmUKI2NhbGNzY29yZe+8iO+8iemWouaVsOOBrue1guOCj+OCigoKI+ODoeOCpOODs+Wun+ihjOmDqApzY29yZT0wICPjgrnjgrPjgqIoMO+9nlNFVFNJWkXngrkpCmFuc3dlcj1bMCBmb3IgaSBpbiByYW5nZShDTk8pXSAj6Kej5YCZ6KOcCmRhdGE9W1tdIGZvciBpIGluIHJhbmdlKFNFVFNJWkUpXSAj5a2m57+S44OH44O844K/44K744OD44OICnRlYWNoZXI9WzAgZm9yIGkgaW4gcmFuZ2UoU0VUU0laRSldICPmlZnluKvjg4fjg7zjgr8KYmVzdHNjb3JlPTAgI+OCueOCs+OCouOBruacgOiJr+WApApiZXN0YW5zd2VyPVswIGZvciBpIGluIHJhbmdlKENOTyldI+aOoue0oumAlOS4reOBp+OBruacgOiJr+inowoKI+S5seaVsOOBruWIneacn+WMlgpyYW5kb20uc2VlZChTRUVEKQoKI+Wtpue/kuODh+ODvOOCv+OCu+ODg+ODiOOBruiqreOBv+i+vOOBvwpyZWFkZGF0YShkYXRhLHRlYWNoZXIpCgoj6Kej5YCZ6KOc55Sf5oiQ44Go5qSc5p+7CmZvciBpIGluIHJhbmdlKEdFTk1BWCk6CiAgICAj6Kej5YCZ6KOc55Sf5oiQCiAgICBmb3IgaiBpbiByYW5nZShDTk8pOgogICAgICAgIGFuc3dlcltqXT1yYW5kb20ucmFuZGludCgwLDIpCiAgICAgICAgI+aknOafuwogICAgICAgIHNjb3JlPWNhbGNzY29yZShkYXRhLHRlYWNoZXIsYW5zd2VyKQogICAgICAgICPmnIDoia/jgrnjgrPjgqLjga7mm7TmlrAKICAgICAgICBpZihzY29yZT5iZXN0c2NvcmUpOgogICAgICAgICAgYmVzdGFuc3dlcj1hbnN3ZXIuY29weSgpCiAgICAgICAgICBiZXN0c2NvcmU9c2NvcmUKICAgICAgICAgIHByaW50KGJlc3RhbnN3ZXIsIjpzY29yZT0iLGJlc3RzY29yZSkKCiPmnIDoia/op6Pjga7lh7rlipsKcHJpbnQoIuacgOiJr+inoyIpCnByaW50KGJlc3RhbnN3ZXIsIjpzY29yZT0iLGJlc3RzY29yZSkKI2xlYXJuc3RvY2sucHnjga7ntYLjgo/jgoojIHlvdXIgY29kZSBnb2VzIGhlcmU=
MSAwIDAgMCAwIDAgMSAwIDAgMSAgICAgMQowIDEgMCAxIDAgMSAxIDEgMCAxICAgICAxCjAgMSAwIDAgMCAxIDEgMCAxIDAgICAgIDAKMSAwIDAgMSAxIDAgMSAwIDAgMSAgICAgMQoxIDAgMCAxIDEgMCAxIDEgMSAxICAgICAwCjAgMCAwIDAgMCAwIDEgMSAwIDAgICAgIDEKMSAxIDEgMSAwIDAgMSAxIDAgMSAgICAgMAowIDEgMSAxIDAgMSAxIDEgMCAxICAgICAwCjAgMCAxIDEgMCAxIDEgMSAwIDAgICAgIDAKMSAxIDEgMCAwIDAgMCAxIDEgMCAgICAgMAowIDAgMSAxIDEgMCAwIDAgMSAwICAgICAwCjEgMCAwIDAgMSAwIDEgMCAxIDEgICAgIDAKMCAxIDAgMCAxIDAgMCAwIDEgMSAgICAgMAowIDEgMSAwIDEgMCAwIDEgMSAxICAgICAwCjAgMCAxIDAgMSAwIDEgMCAxIDAgICAgIDAKMCAxIDEgMCAxIDEgMSAxIDEgMCAgICAgMAoxIDEgMCAwIDEgMSAxIDEgMCAwICAgICAxCjEgMCAwIDAgMSAxIDEgMCAwIDAgICAgIDEKMCAwIDEgMCAwIDEgMSAxIDAgMCAgICAgMAowIDEgMSAwIDAgMSAxIDEgMCAxICAgICAwCjEgMSAwIDEgMCAxIDEgMSAxIDEgICAgIDAKMSAxIDEgMCAxIDEgMSAwIDEgMCAgICAgMAowIDEgMSAwIDEgMSAxIDAgMCAxICAgICAwCjEgMSAxIDEgMSAxIDAgMCAwIDEgICAgIDAKMSAxIDEgMCAxIDAgMSAxIDEgMCAgICAgMAoxIDEgMSAwIDEgMCAwIDAgMCAwICAgICAwCjAgMCAwIDEgMSAxIDAgMCAxIDAgICAgIDAKMSAwIDEgMCAwIDAgMSAxIDEgMCAgICAgMAowIDAgMSAxIDEgMSAwIDEgMSAwICAgICAwCjEgMSAwIDEgMCAwIDAgMCAwIDEgICAgIDEKMCAxIDEgMSAwIDEgMCAxIDEgMSAgICAgMAoxIDEgMCAwIDAgMSAxIDAgMCAxICAgICAxCjEgMSAwIDEgMSAxIDEgMSAxIDEgICAgIDAKMSAwIDEgMCAxIDEgMCAxIDAgMSAgICAgMAoxIDEgMCAxIDEgMCAwIDEgMSAwICAgICAwCjAgMCAxIDAgMSAwIDEgMSAwIDEgICAgIDAKMCAxIDEgMSAxIDAgMCAxIDAgMCAgICAgMAowIDEgMSAwIDAgMSAxIDAgMCAwICAgICAwCjAgMCAwIDEgMCAxIDAgMCAwIDAgICAgIDEKMSAxIDEgMCAwIDAgMCAxIDAgMCAgICAgMAoxIDAgMSAxIDEgMSAwIDAgMSAwICAgICAwCjAgMSAwIDAgMSAwIDEgMSAwIDAgICAgIDEKMSAxIDEgMCAxIDEgMCAwIDAgMCAgICAgMAowIDAgMSAwIDEgMCAxIDEgMCAxICAgICAwCjEgMCAwIDEgMCAxIDEgMSAwIDAgICAgIDEKMSAxIDEgMCAxIDEgMCAwIDEgMCAgICAgMAowIDEgMCAxIDEgMSAxIDEgMCAxICAgICAxCjAgMSAxIDAgMCAxIDAgMCAxIDAgICAgIDAKMCAwIDAgMSAxIDEgMCAxIDEgMSAgICAgMAoxIDAgMSAwIDEgMCAxIDEgMSAwICAgICAwCjAgMSAxIDAgMCAwIDEgMCAwIDAgICAgIDAKMCAwIDEgMCAxIDAgMCAwIDEgMSAgICAgMAoxIDAgMSAwIDAgMSAxIDAgMCAwICAgICAwCjAgMCAwIDEgMCAwIDEgMCAwIDEgICAgIDEKMCAwIDEgMSAxIDEgMSAxIDEgMCAgICAgMAowIDAgMSAwIDEgMSAxIDAgMSAxICAgICAwCjAgMSAxIDAgMSAwIDAgMCAwIDAgICAgIDAKMCAwIDEgMSAwIDAgMCAxIDEgMSAgICAgMAowIDEgMCAxIDEgMSAwIDAgMSAwICAgICAwCjEgMSAxIDEgMCAwIDEgMCAxIDEgICAgIDAKMSAxIDEgMCAwIDEgMCAxIDEgMSAgICAgMAowIDEgMCAwIDAgMCAxIDAgMCAwICAgICAxCjAgMCAwIDAgMSAwIDAgMCAwIDEgICAgIDEKMSAxIDAgMCAxIDEgMCAxIDAgMSAgICAgMQowIDAgMCAxIDEgMCAxIDAgMCAxICAgICAxCjEgMSAxIDEgMSAwIDEgMSAwIDEgICAgIDAKMSAxIDEgMSAwIDAgMCAwIDAgMCAgICAgMAoxIDAgMSAxIDEgMCAxIDAgMCAxICAgICAwCjAgMSAwIDEgMCAxIDAgMSAxIDAgICAgIDAKMSAwIDAgMCAxIDAgMCAwIDAgMCAgICAgMQowIDEgMSAxIDAgMCAxIDEgMSAwICAgICAwCjAgMSAxIDEgMCAwIDAgMCAxIDEgICAgIDAKMSAwIDEgMSAwIDEgMSAxIDEgMSAgICAgMAoxIDEgMCAwIDEgMCAxIDAgMSAwICAgICAwCjAgMSAxIDAgMCAxIDAgMSAwIDEgICAgIDAKMCAxIDAgMCAwIDAgMSAxIDEgMCAgICAgMAowIDEgMSAwIDEgMCAwIDAgMSAxICAgICAwCjAgMSAwIDEgMSAxIDEgMSAwIDEgICAgIDEKMSAwIDAgMSAwIDAgMSAxIDEgMSAgICAgMAoxIDEgMCAxIDEgMSAxIDEgMCAwICAgICAxCjAgMCAwIDAgMCAxIDEgMSAxIDEgICAgIDAKMCAwIDAgMCAxIDAgMCAwIDAgMSAgICAgMQoxIDEgMCAxIDAgMSAxIDAgMCAxICAgICAxCjAgMCAxIDAgMCAxIDAgMCAwIDEgICAgIDAKMSAwIDEgMSAwIDAgMCAwIDAgMCAgICAgMAoxIDAgMSAxIDEgMCAwIDAgMCAwICAgICAwCjEgMCAwIDEgMSAxIDAgMSAxIDEgICAgIDAKMCAwIDEgMSAwIDAgMSAwIDAgMSAgICAgMAowIDAgMSAxIDEgMSAxIDAgMSAxICAgICAwCjAgMSAwIDEgMCAxIDAgMCAwIDEgICAgIDEKMSAwIDEgMSAxIDEgMSAwIDEgMSAgICAgMAoxIDEgMSAxIDEgMSAwIDAgMSAxICAgICAwCjAgMSAwIDAgMCAwIDEgMCAxIDEgICAgIDAKMSAwIDEgMSAxIDAgMCAwIDAgMCAgICAgMAowIDEgMSAxIDAgMCAwIDAgMSAxICAgICAwCjAgMSAxIDAgMSAxIDEgMCAwIDAgICAgIDAKMSAxIDAgMCAwIDAgMCAxIDAgMCAgICAgMQoxIDAgMSAwIDAgMCAxIDAgMCAwICAgICAwCjAgMCAxIDEgMSAwIDAgMCAwIDAgICAgIDAKMCAxIDAgMCAxIDAgMCAxIDEgMSAgICAgMA==
1 0 0 0 0 0 1 0 0 1 1
0 1 0 1 0 1 1 1 0 1 1
0 1 0 0 0 1 1 0 1 0 0
1 0 0 1 1 0 1 0 0 1 1
1 0 0 1 1 0 1 1 1 1 0
0 0 0 0 0 0 1 1 0 0 1
1 1 1 1 0 0 1 1 0 1 0
0 1 1 1 0 1 1 1 0 1 0
0 0 1 1 0 1 1 1 0 0 0
1 1 1 0 0 0 0 1 1 0 0
0 0 1 1 1 0 0 0 1 0 0
1 0 0 0 1 0 1 0 1 1 0
0 1 0 0 1 0 0 0 1 1 0
0 1 1 0 1 0 0 1 1 1 0
0 0 1 0 1 0 1 0 1 0 0
0 1 1 0 1 1 1 1 1 0 0
1 1 0 0 1 1 1 1 0 0 1
1 0 0 0 1 1 1 0 0 0 1
0 0 1 0 0 1 1 1 0 0 0
0 1 1 0 0 1 1 1 0 1 0
1 1 0 1 0 1 1 1 1 1 0
1 1 1 0 1 1 1 0 1 0 0
0 1 1 0 1 1 1 0 0 1 0
1 1 1 1 1 1 0 0 0 1 0
1 1 1 0 1 0 1 1 1 0 0
1 1 1 0 1 0 0 0 0 0 0
0 0 0 1 1 1 0 0 1 0 0
1 0 1 0 0 0 1 1 1 0 0
0 0 1 1 1 1 0 1 1 0 0
1 1 0 1 0 0 0 0 0 1 1
0 1 1 1 0 1 0 1 1 1 0
1 1 0 0 0 1 1 0 0 1 1
1 1 0 1 1 1 1 1 1 1 0
1 0 1 0 1 1 0 1 0 1 0
1 1 0 1 1 0 0 1 1 0 0
0 0 1 0 1 0 1 1 0 1 0
0 1 1 1 1 0 0 1 0 0 0
0 1 1 0 0 1 1 0 0 0 0
0 0 0 1 0 1 0 0 0 0 1
1 1 1 0 0 0 0 1 0 0 0
1 0 1 1 1 1 0 0 1 0 0
0 1 0 0 1 0 1 1 0 0 1
1 1 1 0 1 1 0 0 0 0 0
0 0 1 0 1 0 1 1 0 1 0
1 0 0 1 0 1 1 1 0 0 1
1 1 1 0 1 1 0 0 1 0 0
0 1 0 1 1 1 1 1 0 1 1
0 1 1 0 0 1 0 0 1 0 0
0 0 0 1 1 1 0 1 1 1 0
1 0 1 0 1 0 1 1 1 0 0
0 1 1 0 0 0 1 0 0 0 0
0 0 1 0 1 0 0 0 1 1 0
1 0 1 0 0 1 1 0 0 0 0
0 0 0 1 0 0 1 0 0 1 1
0 0 1 1 1 1 1 1 1 0 0
0 0 1 0 1 1 1 0 1 1 0
0 1 1 0 1 0 0 0 0 0 0
0 0 1 1 0 0 0 1 1 1 0
0 1 0 1 1 1 0 0 1 0 0
1 1 1 1 0 0 1 0 1 1 0
1 1 1 0 0 1 0 1 1 1 0
0 1 0 0 0 0 1 0 0 0 1
0 0 0 0 1 0 0 0 0 1 1
1 1 0 0 1 1 0 1 0 1 1
0 0 0 1 1 0 1 0 0 1 1
1 1 1 1 1 0 1 1 0 1 0
1 1 1 1 0 0 0 0 0 0 0
1 0 1 1 1 0 1 0 0 1 0
0 1 0 1 0 1 0 1 1 0 0
1 0 0 0 1 0 0 0 0 0 1
0 1 1 1 0 0 1 1 1 0 0
0 1 1 1 0 0 0 0 1 1 0
1 0 1 1 0 1 1 1 1 1 0
1 1 0 0 1 0 1 0 1 0 0
0 1 1 0 0 1 0 1 0 1 0
0 1 0 0 0 0 1 1 1 0 0
0 1 1 0 1 0 0 0 1 1 0
0 1 0 1 1 1 1 1 0 1 1
1 0 0 1 0 0 1 1 1 1 0
1 1 0 1 1 1 1 1 0 0 1
0 0 0 0 0 1 1 1 1 1 0
0 0 0 0 1 0 0 0 0 1 1
1 1 0 1 0 1 1 0 0 1 1
0 0 1 0 0 1 0 0 0 1 0
1 0 1 1 0 0 0 0 0 0 0
1 0 1 1 1 0 0 0 0 0 0
1 0 0 1 1 1 0 1 1 1 0
0 0 1 1 0 0 1 0 0 1 0
0 0 1 1 1 1 1 0 1 1 0
0 1 0 1 0 1 0 0 0 1 1
1 0 1 1 1 1 1 0 1 1 0
1 1 1 1 1 1 0 0 1 1 0
0 1 0 0 0 0 1 0 1 1 0
1 0 1 1 1 0 0 0 0 0 0
0 1 1 1 0 0 0 0 1 1 0
0 1 1 0 1 1 1 0 0 0 0
1 1 0 0 0 0 0 1 0 0 1
1 0 1 0 0 0 1 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0
0 1 0 0 1 0 0 1 1 1 0