mirror of
https://github.com/Crocmagnon/advent-of-code.git
synced 2024-10-18 06:43:22 +02:00
179 lines
3.5 KiB
Go
179 lines
3.5 KiB
Go
package _023
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestDay07Part1(t *testing.T) {
|
|
tests := []testCase{
|
|
{"inputs/day07_test1", 6440},
|
|
{"inputs/day07", 246424613},
|
|
}
|
|
for _, test := range tests {
|
|
t.Run(test.filename, check(test, Day07Part1))
|
|
}
|
|
}
|
|
|
|
func TestDay07Part2(t *testing.T) {
|
|
tests := []testCase{
|
|
{"inputs/day07_test1", 5905},
|
|
{"inputs/day07_test2", 5911},
|
|
{"inputs/day07", 248256639},
|
|
}
|
|
for _, test := range tests {
|
|
t.Run(test.filename, check(test, Day07Part2))
|
|
}
|
|
t.Run("247974245 is too low", func(t *testing.T) {
|
|
file, err := os.Open("inputs/day07")
|
|
require.NoError(t, err)
|
|
got, err := Day07Part2(file)
|
|
require.NoError(t, err)
|
|
assert.Greater(t, got, 247974245)
|
|
})
|
|
}
|
|
|
|
func TestDay07HandValueP1(t *testing.T) {
|
|
tests := []struct {
|
|
hand string
|
|
expected int
|
|
}{
|
|
{"AAAAA", d07HandFive},
|
|
{"AAAA2", d07HandFour},
|
|
{"AA2AA", d07HandFour},
|
|
{"3KKK3", d07HandHouse},
|
|
{"3KKK4", d07HandThree},
|
|
{"KKQQT", d07HandTwoPairs},
|
|
{"KQTQK", d07HandTwoPairs},
|
|
{"QQ567", d07HandPair},
|
|
{"T6862", d07HandPair},
|
|
{"A2345", d07HandHigh},
|
|
}
|
|
for _, test := range tests {
|
|
t.Run(test.hand, func(t *testing.T) {
|
|
assert.Equal(t, test.expected, d07HandValueP1(test.hand))
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestDay07HandValueP2(t *testing.T) {
|
|
tests := []struct {
|
|
hand string
|
|
expected int
|
|
}{
|
|
{"JJJJJ", d07HandFive},
|
|
{"AAAAA", d07HandFive},
|
|
{"AAJJJ", d07HandFive},
|
|
{"AAAA2", d07HandFour},
|
|
{"JJAJ2", d07HandFour},
|
|
{"JKKK2", d07HandFour},
|
|
{"QJJQ2", d07HandFour},
|
|
{"AA2AA", d07HandFour},
|
|
{"AJ2JA", d07HandFour},
|
|
{"3KKK3", d07HandHouse},
|
|
{"3KJK3", d07HandHouse},
|
|
{"3KKK4", d07HandThree},
|
|
{"3KKJ4", d07HandThree},
|
|
{"KKQQT", d07HandTwoPairs},
|
|
{"KQTQK", d07HandTwoPairs},
|
|
{"QQ567", d07HandPair},
|
|
{"JQ567", d07HandPair},
|
|
{"T6862", d07HandPair},
|
|
{"T68J2", d07HandPair},
|
|
{"A2345", d07HandHigh},
|
|
}
|
|
for _, test := range tests {
|
|
t.Run(test.hand, func(t *testing.T) {
|
|
assert.Equal(t, test.expected, d07HandValueP2(test.hand))
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestD07CmpHands(t *testing.T) {
|
|
type args struct {
|
|
a string
|
|
b string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want int
|
|
}{
|
|
{
|
|
name: "five and four",
|
|
args: args{"AAAAA", "KAAAA"},
|
|
want: 1,
|
|
},
|
|
{
|
|
name: "four and four",
|
|
args: args{"2AAAA", "33332"},
|
|
want: -1,
|
|
},
|
|
{
|
|
name: "house and house",
|
|
args: args{"77888", "77788"},
|
|
want: 1,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
assert.Equalf(t, tt.want, d07CmpHands(newD07Hand(tt.args.a, 0), newD07Hand(tt.args.b, 0)), "d07CmpHands(%v, %v)", tt.args.a, tt.args.b)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestD07CmpHandsP2(t *testing.T) {
|
|
type args struct {
|
|
a string
|
|
b string
|
|
}
|
|
tests := []struct {
|
|
args args
|
|
want int
|
|
}{
|
|
{
|
|
args: args{"T55J5", "KTJJT"},
|
|
want: -1,
|
|
},
|
|
{
|
|
args: args{"KTJJT", "QQQJA"},
|
|
want: 1,
|
|
},
|
|
{
|
|
args: args{"T55J5", "QQQJA"},
|
|
want: -1,
|
|
},
|
|
{
|
|
args: args{"J55T5", "JQQQA"},
|
|
want: -1,
|
|
},
|
|
{
|
|
args: args{"555T5", "JQQQA"},
|
|
want: 1,
|
|
},
|
|
{
|
|
args: args{"QQQQ2", "JKKK2"},
|
|
want: 1,
|
|
},
|
|
{
|
|
args: args{"QQQQ2", "JJJJJ"},
|
|
want: -1,
|
|
},
|
|
{
|
|
args: args{"22222", "JJJJJ"},
|
|
want: 1,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
char := "<"
|
|
if tt.want == 1 {
|
|
char = ">"
|
|
}
|
|
t.Run(fmt.Sprintf("%v%v%v", tt.args.a, char, tt.args.b), func(t *testing.T) {
|
|
assert.Equalf(t, tt.want, d07CmpHandsP2(newD07HandP2(tt.args.a, 0), newD07HandP2(tt.args.b, 0)), "d07CmpHandsP2(%v, %v)", tt.args.a, tt.args.b)
|
|
})
|
|
}
|
|
}
|