Skip to content

Commit 959d8cf

Browse files
committed
Initial commit for day 11
1 parent 2271d6c commit 959d8cf

File tree

2 files changed

+180
-0
lines changed

2 files changed

+180
-0
lines changed

11/input.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3,8,1005,8,319,1106,0,11,0,0,0,104,1,104,0,3,8,1002,8,-1,10,101,1,10,10,4,10,108,1,8,10,4,10,1001,8,0,28,2,1008,7,10,2,4,17,10,3,8,102,-1,8,10,101,1,10,10,4,10,1008,8,0,10,4,10,1002,8,1,59,3,8,1002,8,-1,10,101,1,10,10,4,10,1008,8,0,10,4,10,1001,8,0,81,1006,0,24,3,8,1002,8,-1,10,101,1,10,10,4,10,108,0,8,10,4,10,102,1,8,105,2,6,13,10,1006,0,5,3,8,1002,8,-1,10,101,1,10,10,4,10,108,0,8,10,4,10,1002,8,1,134,2,1007,0,10,2,1102,20,10,2,1106,4,10,1,3,1,10,3,8,102,-1,8,10,101,1,10,10,4,10,108,1,8,10,4,10,1002,8,1,172,3,8,1002,8,-1,10,1001,10,1,10,4,10,108,1,8,10,4,10,101,0,8,194,1,103,7,10,1006,0,3,1,4,0,10,3,8,1002,8,-1,10,1001,10,1,10,4,10,1008,8,1,10,4,10,101,0,8,228,2,109,0,10,1,101,17,10,1006,0,79,3,8,1002,8,-1,10,1001,10,1,10,4,10,108,0,8,10,4,10,1002,8,1,260,2,1008,16,10,1,1105,20,10,1,3,17,10,3,8,1002,8,-1,10,1001,10,1,10,4,10,1008,8,1,10,4,10,1002,8,1,295,1,1002,16,10,101,1,9,9,1007,9,1081,10,1005,10,15,99,109,641,104,0,104,1,21101,387365733012,0,1,21102,1,336,0,1105,1,440,21102,937263735552,1,1,21101,0,347,0,1106,0,440,3,10,104,0,104,1,3,10,104,0,104,0,3,10,104,0,104,1,3,10,104,0,104,1,3,10,104,0,104,0,3,10,104,0,104,1,21102,3451034715,1,1,21101,0,394,0,1105,1,440,21102,3224595675,1,1,21101,0,405,0,1106,0,440,3,10,104,0,104,0,3,10,104,0,104,0,21101,0,838337454440,1,21102,428,1,0,1105,1,440,21101,0,825460798308,1,21101,439,0,0,1105,1,440,99,109,2,22101,0,-1,1,21102,1,40,2,21101,0,471,3,21101,461,0,0,1106,0,504,109,-2,2106,0,0,0,1,0,0,1,109,2,3,10,204,-1,1001,466,467,482,4,0,1001,466,1,466,108,4,466,10,1006,10,498,1102,1,0,466,109,-2,2105,1,0,0,109,4,2101,0,-1,503,1207,-3,0,10,1006,10,521,21101,0,0,-3,21202,-3,1,1,22102,1,-2,2,21101,1,0,3,21102,540,1,0,1105,1,545,109,-4,2105,1,0,109,5,1207,-3,1,10,1006,10,568,2207,-4,-2,10,1006,10,568,22102,1,-4,-4,1106,0,636,22102,1,-4,1,21201,-3,-1,2,21202,-2,2,3,21102,587,1,0,1105,1,545,21201,1,0,-4,21101,0,1,-1,2207,-4,-2,10,1006,10,606,21102,0,1,-1,22202,-2,-1,-2,2107,0,-3,10,1006,10,628,22102,1,-1,1,21102,1,628,0,105,1,503,21202,-2,-1,-2,22201,-4,-2,-4,109,-5,2106,0,0

