|
@@ -0,0 +1,80 @@
|
|
|
|
+package main
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "fmt"
|
|
|
|
+ "io/ioutil"
|
|
|
|
+ "log"
|
|
|
|
+ "os"
|
|
|
|
+ "strconv"
|
|
|
|
+ "strings"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+type point struct {
|
|
|
|
+ x, y int
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func readInput(file string) ([]point, int, int) {
|
|
|
|
+ content, err := ioutil.ReadFile(file)
|
|
|
|
+ if err != nil {
|
|
|
|
+ log.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ lines := strings.Split(string(content), "\n")
|
|
|
|
+ var input []point
|
|
|
|
+ var foldX, foldY int
|
|
|
|
+ readingPoints := true
|
|
|
|
+ for _, line := range lines {
|
|
|
|
+ if line == "" {
|
|
|
|
+ readingPoints = false
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ if readingPoints {
|
|
|
|
+ parts := strings.Split(line, ",")
|
|
|
|
+ if len(parts) != 2 {
|
|
|
|
+ log.Fatal("Invalid input")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ x, err := strconv.Atoi(parts[0])
|
|
|
|
+ if err != nil {
|
|
|
|
+ log.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ y, err := strconv.Atoi(parts[1])
|
|
|
|
+ if err != nil {
|
|
|
|
+ log.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ input = append(input, point{x, y})
|
|
|
|
+ } else {
|
|
|
|
+ parts := strings.Split(line, "=")
|
|
|
|
+ if len(parts) != 2 {
|
|
|
|
+ log.Fatal("Invalid input")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if parts[0] == "fold along x" {
|
|
|
|
+ foldX, err = strconv.Atoi(parts[1])
|
|
|
|
+ if err != nil {
|
|
|
|
+ log.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ } else if parts[0] == "fold along y" {
|
|
|
|
+ foldY, err = strconv.Atoi(parts[1])
|
|
|
|
+ if err != nil {
|
|
|
|
+ log.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ log.Fatal("Invalid input")
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return input, foldX, foldY
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func main() {
|
|
|
|
+ if len(os.Args) < 2 {
|
|
|
|
+ log.Fatal("Please provide a file name as argument")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ input, foldX, foldY := readInput(os.Args[1])
|
|
|
|
+ fmt.Println(input, foldX, foldY)
|
|
|
|
+}
|