equal
  deleted
  inserted
  replaced
  
    
    
   187        ".....2.......7...17..3...9.8..7......2.89.6...13..6....9..5.824.....891..........",  | 
   187        ".....2.......7...17..3...9.8..7......2.89.6...13..6....9..5.824.....891..........",  | 
   188        "3...8.......7....51..............36...2..4....7...........6.13..452...........8..",  | 
   188        "3...8.......7....51..............36...2..4....7...........6.13..452...........8..",  | 
   189        "....14....3....2...7..........9...3.6.1.............8.2.....1.4....5.6.....7.8...",  | 
   189        "....14....3....2...7..........9...3.6.1.............8.2.....1.4....5.6.....7.8...",  | 
   190        "4.....8.5.3..........7......2.....6.....8.4......1.......6.3.7.5..2.....1.4......")  | 
   190        "4.....8.5.3..........7......2.....6.....8.4......1.......6.3.7.5..2.....1.4......")  | 
   191   | 
   191   | 
   192 //println("108:\n" ++ pretty(hard_games(108).replaceAll("\\.", " ")) ++ "\n") | 
         | 
   193 //println("109:\n" ++ pretty(hard_games(109).replaceAll("\\.", " ")) ++ "\n") | 
         | 
   194   | 
   192   | 
   195   | 
   193   | 
   196 // for measuring time  | 
   194 // for measuring time  | 
   197 def time_needed[T](i: Int, code: => T) = { | 
   195 def time_needed[T](i: Int, code: => T) = { | 
   198   val start = System.nanoTime()  | 
   196   val start = System.nanoTime()  | 
   201   (end - start) / i / 1.0e9  | 
   199   (end - start) / i / 1.0e9  | 
   202 }  | 
   200 }  | 
   203   | 
   201   | 
   204   | 
   202   | 
   205 val total =   | 
   203 val total =   | 
   206   (for ((game, i) <- hard_games.zipWithIndex) yield { | 
   204   (for ((game, i) <- hard_games.zipWithIndex.par) yield { | 
   207     val secs = time_needed(1, search(game))  | 
   205     val secs = time_needed(1, search(game))  | 
   208     println(f"${i}%2.0f: ${game} |${secs}%2.3f secs") | 
   206     println(f"${i}%2.0f: ${game} |${secs}%2.3f secs") | 
   209     secs  | 
   207     secs  | 
   210   }).sum  | 
   208   }).sum  | 
   211   | 
   209   | 
   214 }  | 
   212 }  | 
   215   | 
   213   | 
   216   | 
   214   | 
   217   | 
   215   | 
   218 // 1 single thread version 800 secs  | 
   216 // 1 single thread version 800 secs  | 
         | 
   217 //  | 
   219 // 4 cores parallel version on a moderate laptop 400 secs  | 
   218 // 4 cores parallel version on a moderate laptop 400 secs  | 
   220 // 8 cores: 290 secs  | 
   219 // 8 cores: 290 secs  | 
         | 
   220 // 10 cores: 156 secs  | 
   221 // 18 cores: 142 secs  | 
   221 // 18 cores: 142 secs  | 
   222   | 
   222   |