11/main.go

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
package main
2+
3+
import (
4+
"bufio"
5+
"io"
6+
"log"
7+
"os"
8+
"strconv"
9+
"strings"
10+
"sync"
11+
"time"
12+
13+
"github.com/kisunji/adventofcode2019/9/intcode"
14+
)
15+
16+
const (
17+
input = "input.txt"
18+
)
19+
const (
20+
UP = "up"
21+
DOWN = "down"
22+
LEFT = "left"
23+
RIGHT = "right"
24+
)
25+
26+
func main() {
27+
defer timeTrack(time.Now(), "main")
28+
29+
file := loadFile(input)
30+
defer file.Close()
31+
ints := extractInt64Arr(file)
32+
arr := append([]int64{}, ints...)
33+
34+
computer := intcode.NewIntcodeComputer(arr)
35+
inputChan := make(chan int64)
36+
outputChan := make(chan int64)
37+
var wg sync.WaitGroup
38+
wg.Add(3)
39+
go func() {
40+
computer.Compute(inputChan, outputChan)
41+
wg.Done()
42+
}()
43+
r := NewRobot()
44+
// TODO: merge read and write to one function that coordinates
45+
go func() {
46+
r.Read(inputChan)
47+
}()
48+
go func() {
49+
r.WriteMove(outputChan)
50+
wg.Done()
51+
}()
52+
wg.Wait()
53+
log.Println(len(r.path))
54+
}
55+
56+
type Robot struct {
57+
direction string
58+
position coords
59+
path map[coords]int
60+
mux sync.Mutex
61+
mode int
62+
}
63+
64+
func NewRobot() *Robot {
65+
origin := coords{0, 0}
66+
m := map[coords]int{}
67+
m[origin] = 0
68+
return &Robot{direction: UP, position: coords{0, 0}, path: m}
69+
}
70+
71+
func (r *Robot) Read(output chan<- int64) {
72+
r.mux.Lock()
73+
log.Printf("Read pos (%v):%v", r.position, r.path[r.position])
74+
output <- int64(r.path[r.position])
75+
r.mux.Unlock()
76+
}
77+
78+
func (r *Robot) WriteMove(input <-chan int64) {
79+
const (
80+
WRITE = 0
81+
MOVE = 1
82+
)
83+
for out := range input {
84+
r.mux.Lock()
85+
if r.mode == WRITE {
86+
log.Printf("Writing to pos(%v): %v", r.position, out)
87+
r.path[r.position] = int(out)
88+
r.mode = MOVE
89+
} else {
90+
r.turn(int(out))
91+
r.moveForward()
92+
r.mode = WRITE
93+
}
94+
r.mux.Unlock()
95+
}
96+
log.Println("WriteMove done")
97+
}
98+
99+
func (r *Robot) turn(command int) {
100+
log.Printf("turning from %v", r.direction)
101+
log.Printf("command: %d", command)
102+
switch r.direction {
103+
case UP:
104+
if command == 0 {
105+
r.direction = LEFT
106+
} else {
107+
r.direction = RIGHT
108+
}
109+
case RIGHT:
110+
if command == 0 {
111+
r.direction = UP
112+
} else {
113+
r.direction = DOWN
114+
}
115+
case DOWN:
116+
if command == 0 {
117+
r.direction = RIGHT
118+
} else {
119+
r.direction = LEFT
120+
}
121+
case LEFT:
122+
if command == 0 {
123+
r.direction = DOWN
124+
} else {
125+
r.direction = UP
126+
}
127+
}
128+
log.Printf("turned to %v", r.direction)
129+
}
130+
131+
func (r *Robot) moveForward() {
132+
log.Printf("moving from %v", r.position)
133+
switch r.direction {
134+
case UP:
135+
r.position.y++
136+
case RIGHT:
137+
r.position.x++
138+
case DOWN:
139+
r.position.y--
140+
case LEFT:
141+
r.position.x--
142+
}
143+
log.Printf("moved to %v", r.position)
144+
}
145+
146+
type coords struct {
147+
x int
148+
y int
149+
}
150+
151+
func loadFile(input string) *os.File {
152+
file, err := os.Open(input)
153+
if err != nil {
154+
log.Panic(err)
155+
}
156+
return file
157+
}
158+
159+
func extractInt64Arr(reader io.Reader) []int64 {
160+
var ints []int64
161+
scanner := bufio.NewScanner(reader)
162+
for scanner.Scan() {
163+
text := scanner.Text()
164+
splitText := strings.Split(text, ",")
165+
for _, v := range splitText {
166+
i, err := strconv.ParseInt(v, 10, 64)
167+
if err != nil {
168+
log.Panic(err)
169+
}
170+
ints = append(ints, i)
171+
}
172+
}
173+
return ints
174+
}
175+
176+
func timeTrack(start time.Time, name string) {
177+
elapsed := time.Since(start)
178+
log.Printf("%s took %s", name, elapsed)
179+
}

0 commit comments

Comments
 (0)