|  | @@ -4,6 +4,7 @@ import (
 | 
											
												
													
														|  |  	"fmt"
 |  |  	"fmt"
 | 
											
												
													
														|  |  	"log"
 |  |  	"log"
 | 
											
												
													
														|  |  	"os"
 |  |  	"os"
 | 
											
												
													
														|  | 
 |  | +	"strconv"
 | 
											
												
													
														|  |  	"strings"
 |  |  	"strings"
 | 
											
												
													
														|  |  )
 |  |  )
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -25,11 +26,15 @@ func readInput(path string) []string {
 | 
											
												
													
														|  |  	return parts
 |  |  	return parts
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +const (
 | 
											
												
													
														|  | 
 |  | +	Max = 256
 | 
											
												
													
														|  | 
 |  | +)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  func hash(text string) int {
 |  |  func hash(text string) int {
 | 
											
												
													
														|  |  	var current int
 |  |  	var current int
 | 
											
												
													
														|  |  	for i := range text {
 |  |  	for i := range text {
 | 
											
												
													
														|  |  		current += int(text[i])
 |  |  		current += int(text[i])
 | 
											
												
													
														|  | -		current = current * 17 % 256
 |  | 
 | 
											
												
													
														|  | 
 |  | +		current = current * 17 % Max
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	return current
 |  |  	return current
 | 
											
										
											
												
													
														|  | @@ -44,6 +49,43 @@ func part1(steps []string) int {
 | 
											
												
													
														|  |  	return result
 |  |  	return result
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +type Lens struct {
 | 
											
												
													
														|  | 
 |  | +	label string
 | 
											
												
													
														|  | 
 |  | +	power int
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +func getBoxes(steps []string) [][]Lens {
 | 
											
												
													
														|  | 
 |  | +	lenses := make([][]Lens, 256)
 | 
											
												
													
														|  | 
 |  | +	for i := range steps {
 | 
											
												
													
														|  | 
 |  | +		if strings.Contains(steps[i], "=") {
 | 
											
												
													
														|  | 
 |  | +			parts := strings.Split(steps[i], "=")
 | 
											
												
													
														|  | 
 |  | +			if len(parts) != 2 {
 | 
											
												
													
														|  | 
 |  | +				log.Fatalf("Problem reading step %s", steps[i])
 | 
											
												
													
														|  | 
 |  | +			}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +			lens := Lens{label: parts[0]}
 | 
											
												
													
														|  | 
 |  | +			n, err := strconv.Atoi(parts[1])
 | 
											
												
													
														|  | 
 |  | +			if err != nil {
 | 
											
												
													
														|  | 
 |  | +				log.Fatalf("Problem converting number %s: %s", parts[1], err)
 | 
											
												
													
														|  | 
 |  | +			}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +			lens.power = n
 | 
											
												
													
														|  | 
 |  | +			fmt.Println(lens)
 | 
											
												
													
														|  | 
 |  | +		} else {
 | 
											
												
													
														|  | 
 |  | +			label := strings.TrimRight(steps[i], "-")
 | 
											
												
													
														|  | 
 |  | +			fmt.Println(label)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	return lenses
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +func part2(steps []string) int {
 | 
											
												
													
														|  | 
 |  | +	var result int
 | 
											
												
													
														|  | 
 |  | +	getBoxes(steps)
 | 
											
												
													
														|  | 
 |  | +	return result
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  func main() {
 |  |  func main() {
 | 
											
												
													
														|  |  	if len(os.Args) < 2 {
 |  |  	if len(os.Args) < 2 {
 | 
											
												
													
														|  |  		log.Fatal("You need to specify a file!")
 |  |  		log.Fatal("You need to specify a file!")
 | 
											
										
											
												
													
														|  | @@ -51,4 +93,5 @@ func main() {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	steps := readInput(os.Args[1])
 |  |  	steps := readInput(os.Args[1])
 | 
											
												
													
														|  |  	fmt.Println("Part1:", part1(steps))
 |  |  	fmt.Println("Part1:", part1(steps))
 | 
											
												
													
														|  | 
 |  | +	fmt.Println("Part2:", part2(steps))
 | 
											
												
													
														|  |  }
 |  |  }
 |