Share Pastebin
Guest
Public paste!

vollmond

By: a guest | Jul 19th, 2008 | Syntax: Groovy | Size: 1.93 KB | Hits: 117 | Expires: Never
Copy text to clipboard
  1. //SearchEngines - Google codejam
  2.  
  3. class SearchEngines {
  4.         static def engines
  5.         static def queries
  6.         static def testCase = 0
  7.  
  8.         static void main(args) {
  9.                 if (args.length != 1) {
  10.                         println "Usage: <command> <path to input>"
  11.                         5.0%2Fdocs%2Fapi%2F">System.exit(1)
  12.                 }
  13.  
  14.                 def numEngines
  15.                 def numQueries
  16.                 def state
  17.  
  18.                 new 5.0%2Fdocs%2Fapi%2F">File(args[0]).eachLine() { line ->
  19.                         if (testCase == 0) {
  20.                                 testCase = 1
  21.                         } else if (null == numEngines) {
  22.                                 numEngines = new 5.0%2Fdocs%2Fapi%2F">Integer(line)
  23.                                 engines = new 5.0%2Fdocs%2Fapi%2F">ArrayList()
  24.                                 state = "engines"
  25.                         } else if (state == "engines") {
  26.                                 if (numEngines > 0) {
  27.                                         engines.add(line)
  28.                                         numEngines--
  29.                                 } else {
  30.                                         state = "queries"
  31.                                         numQueries = new 5.0%2Fdocs%2Fapi%2F">Integer(line)
  32.                                         queries = new 5.0%2Fdocs%2Fapi%2F">ArrayList()
  33.                                 }
  34.                         } else if (null == numQueries) {
  35.                                 numQueries = new 5.0%2Fdocs%2Fapi%2F">Integer(line)
  36.                         } else if (state == "queries") {
  37.                                 if (numQueries > 0) {
  38.                                         queries.add(line)
  39.                                         numQueries--
  40.                                 } else {
  41.                                         state = "engines"
  42.                                         numEngines = new 5.0%2Fdocs%2Fapi%2F">Integer(line)
  43.                                         processData()
  44.                                         engines = new 5.0%2Fdocs%2Fapi%2F">ArrayList()
  45.                                         queries = new 5.0%2Fdocs%2Fapi%2F">ArrayList()
  46.                                         testCase++
  47.                                 }
  48.                         }
  49.                 }
  50.  
  51.                 processData()
  52.         }
  53.  
  54.         static processData() {
  55.                 def i = 0
  56.                 def count = 0
  57.                 def engine = getBestEngine()
  58.  
  59.                 while (queries.size() > 0) {
  60.                         def query = queries[0]
  61.                        
  62.                         if (query == engine && queries.size() > 0) {
  63.                                 count++
  64.                                 engine = getBestEngine()
  65.                         }
  66.                         queries.remove(0)
  67.                        
  68.                 }
  69.        
  70.                 println "Case #${testCase}: ${count}"
  71.         }
  72.  
  73.         static getBestEngine() {
  74.                 def bestEngine
  75.                 def bestCount = 0
  76.  
  77.                 engines.each() { engine ->
  78.                         def count = 0
  79.                         def done = false
  80.                         queries.each() { query ->
  81.                                 if (!done) {
  82.                                         if (query == engine) {
  83.                                                 if (count > bestCount) {
  84.                                                         bestCount = count
  85.                                                         bestEngine = engine
  86.                                                 }
  87.                                                 done = true
  88.                                         } else {
  89.                                                 count++
  90.                                         }
  91.                                 }
  92.                         }
  93.  
  94.                         if (count > bestCount) {
  95.                                 bestCount = count
  96.                                 bestEngine = engine
  97.                         }
  98.                 }
  99.  
  100.                 return bestEngine
  101.         }
  102. }