Add size of all plants of one owner
authorJoachim Breitner <mail@joachim-breitner.de>
Sat, 30 May 2009 16:30:41 +0000 (18:30 +0200)
committerJoachim Breitner <mail@joachim-breitner.de>
Sat, 30 May 2009 16:30:41 +0000 (18:30 +0200)
src/Lseed/DB.hs
src/fastScorer.hs

index 04df6ab..5cdaf4c 100644 (file)
@@ -7,6 +7,7 @@ module Lseed.DB
 import Database.HDBC
 import Database.HDBC.ODBC
 import Data.Map((!))
+import qualified Data.Map as M
 
 import Lseed.Data
 import Lseed.Data.Functions
@@ -42,14 +43,16 @@ getCodeToRun = withLseedDB $ \conn -> do
                       (fromSql (m ! "code"))
 
 addFinishedSeasonResults garden = withLseedDB $ \conn -> do 
+       let owernerscore = M.toList $ foldr go M.empty garden
+               where go p = M.insertWith (+) (plantOwner p) (plantLength (phenotype p))
        run conn "INSERT INTO SEASON VALUES (NULL, False)" []
        stmt <- prepare conn "SELECT LAST_INSERT_ID()"
        execute stmt []
        id <- (head . head) `fmap` fetchAllRows' stmt
        stmt <- prepare conn "INSERT INTO seasonscore VALUES (NULL, ?, ?, ?)"
-       executeMany stmt $ map (\planted ->
-               [ toSql $ plantOwner planted
+       executeMany stmt $ map (\(o,l)->
+               [ toSql $ o
                , id
-               , toSql $ plantLength (phenotype planted)]
-               ) garden
+               , toSql $ l
+               ]) owernerscore
 
index 24af2ee..8a6171f 100644 (file)
@@ -4,6 +4,7 @@ import Lseed.Grammar.Compile
 import Lseed.Grammar.Parse
 import Lseed.Constants
 import Lseed.Mainloop
+import qualified Data.Map as M
 import Control.Monad
 import Debug.Trace
 import System.Environment
@@ -36,7 +37,10 @@ scoringObs = nullObserver {
                                (plantOwner planted)
                                (plantPosition planted)
                                (plantLength (phenotype planted))
+               let owernerscore = foldr (\p -> M.insertWith (+) (plantOwner p) (plantLength (phenotype p))) M.empty garden
+               forM_ (M.toList owernerscore) $ \(o,s) -> 
+                       printf "Sum for %d: %.4f\n" o s
        }
 
 main = readArgs $ \garden -> do
-       lseedMainLoop False scoringObs 100 garden
+       lseedMainLoop False scoringObs 30 garden