This commit is contained in:
Stanislav Nikolov 2022-12-05 10:03:39 +02:00
parent fccc444b53
commit a330f6baa2
18 changed files with 4731 additions and 21 deletions

View File

@ -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

View File

@ -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)
}

128
day2/day2.go Normal file
View File

@ -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
}

2500
day2/prod.in.txt Normal file

File diff suppressed because it is too large Load Diff

3
day2/test.in.txt Normal file
View File

@ -0,0 +1,3 @@
A Y
B X
C Z

90
day3/day3.go Normal file
View File

@ -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
}

300
day3/prod.in.txt Normal file
View File

@ -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

6
day3/test.in.txt Normal file
View File

@ -0,0 +1,6 @@
vJrwpWtwJgWrhcsFMMfFFhFp
jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
PmmdzqPrVvPwwTWBwg
wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
ttgJtRGJQctTZtZT
CrZsJsPPZsGzwwsLwLmpwMDw

87
day4/day4.go Normal file
View File

@ -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
}

1000
day4/prod.in.txt Normal file

File diff suppressed because it is too large Load Diff

6
day4/test.in.txt Normal file
View File

@ -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

19
day5/day4.go Normal file
View File

@ -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
}

512
day5/prod.in.txt Normal file
View File

@ -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

9
day5/test.in.txt Normal file
View File

@ -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
View File

@ -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()

31
utils/set.go Normal file
View File

@ -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}
}

21
utils/set_test.go Normal file
View File

@ -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")
}
}

View File

@ -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) {