"""
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=84 #スコア(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