WIP
This commit is contained in:
parent
fccc444b53
commit
a330f6baa2
|
|
@ -1,4 +1,4 @@
|
|||
package day1_calorie_counting
|
||||
package day1
|
||||
|
||||
import (
|
||||
"sort"
|
||||
|
|
@ -27,7 +27,7 @@ func (s *Solver) ParseInput(input []string) {
|
|||
s.elves = elves
|
||||
}
|
||||
|
||||
func (s *Solver) SolvePart1() int {
|
||||
func (s *Solver) SolvePart1() any {
|
||||
mostCalories := 0
|
||||
for _, calories := range s.elves {
|
||||
sum := 0
|
||||
|
|
@ -41,7 +41,7 @@ func (s *Solver) SolvePart1() int {
|
|||
return mostCalories
|
||||
}
|
||||
|
||||
func (s *Solver) SolvePart2() int {
|
||||
func (s *Solver) SolvePart2() any {
|
||||
caloriesPerElf := make([]int, len(s.elves))
|
||||
for i, calories := range s.elves {
|
||||
sum := 0
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
package day1_calorie_counting
|
||||
|
||||
import (
|
||||
"snikolov.me/aoc2022/testutils"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestCorrectSolutions(t *testing.T) {
|
||||
solver := &Solver{}
|
||||
testutils.TestHelper(t, solver, 1, true, 24000, 45000)
|
||||
testutils.TestHelper(t, solver, 1, false, 66306, 195292)
|
||||
}
|
||||
|
|
@ -0,0 +1,128 @@
|
|||
package day2
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Solver struct {
|
||||
rounds []*Round
|
||||
}
|
||||
|
||||
type ActionType int
|
||||
|
||||
const (
|
||||
Rock ActionType = iota
|
||||
Paper
|
||||
Scissors
|
||||
)
|
||||
|
||||
func (a ActionType) Score() int {
|
||||
m := map[ActionType]int{Rock: 1, Paper: 2, Scissors: 3}
|
||||
return m[a]
|
||||
}
|
||||
|
||||
func NewAction(s string) ActionType {
|
||||
switch s {
|
||||
case "A", "X":
|
||||
return Rock
|
||||
case "B", "Y":
|
||||
return Paper
|
||||
case "C", "Z":
|
||||
return Scissors
|
||||
}
|
||||
panic(fmt.Sprintf("Unhandled action type: %s", s))
|
||||
}
|
||||
|
||||
type Result int
|
||||
|
||||
const (
|
||||
Win Result = iota
|
||||
Loss
|
||||
Draw
|
||||
)
|
||||
|
||||
func NewDesiredResult(s string) Result {
|
||||
return map[string]Result{"X": Loss, "Y": Draw, "Z": Win}[s]
|
||||
}
|
||||
|
||||
func (r Result) Score() int {
|
||||
return map[Result]int{Win: 6, Draw: 3, Loss: 0}[r]
|
||||
}
|
||||
|
||||
type Round struct {
|
||||
OpponentAction, OwnAction ActionType
|
||||
DesiredResult Result
|
||||
}
|
||||
|
||||
func (r Round) Score() int {
|
||||
var result Result
|
||||
switch {
|
||||
case r.OwnAction == r.OpponentAction:
|
||||
result = Draw
|
||||
case r.OwnAction == Rock && r.OpponentAction == Scissors:
|
||||
result = Win
|
||||
case r.OwnAction == Paper && r.OpponentAction == Rock:
|
||||
result = Win
|
||||
case r.OwnAction == Scissors && r.OpponentAction == Paper:
|
||||
result = Win
|
||||
case r.OwnAction == Rock && r.OpponentAction == Paper:
|
||||
result = Loss
|
||||
case r.OwnAction == Paper && r.OpponentAction == Scissors:
|
||||
result = Loss
|
||||
case r.OwnAction == Scissors && r.OpponentAction == Rock:
|
||||
result = Loss
|
||||
}
|
||||
return result.Score() + r.OwnAction.Score()
|
||||
}
|
||||
|
||||
func (s *Solver) ParseInput(input []string) {
|
||||
s.rounds = make([]*Round, len(input))
|
||||
|
||||
for i, line := range input {
|
||||
split := strings.Split(line, " ")
|
||||
s.rounds[i] = &Round{
|
||||
OpponentAction: NewAction(split[0]),
|
||||
OwnAction: NewAction(split[1]),
|
||||
DesiredResult: NewDesiredResult(split[1]),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Solver) SolvePart1() any {
|
||||
return s.score()
|
||||
}
|
||||
|
||||
func (s *Solver) SolvePart2() any {
|
||||
for _, r := range s.rounds {
|
||||
switch {
|
||||
case r.DesiredResult == Draw:
|
||||
r.OwnAction = r.OpponentAction
|
||||
|
||||
case r.OpponentAction == Rock && r.DesiredResult == Win:
|
||||
r.OwnAction = Paper
|
||||
case r.OpponentAction == Rock && r.DesiredResult == Loss:
|
||||
r.OwnAction = Scissors
|
||||
|
||||
case r.OpponentAction == Paper && r.DesiredResult == Win:
|
||||
r.OwnAction = Scissors
|
||||
case r.OpponentAction == Paper && r.DesiredResult == Loss:
|
||||
r.OwnAction = Rock
|
||||
|
||||
case r.OpponentAction == Scissors && r.DesiredResult == Win:
|
||||
r.OwnAction = Rock
|
||||
case r.OpponentAction == Scissors && r.DesiredResult == Loss:
|
||||
r.OwnAction = Paper
|
||||
}
|
||||
}
|
||||
|
||||
return s.score()
|
||||
}
|
||||
|
||||
func (s *Solver) score() int {
|
||||
score := 0
|
||||
for _, s := range s.rounds {
|
||||
score += s.Score()
|
||||
}
|
||||
return score
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,3 @@
|
|||
A Y
|
||||
B X
|
||||
C Z
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
package day3
|
||||
|
||||
type Solver struct {
|
||||
rucksacks []Rucksack
|
||||
|
||||
groups []ElfSet
|
||||
}
|
||||
|
||||
type Rucksack struct {
|
||||
compartment1, compartment2 []byte
|
||||
}
|
||||
|
||||
type ElfSet struct {
|
||||
elfItems [3]map[byte]bool
|
||||
}
|
||||
|
||||
func (s *Solver) ParseInput(input []string) {
|
||||
s.rucksacks = make([]Rucksack, len(input))
|
||||
|
||||
for i, line := range input {
|
||||
s.rucksacks[i] = Rucksack{
|
||||
compartment1: []byte(line[:len(line)/2]),
|
||||
compartment2: []byte(line[len(line)/2:]),
|
||||
}
|
||||
}
|
||||
// fmt.Printf("%v\n", s.rucksacks)
|
||||
|
||||
var elfSet ElfSet
|
||||
for i, line := range input {
|
||||
elfIndex := i % len(elfSet.elfItems)
|
||||
if elfIndex == 0 {
|
||||
elfSet = ElfSet{}
|
||||
}
|
||||
if elfSet.elfItems[elfIndex] == nil {
|
||||
elfSet.elfItems[elfIndex] = make(map[byte]bool, 0)
|
||||
}
|
||||
for _, b := range []byte(line) {
|
||||
elfSet.elfItems[elfIndex][b] = true
|
||||
}
|
||||
if i%3 == 2 {
|
||||
s.groups = append(s.groups, elfSet)
|
||||
}
|
||||
}
|
||||
// fmt.Printf("%+v\n", s.groups)
|
||||
}
|
||||
|
||||
func (s *Solver) SolvePart1() any {
|
||||
var total int
|
||||
|
||||
for _, r := range s.rucksacks {
|
||||
m := make(map[byte]bool, 0)
|
||||
|
||||
for _, b := range r.compartment1 {
|
||||
m[b] = true
|
||||
}
|
||||
for _, b := range r.compartment2 {
|
||||
if _, ok := m[b]; ok {
|
||||
total += getValue(b)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return total
|
||||
}
|
||||
func getValue(b byte) int {
|
||||
if b >= 'a' && b <= 'z' {
|
||||
return int(b - 'a' + 1)
|
||||
} else {
|
||||
return int(b - 'A' + 27)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Solver) SolvePart2() any {
|
||||
var total int
|
||||
for _, g := range s.groups {
|
||||
for item := range g.elfItems[0] {
|
||||
if _, ok := g.elfItems[1][item]; !ok {
|
||||
continue
|
||||
}
|
||||
if _, ok := g.elfItems[2][item]; !ok {
|
||||
continue
|
||||
}
|
||||
total += getValue(item)
|
||||
// fmt.Println(string(item))
|
||||
break
|
||||
}
|
||||
}
|
||||
return total
|
||||
}
|
||||
|
|
@ -0,0 +1,300 @@
|
|||
rZTmmqbBrmBvSTCwDDtlwjqnqnnq
|
||||
dhgQHhPfVgPlPdFzFzFgdptCQjtnwCntjsCppRtRND
|
||||
lVdVHWGPvTvmrrBW
|
||||
GmJBqwPLhfPBfJfvfffFmwtjDprpzVpVMpcDrVjzzcjpML
|
||||
HgWnRnWggWbNTWbCnPCgCnsjcVDrjMrdzjprMMrzcHDrDr
|
||||
SsSsRsCSPSPBvtJt
|
||||
BLtwwTBmLSTlMsjdZmFZZP
|
||||
hzbzNNrbqQbhQDDrhCprbhDCpvFJJPjMZJZgjjPdlvZjZvvl
|
||||
fbNrqrVDfdfGzqcHTBTVHwcTSHcH
|
||||
lcDdcrCDCRHJHBllPR
|
||||
tNGQwQhtzLhJBRHbPMBMjGBj
|
||||
NZZZpVqqFqpQpCTZcTnrTrnJJC
|
||||
BSNLNzbLLsMGSDLSsSBdVwTVQFdTVTtqgTwNVN
|
||||
lRjplvmWpgrqwlVFFr
|
||||
mfRCpWwvChZCBGSzZG
|
||||
mDSlGBGwhGhmLHCQnMMVMLMVFJ
|
||||
WTNfjNgzNdgNWfsgsWWcWgfrVrnnFHQbrHvFrVVdHMrnCr
|
||||
FpcggcNttFfqSqDtwBDmhZ
|
||||
HzNsHbGsddQHPrsNPNsTnNjMbjVbcVlMLjMjLtlttjjv
|
||||
CQfBZDQfWJlJlLJhvMMv
|
||||
WwwmWRfFwmCmwwzQzzzrdGNHFzNT
|
||||
JDvhJfdZZTdCTnmmTH
|
||||
qbPcsqbjcbstjbgnvqpRCBTCmgCm
|
||||
WPbPtbtVjWQsPvSVzSZLMDMVfLZJ
|
||||
NjMbTZPjHjbdBqNBqFqDFz
|
||||
LCcLSRLStRrLHShCtRfcpCtpQVqqDFDFqDdFpBddDQQFdB
|
||||
htCGtrSJLfScvwJvggbgwHgW
|
||||
hmPTmfFPwBFHhsBstJldltstVDSVrrpD
|
||||
CjzNGQjnRMMvMngMLGRVRBltVrVppqptVSqlVJ
|
||||
cLBjgjGGGCgvLLnhZThwcfTHPTcPmw
|
||||
SzwsVwcGsTVTmzmgjsLsmWWnGJZbbJbZtZqnDJntGq
|
||||
NHQvpvNRflHvQpPMlbtbZqbFDnWlqVrD
|
||||
dpPQVdpHMPRBpfCszCmsLsmcjdSg
|
||||
wZZGGrnGVvZGPTcTnGvVCVpmpJSgCJtNpWgWVgmC
|
||||
MdMRqqzMLDtQDQmzJg
|
||||
HBMdRLLBLBdbbBLHlRjLrHPPnTvGtTcwhGrhZtvh
|
||||
fcbcPWmvPvftWbDNVJJDrrhsJs
|
||||
wQvzqvpQQzHQwTTNVhrBGJTJ
|
||||
ZCMvzHMRCqggmWmndPngnn
|
||||
VjvVJvjdgjJNTVgdpjRttsTHSsbFqqRHSbBR
|
||||
nrfZLZCZnLnCCncZCrCQLSsFHHqtsSsSSBcHGtHsFh
|
||||
nQlLMrmwZtmwCMmMwZmtLLggvNvVjjNJglpDgzNdJJvN
|
||||
bCjQbTzCBlCvpqPTbZphtWWRhtddmDRRdRhPhh
|
||||
sLJsnJFcsnJcMMjNnfsjDDcDWcRgggtmwVRtVmhh
|
||||
sMsJLFfGrfFnrSNJjHzlTCCCQzpbBpzQzSBQ
|
||||
gWRzWwcrzWcgZHRzHmcpTLTgTLhQDSgFFLTpLD
|
||||
bBJfvJCssGJNjvPmbbmbLTQFTLQp
|
||||
jsCqBJsVsGBqCfNcWMmrRWlWqmwMcz
|
||||
cLjncLlQbllRhlnQTRblwtndsgpWdqgmnWNWmGpvWzdgzz
|
||||
DrFJBFFHZrrDDVJSNmpsWdzVpmzdqqzpzq
|
||||
FJPPHfDJPDPCZSZHFSDPCJtwRjClttNbwwjQLjcRhLlb
|
||||
tZZRtWCRtsspLRqSVqbPDfVvlfFDqV
|
||||
dgvMcccHHDHNrrbf
|
||||
wGwdgBBhhcBhCvTZvtCppp
|
||||
LRRNFfffFzzcrGRffNfcGNzJnrnhjdDMHHnrWdlmhddHnjrh
|
||||
BvStvwSqqCZVqtvpZBWMMhhFhWdmdMWMhm
|
||||
TTvqSbwqTPpZPzQsQRffsFGQ
|
||||
phZZpGbGVmqDbPTF
|
||||
tlNwlncnzwddcrGPlFmjlTTlfmjD
|
||||
zntnczBMdvBnnvnthHHZMJhCLpZSSRGQ
|
||||
ZwLLnbCDfClLZzZwDzCCZDbmNNdNtdBVNTNdNWMFtTFzTVFd
|
||||
vlPlJRgRhQcPQQjpcRQJBBthNdtddtthtFMNWqMq
|
||||
ppJgsgrJpJgslgrgRSPDDDLZLnHbrLHbwLbHfb
|
||||
sBrNSTsrgDDMSjpPWVVqhppbsbtz
|
||||
HTJfHwFwRFCnCPbzbzVzbVWq
|
||||
QTcvvcmHnwGvvnRNrLglNNLNDZcZZL
|
||||
qNNHSSFgbhLHHNfBwlJjQwwBcwQN
|
||||
WZnVrZrMpVvZmVjwBvzBQRflJJcz
|
||||
pWVGpWnmrmWjDmtnWVVZmtPFPCSbPgqgLSqtHCgTHgHH
|
||||
QcQHqhpqQGbvbqHNqfhsQfHczZMlBZdZBlSFFZpZlFMDRFBM
|
||||
TPVgmmrjtWjwrtwgLmTwLPMDZlMDMnSzzZgglzldBlgZ
|
||||
PVtPrmPddrPCVTNqcHvQbHsCQNGh
|
||||
PnsrrsdsSrnCvJCJBVwNqcHPRwNLWHwV
|
||||
pjTQlgGWMjZBbRHHHZcbVV
|
||||
htpThhlMjFdWrtDrfrsn
|
||||
GZjHFHgjpbZQbgpHdgpjjBMTQsMJWzWRcsLMCRWzcz
|
||||
ltwPlhwPSlwmmDhfrMwlzLLTSWJRssCBJWzsccCc
|
||||
nfrnrntPnDmDDnPrwmvlVGdGFFNqjVHNjbGFjgFNMp
|
||||
BjHBvHHqnBHrnnvclqjqplRRRQSfRpJQwPswStJsJQSt
|
||||
wVFGWdVZVhWVDzVdZDSfRJtLLZJPtJRJSfJP
|
||||
TDhCdWmNwzTWVmDBvMlrHmcqvHBMng
|
||||
HpDpHvjvCjDHZHVWJSCrnrJgnNwr
|
||||
rtQhssBTlRMblLBTtNnJFVSnnwVVwVWNnb
|
||||
BhrchlmBBszfjmzzffDf
|
||||
MMcJtJmVmnppVmSSpbCRvDvDRLDqvBRRCCMC
|
||||
GWNNGGGfrjlHHHNZZZLNZt
|
||||
jGrgfFjQrdhlhhgQFrVpnpVgmStPSJSPzJPP
|
||||
wvJNJNtfGGphQQjFdGWj
|
||||
DzSLzPczBrqzPrLMjSpjWMlSpQgwWd
|
||||
zPHRqBLqqHzPcBDPsznZCwJsnfVnmZmtVntC
|
||||
ttVWftWgGlWGfgtLtNddrNDdNvsLrdLdNm
|
||||
JCcFSnbBqbRbSBCBqTFSQCmwMjRsrDRNNjDddssNfDrr
|
||||
cBHBTTQFJJCCJQcCbCcqnSftHtZhHzWghPzVZpPglVVW
|
||||
ZfSGFQdbrHQSbFFqlwLjCjLPlqwj
|
||||
gmWJgNppJrgMcchzhmzNczqRsVRCjVRVsWjVRLRqqCVq
|
||||
zDTchzJJJhgJJmBJhBTJBggtQHGrdbfnHHDHGvftStvHdf
|
||||
LdRCgCDvCbCdnLnCvpGtQlhffNlhtSlQNtQlhb
|
||||
BTJTVFJrqMVmBmdTMFNHNVQQQSHHffQhNlHQ
|
||||
MqcBmqPdFBdjPPBTJqpZDDpgGDpgWCcvGCLp
|
||||
gzFbjgqljdqblbbddBZTMvTBdMsVvm
|
||||
SHpGWBCtSPhNpPSSSpwSNGNSTLTVVsZsLrvRrRvVLLRCvTvm
|
||||
NwhHwPhDtSGpbDcBQqczbBBj
|
||||
BhzLDSflLlTTRfqGpJZZQsqfNF
|
||||
ndCmMHHRPbCjCwVPVmjtwdMVsNGJQpZQsJqJqNJdFqJZFrNq
|
||||
CtwbRcRbttHBSgTcgShvTz
|
||||
pffmzCtppTSWtzdhbJdZvvHVnvdHVV
|
||||
WMlLWRGGQWMGrQJcVbvbHnvQHbhv
|
||||
LFwRFDlqFPWfTszp
|
||||
sbfFTbbbzJzfbJZSbnsnfTchGWWJGlhWvvBGltgVttgWgg
|
||||
LLLDpHwMDLmNjmChVWWBwthrGQvgQl
|
||||
dLMLDMLBNddPHmpMPfqPcPzcsSbbccqb
|
||||
MNGMPvHTnfTfgSFrSMMgwFMw
|
||||
QQRpjBsqhRQsldpqRQQQmjZFtrrzSFFccvSWwwjwFWZS
|
||||
smsBbQlRlmDpDBqpqblpLbLLfTfNVPVVGnTvTLbb
|
||||
gsmFlVCShjVwNNDNgWBNHg
|
||||
dMtQvtQRrtbLMqMnqqsq
|
||||
GQfGQPRtrPddPtvcvcQZRvRpJlVJFTlpZTVJpFJsSCFJjh
|
||||
LFmpcmhNfhhnjStshM
|
||||
qWTCCQrqlQBQcJCqrJdlHDdnRtngRStnPjgDSgSsjM
|
||||
CZWrqTbllrClJZWbVfmmZcvVzmGZmfpv
|
||||
qJLCqjwjjJnFqnDQQfqlQMfMQlMg
|
||||
zmHWPhGGZVGpcCWMsWRRfBBRDs
|
||||
bdpCcGmZdNFTwnSjrd
|
||||
TttqjWvQjZTtzwWtdBCMdBMqdGCBRnhR
|
||||
bpJlcNFVzbcBhCMMCChbMP
|
||||
cJVgrplDcslrlrpFzwTHQsSTWLQtjWvLWj
|
||||
hWlmVhlpcNpScSVtNbjrbGqdHGjgQrdrRdqG
|
||||
LPBDCvFszTCzFzFzBBffHrJrrGHRHsgRjsjrjJqc
|
||||
DTCMMzzvvnDvLvLDTTBTCMFBpWpthShmwmmWmwchptnhwWWt
|
||||
dfHqNQSQQNQBHHZJfJCMCfVcRJCZ
|
||||
GjLrDjgvFrFzjDgPGvLzgmmjCslRZMMCststJMlRcPVTRJJM
|
||||
vjmmvrnzDDLVzrdSWNBQnWwdhHhH
|
||||
jTmMBMNBTVSqNgBTjgNMqMTgWZttCmLfpQQZQWtLCdCGGtWC
|
||||
zzVVbhFcbzstWCZpsftsQZ
|
||||
whwhwPnDhHRhbRVHcSNllvMnNnjMjSBJMl
|
||||
nSvQgHWtZvHlgtvqgqngjSFFFDNSfsbbbjGfcsSr
|
||||
PPVRdNwRLhdLLCCwbscBBfGfbLjjjDbs
|
||||
zVPPhMhMmhhVppRpMNRPhMQnHqZtHZvgQzWgQgvnqnnq
|
||||
JdFHDSShfgDNMhGTBlwGGJqjjJTr
|
||||
PCnWnsvpzPnmLvmsQGRGWrwlWbljwTjFGl
|
||||
PtnLzQCQLfSFctdNhN
|
||||
cTrjrCNrLjTFCTrLCdSVNVlJVSVVGJftNp
|
||||
swQHQDsQGRZGffQV
|
||||
ggffMhhvgswDgDnhhfCcTjrcTjWBWCMmcjjc
|
||||
wGHvHCvWlMLlhGWwvvwlNnRBRdDNDBLDRVVDFdBD
|
||||
MtJJTPTTQNFRNFRfTn
|
||||
crSsmmJjmtgWmMhwWMCw
|
||||
sQQHWGsWcWWrZQQshNtHFNBCNBqHFwHB
|
||||
jSLbMSdfjSjFtFghNtFBMt
|
||||
RSdmtLmSLLzSLdjjdTTbVvsVVsvZcZQzWPWcQrrW
|
||||
PCCTzTgDgzVZZLgcgcdswMMMgs
|
||||
hSrqdqRQSjqtNqcsGWcGLwMGMf
|
||||
tlQJRJSRjpJjZPdpDTdHbzTn
|
||||
pqBGDDtQBDLVhfCtCZVV
|
||||
bTNFcljgbdlFjbldjFdTTcfZqZVsLhgfVLhVhZVHfZwC
|
||||
McJjFbvTWvmRqGRr
|
||||
JRcsJDfgncfHnqSBqGSTGQsTTz
|
||||
vlBlLlpNWpPhVmTQpQSzqbqQ
|
||||
CBPvjFNMlFhCCRtZJZZHfg
|
||||
RFQQTdQQLtThDhfRcHdLfFcHJCWtbbPnJWJPNJbnJsvstvJv
|
||||
ZmMlMlwwMrVzwVqrSqmZrqbplpNWFbWJnvvspWWNslNs
|
||||
gwwmFrgMGgFqGTHRhHjDRTHH
|
||||
dNfQvLdQsvSLsHsLBgNWVggJJCWCDJgnJJ
|
||||
ZTGcflFlFRfhbwhbPcbbbWVWrMVMnDJCCWmVnDJCmF
|
||||
lTfZTpjjZhPhRcqtBtsdSQpqQvtv
|
||||
frfccJzjTBwWwcJwjrwcBVCVTRCGnpsGGSmpVSSpDH
|
||||
hhhvghZvZlZvghPbdtqGpGVCRHGGmsRmpsvGRV
|
||||
MdPCNqdtgZdZgcWMLzcffBcWzM
|
||||
LdsfZNRsRWvvfLSsCpSgCDJbPcCp
|
||||
MqTVtHHThllGMthlBHzcSzGGSFppPgbJDFbF
|
||||
nVHwVlHmlhRWdjjjLvwD
|
||||
whhWFjjzhGmGCrFFFzvtZsLZVStNZWLNpvtv
|
||||
nqPMBdMQBqJnnfqdsSNfpvtZsSNtNpLp
|
||||
HJHnQHqQlhwLlhzmGh
|
||||
nMlmnfHmfjjmflLlLdzJTrsrBLJJLBbBSJrJ
|
||||
pZRpFFDWctFPNtWvbbrTqrszTbqbcBqr
|
||||
RpRGNPPvPFsNvflmdfwMGHhmmH
|
||||
PjPzphfpJFPvFRHDbP
|
||||
QlLlBcvBvnWCWcVCnFTTSnFDNdSRRRHN
|
||||
sVtlVcVtmqjMJphrfvJs
|
||||
dRRHRfrdRHHlCTTprlNCvhVVvhzpQhVvtmntmhtz
|
||||
JMDJBLwQMBDDwZgJnhSzhmWStMvzbbmm
|
||||
PPwJwGqPGQcDcHHjCqRlRCjrCN
|
||||
GgGgbGSGzGbMBBzGDVFbDMRpmcWWTTfcFTchsJdcWJchTsch
|
||||
NCqCttLZrCPQtNrtWqfhWJJqscmTJwsc
|
||||
ZClvLCLmPjnPllPvCLrmnDRjpDzGpMRDRRDBGBgSzb
|
||||
tvwCtDMQvJJPJtvQprjrjrvBjsTZTWTj
|
||||
gFzgldFZSlSbgFlZmGmcFqsppjsLqrBsLBrqqWWjdB
|
||||
FlcbhhNNbmHmcbSSzzggwDDQDwJnVCVHPtMVnnZQ
|
||||
hrCnnrFrCvFHzVFdmmFm
|
||||
GDTBsSfDDBRwfDsQbSdjHHVlqpmpgqWqpH
|
||||
TBDBDBQBwcsPsPGQswPcZvJMrJhnrNhrNNnHJM
|
||||
CztfzfZLBjMqZZWZgT
|
||||
VPcblQhJvtgbvbgb
|
||||
wwFQwVRPRchwcrJcPzfRpzspBfzfnSCzmt
|
||||
FMnmnQnFNdQFRtmFmfNsCsjfpfrHHfVffV
|
||||
DlLqDPwGlbVCdVbddbsr
|
||||
GPDzLhqwLqDMFdFJRWzQzd
|
||||
CSDSrMqnVSCTsPGPZpnPPGvP
|
||||
jhBhhqBQQlhgjthBhlhJpLlwLLPwsswsGZpWPLvP
|
||||
dgJQzgFjzjJFzzdHFzzzJMmNHCrSMSCSNbRqDCMCmR
|
||||
cvSPvzWwzcTbVWSPbppWVjsGjdHdQSlNsQSdNGqsHZ
|
||||
MRmCfmFBfRJfjqrdNMZHZQjQ
|
||||
qgFtChDCFgmCnppPnczPbcLpnL
|
||||
RllsdrhQvcVqmVzQcm
|
||||
gGgnrZZMrFWFpZcccVmHqjVmHHnJ
|
||||
ZrMWTTbbGMpbtgCTTZgZCWCLhwdsLvhhhPhNSldvPwPNfNlR
|
||||
ffMqqznPPMzHfdfcdBJGTMVTGjRmMMTBjr
|
||||
vtDwSwpmDsmQZswWSDhhDQGrjTgJBglRsjTTjVRBVTBl
|
||||
ZthhQStwppSSvbvNDtWwnnbffmPnHPFHqmzFbLFq
|
||||
CcHPmPcTJTqNCPqbqJqLgNJrjWtrftjrrnBnsWtjtBsfTB
|
||||
ZRLwhzwLRlhLpdlpjftBBnBjWsBBvn
|
||||
QhzhlwDdMzwFSwRLMJqqcSmqNPgmqNHNVP
|
||||
WzTWppwcQNppbQrJHhhrJfcdfnsr
|
||||
MDMLlLqjvqSBvVCLGJhnJsrDnnrDdhDffZ
|
||||
BLMCBCBlLlGSJvSPBMLqGJVwwQzPpNRWmTRzmzpWWFmTbQ
|
||||
WpWpWsfcBFjwGgqqtTQrTpgg
|
||||
JLHNPPvLJRZdnNJZHRzGGTzjrtMqMJlQzztt
|
||||
vHHnbDnLnHRCRnvdZdbHLNPfBfBhcffmcSSsDjcVwVBmcS
|
||||
DDZlblRRLQcNpJNhpL
|
||||
VPrdJfBFFBBWBrdvJPCBBdfhqcFhchNQcpNgzqcjphqFjp
|
||||
mWVPfMWWfBMWWwPrWvJHDbZGZmZRtDbsDbSb
|
||||
PDwwBzvRRzPCBPgnrwvvCDsSSccWscFTnSshWnZsSZcF
|
||||
GJtNGHfLbQtQQJQGhhhShgSZWVWJjSFF
|
||||
tmHlfGfMlBzrRDMggz
|
||||
gSBNwDNJglSwlDMtTCsZzStTsSCC
|
||||
hhfGdGcFhrqFmQddrhvvrdGRRtQMTHMCsbZbZtRTsbZsQs
|
||||
mrmrFqqqccdhWjGcnLpBDWgNWpCBlgLW
|
||||
WgmBsqMBnLLGnGnJtFgbbTwHttTwHF
|
||||
cQjcfpVQfCCPSMjCcCPSPjVwbtTlTtwJbTvJJHbzHFFJ
|
||||
PCZDCZffCdpQCdDWrGGsnLqWhnrM
|
||||
gppVszSgMPMPstzNpPMQpnGfDJhfnGLLGnfLfQlLfh
|
||||
rBFcCcrbmbJJJWhbhLVL
|
||||
wqcmRFZqmcvvCZBcRvcVwNsztSPzHstSgzMNSgpS
|
||||
qzLJRZfpRZtNNMSfftFN
|
||||
QDnPHCCGvbQnnCwMMlcFgsgHFFlNlV
|
||||
rPCMQnbdhRLqJLzhzB
|
||||
dfdrfqBqBtRwBsFR
|
||||
cDczzSMzDcSGSQbCfFjRFZtZCZmtwZRt
|
||||
bVcJSbVbSDllNrrWWNdvWf
|
||||
WSPPWlppCQlZPGqPjhcjfs
|
||||
JJrJrRTHNTNLbbNLcfzzSfSzGTjsqZsj
|
||||
FVRFNgVRbDbdwlWpSnvQnVQM
|
||||
znJTCRCSvRpzVBjWJdBBBVNb
|
||||
gggcfGDrGDZqwhwfGBjbHVSVdtdjtBShWj
|
||||
ZrgmqmGDGfDPmrfwPmsqZPfCpsFFnFvlSMCLLvpSRFFMvL
|
||||
qhhfgzzSGDSZSgfrcjhcjCCndnbjdr
|
||||
FPTTTwBHBPJMJVJBGwmjvCmBdjjNNcrjncNc
|
||||
GwTttMsTtHFtVFtDplSDzgRpDqsfpD
|
||||
vzwsPlvFFdJGjQwdJw
|
||||
HHNbpDTbVMvTpmMHvddtRtJJjjJRdLmLGj
|
||||
HbqHcbMvlWrqzWFW
|
||||
hMJMJBhPTnDMJJTGmmGmwDpRzRpFWz
|
||||
lSZPPNvbNllPpGRFwwzRNGgm
|
||||
bHZCZbvrttlZClqbHbsrbnQMThdJBQhVQBPdscnPQB
|
||||
ZRNZfffHLfDLgfNlHWwhChWzzVdcVH
|
||||
jpJmJjvnTtSjtJvQWldPWcBdPSdWzzcz
|
||||
jGGsGsFFFGnJtTvvTszZNqqNgrsDLRDqLqrL
|
||||
rrblpnfnVVfspgrppnMrpsrGdGdzgddzPFCjCzjzzzjtDC
|
||||
TRWTJwThJhRvwZWvJBZvqDzQzGBPCzdHGjdGGGttzj
|
||||
JSZmTZZwWvqhwqrrVnrLnPmbsbPr
|
||||
MdhjZhZZDTdPDcgCSLfgCpCL
|
||||
vvwtnwnssznwJnwvBbBBHHRSSfLLcpWfSWWzcLRTRWpf
|
||||
snJtHJHmbBsrswNtsnjhlhqZPqTjjTjQMPGr
|
||||
gmSnWMMzvvNWCNWCJJph
|
||||
QfqjcbcRGGjcwhNppNqMptdNHL
|
||||
rGPbflPfwPvlFFvTTMlg
|
||||
trTdMJvtlLntbCRN
|
||||
GBZsGFGBcRbZCRNR
|
||||
SSGFmFjqVNFVssjSVjqjvMMQvgTmMgMMQWMmTdhJ
|
||||
GcNcdNdwMZSqNZSSScSdqGwDrCmJMVrCmHmVVCFVJDrmFV
|
||||
jTvsRsWbjjbQQfvTThFVZVTVDJVHlCFr
|
||||
BjnBPfRWBnRsnvBsRBQQSSGzpZLdgwcLZqzgzPLg
|
||||
clNrNpjbNpbRrCpsRlrVtjwVZwttttZVgMHwZS
|
||||
FJBBDhJDTQFThqssvPJBBvHMWLwgwSHtWLZMwZgwSg
|
||||
qQJfdJDhGsBBDFJBnlzGmmnRzbCpcrzl
|
||||
ZPbfgBvcZPPZPWWWWBFbQllndnqdnlpwdSNfnwdN
|
||||
LzLrzDhmDRRJpJzptDhCSCqHMHqnqSlHqMSQNHQS
|
||||
zTsRzsDTJszzrrLRstrGJLsPpbVVPbcgTBcZvbPVFggbjP
|
||||
THpVHSrLZrzzvPtJdtsqLssdLW
|
||||
fbfCCQgQllWwwwFmjRsPcqcPsJJJdscPdmsP
|
||||
RNQlQgCFfgwVppWTNvGrvn
|
||||
PqFwwcqzDlFJDDQVMjQmMBjG
|
||||
ZgTZZndCpBMVNTvvQc
|
||||
pHgtZdtRnnLhcshdhWzWSFlbsJsqzzzbSb
|
||||
zjfgjMhhgMJdfHQHWdVQvR
|
||||
CrmpmpZpHQptHHHQ
|
||||
CnwcFbNCqQBFwwFFsPslJgsjhMlMcDJP
|
||||
HpnStLpnQnHnqQLQqpMSSWWZbswNcNqwbNsfwqGGZc
|
||||
dVRRTCTVJNLcfJcJFb
|
||||
gzjTRCddgLDdzdjCCrBjjdhhBnQPSSBhvlSBQvMhQMnt
|
||||
lFTlwMwZlblSjrCpVvvsptspZpps
|
||||
nHRPPnqnhPRqJHhqqhfdPqLCHvBCvvscvVNczztCCvsvtm
|
||||
RJDghDhRhhGPPqGhsPhhFSbbwGSFjGQlWTrbwQbW
|
||||
RRjgNPTRFhglgNNjTsmGqCCGZfzmHCnZGnZCqq
|
||||
SppWLbtbCzZMpHMZ
|
||||
dSDbbJdVVlHFNlll
|
||||
dtZdGmqqtmzhtqZtZswzSnSjfNHNVjzCWCnCffHz
|
||||
LgpMFMvlhvRMhhDDlvvQLFJCfSCHnFVJnSnJHNjSnj
|
||||
rRBLcQcpQcrZbwsZshbs
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
vJrwpWtwJgWrhcsFMMfFFhFp
|
||||
jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
|
||||
PmmdzqPrVvPwwTWBwg
|
||||
wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
|
||||
ttgJtRGJQctTZtZT
|
||||
CrZsJsPPZsGzwwsLwLmpwMDw
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
package day4
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Solver struct {
|
||||
elfPairs []ElfPair
|
||||
}
|
||||
|
||||
type ElfPair struct {
|
||||
first, second map[int]bool
|
||||
}
|
||||
|
||||
func (s *Solver) ParseInput(input []string) {
|
||||
s.elfPairs = make([]ElfPair, len(input))
|
||||
|
||||
for pairIndex, line := range input {
|
||||
pairs := strings.Split(line, ",")
|
||||
|
||||
var i, j int
|
||||
|
||||
p1 := strings.Split(pairs[0], "-")
|
||||
m1 := make(map[int]bool)
|
||||
|
||||
i, _ = strconv.Atoi(p1[0])
|
||||
j, _ = strconv.Atoi(p1[1])
|
||||
for ; i <= j; i++ {
|
||||
m1[i] = true
|
||||
}
|
||||
|
||||
p2 := strings.Split(pairs[1], "-")
|
||||
m2 := make(map[int]bool)
|
||||
|
||||
i, _ = strconv.Atoi(p2[0])
|
||||
j, _ = strconv.Atoi(p2[1])
|
||||
for ; i <= j; i++ {
|
||||
m2[i] = true
|
||||
}
|
||||
|
||||
s.elfPairs[pairIndex] = ElfPair{m1, m2}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Solver) SolvePart1() any {
|
||||
var total int
|
||||
|
||||
for _, ep := range s.elfPairs {
|
||||
if contains(ep.first, ep.second) || contains(ep.second, ep.first) {
|
||||
total += 1
|
||||
}
|
||||
}
|
||||
|
||||
return total
|
||||
}
|
||||
|
||||
func (s *Solver) SolvePart2() any {
|
||||
var total int
|
||||
|
||||
for _, ep := range s.elfPairs {
|
||||
if len(intersect(ep.first, ep.second)) > 0 {
|
||||
total += 1
|
||||
}
|
||||
}
|
||||
|
||||
return total
|
||||
}
|
||||
|
||||
func contains(m1, m2 map[int]bool) bool {
|
||||
for k := range m1 {
|
||||
if _, ok := m2[k]; !ok {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func intersect(m1, m2 map[int]bool) []int {
|
||||
result := make([]int, 0)
|
||||
for k := range m1 {
|
||||
if _, ok := m2[k]; ok {
|
||||
result = append(result, k)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,6 @@
|
|||
2-4,6-8
|
||||
2-3,4-5
|
||||
5-7,7-9
|
||||
2-8,3-7
|
||||
6-6,4-6
|
||||
2-6,4-8
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package day5
|
||||
|
||||
type Solver struct {
|
||||
}
|
||||
|
||||
func (s *Solver) ParseInput(input []string) {
|
||||
}
|
||||
|
||||
func (s *Solver) SolvePart1() any {
|
||||
var total int
|
||||
|
||||
return total
|
||||
}
|
||||
|
||||
func (s *Solver) SolvePart2() any {
|
||||
var total int
|
||||
|
||||
return total
|
||||
}
|
||||
|
|
@ -0,0 +1,512 @@
|
|||
[S] [T] [Q]
|
||||
[L] [B] [M] [P] [T]
|
||||
[F] [S] [Z] [N] [S] [R]
|
||||
[Z] [R] [N] [R] [D] [F] [V]
|
||||
[D] [Z] [H] [J] [W] [G] [W] [G]
|
||||
[B] [M] [C] [F] [H] [Z] [N] [R] [L]
|
||||
[R] [B] [L] [C] [G] [J] [L] [Z] [C]
|
||||
[H] [T] [Z] [S] [P] [V] [G] [M] [M]
|
||||
1 2 3 4 5 6 7 8 9
|
||||
|
||||
move 6 from 1 to 7
|
||||
move 2 from 2 to 4
|
||||
move 2 from 7 to 4
|
||||
move 6 from 4 to 3
|
||||
move 1 from 5 to 1
|
||||
move 3 from 8 to 3
|
||||
move 15 from 3 to 4
|
||||
move 6 from 5 to 9
|
||||
move 14 from 4 to 2
|
||||
move 3 from 2 to 7
|
||||
move 1 from 2 to 7
|
||||
move 9 from 9 to 1
|
||||
move 3 from 2 to 1
|
||||
move 7 from 6 to 7
|
||||
move 1 from 6 to 8
|
||||
move 2 from 9 to 1
|
||||
move 9 from 2 to 3
|
||||
move 8 from 3 to 9
|
||||
move 1 from 1 to 4
|
||||
move 1 from 8 to 6
|
||||
move 1 from 6 to 2
|
||||
move 5 from 9 to 8
|
||||
move 2 from 9 to 1
|
||||
move 1 from 4 to 2
|
||||
move 17 from 1 to 9
|
||||
move 1 from 3 to 1
|
||||
move 3 from 2 to 3
|
||||
move 2 from 4 to 5
|
||||
move 12 from 7 to 3
|
||||
move 16 from 9 to 2
|
||||
move 5 from 7 to 5
|
||||
move 2 from 1 to 2
|
||||
move 1 from 3 to 6
|
||||
move 1 from 4 to 6
|
||||
move 1 from 7 to 3
|
||||
move 1 from 6 to 3
|
||||
move 7 from 3 to 4
|
||||
move 5 from 8 to 3
|
||||
move 1 from 6 to 7
|
||||
move 7 from 3 to 4
|
||||
move 6 from 3 to 1
|
||||
move 2 from 4 to 8
|
||||
move 1 from 5 to 2
|
||||
move 10 from 4 to 5
|
||||
move 3 from 5 to 2
|
||||
move 2 from 8 to 9
|
||||
move 5 from 2 to 8
|
||||
move 1 from 3 to 5
|
||||
move 2 from 5 to 8
|
||||
move 12 from 5 to 7
|
||||
move 1 from 4 to 2
|
||||
move 5 from 9 to 4
|
||||
move 1 from 2 to 5
|
||||
move 6 from 1 to 3
|
||||
move 6 from 3 to 5
|
||||
move 10 from 7 to 4
|
||||
move 2 from 7 to 3
|
||||
move 4 from 7 to 6
|
||||
move 1 from 9 to 5
|
||||
move 12 from 2 to 1
|
||||
move 1 from 8 to 7
|
||||
move 3 from 7 to 4
|
||||
move 4 from 4 to 8
|
||||
move 7 from 5 to 3
|
||||
move 1 from 2 to 4
|
||||
move 10 from 1 to 5
|
||||
move 2 from 1 to 2
|
||||
move 4 from 6 to 7
|
||||
move 8 from 8 to 3
|
||||
move 5 from 4 to 9
|
||||
move 12 from 3 to 8
|
||||
move 4 from 3 to 8
|
||||
move 2 from 9 to 2
|
||||
move 3 from 5 to 4
|
||||
move 1 from 3 to 5
|
||||
move 1 from 7 to 6
|
||||
move 14 from 4 to 6
|
||||
move 6 from 5 to 9
|
||||
move 8 from 2 to 8
|
||||
move 3 from 5 to 7
|
||||
move 21 from 8 to 4
|
||||
move 16 from 4 to 9
|
||||
move 8 from 6 to 2
|
||||
move 4 from 6 to 1
|
||||
move 1 from 4 to 6
|
||||
move 2 from 4 to 8
|
||||
move 3 from 1 to 8
|
||||
move 2 from 4 to 6
|
||||
move 1 from 6 to 2
|
||||
move 3 from 8 to 4
|
||||
move 2 from 2 to 5
|
||||
move 2 from 5 to 7
|
||||
move 1 from 8 to 9
|
||||
move 1 from 4 to 9
|
||||
move 1 from 1 to 6
|
||||
move 3 from 6 to 3
|
||||
move 3 from 2 to 3
|
||||
move 1 from 4 to 6
|
||||
move 3 from 6 to 7
|
||||
move 10 from 9 to 7
|
||||
move 1 from 4 to 7
|
||||
move 6 from 8 to 3
|
||||
move 1 from 6 to 8
|
||||
move 2 from 2 to 5
|
||||
move 1 from 2 to 1
|
||||
move 1 from 8 to 9
|
||||
move 1 from 2 to 8
|
||||
move 1 from 1 to 9
|
||||
move 7 from 9 to 1
|
||||
move 1 from 8 to 5
|
||||
move 7 from 1 to 7
|
||||
move 3 from 5 to 8
|
||||
move 3 from 7 to 2
|
||||
move 1 from 8 to 4
|
||||
move 1 from 2 to 4
|
||||
move 2 from 4 to 6
|
||||
move 5 from 3 to 1
|
||||
move 9 from 7 to 2
|
||||
move 6 from 3 to 8
|
||||
move 8 from 2 to 7
|
||||
move 2 from 6 to 4
|
||||
move 2 from 1 to 7
|
||||
move 2 from 1 to 4
|
||||
move 24 from 7 to 4
|
||||
move 4 from 8 to 9
|
||||
move 2 from 7 to 5
|
||||
move 1 from 5 to 2
|
||||
move 1 from 3 to 8
|
||||
move 4 from 2 to 8
|
||||
move 13 from 9 to 2
|
||||
move 2 from 8 to 6
|
||||
move 3 from 9 to 6
|
||||
move 26 from 4 to 2
|
||||
move 1 from 5 to 7
|
||||
move 2 from 6 to 2
|
||||
move 2 from 4 to 1
|
||||
move 7 from 2 to 1
|
||||
move 15 from 2 to 6
|
||||
move 8 from 2 to 8
|
||||
move 4 from 6 to 8
|
||||
move 9 from 2 to 9
|
||||
move 13 from 6 to 7
|
||||
move 6 from 1 to 9
|
||||
move 2 from 2 to 4
|
||||
move 4 from 1 to 6
|
||||
move 3 from 8 to 3
|
||||
move 1 from 4 to 9
|
||||
move 2 from 6 to 7
|
||||
move 1 from 4 to 3
|
||||
move 3 from 3 to 2
|
||||
move 14 from 7 to 4
|
||||
move 5 from 9 to 5
|
||||
move 9 from 8 to 5
|
||||
move 7 from 9 to 6
|
||||
move 2 from 5 to 6
|
||||
move 2 from 9 to 2
|
||||
move 10 from 5 to 1
|
||||
move 1 from 3 to 1
|
||||
move 2 from 8 to 1
|
||||
move 1 from 9 to 2
|
||||
move 1 from 7 to 5
|
||||
move 4 from 2 to 1
|
||||
move 1 from 9 to 8
|
||||
move 3 from 4 to 1
|
||||
move 1 from 8 to 6
|
||||
move 12 from 1 to 5
|
||||
move 1 from 1 to 6
|
||||
move 1 from 7 to 5
|
||||
move 4 from 6 to 9
|
||||
move 2 from 2 to 4
|
||||
move 1 from 9 to 6
|
||||
move 1 from 1 to 5
|
||||
move 2 from 9 to 7
|
||||
move 10 from 6 to 5
|
||||
move 1 from 6 to 7
|
||||
move 20 from 5 to 1
|
||||
move 1 from 7 to 9
|
||||
move 2 from 9 to 1
|
||||
move 3 from 5 to 1
|
||||
move 2 from 8 to 4
|
||||
move 2 from 8 to 7
|
||||
move 1 from 5 to 9
|
||||
move 1 from 8 to 4
|
||||
move 22 from 1 to 7
|
||||
move 5 from 4 to 8
|
||||
move 1 from 5 to 9
|
||||
move 19 from 7 to 4
|
||||
move 2 from 9 to 1
|
||||
move 1 from 5 to 9
|
||||
move 10 from 1 to 8
|
||||
move 1 from 9 to 1
|
||||
move 1 from 8 to 3
|
||||
move 8 from 4 to 7
|
||||
move 1 from 5 to 6
|
||||
move 3 from 4 to 5
|
||||
move 1 from 5 to 9
|
||||
move 11 from 7 to 4
|
||||
move 4 from 4 to 9
|
||||
move 1 from 6 to 2
|
||||
move 1 from 3 to 9
|
||||
move 5 from 9 to 4
|
||||
move 5 from 7 to 9
|
||||
move 23 from 4 to 2
|
||||
move 17 from 2 to 7
|
||||
move 2 from 2 to 8
|
||||
move 4 from 4 to 7
|
||||
move 1 from 4 to 5
|
||||
move 2 from 5 to 2
|
||||
move 5 from 8 to 9
|
||||
move 5 from 2 to 7
|
||||
move 9 from 7 to 5
|
||||
move 11 from 9 to 2
|
||||
move 1 from 4 to 3
|
||||
move 5 from 8 to 7
|
||||
move 3 from 8 to 5
|
||||
move 2 from 1 to 3
|
||||
move 2 from 3 to 9
|
||||
move 1 from 5 to 8
|
||||
move 5 from 7 to 5
|
||||
move 15 from 5 to 4
|
||||
move 2 from 8 to 1
|
||||
move 2 from 5 to 1
|
||||
move 4 from 4 to 1
|
||||
move 1 from 8 to 7
|
||||
move 8 from 2 to 1
|
||||
move 4 from 2 to 8
|
||||
move 2 from 7 to 4
|
||||
move 5 from 8 to 6
|
||||
move 5 from 7 to 9
|
||||
move 4 from 6 to 5
|
||||
move 7 from 4 to 8
|
||||
move 1 from 6 to 1
|
||||
move 1 from 3 to 1
|
||||
move 2 from 5 to 1
|
||||
move 7 from 1 to 5
|
||||
move 5 from 1 to 3
|
||||
move 4 from 7 to 9
|
||||
move 4 from 3 to 9
|
||||
move 2 from 9 to 7
|
||||
move 6 from 9 to 2
|
||||
move 1 from 4 to 1
|
||||
move 1 from 3 to 5
|
||||
move 1 from 2 to 5
|
||||
move 5 from 9 to 4
|
||||
move 4 from 4 to 6
|
||||
move 1 from 8 to 9
|
||||
move 8 from 4 to 3
|
||||
move 7 from 7 to 3
|
||||
move 5 from 1 to 3
|
||||
move 11 from 5 to 9
|
||||
move 1 from 7 to 6
|
||||
move 2 from 3 to 5
|
||||
move 1 from 3 to 1
|
||||
move 3 from 6 to 2
|
||||
move 2 from 5 to 1
|
||||
move 2 from 1 to 2
|
||||
move 3 from 1 to 5
|
||||
move 5 from 9 to 2
|
||||
move 2 from 6 to 8
|
||||
move 2 from 3 to 8
|
||||
move 4 from 9 to 7
|
||||
move 3 from 5 to 2
|
||||
move 2 from 1 to 8
|
||||
move 1 from 9 to 8
|
||||
move 1 from 9 to 2
|
||||
move 4 from 7 to 9
|
||||
move 11 from 8 to 7
|
||||
move 1 from 8 to 2
|
||||
move 6 from 9 to 7
|
||||
move 3 from 7 to 1
|
||||
move 13 from 2 to 7
|
||||
move 24 from 7 to 1
|
||||
move 2 from 2 to 6
|
||||
move 1 from 8 to 3
|
||||
move 1 from 9 to 3
|
||||
move 5 from 2 to 4
|
||||
move 1 from 2 to 5
|
||||
move 1 from 6 to 2
|
||||
move 1 from 6 to 3
|
||||
move 1 from 2 to 4
|
||||
move 3 from 7 to 3
|
||||
move 2 from 1 to 7
|
||||
move 2 from 3 to 8
|
||||
move 2 from 7 to 8
|
||||
move 9 from 3 to 2
|
||||
move 3 from 4 to 8
|
||||
move 1 from 5 to 1
|
||||
move 9 from 2 to 1
|
||||
move 3 from 4 to 9
|
||||
move 1 from 7 to 8
|
||||
move 6 from 3 to 9
|
||||
move 2 from 1 to 5
|
||||
move 15 from 1 to 3
|
||||
move 13 from 3 to 9
|
||||
move 11 from 1 to 4
|
||||
move 5 from 4 to 1
|
||||
move 6 from 3 to 6
|
||||
move 4 from 4 to 8
|
||||
move 6 from 1 to 4
|
||||
move 1 from 5 to 2
|
||||
move 1 from 2 to 1
|
||||
move 3 from 4 to 2
|
||||
move 2 from 8 to 5
|
||||
move 2 from 4 to 2
|
||||
move 9 from 9 to 3
|
||||
move 9 from 3 to 5
|
||||
move 2 from 9 to 4
|
||||
move 5 from 2 to 6
|
||||
move 1 from 1 to 8
|
||||
move 1 from 4 to 1
|
||||
move 10 from 9 to 2
|
||||
move 9 from 2 to 4
|
||||
move 10 from 4 to 1
|
||||
move 3 from 1 to 3
|
||||
move 4 from 1 to 2
|
||||
move 5 from 2 to 4
|
||||
move 2 from 5 to 2
|
||||
move 4 from 1 to 7
|
||||
move 10 from 5 to 4
|
||||
move 2 from 2 to 4
|
||||
move 1 from 9 to 2
|
||||
move 2 from 3 to 5
|
||||
move 1 from 3 to 5
|
||||
move 3 from 6 to 7
|
||||
move 8 from 4 to 9
|
||||
move 6 from 6 to 1
|
||||
move 4 from 9 to 5
|
||||
move 2 from 9 to 1
|
||||
move 1 from 2 to 6
|
||||
move 6 from 5 to 2
|
||||
move 3 from 7 to 9
|
||||
move 4 from 8 to 2
|
||||
move 1 from 7 to 9
|
||||
move 1 from 5 to 3
|
||||
move 2 from 7 to 4
|
||||
move 1 from 7 to 1
|
||||
move 14 from 1 to 9
|
||||
move 1 from 1 to 9
|
||||
move 1 from 3 to 8
|
||||
move 3 from 2 to 5
|
||||
move 2 from 4 to 2
|
||||
move 6 from 8 to 1
|
||||
move 1 from 2 to 1
|
||||
move 5 from 1 to 9
|
||||
move 1 from 1 to 7
|
||||
move 2 from 8 to 5
|
||||
move 1 from 5 to 4
|
||||
move 1 from 6 to 1
|
||||
move 8 from 2 to 7
|
||||
move 2 from 6 to 1
|
||||
move 9 from 9 to 5
|
||||
move 11 from 4 to 8
|
||||
move 4 from 7 to 4
|
||||
move 6 from 4 to 6
|
||||
move 1 from 7 to 4
|
||||
move 6 from 6 to 7
|
||||
move 1 from 5 to 9
|
||||
move 6 from 8 to 9
|
||||
move 8 from 9 to 5
|
||||
move 1 from 4 to 5
|
||||
move 15 from 9 to 3
|
||||
move 3 from 1 to 4
|
||||
move 6 from 7 to 2
|
||||
move 3 from 4 to 9
|
||||
move 2 from 7 to 3
|
||||
move 1 from 7 to 3
|
||||
move 1 from 7 to 2
|
||||
move 2 from 8 to 1
|
||||
move 3 from 8 to 5
|
||||
move 2 from 1 to 7
|
||||
move 8 from 3 to 6
|
||||
move 3 from 6 to 5
|
||||
move 1 from 6 to 1
|
||||
move 10 from 5 to 7
|
||||
move 6 from 5 to 4
|
||||
move 4 from 2 to 4
|
||||
move 6 from 5 to 1
|
||||
move 6 from 1 to 8
|
||||
move 2 from 9 to 2
|
||||
move 2 from 9 to 7
|
||||
move 6 from 3 to 7
|
||||
move 1 from 3 to 5
|
||||
move 1 from 1 to 9
|
||||
move 2 from 8 to 1
|
||||
move 2 from 5 to 4
|
||||
move 3 from 3 to 7
|
||||
move 10 from 4 to 6
|
||||
move 1 from 9 to 7
|
||||
move 12 from 7 to 3
|
||||
move 12 from 3 to 8
|
||||
move 2 from 1 to 5
|
||||
move 1 from 1 to 3
|
||||
move 13 from 8 to 1
|
||||
move 7 from 7 to 1
|
||||
move 13 from 6 to 9
|
||||
move 1 from 7 to 4
|
||||
move 6 from 5 to 3
|
||||
move 3 from 4 to 3
|
||||
move 6 from 3 to 1
|
||||
move 10 from 9 to 4
|
||||
move 2 from 7 to 6
|
||||
move 8 from 1 to 9
|
||||
move 3 from 2 to 9
|
||||
move 1 from 3 to 5
|
||||
move 1 from 3 to 5
|
||||
move 1 from 1 to 4
|
||||
move 6 from 9 to 3
|
||||
move 2 from 6 to 7
|
||||
move 4 from 9 to 5
|
||||
move 4 from 1 to 6
|
||||
move 1 from 2 to 4
|
||||
move 6 from 1 to 4
|
||||
move 3 from 9 to 3
|
||||
move 3 from 6 to 8
|
||||
move 3 from 8 to 7
|
||||
move 5 from 5 to 1
|
||||
move 1 from 3 to 9
|
||||
move 1 from 9 to 5
|
||||
move 1 from 3 to 2
|
||||
move 2 from 5 to 1
|
||||
move 1 from 6 to 9
|
||||
move 1 from 6 to 3
|
||||
move 2 from 9 to 7
|
||||
move 2 from 8 to 1
|
||||
move 1 from 3 to 2
|
||||
move 1 from 2 to 5
|
||||
move 1 from 7 to 1
|
||||
move 7 from 7 to 9
|
||||
move 12 from 1 to 9
|
||||
move 1 from 5 to 2
|
||||
move 1 from 7 to 1
|
||||
move 13 from 4 to 7
|
||||
move 1 from 9 to 4
|
||||
move 5 from 7 to 3
|
||||
move 4 from 9 to 1
|
||||
move 8 from 7 to 9
|
||||
move 3 from 2 to 3
|
||||
move 4 from 3 to 7
|
||||
move 5 from 4 to 6
|
||||
move 3 from 9 to 4
|
||||
move 10 from 1 to 5
|
||||
move 3 from 4 to 7
|
||||
move 16 from 9 to 2
|
||||
move 3 from 9 to 2
|
||||
move 6 from 5 to 3
|
||||
move 4 from 6 to 2
|
||||
move 1 from 4 to 6
|
||||
move 2 from 6 to 8
|
||||
move 1 from 5 to 2
|
||||
move 1 from 5 to 8
|
||||
move 7 from 7 to 2
|
||||
move 16 from 2 to 1
|
||||
move 1 from 5 to 1
|
||||
move 10 from 2 to 8
|
||||
move 14 from 8 to 5
|
||||
move 2 from 2 to 6
|
||||
move 1 from 2 to 5
|
||||
move 2 from 2 to 1
|
||||
move 8 from 1 to 7
|
||||
move 4 from 1 to 7
|
||||
move 2 from 1 to 7
|
||||
move 5 from 3 to 2
|
||||
move 1 from 1 to 6
|
||||
move 2 from 2 to 5
|
||||
move 4 from 1 to 7
|
||||
move 1 from 2 to 8
|
||||
move 1 from 2 to 8
|
||||
move 3 from 6 to 7
|
||||
move 10 from 7 to 5
|
||||
move 1 from 2 to 8
|
||||
move 27 from 5 to 9
|
||||
move 1 from 5 to 6
|
||||
move 1 from 6 to 4
|
||||
move 1 from 4 to 3
|
||||
move 3 from 3 to 7
|
||||
move 4 from 3 to 6
|
||||
move 2 from 6 to 4
|
||||
move 3 from 8 to 1
|
||||
move 2 from 6 to 1
|
||||
move 12 from 7 to 8
|
||||
move 2 from 3 to 9
|
||||
move 1 from 9 to 2
|
||||
move 1 from 2 to 8
|
||||
move 2 from 1 to 2
|
||||
move 6 from 3 to 8
|
||||
move 1 from 7 to 4
|
||||
move 15 from 9 to 5
|
||||
move 7 from 9 to 4
|
||||
move 1 from 2 to 1
|
||||
move 16 from 8 to 2
|
||||
move 8 from 5 to 2
|
||||
move 24 from 2 to 9
|
||||
move 3 from 1 to 2
|
||||
move 24 from 9 to 1
|
||||
move 5 from 5 to 9
|
||||
move 3 from 4 to 1
|
||||
move 1 from 7 to 6
|
||||
move 1 from 6 to 3
|
||||
move 1 from 3 to 2
|
||||
move 3 from 2 to 3
|
||||
move 1 from 5 to 6
|
||||
move 1 from 2 to 7
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
[D]
|
||||
[N] [C]
|
||||
[Z] [M] [P]
|
||||
1 2 3
|
||||
|
||||
move 1 from 2 to 1
|
||||
move 3 from 1 to 3
|
||||
move 2 from 2 to 1
|
||||
move 1 from 1 to 2
|
||||
18
main.go
18
main.go
|
|
@ -4,9 +4,15 @@ import (
|
|||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
day1_calorie_counting "snikolov.me/aoc2022/day1"
|
||||
"snikolov.me/aoc2022/utils"
|
||||
"time"
|
||||
|
||||
"snikolov.me/aoc2022/day1"
|
||||
"snikolov.me/aoc2022/day2"
|
||||
"snikolov.me/aoc2022/day3"
|
||||
"snikolov.me/aoc2022/day4"
|
||||
"snikolov.me/aoc2022/day5"
|
||||
|
||||
"snikolov.me/aoc2022/utils"
|
||||
)
|
||||
|
||||
type Args struct {
|
||||
|
|
@ -39,7 +45,11 @@ func main() {
|
|||
|
||||
func solve(args Args, inputFileName string) {
|
||||
solvers := map[int]utils.Solver{
|
||||
1: &day1_calorie_counting.Solver{},
|
||||
1: &day1.Solver{},
|
||||
2: &day2.Solver{},
|
||||
3: &day3.Solver{},
|
||||
4: &day4.Solver{},
|
||||
5: &day5.Solver{},
|
||||
}
|
||||
solver, ok := solvers[args.DayNumber]
|
||||
if !ok {
|
||||
|
|
@ -54,7 +64,7 @@ func solve(args Args, inputFileName string) {
|
|||
log.Fatalf("Could not read input for day %d: %s", args.DayNumber, err)
|
||||
}
|
||||
|
||||
var solution int
|
||||
var solution any
|
||||
switch args.PartNumber {
|
||||
case 1:
|
||||
solution = solver.SolvePart1()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
package utils
|
||||
|
||||
type Set[T comparable] interface {
|
||||
Items() []T
|
||||
// Union(set Set[T]) Set[T]
|
||||
// Intersection(set Set[T]) Set[T]
|
||||
// ContainsItem(item T) bool
|
||||
// ContainsSubset(set Set[T]) bool
|
||||
}
|
||||
|
||||
type set[T comparable] struct {
|
||||
m map[T]bool
|
||||
}
|
||||
|
||||
func (s *set[T]) Items() []T {
|
||||
r := make([]T, len(s.m))
|
||||
i := 0
|
||||
for item, _ := range s.m {
|
||||
r[i] = item
|
||||
i += 1
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
func NewSet[T comparable](items ...T) Set[T] {
|
||||
m := make(map[T]bool, len(items))
|
||||
for _, item := range items {
|
||||
m[item] = true
|
||||
}
|
||||
return &set[T]{m}
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package utils
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSetItems(t *testing.T) {
|
||||
s := NewSet(1, 2, 3, 2, 2, 1)
|
||||
|
||||
if !reflect.DeepEqual(s.Items(), []int{1, 2, 3}) {
|
||||
t.Error("new set does not contain initial items")
|
||||
}
|
||||
|
||||
items := []string{"hello", "there", "world", "sta", "satasr", "aaaaa", "tawfptars"}
|
||||
s1 := NewSet(items...)
|
||||
|
||||
if !reflect.DeepEqual(s1.Items(), items) {
|
||||
t.Error("new set does not contain initial items")
|
||||
}
|
||||
}
|
||||
|
|
@ -11,8 +11,8 @@ import (
|
|||
|
||||
type Solver interface {
|
||||
ParseInput(input []string)
|
||||
SolvePart1() int
|
||||
SolvePart2() int
|
||||
SolvePart1() any
|
||||
SolvePart2() any
|
||||
}
|
||||
|
||||
func ReadInput(inputFileName string) ([]string, error) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue