New Shared Library
This commit is contained in:
parent
1a2247044a
commit
6111f86a04
@ -1,16 +0,0 @@
|
||||
package main
|
||||
|
||||
type Board struct {
|
||||
Values [5][5]boardValue
|
||||
Hash map[int]location
|
||||
}
|
||||
|
||||
type boardValue struct {
|
||||
Value int
|
||||
Visited bool
|
||||
}
|
||||
|
||||
type location struct {
|
||||
x int
|
||||
y int
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"AdventOfCode2021/shared"
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
@ -16,7 +17,7 @@ func main() {
|
||||
fmt.Println(run(boards, nums))
|
||||
}
|
||||
|
||||
func run(boards *[]Board, nums []int) int {
|
||||
func run(boards *[]shared.Board, nums []int) int {
|
||||
var bingo int
|
||||
var n int
|
||||
for i := 0; i < len(nums); i++ {
|
||||
@ -32,10 +33,10 @@ func run(boards *[]Board, nums []int) int {
|
||||
return returnAnswer(&(*boards)[bingo], n)
|
||||
}
|
||||
|
||||
func loadBoards(content *[]string) (boards *[]Board, nums []int) {
|
||||
boards = new([]Board)
|
||||
newBoard := Board{
|
||||
Hash: make(map[int]location, 25),
|
||||
func loadBoards(content *[]string) (boards *[]shared.Board, nums []int) {
|
||||
boards = new([]shared.Board)
|
||||
newBoard := shared.Board{
|
||||
Hash: make(map[int]shared.Location, 25),
|
||||
}
|
||||
boardNum := 0
|
||||
row := 0
|
||||
@ -61,8 +62,8 @@ func loadBoards(content *[]string) (boards *[]Board, nums []int) {
|
||||
|
||||
for j := 0; j < len(values); j++ {
|
||||
value, _ := strconv.Atoi(values[j])
|
||||
newBoard.Values[row][j] = boardValue{Value: value, Visited: false}
|
||||
newBoard.Hash[value] = location{x: row, y: j}
|
||||
newBoard.Values[row][j] = shared.BoardValue{Value: value, Visited: false}
|
||||
newBoard.Hash[value] = shared.Location{X: row, Y: j}
|
||||
}
|
||||
row++
|
||||
|
||||
@ -70,8 +71,8 @@ func loadBoards(content *[]string) (boards *[]Board, nums []int) {
|
||||
boardNum++
|
||||
i++
|
||||
*boards = append(*boards, newBoard)
|
||||
newBoard = Board{
|
||||
Hash: make(map[int]location, 25),
|
||||
newBoard = shared.Board{
|
||||
Hash: make(map[int]shared.Location, 25),
|
||||
}
|
||||
row = 0
|
||||
}
|
||||
@ -84,13 +85,13 @@ func loadBoards(content *[]string) (boards *[]Board, nums []int) {
|
||||
return
|
||||
}
|
||||
|
||||
func callNumber(n int, boards *[]Board) int {
|
||||
func callNumber(n int, boards *[]shared.Board) int {
|
||||
for i := 0; i < len(*boards); i++ {
|
||||
location, present := (*boards)[i].Hash[n]
|
||||
if present {
|
||||
//Change the value to visited
|
||||
(*boards)[i].Values[location.x][location.y].Visited = true
|
||||
if checkBingo(&(*boards)[i], location.x, location.y) {
|
||||
(*boards)[i].Values[location.X][location.Y].Visited = true
|
||||
if checkBingo(&(*boards)[i], location.X, location.Y) {
|
||||
return i
|
||||
}
|
||||
}
|
||||
@ -98,7 +99,7 @@ func callNumber(n int, boards *[]Board) int {
|
||||
return -1
|
||||
}
|
||||
|
||||
func checkBingo(board *Board, x int, y int) bool {
|
||||
func checkBingo(board *shared.Board, x int, y int) bool {
|
||||
checkVertical := true
|
||||
//check if bingo for a given row and column
|
||||
|
||||
@ -122,7 +123,7 @@ func checkBingo(board *Board, x int, y int) bool {
|
||||
return checkVertical || checkHorizontal
|
||||
}
|
||||
|
||||
func returnAnswer(board *Board, n int) (answer int) {
|
||||
func returnAnswer(board *shared.Board, n int) (answer int) {
|
||||
for i := 0; i < 5; i++ {
|
||||
for j := 0; j < 5; j++ {
|
||||
if !(*board).Values[i][j].Visited {
|
||||
|
@ -1,16 +0,0 @@
|
||||
package main
|
||||
|
||||
type Board struct {
|
||||
Values [5][5]boardValue
|
||||
Hash map[int]location
|
||||
}
|
||||
|
||||
type boardValue struct {
|
||||
Value int
|
||||
Visited bool
|
||||
}
|
||||
|
||||
type location struct {
|
||||
x int
|
||||
y int
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"AdventOfCode2021/shared"
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
@ -16,8 +17,8 @@ func main() {
|
||||
fmt.Println(run(boards, nums))
|
||||
}
|
||||
|
||||
func run(boards *[]Board, nums []int) int {
|
||||
var completedBoards map[*Board]bool = make(map[*Board]bool)
|
||||
func run(boards *[]shared.Board, nums []int) int {
|
||||
var completedBoards map[*shared.Board]bool = make(map[*shared.Board]bool)
|
||||
var bingo []int
|
||||
var n int
|
||||
for i := 0; i < len(nums); i++ {
|
||||
@ -38,10 +39,10 @@ func run(boards *[]Board, nums []int) int {
|
||||
return returnAnswer(&(*boards)[bingo[0]], n)
|
||||
}
|
||||
|
||||
func loadBoards(content *[]string) (boards *[]Board, nums []int) {
|
||||
boards = new([]Board)
|
||||
newBoard := Board{
|
||||
Hash: make(map[int]location, 25),
|
||||
func loadBoards(content *[]string) (boards *[]shared.Board, nums []int) {
|
||||
boards = new([]shared.Board)
|
||||
newBoard := shared.Board{
|
||||
Hash: make(map[int]shared.Location, 25),
|
||||
}
|
||||
boardNum := 0
|
||||
row := 0
|
||||
@ -67,8 +68,8 @@ func loadBoards(content *[]string) (boards *[]Board, nums []int) {
|
||||
|
||||
for j := 0; j < len(values); j++ {
|
||||
value, _ := strconv.Atoi(values[j])
|
||||
newBoard.Values[row][j] = boardValue{Value: value, Visited: false}
|
||||
newBoard.Hash[value] = location{x: row, y: j}
|
||||
newBoard.Values[row][j] = shared.BoardValue{Value: value, Visited: false}
|
||||
newBoard.Hash[value] = shared.Location{X: row, Y: j}
|
||||
}
|
||||
row++
|
||||
|
||||
@ -76,8 +77,8 @@ func loadBoards(content *[]string) (boards *[]Board, nums []int) {
|
||||
boardNum++
|
||||
i++
|
||||
*boards = append(*boards, newBoard)
|
||||
newBoard = Board{
|
||||
Hash: make(map[int]location, 25),
|
||||
newBoard = shared.Board{
|
||||
Hash: make(map[int]shared.Location, 25),
|
||||
}
|
||||
row = 0
|
||||
}
|
||||
@ -90,13 +91,13 @@ func loadBoards(content *[]string) (boards *[]Board, nums []int) {
|
||||
return
|
||||
}
|
||||
|
||||
func callNumber(n int, boards *[]Board) (cards []int) {
|
||||
func callNumber(n int, boards *[]shared.Board) (cards []int) {
|
||||
for i := 0; i < len(*boards); i++ {
|
||||
location, present := (*boards)[i].Hash[n]
|
||||
if present {
|
||||
//Change the value to visited
|
||||
(*boards)[i].Values[location.x][location.y].Visited = true
|
||||
if checkBingo(&(*boards)[i], location.x, location.y) {
|
||||
(*boards)[i].Values[location.X][location.Y].Visited = true
|
||||
if checkBingo(&(*boards)[i], location.X, location.Y) {
|
||||
cards = append(cards, i)
|
||||
}
|
||||
}
|
||||
@ -104,7 +105,7 @@ func callNumber(n int, boards *[]Board) (cards []int) {
|
||||
return
|
||||
}
|
||||
|
||||
func checkBingo(board *Board, x int, y int) bool {
|
||||
func checkBingo(board *shared.Board, x int, y int) bool {
|
||||
checkVertical := true
|
||||
//check if bingo for a given row and column
|
||||
|
||||
@ -128,7 +129,7 @@ func checkBingo(board *Board, x int, y int) bool {
|
||||
return (checkVertical || checkHorizontal)
|
||||
}
|
||||
|
||||
func returnAnswer(board *Board, n int) (answer int) {
|
||||
func returnAnswer(board *shared.Board, n int) (answer int) {
|
||||
for i := 0; i < 5; i++ {
|
||||
for j := 0; j < 5; j++ {
|
||||
if !(*board).Values[i][j].Visited {
|
||||
|
@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"AdventOfCode2021/shared"
|
||||
"bufio"
|
||||
"fmt"
|
||||
"math"
|
||||
@ -13,7 +14,7 @@ func main() {
|
||||
content := returnContent("../input")
|
||||
//content := returnContent("../testInput")
|
||||
|
||||
list := mergeSort((*content), 0, len(*content)-1)
|
||||
list := shared.MergeSort((*content), 0, len(*content)-1)
|
||||
|
||||
position := list[len(list)/2]
|
||||
var cost float64
|
||||
@ -48,43 +49,3 @@ func returnContent(path string) *[]int {
|
||||
|
||||
return &content
|
||||
}
|
||||
|
||||
//sorting algorithm
|
||||
|
||||
func mergeSort(nums []int, start int, end int) []int {
|
||||
if start == end {
|
||||
return []int{nums[start]}
|
||||
}
|
||||
|
||||
var mid int = ((end - start) / 2) + start
|
||||
|
||||
//Assign values back into Left and right
|
||||
left := mergeSort(nums, start, mid)
|
||||
right := mergeSort(nums, mid+1, end)
|
||||
|
||||
var combined []int
|
||||
|
||||
//Pointers for new array
|
||||
leftPointer, rightPointer := 0, 0
|
||||
|
||||
for leftPointer <= len(left)-1 || rightPointer <= len(right)-1 {
|
||||
|
||||
if leftPointer == len(left) {
|
||||
addValue(&combined, right[rightPointer], &rightPointer)
|
||||
} else if rightPointer == len(right) {
|
||||
addValue(&combined, left[leftPointer], &leftPointer)
|
||||
} else {
|
||||
if left[leftPointer] <= right[rightPointer] {
|
||||
addValue(&combined, left[leftPointer], &leftPointer)
|
||||
} else {
|
||||
addValue(&combined, right[rightPointer], &rightPointer)
|
||||
}
|
||||
}
|
||||
}
|
||||
return combined
|
||||
}
|
||||
|
||||
func addValue(nums *[]int, value int, pointer *int) {
|
||||
*nums = append(*nums, value)
|
||||
*pointer++
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"AdventOfCode2021/shared"
|
||||
"bufio"
|
||||
"fmt"
|
||||
"math"
|
||||
@ -13,7 +14,7 @@ func main() {
|
||||
content := returnContent("../input")
|
||||
//content := returnContent("../testInput")
|
||||
|
||||
crabs := mergeSort(*content, 0, len(*content)-1)
|
||||
crabs := shared.MergeSort(*content, 0, len(*content)-1)
|
||||
|
||||
min, max := crabs[0], crabs[len(crabs)-1]
|
||||
|
||||
@ -76,43 +77,3 @@ func returnContent(path string) *[]int {
|
||||
|
||||
return &content
|
||||
}
|
||||
|
||||
//sorting algorithm
|
||||
|
||||
func mergeSort(nums []int, start int, end int) []int {
|
||||
if start == end {
|
||||
return []int{nums[start]}
|
||||
}
|
||||
|
||||
var mid int = ((end - start) / 2) + start
|
||||
|
||||
//Assign values back into Left and right
|
||||
left := mergeSort(nums, start, mid)
|
||||
right := mergeSort(nums, mid+1, end)
|
||||
|
||||
var combined []int
|
||||
|
||||
//Pointers for new array
|
||||
leftPointer, rightPointer := 0, 0
|
||||
|
||||
for leftPointer <= len(left)-1 || rightPointer <= len(right)-1 {
|
||||
|
||||
if leftPointer == len(left) {
|
||||
addValue(&combined, right[rightPointer], &rightPointer)
|
||||
} else if rightPointer == len(right) {
|
||||
addValue(&combined, left[leftPointer], &leftPointer)
|
||||
} else {
|
||||
if left[leftPointer] <= right[rightPointer] {
|
||||
addValue(&combined, left[leftPointer], &leftPointer)
|
||||
} else {
|
||||
addValue(&combined, right[rightPointer], &rightPointer)
|
||||
}
|
||||
}
|
||||
}
|
||||
return combined
|
||||
}
|
||||
|
||||
func addValue(nums *[]int, value int, pointer *int) {
|
||||
*nums = append(*nums, value)
|
||||
*pointer++
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"AdventOfCode2021/shared"
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
@ -10,34 +11,34 @@ func main() {
|
||||
content := returnContent("../input")
|
||||
//content := returnContent("../testInput")
|
||||
|
||||
var bracketMap map[byte]byte = make(map[byte]byte)
|
||||
var bracketCost map[byte]int = make(map[byte]int)
|
||||
var bracketMap map[string]string = make(map[string]string)
|
||||
var bracketCost map[string]int = make(map[string]int)
|
||||
|
||||
answer := 0
|
||||
|
||||
bracketMap[')'] = '('
|
||||
bracketMap[']'] = '['
|
||||
bracketMap['}'] = '{'
|
||||
bracketMap['>'] = '<'
|
||||
bracketMap[")"] = "("
|
||||
bracketMap["]"] = "["
|
||||
bracketMap["}"] = "{"
|
||||
bracketMap[">"] = "<"
|
||||
|
||||
bracketCost[')'] = 3
|
||||
bracketCost[']'] = 57
|
||||
bracketCost['}'] = 1197
|
||||
bracketCost['>'] = 25137
|
||||
bracketCost[")"] = 3
|
||||
bracketCost["]"] = 57
|
||||
bracketCost["}"] = 1197
|
||||
bracketCost[">"] = 25137
|
||||
|
||||
for _, row := range *content {
|
||||
var stack Stack = Stack{}
|
||||
var stack shared.Stack = shared.Stack{}
|
||||
for _, char := range row {
|
||||
brack, found := bracketMap[char]
|
||||
brack, found := bracketMap[string(char)]
|
||||
|
||||
if !found {
|
||||
//If it is an opening bracket
|
||||
stack.Push(char)
|
||||
stack.Push(string(char))
|
||||
} else {
|
||||
if brack == stack.Peek().char {
|
||||
if brack == stack.Peek().Value {
|
||||
stack.Pop()
|
||||
} else {
|
||||
answer += bracketCost[char]
|
||||
answer += bracketCost[string(char)]
|
||||
fmt.Println("Illegal,", char, "found", answer)
|
||||
break
|
||||
}
|
||||
|
@ -1,39 +0,0 @@
|
||||
package main
|
||||
|
||||
type Stack struct {
|
||||
head *StackNode
|
||||
}
|
||||
|
||||
func (s *Stack) Push(item byte) {
|
||||
if s.head == nil {
|
||||
s.head = &StackNode{
|
||||
char: item,
|
||||
next: nil,
|
||||
}
|
||||
} else {
|
||||
new := StackNode{
|
||||
char: item,
|
||||
next: s.head,
|
||||
}
|
||||
s.head = &new
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Stack) Pop() byte {
|
||||
node := s.Peek()
|
||||
s.head = node.next
|
||||
return node.char
|
||||
}
|
||||
|
||||
func (s *Stack) Peek() (node *StackNode) {
|
||||
node = s.head
|
||||
if node == nil {
|
||||
node = &StackNode{}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
type StackNode struct {
|
||||
char byte
|
||||
next *StackNode
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"AdventOfCode2021/shared"
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
@ -10,43 +11,43 @@ func main() {
|
||||
content := returnContent("../input")
|
||||
//content := returnContent("../testInput")
|
||||
|
||||
var bracketMap map[byte]byte = make(map[byte]byte)
|
||||
var reverseBracketMap map[byte]byte = make(map[byte]byte)
|
||||
var bracketCost map[byte]int = make(map[byte]int)
|
||||
var bracketMap map[string]string = make(map[string]string)
|
||||
var reverseBracketMap map[string]string = make(map[string]string)
|
||||
var bracketCost map[string]int = make(map[string]int)
|
||||
|
||||
bracketMap[')'] = '('
|
||||
bracketMap[']'] = '['
|
||||
bracketMap['}'] = '{'
|
||||
bracketMap['>'] = '<'
|
||||
bracketMap[")"] = "("
|
||||
bracketMap["]"] = "["
|
||||
bracketMap["}"] = "{"
|
||||
bracketMap[">"] = "<"
|
||||
|
||||
reverseBracketMap['('] = ')'
|
||||
reverseBracketMap['['] = ']'
|
||||
reverseBracketMap['{'] = '}'
|
||||
reverseBracketMap['<'] = '>'
|
||||
reverseBracketMap["("] = ")"
|
||||
reverseBracketMap["["] = "]"
|
||||
reverseBracketMap["{"] = "}"
|
||||
reverseBracketMap["<"] = ">"
|
||||
|
||||
bracketCost[')'] = 1
|
||||
bracketCost[']'] = 2
|
||||
bracketCost['}'] = 3
|
||||
bracketCost['>'] = 4
|
||||
bracketCost[")"] = 1
|
||||
bracketCost["]"] = 2
|
||||
bracketCost["}"] = 3
|
||||
bracketCost[">"] = 4
|
||||
|
||||
//reduce list to required incomplete set
|
||||
|
||||
stackList := []Stack{}
|
||||
stackList := []shared.Stack{}
|
||||
autoCompletes := []int{}
|
||||
|
||||
for _, row := range *content {
|
||||
|
||||
stack := Stack{}
|
||||
stack := shared.Stack{}
|
||||
keep := true
|
||||
|
||||
for _, char := range row {
|
||||
brack, found := bracketMap[char]
|
||||
brack, found := bracketMap[string(char)]
|
||||
|
||||
if !found {
|
||||
//If it is an opening bracket
|
||||
stack.Push(char)
|
||||
stack.Push(string(char))
|
||||
} else {
|
||||
if brack == stack.Peek().char {
|
||||
if brack == stack.Peek().Value {
|
||||
stack.Pop()
|
||||
} else {
|
||||
keep = false
|
||||
@ -62,7 +63,7 @@ func main() {
|
||||
|
||||
}
|
||||
|
||||
emptyStackNode := StackNode{}
|
||||
emptyStackNode := shared.Node{}
|
||||
|
||||
for _, stack := range stackList {
|
||||
autocomplete := 0
|
||||
@ -73,7 +74,7 @@ func main() {
|
||||
autoCompletes = append(autoCompletes, autocomplete)
|
||||
}
|
||||
|
||||
autoCompletes = mergeSort(autoCompletes, 0, len(autoCompletes)-1)
|
||||
autoCompletes = shared.MergeSort(autoCompletes, 0, len(autoCompletes)-1)
|
||||
|
||||
mid := autoCompletes[len(autoCompletes)/2]
|
||||
|
||||
@ -81,16 +82,6 @@ func main() {
|
||||
|
||||
}
|
||||
|
||||
// func removeElement(slice *[][]byte, i int) (new *[][]byte) {
|
||||
// new = &[][]byte{}
|
||||
// for j, row := range *slice {
|
||||
// if i != j {
|
||||
// *new = append(*new, row)
|
||||
// }
|
||||
// }
|
||||
// return
|
||||
// }
|
||||
|
||||
func returnContent(path string) *[][]byte {
|
||||
//read file and return it as an array of integers
|
||||
|
||||
|
@ -1,39 +0,0 @@
|
||||
package main
|
||||
|
||||
type Stack struct {
|
||||
head *StackNode
|
||||
}
|
||||
|
||||
func (s *Stack) Push(item byte) {
|
||||
if s.head == nil {
|
||||
s.head = &StackNode{
|
||||
char: item,
|
||||
next: nil,
|
||||
}
|
||||
} else {
|
||||
new := StackNode{
|
||||
char: item,
|
||||
next: s.head,
|
||||
}
|
||||
s.head = &new
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Stack) Pop() byte {
|
||||
node := s.Peek()
|
||||
s.head = node.next
|
||||
return node.char
|
||||
}
|
||||
|
||||
func (s *Stack) Peek() (node *StackNode) {
|
||||
node = s.head
|
||||
if node == nil {
|
||||
node = &StackNode{}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
type StackNode struct {
|
||||
char byte
|
||||
next *StackNode
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"AdventOfCode2021/shared"
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
@ -11,7 +12,7 @@ func main() {
|
||||
content := returnContent("../input")
|
||||
//content := returnContent("../testInput")
|
||||
|
||||
octopuses := map[Coordinate]int{}
|
||||
octopuses := map[shared.Coordinate]int{}
|
||||
|
||||
answer := 0
|
||||
|
||||
@ -22,12 +23,12 @@ func main() {
|
||||
for y, row := range *content {
|
||||
width = len(row)
|
||||
for x, val := range row {
|
||||
octopuses[Coordinate{X: x, Y: y}] = val
|
||||
octopuses[shared.Coordinate{X: x, Y: y}] = val
|
||||
}
|
||||
}
|
||||
|
||||
for i := 0; i < 100; i++ {
|
||||
flashers := map[Coordinate]bool{}
|
||||
flashers := map[shared.Coordinate]bool{}
|
||||
|
||||
for coord := range octopuses {
|
||||
octopuses[coord]++
|
||||
@ -63,49 +64,6 @@ func main() {
|
||||
fmt.Println(answer)
|
||||
}
|
||||
|
||||
//Coordinate Class
|
||||
type Coordinate struct {
|
||||
X int
|
||||
Y int
|
||||
}
|
||||
|
||||
func (c *Coordinate) Neighbours(gridWidth int, gridHeight int, diagonal bool) (out []Coordinate) {
|
||||
spaceLeft := c.X > 0
|
||||
spaceRight := c.X < gridWidth-1
|
||||
spaceUp := c.Y > 0
|
||||
spaceDown := c.Y < gridHeight-1
|
||||
|
||||
if spaceLeft {
|
||||
out = append(out, Coordinate{c.X - 1, c.Y})
|
||||
}
|
||||
if spaceRight {
|
||||
out = append(out, Coordinate{c.X + 1, c.Y})
|
||||
}
|
||||
if spaceUp {
|
||||
out = append(out, Coordinate{c.X, c.Y - 1})
|
||||
}
|
||||
if spaceDown {
|
||||
out = append(out, Coordinate{c.X, c.Y + 1})
|
||||
}
|
||||
|
||||
if diagonal {
|
||||
if spaceUp && spaceLeft {
|
||||
out = append(out, Coordinate{c.X - 1, c.Y - 1})
|
||||
}
|
||||
if spaceUp && spaceRight {
|
||||
out = append(out, Coordinate{c.X + 1, c.Y - 1})
|
||||
}
|
||||
if spaceDown && spaceLeft {
|
||||
out = append(out, Coordinate{c.X - 1, c.Y + 1})
|
||||
}
|
||||
if spaceDown && spaceRight {
|
||||
out = append(out, Coordinate{c.X + 1, c.Y + 1})
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func returnContent(path string) *[][]int {
|
||||
//read file and return it as an array of integers
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"AdventOfCode2021/shared"
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
@ -11,7 +12,7 @@ func main() {
|
||||
content := returnContent("../input")
|
||||
//content := returnContent("../testInput")
|
||||
|
||||
octopuses := map[Coordinate]int{}
|
||||
octopuses := map[shared.Coordinate]int{}
|
||||
|
||||
answer := 0
|
||||
|
||||
@ -22,14 +23,14 @@ func main() {
|
||||
for y, row := range *content {
|
||||
width = len(row)
|
||||
for x, val := range row {
|
||||
octopuses[Coordinate{X: x, Y: y}] = val
|
||||
octopuses[shared.Coordinate{X: x, Y: y}] = val
|
||||
}
|
||||
}
|
||||
|
||||
i := 0
|
||||
for {
|
||||
i++
|
||||
flashers := map[Coordinate]bool{}
|
||||
flashers := map[shared.Coordinate]bool{}
|
||||
for coords, energy := range octopuses {
|
||||
octopuses[coords] = energy + 1
|
||||
}
|
||||
@ -61,7 +62,7 @@ func main() {
|
||||
allFlashed := true
|
||||
for y := 0; y < height; y++ {
|
||||
for x := 0; x < width; x++ {
|
||||
if !flashers[Coordinate{
|
||||
if !flashers[shared.Coordinate{
|
||||
X: x,
|
||||
Y: y,
|
||||
}] {
|
||||
@ -79,49 +80,6 @@ func main() {
|
||||
fmt.Println(answer)
|
||||
}
|
||||
|
||||
//Coordinate Class
|
||||
type Coordinate struct {
|
||||
X int
|
||||
Y int
|
||||
}
|
||||
|
||||
func (c *Coordinate) Neighbours(gridWidth int, gridHeight int, diagonal bool) (out []Coordinate) {
|
||||
spaceLeft := c.X > 0
|
||||
spaceRight := c.X < gridWidth-1
|
||||
spaceUp := c.Y > 0
|
||||
spaceDown := c.Y < gridHeight-1
|
||||
|
||||
if spaceLeft {
|
||||
out = append(out, Coordinate{c.X - 1, c.Y})
|
||||
}
|
||||
if spaceRight {
|
||||
out = append(out, Coordinate{c.X + 1, c.Y})
|
||||
}
|
||||
if spaceUp {
|
||||
out = append(out, Coordinate{c.X, c.Y - 1})
|
||||
}
|
||||
if spaceDown {
|
||||
out = append(out, Coordinate{c.X, c.Y + 1})
|
||||
}
|
||||
|
||||
if diagonal {
|
||||
if spaceUp && spaceLeft {
|
||||
out = append(out, Coordinate{c.X - 1, c.Y - 1})
|
||||
}
|
||||
if spaceUp && spaceRight {
|
||||
out = append(out, Coordinate{c.X + 1, c.Y - 1})
|
||||
}
|
||||
if spaceDown && spaceLeft {
|
||||
out = append(out, Coordinate{c.X - 1, c.Y + 1})
|
||||
}
|
||||
if spaceDown && spaceRight {
|
||||
out = append(out, Coordinate{c.X + 1, c.Y + 1})
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func returnContent(path string) *[][]int {
|
||||
//read file and return it as an array of integers
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"AdventOfCode2021/shared"
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
@ -12,7 +13,7 @@ func main() {
|
||||
content := returnContent("../input")
|
||||
//content := returnContent("../testInput")
|
||||
|
||||
sheet := make(map[Coordinate]bool)
|
||||
sheet := make(map[shared.Coordinate]bool)
|
||||
answer := 0
|
||||
|
||||
for _, line := range *content {
|
||||
@ -41,7 +42,7 @@ func main() {
|
||||
x, _ := strconv.Atoi(coordinates[0])
|
||||
y, _ := strconv.Atoi(coordinates[1])
|
||||
|
||||
sheet[Coordinate{X: x, Y: y}] = true
|
||||
sheet[shared.Coordinate{X: x, Y: y}] = true
|
||||
|
||||
}
|
||||
}
|
||||
@ -54,8 +55,8 @@ func main() {
|
||||
|
||||
}
|
||||
|
||||
func FoldX(sheet map[Coordinate]bool, foldPoint int) (folded map[Coordinate]bool) {
|
||||
folded = make(map[Coordinate]bool)
|
||||
func FoldX(sheet map[shared.Coordinate]bool, foldPoint int) (folded map[shared.Coordinate]bool) {
|
||||
folded = make(map[shared.Coordinate]bool)
|
||||
for mark := range sheet {
|
||||
x := mark.X
|
||||
if x > foldPoint {
|
||||
@ -63,13 +64,13 @@ func FoldX(sheet map[Coordinate]bool, foldPoint int) (folded map[Coordinate]bool
|
||||
x = 2*foldPoint - x
|
||||
}
|
||||
|
||||
folded[Coordinate{X: x, Y: mark.Y}] = true
|
||||
folded[shared.Coordinate{X: x, Y: mark.Y}] = true
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func FoldY(sheet map[Coordinate]bool, foldPoint int) (folded map[Coordinate]bool) {
|
||||
folded = make(map[Coordinate]bool)
|
||||
func FoldY(sheet map[shared.Coordinate]bool, foldPoint int) (folded map[shared.Coordinate]bool) {
|
||||
folded = make(map[shared.Coordinate]bool)
|
||||
for mark := range sheet {
|
||||
y := mark.Y
|
||||
if y > foldPoint {
|
||||
@ -77,16 +78,11 @@ func FoldY(sheet map[Coordinate]bool, foldPoint int) (folded map[Coordinate]bool
|
||||
y = 2*foldPoint - y
|
||||
}
|
||||
|
||||
folded[Coordinate{X: mark.X, Y: y}] = true
|
||||
folded[shared.Coordinate{X: mark.X, Y: y}] = true
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
type Coordinate struct {
|
||||
X int
|
||||
Y int
|
||||
}
|
||||
|
||||
func returnContent(path string) *[]string {
|
||||
//read file and return it as an array of integers
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"AdventOfCode2021/shared"
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
@ -12,7 +13,7 @@ func main() {
|
||||
content := returnContent("../input")
|
||||
//content := returnContent("../testInput")
|
||||
|
||||
sheet := make(map[Coordinate]bool)
|
||||
sheet := make(map[shared.Coordinate]bool)
|
||||
//var answer string
|
||||
|
||||
for _, line := range *content {
|
||||
@ -37,14 +38,14 @@ func main() {
|
||||
x, _ := strconv.Atoi(coordinates[0])
|
||||
y, _ := strconv.Atoi(coordinates[1])
|
||||
|
||||
sheet[Coordinate{X: x, Y: y}] = true
|
||||
sheet[shared.Coordinate{X: x, Y: y}] = true
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
for y := 0; y < 8; y++ {
|
||||
for x := 0; x < 200; x++ {
|
||||
if sheet[Coordinate{X: x, Y: y}] {
|
||||
if sheet[shared.Coordinate{X: x, Y: y}] {
|
||||
fmt.Print("#")
|
||||
} else {
|
||||
fmt.Print(" ")
|
||||
@ -55,8 +56,8 @@ func main() {
|
||||
|
||||
}
|
||||
|
||||
func FoldX(sheet map[Coordinate]bool, foldPoint int) (folded map[Coordinate]bool) {
|
||||
folded = make(map[Coordinate]bool)
|
||||
func FoldX(sheet map[shared.Coordinate]bool, foldPoint int) (folded map[shared.Coordinate]bool) {
|
||||
folded = make(map[shared.Coordinate]bool)
|
||||
for mark := range sheet {
|
||||
x := mark.X
|
||||
if x > foldPoint {
|
||||
@ -64,13 +65,13 @@ func FoldX(sheet map[Coordinate]bool, foldPoint int) (folded map[Coordinate]bool
|
||||
x = 2*foldPoint - x
|
||||
}
|
||||
|
||||
folded[Coordinate{X: x, Y: mark.Y}] = true
|
||||
folded[shared.Coordinate{X: x, Y: mark.Y}] = true
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func FoldY(sheet map[Coordinate]bool, foldPoint int) (folded map[Coordinate]bool) {
|
||||
folded = make(map[Coordinate]bool)
|
||||
func FoldY(sheet map[shared.Coordinate]bool, foldPoint int) (folded map[shared.Coordinate]bool) {
|
||||
folded = make(map[shared.Coordinate]bool)
|
||||
for mark := range sheet {
|
||||
y := mark.Y
|
||||
if y > foldPoint {
|
||||
@ -78,16 +79,11 @@ func FoldY(sheet map[Coordinate]bool, foldPoint int) (folded map[Coordinate]bool
|
||||
y = 2*foldPoint - y
|
||||
}
|
||||
|
||||
folded[Coordinate{X: mark.X, Y: y}] = true
|
||||
folded[shared.Coordinate{X: mark.X, Y: y}] = true
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
type Coordinate struct {
|
||||
X int
|
||||
Y int
|
||||
}
|
||||
|
||||
func returnContent(path string) *[]string {
|
||||
//read file and return it as an array of integers
|
||||
|
||||
|
107
day16/16a/main.go
Normal file
107
day16/16a/main.go
Normal file
@ -0,0 +1,107 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"math"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
content := returnContent("../input")
|
||||
//content := returnContent("../testInput")
|
||||
fmt.Println(content)
|
||||
|
||||
startingString := (*content)[0]
|
||||
pairs := make(map[string]string)
|
||||
count := make(map[string]int)
|
||||
|
||||
//Create map of pair values
|
||||
for i := 2; i < len(*content); i++ {
|
||||
split := strings.Split((*content)[i], " -> ")
|
||||
pairs[split[0]] = split[1]
|
||||
}
|
||||
|
||||
//Fill initial list
|
||||
list := LinkedList{Head: &Node{Value: string(startingString[0]), Next: nil}}
|
||||
current := list.Head
|
||||
for i := 1; i < len(startingString); i++ {
|
||||
node := &Node{Value: string(startingString[i]), Next: nil}
|
||||
count[string(startingString[i])]++
|
||||
current.Next = node
|
||||
current = node
|
||||
}
|
||||
|
||||
//Run iterations on list
|
||||
iterations := 10
|
||||
for i := 1; i <= iterations; i++ {
|
||||
current = list.Head
|
||||
|
||||
for current.Next != nil {
|
||||
value := pairs[current.Value+current.Next.Value]
|
||||
list.InsertItem(current, current.Next, value)
|
||||
count[value]++
|
||||
current = current.Next.Next
|
||||
}
|
||||
list.PrintList()
|
||||
}
|
||||
|
||||
//determine min and max
|
||||
min := math.MaxInt
|
||||
max := 0
|
||||
for _, value := range count {
|
||||
if value > max {
|
||||
max = value
|
||||
} else if value < min {
|
||||
min = value
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println(max - min)
|
||||
|
||||
}
|
||||
|
||||
type LinkedList struct {
|
||||
Head *Node
|
||||
}
|
||||
|
||||
func (l *LinkedList) InsertItem(first *Node, second *Node, value string) {
|
||||
first.Next = &Node{Value: value, Next: second}
|
||||
}
|
||||
|
||||
func (l *LinkedList) PrintList() {
|
||||
list := []string{}
|
||||
current := l.Head
|
||||
for current != nil {
|
||||
list = append(list, current.Value)
|
||||
current = current.Next
|
||||
}
|
||||
fmt.Println(list)
|
||||
}
|
||||
|
||||
type Node struct {
|
||||
Value string
|
||||
Next *Node
|
||||
}
|
||||
|
||||
func returnContent(path string) *[]string {
|
||||
//read file and return it as an array of integers
|
||||
|
||||
file, err := os.Open(path)
|
||||
var content []string
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Unlucky, the file didn't open")
|
||||
return &content
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
|
||||
for scanner.Scan() {
|
||||
content = append(content, scanner.Text())
|
||||
}
|
||||
|
||||
return &content
|
||||
}
|
107
day16/16b/main.go
Normal file
107
day16/16b/main.go
Normal file
@ -0,0 +1,107 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"math"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
content := returnContent("../input")
|
||||
//content := returnContent("../testInput")
|
||||
fmt.Println(content)
|
||||
|
||||
startingString := (*content)[0]
|
||||
pairs := make(map[string]string)
|
||||
count := make(map[string]int)
|
||||
|
||||
//Create map of pair values
|
||||
for i := 2; i < len(*content); i++ {
|
||||
split := strings.Split((*content)[i], " -> ")
|
||||
pairs[split[0]] = split[1]
|
||||
}
|
||||
|
||||
//Fill initial list
|
||||
list := LinkedList{Head: &Node{Value: string(startingString[0]), Next: nil}}
|
||||
current := list.Head
|
||||
for i := 1; i < len(startingString); i++ {
|
||||
node := &Node{Value: string(startingString[i]), Next: nil}
|
||||
count[string(startingString[i])]++
|
||||
current.Next = node
|
||||
current = node
|
||||
}
|
||||
|
||||
//Run iterations on list
|
||||
iterations := 40
|
||||
for i := 1; i <= iterations; i++ {
|
||||
current = list.Head
|
||||
|
||||
for current.Next != nil {
|
||||
value := pairs[current.Value+current.Next.Value]
|
||||
list.InsertItem(current, current.Next, value)
|
||||
count[value]++
|
||||
current = current.Next.Next
|
||||
}
|
||||
fmt.Println(i)
|
||||
}
|
||||
|
||||
//determine min and max
|
||||
min := math.MaxInt
|
||||
max := 0
|
||||
for _, value := range count {
|
||||
if value > max {
|
||||
max = value
|
||||
} else if value < min {
|
||||
min = value
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println(max - min)
|
||||
|
||||
}
|
||||
|
||||
type LinkedList struct {
|
||||
Head *Node
|
||||
}
|
||||
|
||||
func (l *LinkedList) InsertItem(first *Node, second *Node, value string) {
|
||||
first.Next = &Node{Value: value, Next: second}
|
||||
}
|
||||
|
||||
func (l *LinkedList) PrintList() {
|
||||
list := []string{}
|
||||
current := l.Head
|
||||
for current != nil {
|
||||
list = append(list, current.Value)
|
||||
current = current.Next
|
||||
}
|
||||
fmt.Println(list)
|
||||
}
|
||||
|
||||
type Node struct {
|
||||
Value string
|
||||
Next *Node
|
||||
}
|
||||
|
||||
func returnContent(path string) *[]string {
|
||||
//read file and return it as an array of integers
|
||||
|
||||
file, err := os.Open(path)
|
||||
var content []string
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Unlucky, the file didn't open")
|
||||
return &content
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
|
||||
for scanner.Scan() {
|
||||
content = append(content, scanner.Text())
|
||||
}
|
||||
|
||||
return &content
|
||||
}
|
102
day16/input
Normal file
102
day16/input
Normal file
@ -0,0 +1,102 @@
|
||||
SHHBNFBCKNHCNOSHHVFF
|
||||
|
||||
CK -> N
|
||||
VP -> B
|
||||
CF -> S
|
||||
FO -> V
|
||||
VC -> S
|
||||
BV -> V
|
||||
NP -> P
|
||||
SN -> C
|
||||
KN -> V
|
||||
NF -> P
|
||||
SB -> C
|
||||
PC -> B
|
||||
OB -> V
|
||||
NS -> O
|
||||
FH -> S
|
||||
NK -> S
|
||||
HO -> V
|
||||
NV -> O
|
||||
FV -> O
|
||||
FB -> S
|
||||
PS -> S
|
||||
FN -> K
|
||||
HS -> O
|
||||
CB -> K
|
||||
HV -> P
|
||||
NH -> C
|
||||
BO -> B
|
||||
FF -> N
|
||||
PO -> F
|
||||
BB -> N
|
||||
PN -> C
|
||||
BP -> C
|
||||
HN -> K
|
||||
CO -> P
|
||||
BF -> H
|
||||
BC -> S
|
||||
CV -> B
|
||||
VV -> F
|
||||
FS -> B
|
||||
BN -> P
|
||||
VK -> S
|
||||
PV -> V
|
||||
PP -> B
|
||||
PH -> N
|
||||
SS -> O
|
||||
SK -> S
|
||||
NC -> P
|
||||
ON -> F
|
||||
NB -> N
|
||||
CC -> N
|
||||
SF -> H
|
||||
PF -> H
|
||||
OV -> O
|
||||
KH -> C
|
||||
CP -> V
|
||||
PK -> O
|
||||
KC -> K
|
||||
KK -> C
|
||||
KF -> B
|
||||
HP -> C
|
||||
FK -> H
|
||||
BH -> K
|
||||
VN -> H
|
||||
OO -> S
|
||||
SC -> K
|
||||
SP -> B
|
||||
KO -> V
|
||||
KV -> F
|
||||
HK -> N
|
||||
FP -> N
|
||||
NN -> B
|
||||
VS -> O
|
||||
HC -> K
|
||||
BK -> N
|
||||
KS -> K
|
||||
VB -> O
|
||||
OH -> F
|
||||
KB -> F
|
||||
KP -> H
|
||||
HB -> N
|
||||
NO -> N
|
||||
OF -> O
|
||||
BS -> H
|
||||
VO -> H
|
||||
SH -> O
|
||||
SV -> K
|
||||
HF -> C
|
||||
CS -> F
|
||||
FC -> N
|
||||
VH -> H
|
||||
OP -> K
|
||||
OK -> H
|
||||
PB -> K
|
||||
HH -> S
|
||||
OC -> V
|
||||
VF -> B
|
||||
CH -> K
|
||||
CN -> C
|
||||
SO -> P
|
||||
OS -> O
|
18
day16/testInput
Normal file
18
day16/testInput
Normal file
@ -0,0 +1,18 @@
|
||||
NNCB
|
||||
|
||||
CH -> B
|
||||
HH -> N
|
||||
CB -> H
|
||||
NH -> C
|
||||
HB -> C
|
||||
HC -> B
|
||||
HN -> C
|
||||
NN -> C
|
||||
BH -> H
|
||||
NC -> B
|
||||
NB -> B
|
||||
BN -> B
|
||||
BB -> N
|
||||
BC -> B
|
||||
CC -> N
|
||||
CN -> C
|
16
shared/Board.go
Normal file
16
shared/Board.go
Normal file
@ -0,0 +1,16 @@
|
||||
package shared
|
||||
|
||||
type Board struct {
|
||||
Values [5][5]BoardValue
|
||||
Hash map[int]Location
|
||||
}
|
||||
|
||||
type BoardValue struct {
|
||||
Value int
|
||||
Visited bool
|
||||
}
|
||||
|
||||
type Location struct {
|
||||
X int
|
||||
Y int
|
||||
}
|
43
shared/Coordinate.go
Normal file
43
shared/Coordinate.go
Normal file
@ -0,0 +1,43 @@
|
||||
package shared
|
||||
|
||||
type Coordinate struct {
|
||||
X int
|
||||
Y int
|
||||
}
|
||||
|
||||
func (c *Coordinate) Neighbours(gridWidth int, gridHeight int, diagonal bool) (out []Coordinate) {
|
||||
spaceLeft := c.X > 0
|
||||
spaceRight := c.X < gridWidth-1
|
||||
spaceUp := c.Y > 0
|
||||
spaceDown := c.Y < gridHeight-1
|
||||
|
||||
if spaceLeft {
|
||||
out = append(out, Coordinate{c.X - 1, c.Y})
|
||||
}
|
||||
if spaceRight {
|
||||
out = append(out, Coordinate{c.X + 1, c.Y})
|
||||
}
|
||||
if spaceUp {
|
||||
out = append(out, Coordinate{c.X, c.Y - 1})
|
||||
}
|
||||
if spaceDown {
|
||||
out = append(out, Coordinate{c.X, c.Y + 1})
|
||||
}
|
||||
|
||||
if diagonal {
|
||||
if spaceUp && spaceLeft {
|
||||
out = append(out, Coordinate{c.X - 1, c.Y - 1})
|
||||
}
|
||||
if spaceUp && spaceRight {
|
||||
out = append(out, Coordinate{c.X + 1, c.Y - 1})
|
||||
}
|
||||
if spaceDown && spaceLeft {
|
||||
out = append(out, Coordinate{c.X - 1, c.Y + 1})
|
||||
}
|
||||
if spaceDown && spaceRight {
|
||||
out = append(out, Coordinate{c.X + 1, c.Y + 1})
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
21
shared/LinkedList.go
Normal file
21
shared/LinkedList.go
Normal file
@ -0,0 +1,21 @@
|
||||
package shared
|
||||
|
||||
import "fmt"
|
||||
|
||||
type LinkedList struct {
|
||||
Head *Node
|
||||
}
|
||||
|
||||
func (l *LinkedList) InsertItem(first *Node, second *Node, value string) {
|
||||
first.Next = &Node{Value: value, Next: second}
|
||||
}
|
||||
|
||||
func (l *LinkedList) PrintList() {
|
||||
list := []string{}
|
||||
current := l.Head
|
||||
for current != nil {
|
||||
list = append(list, current.Value)
|
||||
current = current.Next
|
||||
}
|
||||
fmt.Println(list)
|
||||
}
|
6
shared/Node.go
Normal file
6
shared/Node.go
Normal file
@ -0,0 +1,6 @@
|
||||
package shared
|
||||
|
||||
type Node struct {
|
||||
Value string
|
||||
Next *Node
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package main
|
||||
package shared
|
||||
|
||||
func mergeSort(nums []int, start int, end int) []int {
|
||||
func MergeSort(nums []int, start int, end int) []int {
|
||||
if start == end {
|
||||
return []int{nums[start]}
|
||||
}
|
||||
@ -8,8 +8,8 @@ func mergeSort(nums []int, start int, end int) []int {
|
||||
var mid int = ((end - start) / 2) + start
|
||||
|
||||
//Assign values back into Left and right
|
||||
left := mergeSort(nums, start, mid)
|
||||
right := mergeSort(nums, mid+1, end)
|
||||
left := MergeSort(nums, start, mid)
|
||||
right := MergeSort(nums, mid+1, end)
|
||||
|
||||
var combined []int
|
||||
|
33
shared/Stack.go
Normal file
33
shared/Stack.go
Normal file
@ -0,0 +1,33 @@
|
||||
package shared
|
||||
|
||||
type Stack struct {
|
||||
head *Node
|
||||
}
|
||||
|
||||
func (s *Stack) Push(item string) {
|
||||
if s.head == nil {
|
||||
s.head = &Node{
|
||||
Value: item,
|
||||
Next: nil,
|
||||
}
|
||||
} else {
|
||||
s.head = &Node{
|
||||
Value: item,
|
||||
Next: s.head,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Stack) Pop() string {
|
||||
node := s.Peek()
|
||||
s.head = node.Next
|
||||
return node.Value
|
||||
}
|
||||
|
||||
func (s *Stack) Peek() (node *Node) {
|
||||
node = s.head
|
||||
if node == nil {
|
||||
node = &Node{}
|
||||
}
|
||||
return
|
||||
}
|
Loading…
Reference in New Issue
Block a user