Added the first days
This commit is contained in:
parent
7ebc2cd003
commit
6ed18289c8
26 changed files with 6168 additions and 0 deletions
4
2021/01/first.b98
Normal file
4
2021/01/first.b98
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
&:>#;&-:v@,a.$$;
|
||||||
|
: 0
|
||||||
|
^ -<w-\1+\
|
||||||
|
^<
|
39
2021/01/first.go
Normal file
39
2021/01/first.go
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
f, err := os.Open("input")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(f)
|
||||||
|
scanner.Split(bufio.ScanLines)
|
||||||
|
|
||||||
|
scanner.Scan()
|
||||||
|
prev, err := strconv.Atoi(scanner.Text())
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
result := 0
|
||||||
|
|
||||||
|
for scanner.Scan() {
|
||||||
|
i, err := strconv.Atoi(scanner.Text())
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
if i > prev {
|
||||||
|
result++
|
||||||
|
}
|
||||||
|
prev = i
|
||||||
|
}
|
||||||
|
fmt.Println(result)
|
||||||
|
}
|
2000
2021/01/input
Normal file
2000
2021/01/input
Normal file
File diff suppressed because it is too large
Load diff
4
2021/01/second.b98
Normal file
4
2021/01/second.b98
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
v > v
|
||||||
|
>&00p&10p&20p>#;&:00gw;@,a.; v
|
||||||
|
^ >\1+\ v
|
||||||
|
^p02p01g02p00g01<
|
57
2021/01/second.go
Normal file
57
2021/01/second.go
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
f, err := os.Open("input")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(f)
|
||||||
|
scanner.Split(bufio.ScanLines)
|
||||||
|
|
||||||
|
scanner.Scan()
|
||||||
|
A, err := strconv.Atoi(scanner.Text())
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
scanner.Scan()
|
||||||
|
B, err := strconv.Atoi(scanner.Text())
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
A += B
|
||||||
|
scanner.Scan()
|
||||||
|
C, err := strconv.Atoi(scanner.Text())
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
B += C
|
||||||
|
A += C
|
||||||
|
|
||||||
|
result := 0
|
||||||
|
|
||||||
|
for scanner.Scan() {
|
||||||
|
D, err := strconv.Atoi(scanner.Text())
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
C += D
|
||||||
|
B += D
|
||||||
|
if B > A {
|
||||||
|
result++
|
||||||
|
}
|
||||||
|
A = B
|
||||||
|
B = C
|
||||||
|
C = D
|
||||||
|
}
|
||||||
|
fmt.Println(result)
|
||||||
|
}
|
5
2021/02/first.b98
Normal file
5
2021/02/first.b98
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
v pos in 0,0, depth in 1,0
|
||||||
|
>00p10p>#;~:'f-#v_$&00g+00p v@,a.*g01g00;
|
||||||
|
>'d-#v_$&10g+10pv
|
||||||
|
>&10g\-10p v
|
||||||
|
^ ;,a.g01.g00; ~ < # we do not forget to strip the \n from the input
|
42
2021/02/first.go
Normal file
42
2021/02/first.go
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
f, err := os.Open("input")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(f)
|
||||||
|
scanner.Split(bufio.ScanLines)
|
||||||
|
|
||||||
|
pos := 0
|
||||||
|
depth := 0
|
||||||
|
for scanner.Scan() {
|
||||||
|
elts := strings.Split(scanner.Text(), " ")
|
||||||
|
i, err := strconv.Atoi(elts[1])
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
switch elts[0] {
|
||||||
|
case "forward":
|
||||||
|
pos += i
|
||||||
|
case "down":
|
||||||
|
depth += i
|
||||||
|
case "up":
|
||||||
|
depth -= i
|
||||||
|
default:
|
||||||
|
panic(elts[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(pos * depth)
|
||||||
|
}
|
1000
2021/02/input
Normal file
1000
2021/02/input
Normal file
File diff suppressed because it is too large
Load diff
5
2021/02/second.b98
Normal file
5
2021/02/second.b98
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
v pos in 0,0, depth in 1,0, aim in 2,0
|
||||||
|
>00p10p20p>#;~:'f-#v_$&:00g+00p v@,a.*g01g00;
|
||||||
|
>'d-#v_$&20g+20pv>20g*10g+10pv
|
||||||
|
>&20g\-20p v <
|
||||||
|
^ ;,a.g01.g00; ~ << # we do not forget to strip the \n from the input
|
44
2021/02/second.go
Normal file
44
2021/02/second.go
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
f, err := os.Open("input")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(f)
|
||||||
|
scanner.Split(bufio.ScanLines)
|
||||||
|
|
||||||
|
aim := 0
|
||||||
|
pos := 0
|
||||||
|
depth := 0
|
||||||
|
for scanner.Scan() {
|
||||||
|
elts := strings.Split(scanner.Text(), " ")
|
||||||
|
i, err := strconv.Atoi(elts[1])
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
switch elts[0] {
|
||||||
|
case "forward":
|
||||||
|
pos += i
|
||||||
|
depth += i * aim
|
||||||
|
case "down":
|
||||||
|
aim += i
|
||||||
|
case "up":
|
||||||
|
aim -= i
|
||||||
|
default:
|
||||||
|
panic(elts[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(pos * depth)
|
||||||
|
}
|
42
2021/03/first.go
Normal file
42
2021/03/first.go
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
f, err := os.Open("input")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(f)
|
||||||
|
scanner.Split(bufio.ScanLines)
|
||||||
|
|
||||||
|
bits := make([]int, 12)
|
||||||
|
for scanner.Scan() {
|
||||||
|
num := scanner.Text()
|
||||||
|
for n := 0; n < 12; n++ {
|
||||||
|
if num[n] == '1' {
|
||||||
|
bits[n]++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gamma := 0
|
||||||
|
epsilon := 0
|
||||||
|
for n := 0; n < 12; n++ {
|
||||||
|
gamma *= 2
|
||||||
|
epsilon *= 2
|
||||||
|
if bits[n] > 500 {
|
||||||
|
gamma++
|
||||||
|
} else {
|
||||||
|
epsilon++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(gamma * epsilon)
|
||||||
|
}
|
1000
2021/03/input
Normal file
1000
2021/03/input
Normal file
File diff suppressed because it is too large
Load diff
96
2021/03/second.go
Normal file
96
2021/03/second.go
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func findBitCount(data []string) []int {
|
||||||
|
bits := make([]int, 12)
|
||||||
|
for _, line := range data {
|
||||||
|
for n := 0; n < 12; n++ {
|
||||||
|
if line[n] == '1' {
|
||||||
|
bits[n]++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bits
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
f, err := os.Open("input")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(f)
|
||||||
|
scanner.Split(bufio.ScanLines)
|
||||||
|
|
||||||
|
data := make([]string, 0)
|
||||||
|
for scanner.Scan() {
|
||||||
|
data = append(data, scanner.Text())
|
||||||
|
}
|
||||||
|
|
||||||
|
datacsr := make([]string, len(data))
|
||||||
|
copy(datacsr, data)
|
||||||
|
|
||||||
|
var ogr int
|
||||||
|
for n := 0; n < 12; n++ {
|
||||||
|
if len(data) == 1 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
bits := findBitCount(data)
|
||||||
|
var i byte
|
||||||
|
if 2*bits[n] >= len(data) {
|
||||||
|
i = '1'
|
||||||
|
} else {
|
||||||
|
i = '0'
|
||||||
|
}
|
||||||
|
newdata := make([]string, 0)
|
||||||
|
for j := 0; j < len(data); j++ {
|
||||||
|
if data[j][n] == i {
|
||||||
|
newdata = append(newdata, data[j])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data = newdata
|
||||||
|
}
|
||||||
|
for n := 0; n < 12; n++ {
|
||||||
|
ogr *= 2
|
||||||
|
if data[0][n] == '1' {
|
||||||
|
ogr++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data = datacsr
|
||||||
|
var csr int
|
||||||
|
for n := 0; n < 12; n++ {
|
||||||
|
if len(data) == 1 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
bits := findBitCount(data)
|
||||||
|
var i byte
|
||||||
|
if 2*bits[n] < len(data) {
|
||||||
|
i = '1'
|
||||||
|
} else {
|
||||||
|
i = '0'
|
||||||
|
}
|
||||||
|
newdata := make([]string, 0)
|
||||||
|
for j := 0; j < len(data); j++ {
|
||||||
|
if data[j][n] == i {
|
||||||
|
newdata = append(newdata, data[j])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data = newdata
|
||||||
|
}
|
||||||
|
for n := 0; n < 12; n++ {
|
||||||
|
csr *= 2
|
||||||
|
if data[0][n] == '1' {
|
||||||
|
csr++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(ogr * csr)
|
||||||
|
}
|
123
2021/04/first.go
Normal file
123
2021/04/first.go
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type grille struct {
|
||||||
|
lines [][]int
|
||||||
|
columns [][]int
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
best = 100000000
|
||||||
|
score = 0
|
||||||
|
)
|
||||||
|
|
||||||
|
// winning func
|
||||||
|
func win(g *grille, n int, iter int) {
|
||||||
|
sum := 0
|
||||||
|
for i := 0; i < 5; i++ {
|
||||||
|
for j := 0; j < len(g.lines[i]); j++ {
|
||||||
|
sum += g.lines[i][j]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if iter < best {
|
||||||
|
best = iter
|
||||||
|
score = sum * n
|
||||||
|
//fmt.Println(iter, n, score, g)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
f, err := os.Open("input")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(f)
|
||||||
|
scanner.Split(bufio.ScanLines)
|
||||||
|
|
||||||
|
scanner.Scan()
|
||||||
|
tirage := make([]int, 0)
|
||||||
|
tirageStr := strings.Split(scanner.Text(), ",")
|
||||||
|
// lets process the tirage
|
||||||
|
for _, v := range tirageStr {
|
||||||
|
n, err := strconv.Atoi(v)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
tirage = append(tirage, n)
|
||||||
|
}
|
||||||
|
|
||||||
|
for scanner.Scan() {
|
||||||
|
// we just scanned the new line
|
||||||
|
// lets init the grille
|
||||||
|
g := new(grille)
|
||||||
|
g.lines = make([][]int, 5)
|
||||||
|
g.columns = make([][]int, 5)
|
||||||
|
for i := 0; i < 5; i++ {
|
||||||
|
g.lines[i] = make([]int, 5)
|
||||||
|
g.columns[i] = make([]int, 5)
|
||||||
|
}
|
||||||
|
// lets populate the grille
|
||||||
|
for i := 0; i < 5; i++ {
|
||||||
|
scanner.Scan()
|
||||||
|
numbers := strings.Fields(scanner.Text())
|
||||||
|
for j := 0; j < 5; j++ {
|
||||||
|
n, err := strconv.Atoi(numbers[j])
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
g.lines[i][j] = n
|
||||||
|
g.columns[j][i] = n
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// lets process the tirage
|
||||||
|
out:
|
||||||
|
for iter, n := range tirage {
|
||||||
|
if iter >= best {
|
||||||
|
//fmt.Println(iter, n, g)
|
||||||
|
break out
|
||||||
|
}
|
||||||
|
// remove the number
|
||||||
|
for i := 0; i < 5; i++ {
|
||||||
|
for j := 0; j < len(g.lines[i]); j++ {
|
||||||
|
if g.lines[i][j] == n {
|
||||||
|
if len(g.lines[i]) == 1 {
|
||||||
|
g.lines[i] = []int{}
|
||||||
|
win(g, n, iter)
|
||||||
|
break out
|
||||||
|
}
|
||||||
|
if j < len(g.lines[i])-1 {
|
||||||
|
g.lines[i][j] = g.lines[i][len(g.lines[i])-1]
|
||||||
|
}
|
||||||
|
g.lines[i] = g.lines[i][:len(g.lines[i])-1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for i := 0; i < 5; i++ {
|
||||||
|
for j := 0; j < len(g.columns[i]); j++ {
|
||||||
|
if g.columns[i][j] == n {
|
||||||
|
if len(g.columns[i]) == 1 {
|
||||||
|
g.columns[i] = []int{}
|
||||||
|
win(g, n, iter)
|
||||||
|
break out
|
||||||
|
}
|
||||||
|
if j < len(g.columns[i])-1 {
|
||||||
|
g.columns[i][j] = g.columns[i][len(g.columns[i])-1]
|
||||||
|
}
|
||||||
|
g.columns[i] = g.columns[i][:len(g.columns[i])-1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(score)
|
||||||
|
}
|
601
2021/04/input
Normal file
601
2021/04/input
Normal file
|
@ -0,0 +1,601 @@
|
||||||
|
14,30,18,8,3,10,77,4,48,67,28,38,63,43,62,12,68,88,54,32,17,21,83,64,97,53,24,2,60,96,86,23,20,93,65,34,45,46,42,49,71,9,61,16,31,1,29,40,59,87,95,41,39,27,6,25,19,58,80,81,50,79,73,15,70,37,92,94,7,55,85,98,5,84,99,26,66,57,82,75,22,89,74,36,11,76,56,33,13,72,35,78,47,91,51,44,69,0,90,52
|
||||||
|
|
||||||
|
13 62 38 10 41
|
||||||
|
93 59 60 74 75
|
||||||
|
79 18 57 90 28
|
||||||
|
56 76 34 96 84
|
||||||
|
78 42 69 14 19
|
||||||
|
|
||||||
|
96 38 62 8 7
|
||||||
|
78 50 53 29 81
|
||||||
|
88 45 34 58 52
|
||||||
|
33 76 13 54 68
|
||||||
|
59 95 10 80 63
|
||||||
|
|
||||||
|
36 26 74 29 55
|
||||||
|
43 87 46 70 21
|
||||||
|
9 17 38 58 63
|
||||||
|
56 79 85 51 2
|
||||||
|
50 57 67 86 8
|
||||||
|
|
||||||
|
29 78 3 24 79
|
||||||
|
15 81 20 6 38
|
||||||
|
97 41 28 42 82
|
||||||
|
45 68 89 85 92
|
||||||
|
48 33 40 62 4
|
||||||
|
|
||||||
|
68 38 43 2 27
|
||||||
|
74 92 49 11 22
|
||||||
|
33 97 73 87 30
|
||||||
|
42 28 60 39 67
|
||||||
|
3 66 35 94 47
|
||||||
|
|
||||||
|
6 65 2 30 88
|
||||||
|
69 3 33 61 23
|
||||||
|
62 40 37 7 43
|
||||||
|
55 12 70 36 73
|
||||||
|
15 20 85 38 44
|
||||||
|
|
||||||
|
99 36 10 83 69
|
||||||
|
31 58 93 87 56
|
||||||
|
33 25 82 59 30
|
||||||
|
45 86 79 12 2
|
||||||
|
39 57 51 53 13
|
||||||
|
|
||||||
|
48 46 11 20 69
|
||||||
|
89 9 96 45 76
|
||||||
|
67 78 82 6 97
|
||||||
|
30 41 37 32 64
|
||||||
|
47 31 93 29 75
|
||||||
|
|
||||||
|
49 93 50 83 64
|
||||||
|
54 4 18 1 76
|
||||||
|
75 30 19 78 12
|
||||||
|
84 55 28 3 57
|
||||||
|
16 77 87 25 2
|
||||||
|
|
||||||
|
15 57 86 92 60
|
||||||
|
87 66 76 12 52
|
||||||
|
62 74 93 88 78
|
||||||
|
39 13 44 20 46
|
||||||
|
59 31 40 91 79
|
||||||
|
|
||||||
|
82 16 73 45 42
|
||||||
|
21 79 97 62 5
|
||||||
|
96 52 53 74 49
|
||||||
|
38 84 85 69 68
|
||||||
|
35 44 92 1 47
|
||||||
|
|
||||||
|
8 22 61 35 88
|
||||||
|
84 86 33 26 11
|
||||||
|
57 24 83 25 64
|
||||||
|
46 47 28 6 96
|
||||||
|
58 99 3 29 40
|
||||||
|
|
||||||
|
61 49 56 59 81
|
||||||
|
68 58 98 50 23
|
||||||
|
92 33 43 65 16
|
||||||
|
94 47 74 21 60
|
||||||
|
83 69 35 31 27
|
||||||
|
|
||||||
|
4 32 91 53 18
|
||||||
|
41 84 26 69 31
|
||||||
|
25 81 0 71 57
|
||||||
|
39 11 43 14 63
|
||||||
|
24 73 58 17 95
|
||||||
|
|
||||||
|
3 50 57 9 94
|
||||||
|
48 43 42 96 15
|
||||||
|
25 0 38 12 39
|
||||||
|
45 56 77 47 53
|
||||||
|
19 95 24 28 54
|
||||||
|
|
||||||
|
78 67 64 33 40
|
||||||
|
29 48 8 17 38
|
||||||
|
22 79 71 46 83
|
||||||
|
11 45 47 87 80
|
||||||
|
3 84 26 5 28
|
||||||
|
|
||||||
|
77 92 70 44 61
|
||||||
|
59 78 12 8 50
|
||||||
|
60 58 55 98 85
|
||||||
|
66 2 52 83 81
|
||||||
|
34 79 20 30 38
|
||||||
|
|
||||||
|
67 3 44 4 91
|
||||||
|
78 64 32 54 31
|
||||||
|
89 41 94 18 8
|
||||||
|
58 23 48 62 16
|
||||||
|
24 12 80 53 28
|
||||||
|
|
||||||
|
76 54 87 69 88
|
||||||
|
16 36 90 48 5
|
||||||
|
75 62 15 96 23
|
||||||
|
70 42 61 1 41
|
||||||
|
71 22 45 92 8
|
||||||
|
|
||||||
|
34 99 93 83 80
|
||||||
|
31 9 43 12 57
|
||||||
|
18 59 10 53 0
|
||||||
|
76 87 74 38 39
|
||||||
|
61 48 60 16 3
|
||||||
|
|
||||||
|
98 1 32 7 97
|
||||||
|
87 99 14 53 46
|
||||||
|
54 26 43 57 49
|
||||||
|
89 72 5 0 40
|
||||||
|
11 28 76 84 85
|
||||||
|
|
||||||
|
58 65 14 33 32
|
||||||
|
13 27 30 44 35
|
||||||
|
45 56 10 1 31
|
||||||
|
68 93 96 38 26
|
||||||
|
17 53 72 6 86
|
||||||
|
|
||||||
|
85 34 72 52 11
|
||||||
|
92 22 79 55 47
|
||||||
|
12 3 86 95 14
|
||||||
|
84 81 17 20 67
|
||||||
|
31 16 69 61 2
|
||||||
|
|
||||||
|
40 10 23 8 61
|
||||||
|
88 11 86 87 49
|
||||||
|
36 3 73 58 20
|
||||||
|
33 62 98 38 93
|
||||||
|
63 95 6 90 18
|
||||||
|
|
||||||
|
49 15 55 14 57
|
||||||
|
41 36 32 1 35
|
||||||
|
78 70 79 54 26
|
||||||
|
23 0 34 21 77
|
||||||
|
96 48 51 47 82
|
||||||
|
|
||||||
|
29 61 54 64 35
|
||||||
|
79 11 31 55 42
|
||||||
|
0 88 20 34 3
|
||||||
|
84 59 46 68 50
|
||||||
|
43 6 12 17 73
|
||||||
|
|
||||||
|
53 91 64 39 5
|
||||||
|
23 51 33 13 55
|
||||||
|
25 66 56 20 98
|
||||||
|
6 46 72 70 3
|
||||||
|
19 38 54 16 34
|
||||||
|
|
||||||
|
14 94 60 28 2
|
||||||
|
97 80 93 89 83
|
||||||
|
71 86 74 52 5
|
||||||
|
77 69 64 10 81
|
||||||
|
21 22 95 39 78
|
||||||
|
|
||||||
|
79 33 4 61 66
|
||||||
|
31 49 67 30 98
|
||||||
|
43 71 84 72 52
|
||||||
|
29 39 81 35 37
|
||||||
|
2 95 94 13 14
|
||||||
|
|
||||||
|
77 19 40 46 96
|
||||||
|
37 81 64 75 95
|
||||||
|
47 68 83 25 69
|
||||||
|
70 35 11 17 91
|
||||||
|
31 92 1 44 14
|
||||||
|
|
||||||
|
68 66 30 84 55
|
||||||
|
87 76 73 29 53
|
||||||
|
37 58 23 12 35
|
||||||
|
1 7 20 34 82
|
||||||
|
27 86 16 60 54
|
||||||
|
|
||||||
|
11 68 61 36 13
|
||||||
|
78 38 98 22 73
|
||||||
|
56 89 93 8 10
|
||||||
|
5 82 60 40 76
|
||||||
|
45 39 72 48 75
|
||||||
|
|
||||||
|
35 22 88 77 8
|
||||||
|
75 30 90 6 41
|
||||||
|
12 69 48 73 61
|
||||||
|
18 1 58 32 79
|
||||||
|
37 36 85 9 17
|
||||||
|
|
||||||
|
81 76 31 87 10
|
||||||
|
27 69 36 57 15
|
||||||
|
44 72 30 59 9
|
||||||
|
24 91 13 73 61
|
||||||
|
20 84 55 51 26
|
||||||
|
|
||||||
|
95 74 5 11 44
|
||||||
|
16 26 91 58 53
|
||||||
|
82 55 27 61 76
|
||||||
|
40 4 20 78 33
|
||||||
|
32 28 98 9 15
|
||||||
|
|
||||||
|
20 1 36 71 23
|
||||||
|
56 42 0 73 45
|
||||||
|
92 64 5 50 43
|
||||||
|
69 37 87 53 7
|
||||||
|
57 84 61 70 58
|
||||||
|
|
||||||
|
25 95 78 27 43
|
||||||
|
77 97 74 13 68
|
||||||
|
20 81 18 37 4
|
||||||
|
61 9 55 92 73
|
||||||
|
72 16 80 41 57
|
||||||
|
|
||||||
|
86 74 92 16 62
|
||||||
|
97 82 26 66 41
|
||||||
|
73 46 6 40 83
|
||||||
|
48 50 67 13 3
|
||||||
|
20 27 61 10 81
|
||||||
|
|
||||||
|
53 24 29 60 79
|
||||||
|
57 39 31 34 15
|
||||||
|
12 38 13 8 30
|
||||||
|
94 98 14 54 6
|
||||||
|
47 82 65 22 42
|
||||||
|
|
||||||
|
72 69 86 31 40
|
||||||
|
19 77 21 9 52
|
||||||
|
53 97 7 27 20
|
||||||
|
35 46 22 23 39
|
||||||
|
11 43 50 29 28
|
||||||
|
|
||||||
|
34 10 81 75 42
|
||||||
|
27 67 59 20 87
|
||||||
|
45 17 46 23 76
|
||||||
|
40 4 77 25 96
|
||||||
|
18 8 88 53 32
|
||||||
|
|
||||||
|
39 37 52 22 70
|
||||||
|
51 15 69 23 64
|
||||||
|
65 50 43 29 91
|
||||||
|
3 67 1 84 76
|
||||||
|
96 72 54 28 42
|
||||||
|
|
||||||
|
45 81 20 22 59
|
||||||
|
94 70 27 61 77
|
||||||
|
4 83 44 68 42
|
||||||
|
13 93 1 30 34
|
||||||
|
84 37 35 8 48
|
||||||
|
|
||||||
|
24 91 55 76 74
|
||||||
|
48 64 59 58 44
|
||||||
|
99 29 3 34 87
|
||||||
|
20 4 42 68 65
|
||||||
|
90 13 82 93 78
|
||||||
|
|
||||||
|
61 36 18 56 26
|
||||||
|
81 41 1 96 78
|
||||||
|
68 54 84 4 86
|
||||||
|
71 52 28 59 39
|
||||||
|
60 72 40 58 37
|
||||||
|
|
||||||
|
66 91 90 56 73
|
||||||
|
30 28 22 8 6
|
||||||
|
19 70 95 17 72
|
||||||
|
46 20 10 21 36
|
||||||
|
53 64 99 9 79
|
||||||
|
|
||||||
|
93 62 37 28 17
|
||||||
|
51 42 76 58 65
|
||||||
|
99 71 12 66 11
|
||||||
|
19 13 3 97 22
|
||||||
|
86 50 36 39 16
|
||||||
|
|
||||||
|
10 32 80 74 2
|
||||||
|
38 59 90 63 98
|
||||||
|
51 7 9 57 24
|
||||||
|
19 48 75 79 30
|
||||||
|
40 86 72 71 54
|
||||||
|
|
||||||
|
10 99 7 84 46
|
||||||
|
16 79 74 55 57
|
||||||
|
54 12 63 30 82
|
||||||
|
49 81 33 39 14
|
||||||
|
65 58 67 98 61
|
||||||
|
|
||||||
|
60 53 43 12 2
|
||||||
|
26 25 49 61 54
|
||||||
|
17 73 75 47 19
|
||||||
|
9 95 67 46 98
|
||||||
|
86 8 35 81 77
|
||||||
|
|
||||||
|
45 1 88 26 31
|
||||||
|
53 37 64 11 28
|
||||||
|
7 39 32 9 72
|
||||||
|
75 51 50 70 3
|
||||||
|
82 79 71 90 8
|
||||||
|
|
||||||
|
58 26 97 61 76
|
||||||
|
24 90 98 15 80
|
||||||
|
62 75 34 69 4
|
||||||
|
10 0 64 73 99
|
||||||
|
46 83 40 23 65
|
||||||
|
|
||||||
|
11 42 17 59 88
|
||||||
|
71 25 27 60 96
|
||||||
|
43 72 69 46 37
|
||||||
|
29 1 66 12 76
|
||||||
|
22 34 81 47 80
|
||||||
|
|
||||||
|
14 24 36 83 31
|
||||||
|
26 59 8 60 21
|
||||||
|
57 90 85 89 32
|
||||||
|
64 4 91 99 81
|
||||||
|
33 1 54 73 40
|
||||||
|
|
||||||
|
70 57 10 81 68
|
||||||
|
16 97 21 11 88
|
||||||
|
56 24 51 61 5
|
||||||
|
38 80 31 23 9
|
||||||
|
48 95 30 91 41
|
||||||
|
|
||||||
|
53 15 91 12 87
|
||||||
|
83 72 98 0 58
|
||||||
|
49 42 94 39 77
|
||||||
|
6 59 90 48 26
|
||||||
|
2 78 62 93 33
|
||||||
|
|
||||||
|
59 13 31 24 71
|
||||||
|
18 30 3 33 34
|
||||||
|
15 61 56 91 75
|
||||||
|
38 58 29 72 26
|
||||||
|
81 50 88 82 40
|
||||||
|
|
||||||
|
26 44 95 42 3
|
||||||
|
52 12 51 20 68
|
||||||
|
45 34 36 11 77
|
||||||
|
99 54 85 47 75
|
||||||
|
22 63 82 32 15
|
||||||
|
|
||||||
|
52 34 81 57 70
|
||||||
|
44 51 31 39 80
|
||||||
|
14 82 12 8 75
|
||||||
|
28 38 5 58 45
|
||||||
|
22 26 21 92 74
|
||||||
|
|
||||||
|
88 47 20 17 0
|
||||||
|
50 52 53 43 57
|
||||||
|
40 38 33 9 36
|
||||||
|
78 93 63 12 14
|
||||||
|
65 67 91 48 98
|
||||||
|
|
||||||
|
25 56 93 76 12
|
||||||
|
39 51 97 86 94
|
||||||
|
74 10 77 1 5
|
||||||
|
66 55 79 89 48
|
||||||
|
92 58 80 78 87
|
||||||
|
|
||||||
|
72 55 75 34 69
|
||||||
|
31 73 42 86 70
|
||||||
|
81 11 33 45 17
|
||||||
|
96 27 65 50 35
|
||||||
|
18 88 98 84 39
|
||||||
|
|
||||||
|
91 51 90 93 6
|
||||||
|
77 35 13 50 17
|
||||||
|
89 75 57 39 36
|
||||||
|
92 64 56 20 78
|
||||||
|
12 80 34 69 9
|
||||||
|
|
||||||
|
99 59 14 76 4
|
||||||
|
84 19 72 30 40
|
||||||
|
75 6 68 66 3
|
||||||
|
51 28 60 2 63
|
||||||
|
85 77 62 65 5
|
||||||
|
|
||||||
|
29 23 24 20 87
|
||||||
|
96 0 6 40 98
|
||||||
|
13 80 41 82 3
|
||||||
|
62 88 25 10 99
|
||||||
|
32 59 31 94 9
|
||||||
|
|
||||||
|
22 53 42 6 33
|
||||||
|
40 29 54 68 27
|
||||||
|
19 30 77 37 61
|
||||||
|
17 62 57 36 44
|
||||||
|
69 50 32 1 20
|
||||||
|
|
||||||
|
87 88 94 41 91
|
||||||
|
75 85 67 78 9
|
||||||
|
89 46 34 59 25
|
||||||
|
74 20 77 97 56
|
||||||
|
62 11 54 17 38
|
||||||
|
|
||||||
|
85 99 89 0 98
|
||||||
|
82 90 62 8 24
|
||||||
|
23 72 51 59 77
|
||||||
|
78 31 60 10 29
|
||||||
|
44 46 26 58 68
|
||||||
|
|
||||||
|
39 71 56 63 33
|
||||||
|
66 83 68 58 69
|
||||||
|
93 73 70 15 88
|
||||||
|
55 76 4 92 38
|
||||||
|
47 28 36 94 89
|
||||||
|
|
||||||
|
12 22 20 14 51
|
||||||
|
30 11 86 57 97
|
||||||
|
56 6 93 59 18
|
||||||
|
28 40 90 67 94
|
||||||
|
16 50 89 95 88
|
||||||
|
|
||||||
|
15 26 31 56 21
|
||||||
|
47 77 23 22 66
|
||||||
|
86 51 49 24 54
|
||||||
|
53 2 0 84 63
|
||||||
|
60 92 48 17 4
|
||||||
|
|
||||||
|
16 74 15 19 53
|
||||||
|
86 13 59 8 39
|
||||||
|
44 77 25 90 70
|
||||||
|
92 3 33 60 37
|
||||||
|
10 22 20 28 14
|
||||||
|
|
||||||
|
21 72 63 91 41
|
||||||
|
46 6 8 73 71
|
||||||
|
9 54 52 78 43
|
||||||
|
10 27 23 42 48
|
||||||
|
2 25 80 20 37
|
||||||
|
|
||||||
|
46 70 1 56 35
|
||||||
|
20 33 52 25 63
|
||||||
|
71 57 40 45 30
|
||||||
|
26 51 95 3 47
|
||||||
|
58 55 98 83 74
|
||||||
|
|
||||||
|
47 23 58 98 59
|
||||||
|
28 49 32 81 18
|
||||||
|
83 54 34 67 3
|
||||||
|
4 95 27 74 22
|
||||||
|
2 45 30 44 33
|
||||||
|
|
||||||
|
67 77 0 29 76
|
||||||
|
15 25 34 63 42
|
||||||
|
21 68 18 1 99
|
||||||
|
7 69 94 79 4
|
||||||
|
50 8 17 81 53
|
||||||
|
|
||||||
|
29 90 98 59 39
|
||||||
|
15 6 91 7 76
|
||||||
|
22 66 27 23 37
|
||||||
|
12 33 38 54 31
|
||||||
|
86 48 85 16 11
|
||||||
|
|
||||||
|
62 57 12 76 59
|
||||||
|
41 66 13 27 43
|
||||||
|
55 83 78 95 65
|
||||||
|
82 51 77 53 14
|
||||||
|
34 45 94 92 19
|
||||||
|
|
||||||
|
13 71 1 27 41
|
||||||
|
45 6 60 91 20
|
||||||
|
90 2 98 76 32
|
||||||
|
94 92 84 54 78
|
||||||
|
51 21 40 50 47
|
||||||
|
|
||||||
|
58 47 98 68 23
|
||||||
|
92 63 28 82 73
|
||||||
|
64 93 94 37 31
|
||||||
|
12 20 41 61 35
|
||||||
|
44 83 36 95 99
|
||||||
|
|
||||||
|
0 47 37 21 64
|
||||||
|
79 17 46 70 97
|
||||||
|
5 89 76 36 32
|
||||||
|
51 38 19 59 31
|
||||||
|
3 50 63 45 9
|
||||||
|
|
||||||
|
65 86 43 8 77
|
||||||
|
38 18 49 14 88
|
||||||
|
87 28 27 26 32
|
||||||
|
19 9 45 98 76
|
||||||
|
85 80 5 7 25
|
||||||
|
|
||||||
|
67 65 23 88 28
|
||||||
|
70 71 83 35 13
|
||||||
|
91 6 47 54 2
|
||||||
|
15 76 59 74 62
|
||||||
|
46 80 95 27 18
|
||||||
|
|
||||||
|
34 68 61 1 86
|
||||||
|
28 97 29 56 24
|
||||||
|
87 73 44 94 36
|
||||||
|
58 8 49 72 47
|
||||||
|
83 54 30 39 41
|
||||||
|
|
||||||
|
24 71 72 5 11
|
||||||
|
37 30 88 86 22
|
||||||
|
18 94 48 10 47
|
||||||
|
64 0 20 74 12
|
||||||
|
87 46 59 92 33
|
||||||
|
|
||||||
|
90 77 97 61 75
|
||||||
|
2 10 5 63 69
|
||||||
|
43 32 83 24 13
|
||||||
|
78 1 50 70 53
|
||||||
|
87 47 68 73 0
|
||||||
|
|
||||||
|
58 95 26 35 23
|
||||||
|
8 2 83 41 56
|
||||||
|
60 44 75 84 92
|
||||||
|
88 78 53 31 55
|
||||||
|
80 70 25 81 0
|
||||||
|
|
||||||
|
10 59 62 74 86
|
||||||
|
42 64 58 36 14
|
||||||
|
93 51 45 1 3
|
||||||
|
52 69 94 5 44
|
||||||
|
4 50 48 8 12
|
||||||
|
|
||||||
|
38 40 21 97 74
|
||||||
|
98 17 3 56 58
|
||||||
|
57 63 44 93 70
|
||||||
|
10 48 49 81 73
|
||||||
|
12 55 86 41 82
|
||||||
|
|
||||||
|
93 29 38 58 5
|
||||||
|
9 95 45 67 97
|
||||||
|
16 64 99 65 94
|
||||||
|
43 34 14 23 66
|
||||||
|
0 88 87 50 78
|
||||||
|
|
||||||
|
72 70 87 50 31
|
||||||
|
90 91 69 18 75
|
||||||
|
42 21 11 86 81
|
||||||
|
20 63 13 43 2
|
||||||
|
56 92 29 30 73
|
||||||
|
|
||||||
|
63 98 32 50 17
|
||||||
|
71 79 4 67 44
|
||||||
|
7 68 45 58 80
|
||||||
|
59 12 55 83 34
|
||||||
|
90 94 86 25 0
|
||||||
|
|
||||||
|
15 24 92 39 53
|
||||||
|
63 7 30 77 28
|
||||||
|
65 97 68 98 35
|
||||||
|
88 23 85 96 70
|
||||||
|
18 69 99 42 75
|
||||||
|
|
||||||
|
65 75 12 20 21
|
||||||
|
29 31 57 45 13
|
||||||
|
34 81 97 78 28
|
||||||
|
63 38 51 19 37
|
||||||
|
53 67 49 14 74
|
||||||
|
|
||||||
|
75 35 42 5 89
|
||||||
|
56 50 3 90 62
|
||||||
|
7 15 45 16 14
|
||||||
|
40 8 84 97 65
|
||||||
|
46 51 27 9 18
|
||||||
|
|
||||||
|
62 42 24 0 53
|
||||||
|
41 94 70 88 33
|
||||||
|
32 19 43 21 23
|
||||||
|
84 98 60 39 36
|
||||||
|
5 4 49 76 82
|
||||||
|
|
||||||
|
99 24 90 5 76
|
||||||
|
78 66 72 53 85
|
||||||
|
56 94 14 79 7
|
||||||
|
83 6 27 26 69
|
||||||
|
67 41 54 68 91
|
||||||
|
|
||||||
|
5 72 83 53 49
|
||||||
|
48 6 9 38 15
|
||||||
|
99 84 90 82 70
|
||||||
|
69 85 4 67 20
|
||||||
|
87 16 61 21 39
|
||||||
|
|
||||||
|
18 43 78 0 77
|
||||||
|
91 37 88 32 71
|
||||||
|
15 54 2 62 17
|
||||||
|
30 98 69 38 94
|
||||||
|
83 63 89 39 14
|
||||||
|
|
||||||
|
26 70 3 5 89
|
||||||
|
94 49 35 43 99
|
||||||
|
82 36 62 78 37
|
||||||
|
90 73 9 38 40
|
||||||
|
60 68 8 2 53
|
119
2021/04/second.go
Normal file
119
2021/04/second.go
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type grille struct {
|
||||||
|
lines [][]int
|
||||||
|
columns [][]int
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
best = -1
|
||||||
|
score = 0
|
||||||
|
)
|
||||||
|
|
||||||
|
// winning func
|
||||||
|
func win(g *grille, n int, iter int) {
|
||||||
|
sum := 0
|
||||||
|
for i := 0; i < 5; i++ {
|
||||||
|
for j := 0; j < len(g.lines[i]); j++ {
|
||||||
|
sum += g.lines[i][j]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if iter > best {
|
||||||
|
best = iter
|
||||||
|
score = sum * n
|
||||||
|
//fmt.Println(iter, n, score, g)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
f, err := os.Open("input")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(f)
|
||||||
|
scanner.Split(bufio.ScanLines)
|
||||||
|
|
||||||
|
scanner.Scan()
|
||||||
|
tirage := make([]int, 0)
|
||||||
|
tirageStr := strings.Split(scanner.Text(), ",")
|
||||||
|
// lets process the tirage
|
||||||
|
for _, v := range tirageStr {
|
||||||
|
n, err := strconv.Atoi(v)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
tirage = append(tirage, n)
|
||||||
|
}
|
||||||
|
|
||||||
|
for scanner.Scan() {
|
||||||
|
// we just scanned the new line
|
||||||
|
// lets init the grille
|
||||||
|
g := new(grille)
|
||||||
|
g.lines = make([][]int, 5)
|
||||||
|
g.columns = make([][]int, 5)
|
||||||
|
for i := 0; i < 5; i++ {
|
||||||
|
g.lines[i] = make([]int, 5)
|
||||||
|
g.columns[i] = make([]int, 5)
|
||||||
|
}
|
||||||
|
// lets populate the grille
|
||||||
|
for i := 0; i < 5; i++ {
|
||||||
|
scanner.Scan()
|
||||||
|
numbers := strings.Fields(scanner.Text())
|
||||||
|
for j := 0; j < 5; j++ {
|
||||||
|
n, err := strconv.Atoi(numbers[j])
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("%+v", err)
|
||||||
|
}
|
||||||
|
g.lines[i][j] = n
|
||||||
|
g.columns[j][i] = n
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// lets process the tirage
|
||||||
|
out:
|
||||||
|
for iter, n := range tirage {
|
||||||
|
// remove the number
|
||||||
|
for i := 0; i < 5; i++ {
|
||||||
|
for j := 0; j < len(g.lines[i]); j++ {
|
||||||
|
if g.lines[i][j] == n {
|
||||||
|
if len(g.lines[i]) == 1 {
|
||||||
|
g.lines[i] = []int{}
|
||||||
|
win(g, n, iter)
|
||||||
|
break out
|
||||||
|
}
|
||||||
|
if j < len(g.lines[i])-1 {
|
||||||
|
g.lines[i][j] = g.lines[i][len(g.lines[i])-1]
|
||||||
|
}
|
||||||
|
g.lines[i] = g.lines[i][:len(g.lines[i])-1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for i := 0; i < 5; i++ {
|
||||||
|
for j := 0; j < len(g.columns[i]); j++ {
|
||||||
|
if g.columns[i][j] == n {
|
||||||
|
if len(g.columns[i]) == 1 {
|
||||||
|
g.columns[i] = []int{}
|
||||||
|
win(g, n, iter)
|
||||||
|
break out
|
||||||
|
}
|
||||||
|
if j < len(g.columns[i])-1 {
|
||||||
|
g.columns[i][j] = g.columns[i][len(g.columns[i])-1]
|
||||||
|
}
|
||||||
|
g.columns[i] = g.columns[i][:len(g.columns[i])-1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(score)
|
||||||
|
}
|
3
2021/05/README.md
Normal file
3
2021/05/README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
I went a little overboard with a parsing tutorial.
|
||||||
|
|
||||||
|
I wanted to manually write a parser from quite some time now and seized this opportunity. It would have been trivial with just a scanner or even a regex, but hey learning!
|
10
2021/05/example
Normal file
10
2021/05/example
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
0,9 -> 5,9
|
||||||
|
8,0 -> 0,8
|
||||||
|
9,4 -> 3,4
|
||||||
|
2,2 -> 2,1
|
||||||
|
7,0 -> 7,4
|
||||||
|
6,4 -> 2,0
|
||||||
|
0,9 -> 2,9
|
||||||
|
3,4 -> 1,4
|
||||||
|
0,0 -> 8,8
|
||||||
|
5,5 -> 8,2
|
48
2021/05/first.go
Normal file
48
2021/05/first.go
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"git.adyxax.org/aoc/2021/05/line"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
matrix := make([][]int, 1000)
|
||||||
|
for i := 0; i < 1000; i++ {
|
||||||
|
matrix[i] = make([]int, 1000)
|
||||||
|
}
|
||||||
|
|
||||||
|
parser := line.NewParser(bufio.NewReader(os.Stdin))
|
||||||
|
for {
|
||||||
|
l, err := parser.Parse()
|
||||||
|
if err != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if l.X1 == l.X2 {
|
||||||
|
if l.Y1 > l.Y2 {
|
||||||
|
l.Y1, l.Y2 = l.Y2, l.Y1
|
||||||
|
}
|
||||||
|
for i := l.Y1; i <= l.Y2; i++ {
|
||||||
|
matrix[l.X1][i]++
|
||||||
|
}
|
||||||
|
} else if l.Y1 == l.Y2 {
|
||||||
|
if l.X1 > l.X2 {
|
||||||
|
l.X1, l.X2 = l.X2, l.X1
|
||||||
|
}
|
||||||
|
for i := l.X1; i <= l.X2; i++ {
|
||||||
|
matrix[i][l.Y1]++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
score := 0
|
||||||
|
for i := 0; i < 1000; i++ {
|
||||||
|
for j := 0; j < 1000; j++ {
|
||||||
|
if matrix[i][j] >= 2 {
|
||||||
|
score++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(score)
|
||||||
|
}
|
60
2021/05/first_v2.go
Normal file
60
2021/05/first_v2.go
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"git.adyxax.org/aoc/2021/05/line"
|
||||||
|
)
|
||||||
|
|
||||||
|
func abs(a int) int {
|
||||||
|
if a < 0 {
|
||||||
|
return -a
|
||||||
|
}
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
|
||||||
|
func computeDelta(a, b int) int {
|
||||||
|
if a < b {
|
||||||
|
return 1
|
||||||
|
} else if a > b {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
matrix := make([][]int, 1000)
|
||||||
|
for i := 0; i < 1000; i++ {
|
||||||
|
matrix[i] = make([]int, 1000)
|
||||||
|
}
|
||||||
|
|
||||||
|
parser := line.NewParser(bufio.NewReader(os.Stdin))
|
||||||
|
for {
|
||||||
|
l, err := parser.Parse()
|
||||||
|
if err != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
length := abs(l.X2 - l.X1)
|
||||||
|
if length == 0 {
|
||||||
|
length = abs(l.Y2 - l.Y1)
|
||||||
|
}
|
||||||
|
dx := computeDelta(l.X1, l.X2)
|
||||||
|
dy := computeDelta(l.Y1, l.Y2)
|
||||||
|
if dx == 0 || dy == 0 {
|
||||||
|
for i := 0; i <= length; i++ {
|
||||||
|
matrix[l.X1+i*dx][l.Y1+i*dy]++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
score := 0
|
||||||
|
for i := 0; i < 1000; i++ {
|
||||||
|
for j := 0; j < 1000; j++ {
|
||||||
|
if matrix[i][j] >= 2 {
|
||||||
|
score++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(score)
|
||||||
|
}
|
3
2021/05/go.mod
Normal file
3
2021/05/go.mod
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module git.adyxax.org/aoc/2021/05
|
||||||
|
|
||||||
|
go 1.17
|
500
2021/05/input
Normal file
500
2021/05/input
Normal file
|
@ -0,0 +1,500 @@
|
||||||
|
223,805 -> 223,548
|
||||||
|
609,164 -> 609,503
|
||||||
|
461,552 -> 796,552
|
||||||
|
207,361 -> 207,34
|
||||||
|
503,879 -> 503,946
|
||||||
|
937,52 -> 937,268
|
||||||
|
560,652 -> 118,652
|
||||||
|
771,103 -> 85,789
|
||||||
|
119,156 -> 947,984
|
||||||
|
356,634 -> 607,634
|
||||||
|
348,812 -> 873,287
|
||||||
|
409,490 -> 726,490
|
||||||
|
298,790 -> 298,454
|
||||||
|
407,543 -> 820,130
|
||||||
|
206,89 -> 591,89
|
||||||
|
164,709 -> 976,709
|
||||||
|
208,921 -> 208,131
|
||||||
|
515,209 -> 515,745
|
||||||
|
876,639 -> 281,44
|
||||||
|
270,453 -> 727,910
|
||||||
|
190,417 -> 190,755
|
||||||
|
522,726 -> 903,726
|
||||||
|
390,651 -> 603,864
|
||||||
|
707,549 -> 926,330
|
||||||
|
471,869 -> 471,561
|
||||||
|
970,735 -> 401,735
|
||||||
|
612,624 -> 612,88
|
||||||
|
844,879 -> 844,453
|
||||||
|
400,38 -> 400,350
|
||||||
|
832,225 -> 984,225
|
||||||
|
971,642 -> 42,642
|
||||||
|
70,862 -> 447,485
|
||||||
|
183,79 -> 183,708
|
||||||
|
598,700 -> 598,287
|
||||||
|
635,195 -> 39,195
|
||||||
|
587,362 -> 349,362
|
||||||
|
108,88 -> 965,945
|
||||||
|
700,299 -> 165,299
|
||||||
|
295,824 -> 785,334
|
||||||
|
211,284 -> 390,105
|
||||||
|
288,326 -> 672,710
|
||||||
|
595,231 -> 595,679
|
||||||
|
671,576 -> 813,718
|
||||||
|
14,845 -> 784,75
|
||||||
|
700,129 -> 43,129
|
||||||
|
83,913 -> 889,107
|
||||||
|
830,596 -> 322,596
|
||||||
|
391,450 -> 391,779
|
||||||
|
384,32 -> 384,430
|
||||||
|
311,948 -> 938,321
|
||||||
|
460,288 -> 460,392
|
||||||
|
924,602 -> 924,595
|
||||||
|
703,458 -> 703,475
|
||||||
|
335,953 -> 335,195
|
||||||
|
692,314 -> 927,314
|
||||||
|
131,433 -> 131,737
|
||||||
|
590,771 -> 965,771
|
||||||
|
650,13 -> 963,13
|
||||||
|
586,904 -> 658,976
|
||||||
|
238,824 -> 782,824
|
||||||
|
366,45 -> 691,370
|
||||||
|
428,758 -> 201,758
|
||||||
|
240,545 -> 30,545
|
||||||
|
396,154 -> 332,154
|
||||||
|
549,307 -> 233,307
|
||||||
|
187,240 -> 851,904
|
||||||
|
151,135 -> 937,921
|
||||||
|
342,850 -> 342,156
|
||||||
|
695,200 -> 695,754
|
||||||
|
385,880 -> 893,372
|
||||||
|
986,966 -> 813,966
|
||||||
|
727,661 -> 727,402
|
||||||
|
316,937 -> 316,797
|
||||||
|
422,235 -> 422,282
|
||||||
|
965,684 -> 882,684
|
||||||
|
266,222 -> 419,69
|
||||||
|
649,843 -> 635,857
|
||||||
|
618,84 -> 126,576
|
||||||
|
588,822 -> 588,636
|
||||||
|
569,142 -> 569,607
|
||||||
|
899,479 -> 488,890
|
||||||
|
986,52 -> 369,52
|
||||||
|
987,478 -> 551,914
|
||||||
|
867,951 -> 973,845
|
||||||
|
90,401 -> 304,401
|
||||||
|
60,836 -> 798,836
|
||||||
|
143,675 -> 686,675
|
||||||
|
743,974 -> 743,305
|
||||||
|
981,899 -> 551,469
|
||||||
|
705,430 -> 493,430
|
||||||
|
301,366 -> 823,366
|
||||||
|
978,712 -> 617,712
|
||||||
|
426,805 -> 426,345
|
||||||
|
532,855 -> 532,54
|
||||||
|
612,143 -> 612,133
|
||||||
|
57,52 -> 955,950
|
||||||
|
880,50 -> 16,914
|
||||||
|
89,908 -> 89,214
|
||||||
|
487,867 -> 586,867
|
||||||
|
181,285 -> 181,470
|
||||||
|
526,666 -> 86,226
|
||||||
|
117,704 -> 117,961
|
||||||
|
289,101 -> 983,795
|
||||||
|
586,429 -> 442,429
|
||||||
|
442,869 -> 734,869
|
||||||
|
564,479 -> 564,382
|
||||||
|
447,486 -> 62,101
|
||||||
|
42,218 -> 509,218
|
||||||
|
21,890 -> 843,68
|
||||||
|
84,978 -> 921,141
|
||||||
|
590,960 -> 590,934
|
||||||
|
54,949 -> 967,36
|
||||||
|
799,39 -> 767,39
|
||||||
|
979,232 -> 979,628
|
||||||
|
489,482 -> 339,482
|
||||||
|
759,473 -> 290,942
|
||||||
|
960,958 -> 32,30
|
||||||
|
134,180 -> 134,864
|
||||||
|
972,981 -> 13,22
|
||||||
|
106,385 -> 11,385
|
||||||
|
849,454 -> 447,454
|
||||||
|
477,385 -> 955,863
|
||||||
|
853,180 -> 922,180
|
||||||
|
509,274 -> 751,32
|
||||||
|
905,295 -> 779,295
|
||||||
|
661,629 -> 104,629
|
||||||
|
935,117 -> 93,959
|
||||||
|
165,372 -> 746,953
|
||||||
|
988,141 -> 122,141
|
||||||
|
625,621 -> 625,406
|
||||||
|
24,710 -> 465,710
|
||||||
|
417,468 -> 851,34
|
||||||
|
365,285 -> 572,285
|
||||||
|
217,164 -> 217,214
|
||||||
|
943,439 -> 465,439
|
||||||
|
80,102 -> 80,717
|
||||||
|
869,19 -> 54,834
|
||||||
|
399,480 -> 399,458
|
||||||
|
644,826 -> 644,911
|
||||||
|
651,189 -> 651,687
|
||||||
|
671,946 -> 332,607
|
||||||
|
531,417 -> 657,417
|
||||||
|
847,350 -> 847,112
|
||||||
|
315,733 -> 871,177
|
||||||
|
749,118 -> 692,118
|
||||||
|
55,616 -> 55,894
|
||||||
|
570,307 -> 633,307
|
||||||
|
12,964 -> 883,93
|
||||||
|
84,299 -> 84,185
|
||||||
|
49,187 -> 903,187
|
||||||
|
592,40 -> 842,40
|
||||||
|
639,381 -> 802,544
|
||||||
|
59,61 -> 836,61
|
||||||
|
968,51 -> 266,753
|
||||||
|
883,373 -> 883,130
|
||||||
|
612,45 -> 406,45
|
||||||
|
206,698 -> 206,823
|
||||||
|
385,685 -> 385,46
|
||||||
|
656,338 -> 73,921
|
||||||
|
256,794 -> 365,903
|
||||||
|
671,247 -> 248,247
|
||||||
|
722,509 -> 635,422
|
||||||
|
460,783 -> 615,783
|
||||||
|
946,980 -> 946,129
|
||||||
|
343,780 -> 343,723
|
||||||
|
218,371 -> 218,856
|
||||||
|
363,809 -> 143,589
|
||||||
|
434,739 -> 889,739
|
||||||
|
75,71 -> 975,971
|
||||||
|
57,253 -> 582,778
|
||||||
|
976,237 -> 976,148
|
||||||
|
386,866 -> 386,544
|
||||||
|
901,797 -> 901,630
|
||||||
|
976,706 -> 195,706
|
||||||
|
264,420 -> 272,428
|
||||||
|
693,72 -> 693,379
|
||||||
|
888,832 -> 888,490
|
||||||
|
363,900 -> 363,350
|
||||||
|
25,312 -> 25,58
|
||||||
|
292,307 -> 481,307
|
||||||
|
715,393 -> 976,132
|
||||||
|
641,450 -> 96,450
|
||||||
|
650,38 -> 432,38
|
||||||
|
339,97 -> 476,97
|
||||||
|
916,24 -> 13,927
|
||||||
|
933,934 -> 34,35
|
||||||
|
971,367 -> 971,919
|
||||||
|
726,310 -> 477,559
|
||||||
|
12,984 -> 986,10
|
||||||
|
318,531 -> 318,72
|
||||||
|
604,979 -> 12,387
|
||||||
|
890,39 -> 890,213
|
||||||
|
944,954 -> 33,43
|
||||||
|
507,830 -> 284,607
|
||||||
|
724,111 -> 724,242
|
||||||
|
425,912 -> 425,445
|
||||||
|
371,903 -> 371,634
|
||||||
|
415,314 -> 415,509
|
||||||
|
884,849 -> 884,454
|
||||||
|
726,647 -> 447,926
|
||||||
|
588,463 -> 588,426
|
||||||
|
807,453 -> 807,593
|
||||||
|
32,449 -> 975,449
|
||||||
|
593,757 -> 593,607
|
||||||
|
521,850 -> 521,139
|
||||||
|
843,478 -> 843,317
|
||||||
|
408,834 -> 408,455
|
||||||
|
65,241 -> 864,241
|
||||||
|
532,138 -> 613,138
|
||||||
|
477,239 -> 477,676
|
||||||
|
92,400 -> 92,935
|
||||||
|
268,104 -> 300,104
|
||||||
|
942,20 -> 93,869
|
||||||
|
294,134 -> 695,134
|
||||||
|
748,477 -> 748,311
|
||||||
|
581,879 -> 481,879
|
||||||
|
292,57 -> 874,639
|
||||||
|
829,787 -> 944,787
|
||||||
|
130,780 -> 442,780
|
||||||
|
754,435 -> 956,435
|
||||||
|
306,659 -> 306,491
|
||||||
|
252,612 -> 646,612
|
||||||
|
846,949 -> 846,924
|
||||||
|
197,888 -> 145,836
|
||||||
|
156,790 -> 151,790
|
||||||
|
903,305 -> 671,73
|
||||||
|
195,79 -> 195,40
|
||||||
|
781,67 -> 781,635
|
||||||
|
742,743 -> 742,280
|
||||||
|
297,42 -> 618,42
|
||||||
|
237,151 -> 156,151
|
||||||
|
851,930 -> 47,126
|
||||||
|
425,368 -> 659,134
|
||||||
|
57,890 -> 898,49
|
||||||
|
86,62 -> 86,445
|
||||||
|
133,499 -> 133,604
|
||||||
|
202,567 -> 872,567
|
||||||
|
749,578 -> 749,804
|
||||||
|
379,379 -> 147,379
|
||||||
|
510,474 -> 510,388
|
||||||
|
184,115 -> 738,115
|
||||||
|
904,613 -> 550,613
|
||||||
|
755,649 -> 755,305
|
||||||
|
461,306 -> 461,547
|
||||||
|
469,124 -> 542,124
|
||||||
|
736,218 -> 736,968
|
||||||
|
307,662 -> 307,188
|
||||||
|
360,970 -> 58,668
|
||||||
|
36,267 -> 214,267
|
||||||
|
980,330 -> 22,330
|
||||||
|
222,972 -> 222,178
|
||||||
|
846,774 -> 714,774
|
||||||
|
798,837 -> 789,837
|
||||||
|
567,258 -> 567,502
|
||||||
|
325,582 -> 325,976
|
||||||
|
138,386 -> 138,691
|
||||||
|
326,878 -> 326,386
|
||||||
|
790,276 -> 811,276
|
||||||
|
517,522 -> 81,86
|
||||||
|
493,567 -> 406,567
|
||||||
|
522,370 -> 13,370
|
||||||
|
31,697 -> 607,121
|
||||||
|
297,524 -> 297,320
|
||||||
|
790,681 -> 753,681
|
||||||
|
90,961 -> 901,150
|
||||||
|
262,46 -> 262,68
|
||||||
|
18,26 -> 977,985
|
||||||
|
782,381 -> 956,381
|
||||||
|
353,740 -> 353,595
|
||||||
|
32,448 -> 941,448
|
||||||
|
405,254 -> 686,254
|
||||||
|
853,57 -> 297,613
|
||||||
|
555,209 -> 439,209
|
||||||
|
765,679 -> 142,56
|
||||||
|
175,903 -> 175,685
|
||||||
|
693,653 -> 845,653
|
||||||
|
394,108 -> 394,901
|
||||||
|
351,108 -> 335,108
|
||||||
|
841,83 -> 841,716
|
||||||
|
525,608 -> 525,496
|
||||||
|
874,32 -> 874,214
|
||||||
|
354,760 -> 44,760
|
||||||
|
249,330 -> 864,945
|
||||||
|
553,377 -> 553,944
|
||||||
|
903,374 -> 335,374
|
||||||
|
387,34 -> 387,86
|
||||||
|
380,331 -> 380,124
|
||||||
|
618,520 -> 797,520
|
||||||
|
718,169 -> 703,169
|
||||||
|
355,184 -> 851,184
|
||||||
|
582,570 -> 582,313
|
||||||
|
312,952 -> 312,460
|
||||||
|
269,70 -> 269,197
|
||||||
|
701,907 -> 701,768
|
||||||
|
645,417 -> 645,548
|
||||||
|
931,532 -> 367,532
|
||||||
|
497,361 -> 497,348
|
||||||
|
563,642 -> 976,642
|
||||||
|
376,504 -> 376,448
|
||||||
|
538,945 -> 538,773
|
||||||
|
594,886 -> 594,281
|
||||||
|
879,558 -> 192,558
|
||||||
|
985,68 -> 66,987
|
||||||
|
599,420 -> 599,41
|
||||||
|
296,318 -> 296,132
|
||||||
|
330,619 -> 302,619
|
||||||
|
245,137 -> 918,810
|
||||||
|
823,798 -> 556,531
|
||||||
|
64,201 -> 723,860
|
||||||
|
955,365 -> 955,829
|
||||||
|
372,976 -> 255,859
|
||||||
|
804,962 -> 168,962
|
||||||
|
200,442 -> 200,97
|
||||||
|
965,964 -> 870,869
|
||||||
|
534,158 -> 128,564
|
||||||
|
380,739 -> 577,542
|
||||||
|
740,391 -> 740,651
|
||||||
|
167,177 -> 619,177
|
||||||
|
215,449 -> 215,330
|
||||||
|
494,612 -> 19,137
|
||||||
|
458,634 -> 458,257
|
||||||
|
884,817 -> 393,326
|
||||||
|
407,291 -> 19,679
|
||||||
|
627,173 -> 627,570
|
||||||
|
53,93 -> 552,592
|
||||||
|
809,363 -> 119,363
|
||||||
|
588,418 -> 588,764
|
||||||
|
807,131 -> 807,834
|
||||||
|
616,61 -> 514,61
|
||||||
|
553,642 -> 236,325
|
||||||
|
959,553 -> 683,553
|
||||||
|
36,754 -> 36,830
|
||||||
|
533,293 -> 144,293
|
||||||
|
950,780 -> 396,780
|
||||||
|
949,878 -> 14,878
|
||||||
|
453,180 -> 989,180
|
||||||
|
22,46 -> 670,694
|
||||||
|
479,206 -> 479,552
|
||||||
|
22,53 -> 599,53
|
||||||
|
254,964 -> 884,334
|
||||||
|
578,813 -> 100,813
|
||||||
|
945,247 -> 778,80
|
||||||
|
312,978 -> 312,518
|
||||||
|
882,225 -> 882,967
|
||||||
|
581,683 -> 293,395
|
||||||
|
107,540 -> 534,967
|
||||||
|
382,946 -> 28,946
|
||||||
|
864,743 -> 246,743
|
||||||
|
538,558 -> 733,753
|
||||||
|
811,436 -> 814,436
|
||||||
|
982,33 -> 65,950
|
||||||
|
785,829 -> 945,829
|
||||||
|
322,471 -> 346,471
|
||||||
|
904,528 -> 904,669
|
||||||
|
231,471 -> 772,471
|
||||||
|
773,490 -> 669,386
|
||||||
|
867,482 -> 417,32
|
||||||
|
352,856 -> 352,478
|
||||||
|
723,355 -> 619,355
|
||||||
|
667,922 -> 667,247
|
||||||
|
642,386 -> 241,386
|
||||||
|
594,35 -> 594,580
|
||||||
|
916,723 -> 793,723
|
||||||
|
73,774 -> 269,970
|
||||||
|
43,273 -> 148,168
|
||||||
|
744,637 -> 825,637
|
||||||
|
98,30 -> 98,383
|
||||||
|
130,277 -> 802,277
|
||||||
|
167,122 -> 672,627
|
||||||
|
871,866 -> 564,559
|
||||||
|
923,475 -> 539,859
|
||||||
|
422,714 -> 422,946
|
||||||
|
667,950 -> 667,640
|
||||||
|
758,181 -> 12,927
|
||||||
|
129,927 -> 129,288
|
||||||
|
485,661 -> 402,661
|
||||||
|
114,573 -> 974,573
|
||||||
|
674,779 -> 851,779
|
||||||
|
977,184 -> 977,143
|
||||||
|
229,937 -> 229,138
|
||||||
|
520,887 -> 520,512
|
||||||
|
918,329 -> 918,990
|
||||||
|
732,41 -> 521,41
|
||||||
|
399,245 -> 883,729
|
||||||
|
824,618 -> 356,618
|
||||||
|
215,218 -> 845,848
|
||||||
|
704,34 -> 307,431
|
||||||
|
124,166 -> 696,738
|
||||||
|
692,749 -> 839,749
|
||||||
|
790,637 -> 790,598
|
||||||
|
697,396 -> 669,396
|
||||||
|
419,140 -> 113,446
|
||||||
|
426,738 -> 171,738
|
||||||
|
489,494 -> 190,793
|
||||||
|
320,301 -> 320,398
|
||||||
|
275,809 -> 275,717
|
||||||
|
537,703 -> 465,703
|
||||||
|
536,450 -> 560,450
|
||||||
|
153,927 -> 914,166
|
||||||
|
246,692 -> 485,453
|
||||||
|
26,179 -> 26,554
|
||||||
|
487,678 -> 487,696
|
||||||
|
807,719 -> 224,719
|
||||||
|
605,920 -> 899,920
|
||||||
|
112,262 -> 112,765
|
||||||
|
752,898 -> 752,429
|
||||||
|
861,103 -> 861,477
|
||||||
|
628,505 -> 628,248
|
||||||
|
556,293 -> 556,276
|
||||||
|
826,682 -> 273,129
|
||||||
|
685,324 -> 685,692
|
||||||
|
544,410 -> 544,678
|
||||||
|
796,633 -> 796,950
|
||||||
|
753,843 -> 753,936
|
||||||
|
817,40 -> 817,600
|
||||||
|
137,941 -> 677,401
|
||||||
|
563,457 -> 599,457
|
||||||
|
251,644 -> 251,67
|
||||||
|
170,792 -> 805,792
|
||||||
|
171,486 -> 171,877
|
||||||
|
337,481 -> 268,412
|
||||||
|
43,158 -> 44,158
|
||||||
|
148,610 -> 863,610
|
||||||
|
332,765 -> 202,765
|
||||||
|
307,637 -> 334,637
|
||||||
|
557,380 -> 231,54
|
||||||
|
858,76 -> 150,784
|
||||||
|
477,329 -> 319,329
|
||||||
|
306,608 -> 306,38
|
||||||
|
245,42 -> 245,929
|
||||||
|
15,786 -> 745,786
|
||||||
|
946,321 -> 841,321
|
||||||
|
837,281 -> 837,762
|
||||||
|
847,391 -> 847,840
|
||||||
|
304,52 -> 304,299
|
||||||
|
938,122 -> 877,122
|
||||||
|
214,347 -> 862,347
|
||||||
|
494,540 -> 751,540
|
||||||
|
184,29 -> 913,758
|
||||||
|
904,12 -> 15,901
|
||||||
|
573,23 -> 158,23
|
||||||
|
926,603 -> 643,603
|
||||||
|
105,506 -> 518,506
|
||||||
|
551,917 -> 983,917
|
||||||
|
708,33 -> 831,33
|
||||||
|
347,173 -> 218,44
|
||||||
|
933,175 -> 933,781
|
||||||
|
902,556 -> 902,812
|
||||||
|
556,485 -> 252,789
|
||||||
|
823,807 -> 368,352
|
||||||
|
217,744 -> 217,470
|
||||||
|
795,455 -> 795,783
|
||||||
|
170,944 -> 926,188
|
||||||
|
55,655 -> 258,655
|
||||||
|
158,57 -> 959,858
|
||||||
|
714,823 -> 714,550
|
||||||
|
238,18 -> 388,18
|
||||||
|
980,985 -> 12,17
|
||||||
|
360,596 -> 770,596
|
||||||
|
846,684 -> 220,58
|
||||||
|
552,107 -> 552,974
|
||||||
|
228,552 -> 354,552
|
||||||
|
421,41 -> 421,103
|
||||||
|
674,475 -> 912,475
|
||||||
|
455,626 -> 455,683
|
||||||
|
952,841 -> 946,841
|
||||||
|
920,792 -> 381,253
|
||||||
|
786,918 -> 786,175
|
||||||
|
889,859 -> 889,24
|
||||||
|
178,604 -> 573,209
|
||||||
|
71,621 -> 550,621
|
||||||
|
38,36 -> 922,920
|
||||||
|
104,690 -> 575,690
|
||||||
|
252,883 -> 894,241
|
||||||
|
627,107 -> 417,107
|
||||||
|
768,913 -> 13,158
|
||||||
|
708,337 -> 708,407
|
||||||
|
156,941 -> 156,297
|
||||||
|
814,653 -> 814,829
|
||||||
|
234,920 -> 896,920
|
||||||
|
652,170 -> 128,170
|
||||||
|
765,825 -> 347,825
|
||||||
|
681,901 -> 681,112
|
||||||
|
410,301 -> 979,301
|
||||||
|
462,681 -> 462,726
|
||||||
|
117,957 -> 117,693
|
||||||
|
479,948 -> 698,948
|
||||||
|
839,965 -> 97,223
|
||||||
|
102,189 -> 102,366
|
||||||
|
93,798 -> 819,72
|
||||||
|
27,336 -> 27,655
|
||||||
|
161,635 -> 527,269
|
||||||
|
140,272 -> 140,336
|
||||||
|
884,915 -> 41,72
|
||||||
|
575,563 -> 155,563
|
||||||
|
387,601 -> 387,597
|
||||||
|
355,186 -> 782,613
|
||||||
|
866,435 -> 816,435
|
||||||
|
96,161 -> 764,161
|
||||||
|
971,29 -> 21,979
|
239
2021/05/line/line.go
Normal file
239
2021/05/line/line.go
Normal file
|
@ -0,0 +1,239 @@
|
||||||
|
package line
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Line struct {
|
||||||
|
X1, Y1, X2, Y2 int
|
||||||
|
}
|
||||||
|
|
||||||
|
// Token represents a lexical token.
|
||||||
|
type Token int
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Special tokens
|
||||||
|
ILLEGAL Token = iota
|
||||||
|
EOF
|
||||||
|
WHITESPACE
|
||||||
|
|
||||||
|
// Literals
|
||||||
|
INT // integers
|
||||||
|
|
||||||
|
// Misc characters
|
||||||
|
COMMA // ,
|
||||||
|
ARROW // ->
|
||||||
|
)
|
||||||
|
|
||||||
|
func isWhitespace(ch rune) bool {
|
||||||
|
return ch == ' ' || ch == '\t' || ch == '\n'
|
||||||
|
}
|
||||||
|
|
||||||
|
func isDigit(ch rune) bool {
|
||||||
|
return (ch >= '0' && ch <= '9')
|
||||||
|
}
|
||||||
|
|
||||||
|
var eof = rune(0)
|
||||||
|
|
||||||
|
// Scanner represents a lexical scanner.
|
||||||
|
type Scanner struct {
|
||||||
|
r *bufio.Reader
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewScanner returns a new instance of Scanner.
|
||||||
|
func NewScanner(r io.Reader) *Scanner {
|
||||||
|
return &Scanner{r: bufio.NewReader(r)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// read reads the next rune from the bufferred reader.
|
||||||
|
// Returns the rune(0) if an error occurs (or io.EOF is returned).
|
||||||
|
func (s *Scanner) read() rune {
|
||||||
|
ch, _, err := s.r.ReadRune()
|
||||||
|
if err != nil {
|
||||||
|
return eof
|
||||||
|
}
|
||||||
|
return ch
|
||||||
|
}
|
||||||
|
|
||||||
|
// unread places the previously read rune back on the reader.
|
||||||
|
func (s *Scanner) unread() { _ = s.r.UnreadRune() }
|
||||||
|
|
||||||
|
// Scan returns the next token and literal value.
|
||||||
|
func (s *Scanner) Scan() (tok Token, lit string) {
|
||||||
|
// Read the next rune.
|
||||||
|
ch := s.read()
|
||||||
|
|
||||||
|
// If we see whitespace then consume all contiguous whitespace.
|
||||||
|
// If we see a digit then consume as an int.
|
||||||
|
if isWhitespace(ch) {
|
||||||
|
return s.scanWhitespace(ch)
|
||||||
|
} else if isDigit(ch) {
|
||||||
|
return s.scanInt(ch)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise read the individual character.
|
||||||
|
switch ch {
|
||||||
|
case eof:
|
||||||
|
return EOF, ""
|
||||||
|
case ',':
|
||||||
|
return COMMA, string(ch)
|
||||||
|
case '-':
|
||||||
|
return s.scanArrow(ch)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ILLEGAL, string(ch)
|
||||||
|
}
|
||||||
|
|
||||||
|
// scanWhitespace consumes the current rune and all contiguous whitespace.
|
||||||
|
func (s *Scanner) scanWhitespace(read rune) (tok Token, lit string) {
|
||||||
|
// Create a buffer and read the current character into it.
|
||||||
|
var buf bytes.Buffer
|
||||||
|
buf.WriteRune(read)
|
||||||
|
|
||||||
|
// Read every subsequent whitespace character into the buffer.
|
||||||
|
// Non-whitespace characters and EOF will cause the loop to exit.
|
||||||
|
for {
|
||||||
|
if ch := s.read(); ch == eof {
|
||||||
|
break
|
||||||
|
} else if !isWhitespace(ch) {
|
||||||
|
s.unread()
|
||||||
|
break
|
||||||
|
} else {
|
||||||
|
buf.WriteRune(ch)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return WHITESPACE, buf.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
// scanInt consumes the current rune and all contiguous digit runes.
|
||||||
|
func (s *Scanner) scanInt(read rune) (tok Token, lit string) {
|
||||||
|
// Create a buffer and read the current character into it.
|
||||||
|
var buf bytes.Buffer
|
||||||
|
buf.WriteRune(read)
|
||||||
|
|
||||||
|
// Read every subsequent ident character into the buffer.
|
||||||
|
// Non-ident characters and EOF will cause the loop to exit.
|
||||||
|
for {
|
||||||
|
if ch := s.read(); ch == eof {
|
||||||
|
break
|
||||||
|
} else if !isDigit(ch) {
|
||||||
|
s.unread()
|
||||||
|
break
|
||||||
|
} else {
|
||||||
|
_, _ = buf.WriteRune(ch)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise return as a regular identifier.
|
||||||
|
return INT, buf.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Scanner) scanArrow(read rune) (tok Token, lit string) {
|
||||||
|
// Create a buffer and read the current character into it.
|
||||||
|
var buf bytes.Buffer
|
||||||
|
buf.WriteRune(read)
|
||||||
|
|
||||||
|
// Read every subsequent ident character into the buffer.
|
||||||
|
// Non-ident characters and EOF will cause the loop to exit.
|
||||||
|
for {
|
||||||
|
if ch := s.read(); ch == eof {
|
||||||
|
break
|
||||||
|
} else if ch == '>' {
|
||||||
|
_, _ = buf.WriteRune(ch)
|
||||||
|
return ARROW, buf.String()
|
||||||
|
} else {
|
||||||
|
_, _ = buf.WriteRune(ch)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise return as a regular identifier.
|
||||||
|
return ILLEGAL, buf.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parser represents a parser.
|
||||||
|
type Parser struct {
|
||||||
|
s *Scanner
|
||||||
|
buf struct {
|
||||||
|
tok Token // last read token
|
||||||
|
lit string // last read literal
|
||||||
|
n int // buffer size (max=1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewParser returns a new instance of Parser.
|
||||||
|
func NewParser(r io.Reader) *Parser {
|
||||||
|
return &Parser{s: NewScanner(r)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// scan returns the next token from the underlying scanner.
|
||||||
|
// If a token has been unscanned then read that instead.
|
||||||
|
func (p *Parser) scan() (tok Token, lit string) {
|
||||||
|
// If we have a token on the buffer, then return it.
|
||||||
|
if p.buf.n != 0 {
|
||||||
|
p.buf.n = 0
|
||||||
|
return p.buf.tok, p.buf.lit
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise read the next token from the scanner.
|
||||||
|
tok, lit = p.s.Scan()
|
||||||
|
|
||||||
|
// Save it to the buffer in case we unscan later.
|
||||||
|
p.buf.tok, p.buf.lit = tok, lit
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// unscan pushes the previously read token back onto the buffer.
|
||||||
|
func (p *Parser) unscan() { p.buf.n = 1 }
|
||||||
|
|
||||||
|
// scanIgnoreWhitespace scans the next non-whitespace token.
|
||||||
|
func (p *Parser) scanIgnoreWhitespace() (tok Token, lit string) {
|
||||||
|
tok, lit = p.scan()
|
||||||
|
if tok == WHITESPACE {
|
||||||
|
tok, lit = p.scan()
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Parser) Parse() (*Line, error) {
|
||||||
|
l := &Line{}
|
||||||
|
if tok, lit := p.scanIgnoreWhitespace(); tok != INT {
|
||||||
|
return nil, fmt.Errorf("found %q, expected INT", lit)
|
||||||
|
} else {
|
||||||
|
l.X1, _ = strconv.Atoi(lit)
|
||||||
|
}
|
||||||
|
if tok, lit := p.scanIgnoreWhitespace(); tok != COMMA {
|
||||||
|
return nil, fmt.Errorf("found %q, expected COMMA", lit)
|
||||||
|
}
|
||||||
|
if tok, lit := p.scanIgnoreWhitespace(); tok != INT {
|
||||||
|
return nil, fmt.Errorf("found %q, expected INT", lit)
|
||||||
|
} else {
|
||||||
|
l.Y1, _ = strconv.Atoi(lit)
|
||||||
|
}
|
||||||
|
if tok, lit := p.scanIgnoreWhitespace(); tok != ARROW {
|
||||||
|
return nil, fmt.Errorf("found %q, expected ARROW", lit)
|
||||||
|
}
|
||||||
|
if tok, lit := p.scanIgnoreWhitespace(); tok != INT {
|
||||||
|
return nil, fmt.Errorf("found %q, expected INT", lit)
|
||||||
|
} else {
|
||||||
|
l.X2, _ = strconv.Atoi(lit)
|
||||||
|
}
|
||||||
|
if tok, lit := p.scanIgnoreWhitespace(); tok != COMMA {
|
||||||
|
return nil, fmt.Errorf("found %q, expected COMMA", lit)
|
||||||
|
}
|
||||||
|
if tok, lit := p.scanIgnoreWhitespace(); tok != INT {
|
||||||
|
return nil, fmt.Errorf("found %q, expected INT", lit)
|
||||||
|
} else {
|
||||||
|
l.Y2, _ = strconv.Atoi(lit)
|
||||||
|
}
|
||||||
|
if tok, lit := p.scan(); tok != WHITESPACE {
|
||||||
|
return nil, fmt.Errorf("found %q, expected WHITESPACE", lit)
|
||||||
|
}
|
||||||
|
return l, nil
|
||||||
|
}
|
61
2021/05/second.go
Normal file
61
2021/05/second.go
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"git.adyxax.org/aoc/2021/05/line"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
matrix := make([][]int, 1000)
|
||||||
|
for i := 0; i < 1000; i++ {
|
||||||
|
matrix[i] = make([]int, 1000)
|
||||||
|
}
|
||||||
|
|
||||||
|
parser := line.NewParser(bufio.NewReader(os.Stdin))
|
||||||
|
for {
|
||||||
|
l, err := parser.Parse()
|
||||||
|
if err != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if l.X1 == l.X2 {
|
||||||
|
if l.Y1 > l.Y2 {
|
||||||
|
l.Y1, l.Y2 = l.Y2, l.Y1
|
||||||
|
}
|
||||||
|
for i := l.Y1; i <= l.Y2; i++ {
|
||||||
|
matrix[l.X1][i]++
|
||||||
|
}
|
||||||
|
} else if l.Y1 == l.Y2 {
|
||||||
|
if l.X1 > l.X2 {
|
||||||
|
l.X1, l.X2 = l.X2, l.X1
|
||||||
|
}
|
||||||
|
for i := l.X1; i <= l.X2; i++ {
|
||||||
|
matrix[i][l.Y1]++
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if l.X1 > l.X2 {
|
||||||
|
l.X1, l.X2, l.Y1, l.Y2 = l.X2, l.X1, l.Y2, l.Y1
|
||||||
|
}
|
||||||
|
if l.Y1 < l.Y2 {
|
||||||
|
for i := 0; i <= l.X2-l.X1; i++ {
|
||||||
|
matrix[l.X1+i][l.Y1+i]++
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for i := 0; i <= l.X2-l.X1; i++ {
|
||||||
|
matrix[l.X1+i][l.Y1-i]++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
score := 0
|
||||||
|
for i := 0; i < 1000; i++ {
|
||||||
|
for j := 0; j < 1000; j++ {
|
||||||
|
if matrix[i][j] >= 2 {
|
||||||
|
score++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(score)
|
||||||
|
}
|
58
2021/05/second_v2.go
Normal file
58
2021/05/second_v2.go
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"git.adyxax.org/aoc/2021/05/line"
|
||||||
|
)
|
||||||
|
|
||||||
|
func abs(a int) int {
|
||||||
|
if a < 0 {
|
||||||
|
return -a
|
||||||
|
}
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
|
||||||
|
func computeDelta(a, b int) int {
|
||||||
|
if a < b {
|
||||||
|
return 1
|
||||||
|
} else if a > b {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
matrix := make([][]int, 1000)
|
||||||
|
for i := 0; i < 1000; i++ {
|
||||||
|
matrix[i] = make([]int, 1000)
|
||||||
|
}
|
||||||
|
|
||||||
|
parser := line.NewParser(bufio.NewReader(os.Stdin))
|
||||||
|
for {
|
||||||
|
l, err := parser.Parse()
|
||||||
|
if err != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
length := abs(l.X2 - l.X1)
|
||||||
|
if length == 0 {
|
||||||
|
length = abs(l.Y2 - l.Y1)
|
||||||
|
}
|
||||||
|
dx := computeDelta(l.X1, l.X2)
|
||||||
|
dy := computeDelta(l.Y1, l.Y2)
|
||||||
|
for i := 0; i <= length; i++ {
|
||||||
|
matrix[l.X1+i*dx][l.Y1+i*dy]++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
score := 0
|
||||||
|
for i := 0; i < 1000; i++ {
|
||||||
|
for j := 0; j < 1000; j++ {
|
||||||
|
if matrix[i][j] >= 2 {
|
||||||
|
score++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(score)
|
||||||
|
}
|
5
README.md
Normal file
5
README.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
This repository contains my solutions to the advent of code puzzles available at https://adventofcode.com/
|
||||||
|
|
||||||
|
I do not strive for elegance or anything, I just solve a puzzle (often brute forcing it) and if it executes fast enough I move on to the next one.
|
||||||
|
|
||||||
|
If the puzzle suits my fancy I implement a [Funge-98](https://github.com/catseye/Funge-98/blob/master/doc/funge98.markdown) solution for fun that I run using my own interpreter [gofunge98]*(https://git.adyxax.org/adyxax/gofunge98).
|
Loading…
Add table
Reference in a new issue