Advertisement
Guest User

Untitled

a guest
Dec 16th, 2020
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. SetWorkingDir %A_ScriptDir%
  2.  
  3. FileRead, tiStr, % A_ScriptDir "\d16.txt"
  4.  
  5. tiA := StrSplit(tiStr, "`r`n`r`n")
  6.  
  7. ruA := {}
  8. for i, j in StrSplit(tiA[1], "`r`n") {
  9.     rA := StrSplit(j, [": "])
  10.     rA[2] := StrSplit(rA[2], " or ")
  11.     for k, l in rA[2] {
  12.         rA[2][k] := StrSplit(l, "-")
  13.     }
  14.     ruA[i] := rA
  15. }
  16.  
  17. ticA := {}
  18. ticA[1] := StrSplit(StrSplit(tiA[2], ":`r`n")[2], ",")
  19.  
  20. for i, j in StrSplit(tiA[3], "`r`n") {
  21.     if (i = 1)
  22.         Continue
  23.     ticA[i] := StrSplit(j, ",")
  24. }
  25.  
  26. tickA := {}
  27. tickA[1] := ticA[1]
  28. for i, ticket in ticA {
  29.     if (i = 1)
  30.         Continue
  31.     invalid := 0
  32.     for j, value in ticket {
  33.         valid := 0
  34.         for k, rule in ruA {
  35.             for l, values in rule[2] {
  36.                 if (value >= values[1]) and (value <= values[2]) {
  37.                     valid := 1
  38.                 }
  39.             }
  40.         }
  41.         if !valid
  42.             invalid := 1
  43.     }
  44.     if !invalid
  45.         tickA[i] := ticA[i]
  46. }
  47.  
  48. RulePos := {}
  49.  
  50. for i, ticket in tickA {
  51.     for j, value in ticket {
  52.         for k, rule in ruA {
  53.             if !RulePos[rule[1]]
  54.                 RulePos[rule[1]] := {}
  55.             if !RulePos[rule[1]][j]
  56.                 RulePos[rule[1]][j] := 0
  57.             for l, values in rule[2] {
  58.                 if (value >= values[1]) and (value <= values[2]) {
  59.                     RulePos[rule[1]][j] += 1
  60.                 }
  61.             }
  62.         }
  63.     }
  64. }
  65.  
  66. Loop
  67. {
  68.     noObj := 0
  69.     for i, rule in RulePos {
  70.         maxVal := 0
  71.         maxValCount := 1
  72.         maxValPos := 0
  73.         if IsObject(rule) {
  74.             for pos, val in rule {
  75.                 if (val > maxVal) {
  76.                     maxVal := val
  77.                     maxValCount := 1
  78.                     maxValPos := pos
  79.                 }
  80.                 else if (val = maxVal)
  81.                     maxValCount += 1
  82.             }
  83.             if (maxValCount > 1) {
  84.                 Continue
  85.             }
  86.             else {
  87.                 RulePos[i] := maxValPos
  88.                 for k, l in RulePos {
  89.                     if IsObject(l) {
  90.                         RulePos[k][maxValPos] := 0
  91.                     }
  92.                 }
  93.             }
  94.         }
  95.         else {
  96.             noObj += 1
  97.         }
  98.     }
  99.     if (noObj >= RulePos.Count())
  100.         Break
  101. }
  102.  
  103. result := 1
  104. for i, j in RulePos {
  105.     if (SubStr(i, 1, 9) = "departure") {
  106.         result *= tickA[1][j]
  107.     }
  108. }
  109. Clipboard := result
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement