Advertisement
Guest User

Day13 Raw

a guest
Dec 12th, 2019
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.59 KB | None | 0 0
  1. import Foundation
  2.  
  3. class Day13 {
  4.  
  5.   static let scorePoint = Point(x: -1, y: 0)
  6.  
  7.   let program: String
  8.  
  9.   var worldState: [Point: Int] = [:]
  10.  
  11.   var paddle: Point = Point(x: 0, y: 0)
  12.  
  13.   var ball: Point = Point(x: 0, y: 0)
  14.  
  15.   var score = 0
  16.  
  17.   public init(inputText: [String]) {
  18.    // program = inputText[0]
  19.  
  20.     // free play
  21.     program = "2" + inputText[0].dropFirst()
  22.   }
  23.  
  24.   public func solve() {
  25.     let computer = IntCode()
  26.     computer.load(program: program)
  27.     while computer.executeNext() != false {
  28.  
  29.       if ball.x > paddle.x {
  30.         computer.inputQueue = [1]
  31.       } else if ball.x < paddle.x {
  32.         computer.inputQueue = [-1]
  33.       } else {
  34.         computer.inputQueue = [0]
  35.       }
  36.       // Figure out input
  37.     //  computer.inputQueue = [-1, 0, 1]
  38. //      if computer.inputQueue.isEmpty {
  39.     //    computer.inputQueue.append(0)
  40.    //   }
  41.  
  42.       if computer.output.count == 3 {
  43.         let out = computer.output
  44.         computer.output = []
  45.         let point = Point(x: out[0], y: out[1])
  46.         if point == Day13.scorePoint {
  47.           score = out[2]
  48.           print("score: \(score)")
  49.         } else {
  50.           let type = out[2]
  51.           worldState[point] = type
  52.         }
  53.         if out[2] == 4 {
  54.           ball = point
  55.           print("QQ ball: \(ball)")
  56.         }
  57.         if out[2] == 3 {
  58.           paddle = point
  59.           print("QQ paddle: \(paddle)")
  60.         }
  61.       }
  62.     }
  63.     let blocks = worldState.values.reduce(0) { ret, val in
  64.       if val == 2 {
  65.         return ret + 1
  66.       }
  67.       return ret
  68.     }
  69.     print(blocks)
  70.   }
  71.  
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement