Compare commits
3 Commits
aff141a362
...
0204b4841b
Author | SHA1 | Date | |
---|---|---|---|
0204b4841b | |||
4159024e6f | |||
596f3e7533 |
|
@ -113,8 +113,7 @@ func (m *Path) readLine(text string) {
|
|||
}
|
||||
func (m *Path) buildPath() int {
|
||||
m.start()
|
||||
for m.next() {
|
||||
}
|
||||
for m.next() {}
|
||||
return (len(m.p) + 1) / 2
|
||||
}
|
||||
func (m *Path) start() {
|
||||
|
@ -178,23 +177,15 @@ func (m *Path) next() bool {
|
|||
last := n.whence
|
||||
next := m.head.left.whence
|
||||
|
||||
switch (last<<4)|next {
|
||||
case 0x11, 0x22: m.n.value = '|' // UP UP, DN DN
|
||||
switch last<<4|next {
|
||||
case UP<<4|UP, DN<<4|DN: m.head.value = '|' // UP UP, DN DN
|
||||
case LF<<4|LF, RT<<4|RT: m.head.value = '-' // LF LF, RT RT
|
||||
|
||||
case 0x13: m.head.value = 'J' // UP LF
|
||||
case 0x14: m.head.value = 'L' // UP RT
|
||||
|
||||
case 0x23: m.head.value = '7' // DN LF
|
||||
case 0x24: m.head.value = 'F' // DN RT
|
||||
|
||||
case 0x33, 0x44: m.head.value = '-' // LF LF, RT RT
|
||||
|
||||
case 0x31: m.head.value = '7' // LF UP
|
||||
case 0x32: m.head.value = 'J' // LF DN
|
||||
|
||||
case 0x41: m.head.value = 'F' // RT UP
|
||||
case 0x42: m.head.value = 'L' // RT DN
|
||||
case UP<<4|RT, LF<<4|DN: m.head.value = 'J' // UP RT, LT DN
|
||||
case UP<<4|LF, RT<<4|DN: m.head.value = 'L' // UP RT, RT DN
|
||||
|
||||
case DN<<4|RT, LF<<4|UP: m.head.value = '7' // DN LF, LF UP
|
||||
case RT<<4|UP, DN<<4|LF: m.head.value = 'F' // DN LF, RT UP
|
||||
}
|
||||
|
||||
return false
|
||||
|
@ -210,7 +201,7 @@ const (
|
|||
ST int8 = iota
|
||||
UP
|
||||
DN
|
||||
LF
|
||||
LF
|
||||
RT
|
||||
)
|
||||
|
||||
|
@ -255,7 +246,6 @@ func (m *Path) peek(d int8) *node {
|
|||
if any(r, 'J', '|', 'L', 'S') {
|
||||
return &node{value: r, whence: UP, pos: p}
|
||||
}
|
||||
|
||||
case LF:
|
||||
x, y := toXY(m.n.pos, m.w)
|
||||
if x == 0 {
|
||||
|
@ -267,7 +257,6 @@ func (m *Path) peek(d int8) *node {
|
|||
if any(r, 'F', '-', 'L', 'S') {
|
||||
return &node{value: r, whence: RT, pos: p}
|
||||
}
|
||||
|
||||
case RT:
|
||||
x, y := toXY(m.n.pos, m.w)
|
||||
if x == m.w {
|
||||
|
@ -278,7 +267,6 @@ func (m *Path) peek(d int8) *node {
|
|||
if any(r, '7', '-', 'J', 'S') {
|
||||
return &node{value: r, whence: LF, pos: p}
|
||||
}
|
||||
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
10
day11/example.txt
Normal file
10
day11/example.txt
Normal file
|
@ -0,0 +1,10 @@
|
|||
...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....
|
140
day11/input.txt
Normal file
140
day11/input.txt
Normal file
|
@ -0,0 +1,140 @@
|
|||
..............................#.........................#.......................#..............................#.........................#..
|
||||
....#.....#...................................#.............................................................................................
|
||||
.....................................#..................................#...................................................................
|
||||
...................................................#....................................................................#...................
|
||||
...............................................................#..................#...............................#.........................
|
||||
...............#.......................................#...................................#.....#.......#.........................#........
|
||||
............................................................................................................................................
|
||||
............................................................................#...............................................................
|
||||
.......#.......................#....................#.......................................................................................
|
||||
........................#..................#....................................................................#...........................
|
||||
..#.......................................................#.........#....................#....................................#.............
|
||||
..............#...........................................................#..........................................................#......
|
||||
......................................#...........................................#..........................#..............................
|
||||
.....................................................#.........#..........................................................................#.
|
||||
#.......#....................................#.................................................#............................................
|
||||
..............................#.......................................#..............#....................#..........#......................
|
||||
....#...................................#...................................................................................................
|
||||
....................................................................................................#.......................................
|
||||
.....................#...........#...............................................#..................................................#.......
|
||||
...............................................#.........#..................................................#..................#............
|
||||
..........................................................................#...............#........................#........................
|
||||
.................#.......................................................................................................#..................
|
||||
......................................................................................#..................#..............................#...
|
||||
.............#...................................................................................#..........................................
|
||||
#...........................#..........#....................................................................................................
|
||||
.........#........................................................................#...............................#.........................
|
||||
.....................#.........................#.....................................................#....................#......#..........
|
||||
.....................................................................#......................................................................
|
||||
................................#.....................................................................................................#.....
|
||||
...............#..........................................#.................#................#..............................................
|
||||
....................................#...........................#...........................................#...............................
|
||||
.......#...................#................#.......................................#..............................#......................#.
|
||||
......................#.................................................#................................................#..................
|
||||
....................................................#......................................#............#...................................
|
||||
.............#........................#..........................................................#.............#............................
|
||||
...................#..............................................................#.........................................................
|
||||
.........................................................#..................#..........#....................................................
|
||||
........................#.....................#..............................................#.........................................#....
|
||||
.................................................................#.........................................#...................#............
|
||||
...................................................#........#.....................................#......................#..................
|
||||
.........#....................#.......#................................................................#............#.......................
|
||||
#.............................................................................#.....................................................#.......
|
||||
..................#.......#.................................................................................................................
|
||||
.............#........................................................#........................#................#..........#..............#.
|
||||
.....................................................#......................................................................................
|
||||
.......#...............#.................#......................#................#..........................................................
|
||||
...................................#.....................................................#............................#.....................
|
||||
............................................................................................................................................
|
||||
...............................#........................................#.........................#.........................................
|
||||
.....#.........#...............................#...................#.....................................................................#..
|
||||
............................................................................................................................................
|
||||
..........#......................................................................#..........................................................
|
||||
.........................................#.............................................#......#...................#...................#.....
|
||||
........................#.....#........................................................................#....................................
|
||||
...................................................#.....#...................#..............................................................
|
||||
....................................................................#...............#....................................#........#.........
|
||||
...........................#..............................................................#.................................................
|
||||
...#........................................#.........#.......................................................#..............#..............
|
||||
..........#....................................................#................#...........................................................
|
||||
..................................#..................................................................................#...............#......
|
||||
.................#..........................................................................................................................
|
||||
............................................................................................................................................
|
||||
............................#.............#................................#.........................#.....................#................
|
||||
.........#.........................................#............#.........................#............................................#....
|
||||
....#................................................................#.........................#..............#.............................
|
||||
...................#......................................#.................................................................................
|
||||
..............................#......#..............................................#..............#................#.......................
|
||||
.............................................................................#..............................................................
|
||||
.......#.........................................................................................................................#..........
|
||||
..............#............#....................#...................#............#.......#.................................#................
|
||||
................................#......................#................................................#.................................#.
|
||||
............................................................................................................................................
|
||||
.#......................#......................................#...............................................#............................
|
||||
........................................................................#............................#......................................
|
||||
..................................................#..........................#..........................................#.......#...........
|
||||
.........................................#..........................................#....................#..............................#...
|
||||
......#...............#.................................#...................................................................................
|
||||
....................................#.......................................................................................................
|
||||
...............................................................#................#........#.........................#..........#.............
|
||||
..#........#.....#..........#...................#...................................................#.......................................
|
||||
.......................................#...........................#...........................................#............................
|
||||
.............................................................................#..............................................................
|
||||
.......................#..................................#............#...............#.......#.....................................#......
|
||||
............................................................................................................................................
|
||||
............#.....#................................#...........#...................................................#............#...........
|
||||
...........................................#..............................................#.................................................
|
||||
..................................#..............................................#.....................#....................................
|
||||
..................................................................#.........................................................................
|
||||
...#..........................#............................................#................................................................
|
||||
.......................................................#..........................................#........#........#.......................
|
||||
.......................................#.................................................................................#......#...........
|
||||
.................................................#..........#.........#.......................#.............................................
|
||||
............................................................................................................................................
|
||||
....#...........#........................................................................................#.......#...........#..............
|
||||
......................#...........#.......#....................#..............#.....#.......................................................
|
||||
.........#...............................................................................#..................................................
|
||||
..................................................#.........................................................................................
|
||||
...................#......................................#...........................................#...........................#......#..
|
||||
.............#..........#.....................#....................#........................................................................
|
||||
...............................................................................#.....#.....#.................#......#.......................
|
||||
...#.........................#...................................................................#........................#.................
|
||||
............................................................................................................................................
|
||||
.......#.........#..........................................#...............................................................................
|
||||
.................................#..............................................................................................#...........
|
||||
........................................................................#..............#.......#..................#........................#
|
||||
.#...................................#......#......#........................................................................................
|
||||
............................................................................................................................................
|
||||
.............#................#............................................................#..............#.................................
|
||||
......#.....................................................#.......................#................#...............................#......
|
||||
...................#..............................................#.......................................................#.................
|
||||
....................................#.....................................#.................................................................
|
||||
........................................................................................................#.......#...........................
|
||||
....#.....................................#...............#...................#...............#.........................................#...
|
||||
.....................................................................................#......................................................
|
||||
....................................................#...........#......................................................#............#.......
|
||||
........................#...................................................................................#...............................
|
||||
............................................................................#.....#.........#......................#........................
|
||||
...#.....#.....#.......................#....................................................................................................
|
||||
............................................................................................................................................
|
||||
......................................................................#.....................................................................
|
||||
......................................................................................#............#..........................#.............
|
||||
.....#.............#.........................................................#................#.............................................
|
||||
..............................#..........#............#.....#...........................................................#.............#.....
|
||||
........................................................................#................#..................................................
|
||||
..................................................................................#.........................................................
|
||||
......................#.............#....................#........................................................#.........................
|
||||
.................#................................#.............#.............#.............................................................
|
||||
............................................................................................................................................
|
||||
...#..........................#.............#....................................................#.......#...............#.........#........
|
||||
........#...........#.................#..................................................................................................#..
|
||||
..............#.................................#.....#..........................................................#..........................
|
||||
...........................................................#......#.........................................................................
|
||||
............................#..................................................#.....................................#......................
|
||||
...................................................#.......................................#................................................
|
||||
.#................#................#...............................................#...........................................#.....#......
|
||||
.............#....................................................................................................#.........................
|
||||
.........................#...........................................#.....#......................#..........#..............................
|
||||
........................................#...................#...........................................#...................................
|
||||
...#......#............................................................................#....................................................
|
||||
...............................................#.......................................................................#....................
|
214
day11/main.go
Normal file
214
day11/main.go
Normal file
|
@ -0,0 +1,214 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code-2023"
|
||||
)
|
||||
|
||||
// var log = aoc.Log
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
valuePT1 int
|
||||
valuePT2 int
|
||||
}
|
||||
|
||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
m := NewMap()
|
||||
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
m.readLine(text)
|
||||
}
|
||||
// solution9 := m.expand(9).sumPaths()
|
||||
// fmt.Println(solution9)
|
||||
|
||||
// solution99 := m.expand(99).sumPaths()
|
||||
// fmt.Println(solution99)
|
||||
|
||||
return &result{
|
||||
valuePT1: m.expand(1).sumPaths(),
|
||||
valuePT2: m.expand(999_999).sumPaths(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
type Map struct {
|
||||
rows int
|
||||
cols int
|
||||
|
||||
emptyRows map[int]bool
|
||||
emptyCols map[int]bool
|
||||
|
||||
*aoc.List[rune]
|
||||
}
|
||||
|
||||
func NewMap() *Map {
|
||||
return &Map{
|
||||
emptyRows: make(map[int]bool),
|
||||
emptyCols: make(map[int]bool),
|
||||
List: aoc.NewList[rune](nil),
|
||||
}
|
||||
}
|
||||
func (m *Map) String() string {
|
||||
buf := &strings.Builder{}
|
||||
fmt.Fprintf(buf, "Map size %d x %d\n", m.rows, m.cols)
|
||||
fmt.Fprintln(buf, "empty rows:", all(m.emptyRows))
|
||||
fmt.Fprintln(buf, "empty cols:", all(m.emptyCols))
|
||||
|
||||
n := m.Head()
|
||||
for n != nil {
|
||||
fmt.Fprintln(buf, toXY(n.Position(), m.cols), n.String())
|
||||
n = n.Next()
|
||||
}
|
||||
|
||||
for row:=0; row<m.rows; row++ {
|
||||
for col:=0; col<m.cols; col++ {
|
||||
if n := m.getRC(row, col); n != nil {
|
||||
buf.WriteRune('#')
|
||||
} else {
|
||||
buf.WriteRune('.')
|
||||
}
|
||||
}
|
||||
buf.WriteRune('\n')
|
||||
}
|
||||
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
func (m *Map) readLine(text string) {
|
||||
if m.cols == 0 {
|
||||
m.cols = len(text)
|
||||
}
|
||||
|
||||
emptyRow, ok := m.emptyRows[m.rows]
|
||||
if !ok {
|
||||
emptyRow = true
|
||||
}
|
||||
|
||||
row := []rune(text)
|
||||
for col, r := range row {
|
||||
emptyCol, ok := m.emptyCols[col]
|
||||
if !ok {
|
||||
emptyCol = true
|
||||
}
|
||||
|
||||
if r == '#' {
|
||||
m.Add(r, fromXY(col, m.rows, m.cols))
|
||||
emptyCol = false
|
||||
emptyRow = false
|
||||
}
|
||||
|
||||
m.emptyRows[m.rows] = emptyRow
|
||||
m.emptyCols[col] = emptyCol
|
||||
}
|
||||
|
||||
m.rows++
|
||||
}
|
||||
func (m *Map) getRC(row, col int) *aoc.Node[rune] {
|
||||
return m.List.Get(fromXY(col, row, m.cols))
|
||||
}
|
||||
func (m *Map) expand(rate int) *Map {
|
||||
newM := NewMap()
|
||||
|
||||
newM.rows = m.rows + rate*len(all(m.emptyRows))
|
||||
newM.cols = m.cols + rate*len(all(m.emptyCols))
|
||||
|
||||
offsetC := 0
|
||||
for col := 0; col < m.cols; col++ {
|
||||
if empty, ok := m.emptyCols[col]; ok && empty {
|
||||
for r := 0; r <= rate; r++ {
|
||||
newM.emptyCols[offsetC+col+r] = true
|
||||
}
|
||||
offsetC += rate
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
offsetR := 0
|
||||
for row := 0; row < m.rows; row++ {
|
||||
if empty, ok := m.emptyRows[row]; ok && empty {
|
||||
for r := 0; r <= rate; r++ {
|
||||
newM.emptyRows[offsetR+row+r] = true
|
||||
}
|
||||
offsetR += rate
|
||||
continue
|
||||
}
|
||||
|
||||
offsetC := 0
|
||||
for col := 0; col < m.cols; col++ {
|
||||
if empty, ok := m.emptyCols[col]; ok && empty {
|
||||
offsetC += rate
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
if n := m.getRC(row, col); n!= nil {
|
||||
newM.Add('#', fromXY(offsetC+col, offsetR+row, newM.cols))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return newM
|
||||
}
|
||||
func(m *Map) sumPaths() int {
|
||||
var positions []int
|
||||
|
||||
n := m.Head()
|
||||
for n != nil {
|
||||
positions = append(positions, n.Position())
|
||||
n = n.Next()
|
||||
}
|
||||
|
||||
var paths []int
|
||||
|
||||
for i := 0; i < len(positions); i++ {
|
||||
p:= positions[i]
|
||||
pXY := toXY(p, m.cols)
|
||||
|
||||
for j := i; j < len(positions); j++ {
|
||||
c := positions[j]
|
||||
if c == p { continue }
|
||||
|
||||
cXY := toXY(c, m.cols)
|
||||
|
||||
path := abs(cXY[0]-pXY[0])+abs(cXY[1]-pXY[1])
|
||||
paths = append(paths, path)
|
||||
}
|
||||
|
||||
}
|
||||
return sum(paths...)
|
||||
}
|
||||
|
||||
func all(m map[int]bool) []int {
|
||||
lis := make([]int, 0, len(m))
|
||||
for k, v := range m {
|
||||
if v {
|
||||
lis = append(lis, k)
|
||||
}
|
||||
}
|
||||
sort.Ints(lis)
|
||||
return lis
|
||||
}
|
||||
func fromXY(x, y, w int) int { return y*w + x }
|
||||
func toXY(i, w int) []int { return []int{i % w, i / w} }
|
||||
func abs(i int) int {
|
||||
if i < 0 {
|
||||
return -i
|
||||
}
|
||||
return i
|
||||
}
|
||||
func sum(arr ...int) int {
|
||||
acc :=0
|
||||
for _, a := range arr {
|
||||
acc += a
|
||||
}
|
||||
return acc
|
||||
}
|
41
day11/main_test.go
Normal file
41
day11/main_test.go
Normal file
|
@ -0,0 +1,41 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 374)
|
||||
is.Equal(result.valuePT2, 82000210)
|
||||
}
|
||||
|
||||
func TestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 9627977)
|
||||
is.Equal(result.valuePT2, 644248339497)
|
||||
}
|
10
template/example.txt
Normal file
10
template/example.txt
Normal file
|
@ -0,0 +1,10 @@
|
|||
...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....
|
0
template/input.txt
Normal file
0
template/input.txt
Normal file
30
template/main.go
Normal file
30
template/main.go
Normal file
|
@ -0,0 +1,30 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
|
||||
aoc "go.sour.is/advent-of-code-2023"
|
||||
)
|
||||
|
||||
// var log = aoc.Log
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
valuePT1 int
|
||||
valuePT2 int
|
||||
}
|
||||
|
||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
|
||||
for scan.Scan() {
|
||||
_ = scan.Text()
|
||||
|
||||
}
|
||||
|
||||
return &result{}, nil
|
||||
}
|
41
template/main_test.go
Normal file
41
template/main_test.go
Normal file
|
@ -0,0 +1,41 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 0)
|
||||
is.Equal(result.valuePT2, 0)
|
||||
}
|
||||
|
||||
func TestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 0)
|
||||
is.Equal(result.valuePT2, 0)
|
||||
}
|
97
tools.go
97
tools.go
|
@ -96,3 +96,100 @@ func ReadStringToInts(fields []string) []int {
|
|||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
type Node[T any] struct {
|
||||
value T
|
||||
pos int
|
||||
left *Node[T]
|
||||
}
|
||||
|
||||
func (n *Node[T]) add(a *Node[T]) *Node[T] {
|
||||
if a == nil {
|
||||
return n
|
||||
}
|
||||
|
||||
if n == nil {
|
||||
return a
|
||||
}
|
||||
|
||||
n.left = a
|
||||
return a
|
||||
}
|
||||
|
||||
func (n *Node[T]) Value() (value T, ok bool) {
|
||||
if n == nil {
|
||||
return
|
||||
}
|
||||
return n.value, true
|
||||
}
|
||||
|
||||
func (n *Node[T]) Position() int {
|
||||
if n == nil {
|
||||
return -1
|
||||
}
|
||||
return n.pos
|
||||
}
|
||||
func (n *Node[T]) SetPosition(i int) {
|
||||
if n == nil {
|
||||
return
|
||||
}
|
||||
n.pos = i
|
||||
}
|
||||
func (n *Node[T]) Next() *Node[T] {
|
||||
if n == nil {
|
||||
return nil
|
||||
}
|
||||
return n.left
|
||||
}
|
||||
|
||||
func (n *Node[T]) String() string {
|
||||
if n == nil {
|
||||
return "EOL"
|
||||
}
|
||||
return fmt.Sprintf("node %v", n.value)
|
||||
}
|
||||
|
||||
type List[T any] struct {
|
||||
head *Node[T]
|
||||
n *Node[T]
|
||||
p map[int]*Node[T]
|
||||
}
|
||||
|
||||
func NewList[T any](a *Node[T]) *List[T] {
|
||||
lis := &List[T]{
|
||||
head: a,
|
||||
n: a,
|
||||
p: make(map[int]*Node[T]),
|
||||
}
|
||||
lis.add(a)
|
||||
|
||||
return lis
|
||||
}
|
||||
func (l *List[T]) Add(value T, pos int) {
|
||||
a := &Node[T]{value: value, pos: pos}
|
||||
l.add(a)
|
||||
}
|
||||
func (l *List[T]) add(a *Node[T]) {
|
||||
if l.head == nil {
|
||||
l.head = a
|
||||
}
|
||||
if a == nil {
|
||||
return
|
||||
}
|
||||
|
||||
l.n = l.n.add(a)
|
||||
l.p[a.pos] = a
|
||||
}
|
||||
func (l *List[T]) Get(pos int) *Node[T] {
|
||||
return l.p[pos]
|
||||
}
|
||||
func(l *List[T]) GetN(pos ...int) []*Node[T] {
|
||||
lis := make([]*Node[T], len(pos))
|
||||
for i, p := range pos {
|
||||
lis[i] = l.p[p]
|
||||
}
|
||||
return lis
|
||||
}
|
||||
func (l *List[T]) Head() *Node[T] {
|
||||
return l.head
|
||||
}
|
Loading…
Reference in New Issue
Block a user