package adventofcode

import "testing"

var draws = []int{57, 9, 8, 30, 40, 62, 24, 70, 54, 73, 12, 3, 71, 95, 58, 88, 23, 81, 53, 80, 22, 45, 98, 37, 18, 72, 14, 20, 66, 0, 19, 31, 82, 34, 55, 29, 27, 96, 48, 28, 87, 83, 36, 26, 63, 21, 5, 46, 33, 86, 32, 56, 6, 38, 52, 16, 41, 74, 99, 77, 13, 35, 65, 4, 78, 91, 90, 43, 1, 2, 64, 60, 94, 85, 61, 84, 42, 76, 68, 10, 49, 89,
	11, 17, 79, 69, 39, 50, 25, 51, 47, 93, 44, 92, 59, 75, 7, 97, 67, 15}

var boards = [][][]int{
	[][]int{
		{45, 57, 55, 43, 31},
		{32, 52, 79, 65, 80},
		{21, 98, 16, 64, 6},
		{19, 78, 48, 59, 51},
		{37, 2, 69, 56, 99},
	},
	[][]int{
		{87, 20, 29, 96, 75},
		{83, 34, 84, 72, 98},
		{70, 89, 90, 73, 38},
		{86, 2, 47, 62, 11},
		{24, 60, 64, 65, 31},
	},
	[][]int{
		{11, 20, 22, 49, 30},
		{59, 87, 10, 31, 68},
		{64, 24, 82, 26, 6},
		{92, 38, 48, 4, 54},
		{93, 81, 28, 80, 99},
	},
	[][]int{
		{29, 4, 62, 28, 85},
		{71, 2, 77, 3, 98},
		{74, 57, 25, 33, 92},
		{64, 95, 61, 73, 99},
		{76, 36, 81, 87, 1},
	},
	[][]int{
		{79, 59, 96, 61, 95},
		{81, 77, 56, 68, 36},
		{69, 39, 0, 55, 14},
		{16, 3, 4, 34, 63},
		{84, 80, 99, 37, 9},
	},
	[][]int{
		{86, 33, 77, 30, 59},
		{19, 54, 48, 28, 89},
		{26, 38, 82, 68, 69},
		{87, 76, 85, 22, 50},
		{74, 72, 58, 81, 49},
	},
	[][]int{
		{3, 8, 39, 15, 69},
		{14, 72, 90, 81, 58},
		{54, 13, 59, 53, 97},
		{84, 20, 43, 57, 89},
		{22, 92, 28, 51, 45},
	},
	[][]int{
		{86, 91, 63, 52, 27},
		{50, 75, 94, 89, 31},
		{79, 44, 92, 29, 97},
		{34, 60, 42, 37, 80},
		{73, 28, 7, 96, 10},
	},
	[][]int{
		{85, 60, 89, 34, 6},
		{41, 81, 39, 37, 57},
		{23, 70, 79, 46, 15},
		{74, 54, 59, 88, 9},
		{58, 97, 5, 51, 1},
	},
	[][]int{
		{54, 82, 22, 26, 18},
		{46, 12, 21, 36, 79},
		{83, 71, 14, 29, 45},
		{42, 24, 73, 58, 68},
		{63, 32, 9, 86, 98},
	},
	[][]int{
		{59, 83, 13, 34, 44},
		{80, 55, 81, 67, 3},
		{74, 58, 32, 43, 6},
		{61, 73, 21, 23, 66},
		{2, 9, 52, 29, 86},
	},
	[][]int{
		{29, 24, 37, 21, 2},
		{81, 0, 22, 59, 41},
		{44, 40, 72, 31, 71},
		{9, 99, 50, 65, 97},
		{55, 69, 88, 58, 96},
	},
	[][]int{
		{3, 69, 94, 88, 12},
		{40, 81, 77, 38, 6},
		{8, 35, 91, 18, 85},
		{2, 14, 73, 62, 44},
		{46, 9, 37, 1, 20},
	},
	[][]int{
		{86, 58, 85, 43, 65},
		{92, 44, 69, 2, 14},
		{83, 3, 93, 16, 49},
		{42, 59, 29, 75, 32},
		{45, 4, 48, 21, 68},
	},
	[][]int{
		{87, 65, 80, 18, 46},
		{66, 49, 78, 60, 31},
		{20, 74, 29, 96, 86},
		{12, 35, 47, 93, 16},
		{38, 91, 54, 73, 28},
	},
	[][]int{
		{26, 68, 98, 32, 67},
		{46, 61, 64, 35, 38},
		{92, 77, 70, 76, 88},
		{86, 0, 58, 13, 51},
		{96, 1, 62, 53, 8},
	},
	[][]int{
		{2, 40, 32, 62, 33},
		{84, 96, 99, 76, 95},
		{9, 1, 12, 7, 90},
		{67, 11, 14, 97, 24},
		{42, 54, 57, 45, 83},
	},
	[][]int{
		{39, 99, 37, 0, 95},
		{18, 2, 73, 31, 17},
		{32, 66, 21, 62, 9},
		{4, 78, 22, 53, 45},
		{41, 33, 71, 6, 50},
	},
	[][]int{
		{14, 12, 2, 42, 7},
		{52, 71, 90, 28, 75},
		{0, 40, 79, 39, 93},
		{84, 16, 82, 31, 94},
		{74, 36, 59, 72, 15},
	},
	[][]int{
		{7, 92, 42, 41, 22},
		{28, 31, 91, 68, 12},
		{45, 84, 83, 34, 56},
		{70, 43, 37, 54, 60},
		{61, 40, 98, 77, 17},
	},
	[][]int{
		{12, 81, 17, 27, 66},
		{49, 95, 82, 97, 85},
		{16, 58, 13, 11, 56},
		{88, 31, 36, 96, 23},
		{0, 51, 55, 22, 62},
	},
	[][]int{
		{8, 36, 9, 63, 71},
		{79, 97, 60, 16, 91},
		{93, 68, 54, 28, 32},
		{42, 57, 20, 43, 47},
		{99, 26, 67, 76, 33},
	},
	[][]int{
		{1, 55, 58, 48, 92},
		{66, 71, 89, 46, 96},
		{15, 37, 94, 14, 47},
		{22, 61, 91, 80, 51},
		{33, 44, 63, 10, 88},
	},
	[][]int{
		{5, 63, 34, 56, 0},
		{97, 22, 48, 11, 85},
		{29, 10, 61, 30, 26},
		{55, 1, 32, 27, 77},
		{80, 81, 70, 62, 33},
	},
	[][]int{
		{77, 72, 75, 41, 66},
		{7, 54, 58, 21, 70},
		{95, 30, 14, 71, 99},
		{20, 79, 22, 91, 94},
		{45, 10, 86, 18, 63},
	},
	[][]int{
		{55, 22, 21, 79, 86},
		{35, 95, 99, 60, 1},
		{25, 68, 82, 93, 14},
		{74, 28, 41, 73, 78},
		{15, 61, 70, 56, 3},
	},
	[][]int{
		{80, 35, 25, 22, 12},
		{37, 24, 97, 59, 44},
		{54, 84, 1, 33, 11},
		{9, 28, 74, 30, 95},
		{67, 81, 19, 71, 40},
	},
	[][]int{
		{10, 78, 74, 83, 8},
		{90, 86, 41, 82, 31},
		{17, 51, 54, 12, 29},
		{32, 62, 87, 2, 0},
		{98, 33, 27, 22, 64},
	},
	[][]int{
		{86, 80, 85, 28, 26},
		{44, 25, 5, 78, 87},
		{50, 70, 57, 75, 32},
		{11, 20, 52, 97, 88},
		{68, 43, 0, 7, 38},
	},
	[][]int{
		{88, 16, 10, 34, 75},
		{76, 84, 41, 1, 61},
		{49, 94, 14, 26, 36},
		{85, 77, 22, 98, 70},
		{12, 38, 3, 74, 92},
	},
	[][]int{
		{34, 91, 21, 73, 99},
		{28, 82, 69, 18, 85},
		{97, 25, 65, 61, 55},
		{96, 33, 63, 2, 77},
		{12, 41, 72, 39, 23},
	},
	[][]int{
		{0, 45, 95, 55, 34},
		{31, 77, 54, 66, 79},
		{90, 11, 49, 68, 93},
		{61, 15, 56, 4, 53},
		{57, 69, 97, 7, 6},
	},
	[][]int{
		{94, 11, 44, 83, 87},
		{27, 47, 93, 50, 38},
		{29, 55, 10, 49, 32},
		{76, 73, 91, 37, 34},
		{51, 62, 4, 85, 46},
	},
	[][]int{
		{66, 64, 5, 33, 99},
		{95, 34, 65, 69, 27},
		{49, 17, 46, 53, 76},
		{75, 9, 92, 94, 7},
		{59, 60, 2, 40, 70},
	},
	[][]int{
		{28, 80, 27, 88, 79},
		{26, 49, 81, 64, 69},
		{90, 51, 42, 83, 70},
		{46, 10, 53, 5, 96},
		{29, 99, 84, 22, 8},
	},
	[][]int{
		{86, 49, 31, 53, 28},
		{85, 94, 4, 98, 30},
		{51, 7, 48, 88, 1},
		{76, 92, 64, 29, 73},
		{81, 6, 21, 36, 74},
	},
	[][]int{
		{14, 19, 15, 97, 81},
		{92, 37, 98, 77, 33},
		{20, 24, 4, 51, 79},
		{99, 66, 43, 75, 73},
		{46, 87, 58, 93, 5},
	},
	[][]int{
		{69, 76, 46, 21, 57},
		{49, 90, 40, 34, 99},
		{70, 89, 4, 0, 23},
		{5, 86, 44, 62, 53},
		{36, 13, 61, 51, 15},
	},
	[][]int{
		{88, 37, 14, 50, 26},
		{76, 83, 24, 46, 5},
		{43, 42, 72, 17, 59},
		{6, 11, 36, 25, 19},
		{70, 53, 52, 98, 30},
	},
	[][]int{
		{87, 93, 25, 46, 74},
		{62, 16, 9, 30, 85},
		{60, 21, 29, 17, 5},
		{35, 49, 84, 53, 42},
		{13, 90, 99, 70, 48},
	},
	[][]int{
		{19, 91, 10, 89, 52},
		{71, 1, 42, 75, 83},
		{81, 32, 96, 53, 5},
		{26, 60, 3, 95, 51},
		{44, 12, 33, 76, 64},
	},
	[][]int{
		{77, 17, 29, 55, 43},
		{62, 52, 92, 53, 21},
		{74, 71, 46, 38, 7},
		{23, 79, 65, 61, 89},
		{50, 90, 83, 26, 19},
	},
	[][]int{
		{58, 85, 18, 17, 29},
		{76, 78, 91, 87, 31},
		{49, 82, 95, 89, 6},
		{53, 79, 9, 97, 25},
		{48, 68, 98, 13, 21},
	},
	[][]int{
		{40, 90, 77, 45, 48},
		{18, 54, 15, 56, 57},
		{82, 11, 36, 92, 35},
		{50, 68, 86, 0, 97},
		{24, 78, 49, 75, 62},
	},
	[][]int{
		{63, 91, 7, 16, 8},
		{90, 60, 93, 40, 45},
		{49, 28, 41, 35, 21},
		{79, 54, 5, 0, 13},
		{68, 20, 37, 55, 59},
	},
	[][]int{
		{38, 26, 33, 78, 76},
		{42, 63, 73, 98, 24},
		{77, 27, 67, 8, 30},
		{90, 13, 20, 59, 5},
		{32, 22, 1, 46, 79},
	},
	[][]int{
		{15, 39, 72, 27, 73},
		{14, 29, 34, 30, 8},
		{91, 43, 66, 75, 21},
		{7, 16, 78, 48, 41},
		{93, 83, 77, 94, 57},
	},
	[][]int{
		{22, 41, 70, 14, 73},
		{64, 4, 13, 60, 98},
		{59, 71, 12, 53, 93},
		{68, 11, 54, 95, 37},
		{58, 35, 43, 48, 87},
	},
	[][]int{
		{81, 7, 49, 42, 24},
		{86, 76, 36, 34, 16},
		{55, 73, 27, 28, 88},
		{66, 83, 58, 80, 48},
		{62, 9, 18, 96, 77},
	},
	[][]int{
		{64, 15, 37, 61, 17},
		{80, 69, 67, 98, 89},
		{22, 12, 32, 74, 47},
		{97, 23, 49, 30, 91},
		{38, 68, 53, 40, 82},
	},
	[][]int{
		{17, 1, 56, 75, 46},
		{20, 2, 98, 71, 96},
		{34, 35, 63, 73, 59},
		{7, 89, 95, 51, 16},
		{69, 81, 37, 91, 61},
	},
	[][]int{
		{3, 17, 45, 36, 59},
		{7, 24, 70, 86, 72},
		{77, 15, 34, 69, 37},
		{84, 60, 76, 33, 5},
		{26, 21, 48, 61, 12},
	},
	[][]int{
		{19, 56, 90, 95, 3},
		{68, 50, 37, 65, 27},
		{39, 35, 72, 61, 22},
		{49, 80, 24, 23, 58},
		{7, 12, 89, 94, 9},
	},
	[][]int{
		{45, 32, 90, 66, 73},
		{22, 7, 41, 21, 20},
		{49, 63, 93, 59, 15},
		{2, 82, 96, 30, 27},
		{40, 85, 6, 97, 42},
	},
	[][]int{
		{49, 12, 67, 7, 0},
		{24, 79, 48, 6, 85},
		{38, 29, 13, 11, 17},
		{1, 60, 70, 34, 87},
		{46, 75, 64, 76, 14},
	},
	[][]int{
		{27, 96, 15, 23, 54},
		{56, 39, 67, 34, 76},
		{43, 62, 14, 7, 57},
		{86, 24, 35, 94, 55},
		{38, 51, 84, 29, 16},
	},
	[][]int{
		{60, 33, 9, 97, 20},
		{92, 26, 30, 42, 7},
		{36, 56, 65, 99, 94},
		{43, 86, 41, 50, 15},
		{80, 98, 44, 96, 88},
	},
	[][]int{
		{86, 15, 65, 31, 22},
		{92, 3, 40, 46, 68},
		{39, 64, 69, 47, 74},
		{87, 19, 50, 34, 91},
		{66, 27, 2, 43, 32},
	},
	[][]int{
		{30, 73, 45, 93, 56},
		{65, 82, 0, 28, 60},
		{77, 31, 70, 46, 27},
		{7, 15, 58, 76, 35},
		{43, 92, 91, 18, 86},
	},
	[][]int{
		{31, 32, 76, 63, 61},
		{18, 40, 38, 87, 3},
		{33, 82, 65, 93, 89},
		{98, 67, 78, 70, 74},
		{6, 37, 48, 71, 0},
	},
	[][]int{
		{10, 58, 67, 66, 61},
		{60, 13, 45, 23, 96},
		{48, 73, 4, 63, 56},
		{87, 75, 94, 31, 98},
		{70, 97, 40, 19, 86},
	},
	[][]int{
		{0, 24, 58, 22, 84},
		{48, 36, 70, 40, 33},
		{94, 93, 4, 77, 56},
		{44, 18, 45, 89, 16},
		{75, 35, 79, 64, 6},
	},
	[][]int{
		{2, 47, 41, 21, 56},
		{33, 44, 51, 38, 13},
		{0, 29, 88, 12, 66},
		{64, 78, 46, 67, 50},
		{49, 94, 80, 42, 54},
	},
	[][]int{
		{71, 8, 90, 94, 5},
		{19, 43, 17, 96, 16},
		{73, 81, 53, 61, 93},
		{11, 15, 78, 56, 30},
		{66, 87, 3, 65, 52},
	},
	[][]int{
		{16, 92, 5, 78, 42},
		{56, 54, 39, 87, 61},
		{96, 28, 29, 59, 73},
		{1, 36, 8, 35, 13},
		{47, 32, 37, 81, 38},
	},
	[][]int{
		{34, 89, 41, 61, 28},
		{73, 74, 51, 63, 11},
		{6, 88, 32, 13, 92},
		{69, 57, 33, 27, 79},
		{12, 35, 43, 84, 44},
	},
	[][]int{
		{37, 84, 77, 75, 19},
		{22, 17, 99, 85, 95},
		{10, 48, 36, 56, 32},
		{82, 29, 13, 89, 2},
		{16, 74, 53, 43, 3},
	},
	[][]int{
		{87, 9, 18, 33, 77},
		{7, 26, 68, 46, 61},
		{5, 36, 8, 96, 16},
		{88, 3, 92, 94, 74},
		{60, 15, 22, 49, 43},
	},
	[][]int{
		{96, 94, 89, 48, 55},
		{84, 5, 8, 83, 51},
		{12, 11, 40, 97, 53},
		{75, 62, 71, 18, 63},
		{16, 19, 58, 82, 44},
	},
	[][]int{
		{31, 39, 17, 45, 16},
		{54, 92, 95, 37, 65},
		{55, 30, 34, 3, 59},
		{41, 66, 48, 56, 91},
		{18, 88, 61, 15, 28},
	},
	[][]int{
		{12, 26, 96, 2, 56},
		{65, 9, 31, 51, 17},
		{78, 54, 94, 80, 76},
		{87, 16, 30, 20, 59},
		{45, 64, 10, 29, 71},
	},
	[][]int{
		{24, 26, 47, 90, 97},
		{82, 86, 20, 17, 30},
		{93, 11, 41, 3, 68},
		{42, 52, 88, 22, 57},
		{83, 49, 69, 0, 73},
	},
	[][]int{
		{55, 90, 51, 38, 92},
		{96, 61, 50, 34, 63},
		{78, 72, 8, 73, 85},
		{25, 76, 45, 89, 32},
		{58, 54, 1, 9, 16},
	},
	[][]int{
		{32, 89, 12, 43, 58},
		{59, 6, 54, 91, 17},
		{2, 37, 99, 78, 45},
		{57, 63, 29, 90, 21},
		{66, 83, 34, 0, 61},
	},
	[][]int{
		{58, 55, 63, 0, 6},
		{15, 90, 57, 39, 56},
		{8, 76, 20, 89, 30},
		{61, 79, 83, 70, 42},
		{78, 81, 43, 64, 41},
	},
	[][]int{
		{93, 14, 57, 55, 53},
		{84, 0, 24, 22, 54},
		{5, 90, 87, 26, 13},
		{4, 46, 64, 18, 17},
		{9, 58, 67, 68, 92},
	},
	[][]int{
		{39, 76, 85, 24, 9},
		{36, 27, 93, 64, 33},
		{40, 73, 31, 74, 41},
		{0, 10, 57, 5, 91},
		{4, 16, 59, 54, 96},
	},
	[][]int{
		{34, 82, 54, 14, 87},
		{59, 21, 1, 30, 60},
		{27, 45, 71, 58, 97},
		{4, 72, 70, 85, 39},
		{38, 74, 96, 12, 91},
	},
	[][]int{
		{48, 78, 3, 42, 24},
		{26, 85, 56, 4, 80},
		{35, 8, 29, 93, 55},
		{91, 73, 7, 75, 54},
		{1, 61, 88, 74, 99},
	},
	[][]int{
		{68, 40, 41, 63, 17},
		{73, 61, 45, 57, 66},
		{14, 15, 78, 0, 6},
		{33, 46, 47, 95, 82},
		{92, 48, 10, 1, 70},
	},
	[][]int{
		{79, 19, 88, 55, 81},
		{40, 35, 15, 63, 21},
		{85, 26, 57, 97, 39},
		{71, 24, 60, 89, 22},
		{5, 27, 49, 28, 38},
	},
	[][]int{
		{3, 90, 23, 80, 78},
		{74, 89, 53, 63, 14},
		{48, 56, 72, 71, 29},
		{15, 36, 45, 83, 39},
		{50, 44, 28, 67, 97},
	},
	[][]int{
		{91, 22, 63, 55, 26},
		{69, 4, 11, 42, 75},
		{92, 65, 48, 28, 72},
		{51, 79, 15, 80, 68},
		{98, 59, 24, 64, 9},
	},
	[][]int{
		{48, 87, 47, 81, 6},
		{35, 60, 59, 69, 20},
		{62, 99, 41, 21, 63},
		{51, 46, 19, 12, 84},
		{80, 57, 28, 64, 32},
	},
	[][]int{
		{86, 53, 52, 33, 25},
		{39, 90, 40, 95, 88},
		{6, 61, 78, 46, 91},
		{2, 74, 76, 70, 89},
		{18, 96, 56, 12, 16},
	},
	[][]int{
		{65, 17, 39, 45, 85},
		{31, 87, 63, 47, 22},
		{38, 1, 3, 80, 20},
		{25, 62, 13, 12, 72},
		{95, 36, 11, 86, 67},
	},
	[][]int{
		{75, 92, 82, 14, 8},
		{16, 20, 72, 77, 23},
		{0, 61, 9, 50, 18},
		{96, 19, 21, 63, 70},
		{76, 80, 53, 64, 41},
	},
	[][]int{
		{60, 20, 69, 68, 35},
		{64, 9, 29, 14, 15},
		{49, 75, 53, 88, 98},
		{95, 28, 7, 42, 25},
		{5, 74, 80, 1, 4},
	},
	[][]int{
		{41, 6, 58, 42, 85},
		{75, 65, 50, 0, 7},
		{82, 80, 12, 5, 61},
		{19, 48, 21, 87, 47},
		{71, 14, 24, 8, 23},
	},
	[][]int{
		{95, 81, 9, 27, 75},
		{93, 33, 63, 89, 32},
		{46, 8, 59, 51, 28},
		{37, 6, 67, 57, 52},
		{68, 4, 0, 44, 14},
	},
	[][]int{
		{5, 88, 61, 35, 85},
		{68, 92, 48, 74, 6},
		{13, 53, 55, 94, 25},
		{12, 15, 52, 86, 96},
		{23, 76, 16, 45, 82},
	},
	[][]int{
		{54, 35, 90, 57, 30},
		{58, 25, 97, 89, 41},
		{62, 75, 5, 0, 94},
		{86, 93, 77, 37, 16},
		{68, 48, 33, 76, 20},
	},
	[][]int{
		{61, 87, 30, 76, 49},
		{36, 39, 74, 63, 23},
		{92, 82, 21, 45, 79},
		{33, 59, 57, 83, 10},
		{6, 51, 93, 85, 81},
	},
	[][]int{
		{13, 50, 17, 52, 73},
		{59, 38, 46, 87, 96},
		{35, 63, 21, 3, 8},
		{6, 97, 90, 23, 71},
		{95, 27, 66, 77, 15},
	},
	[][]int{
		{87, 69, 71, 2, 38},
		{0, 64, 14, 92, 33},
		{12, 46, 15, 89, 97},
		{48, 41, 43, 52, 44},
		{16, 21, 74, 31, 60},
	},
	[][]int{
		{6, 71, 87, 35, 74},
		{40, 16, 19, 73, 69},
		{1, 67, 42, 78, 23},
		{49, 59, 65, 45, 53},
		{48, 82, 30, 72, 39},
	},
	[][]int{
		{39, 31, 13, 2, 38},
		{60, 65, 18, 7, 1},
		{74, 23, 78, 51, 4},
		{50, 61, 83, 94, 25},
		{34, 3, 80, 6, 87},
	},
	[][]int{
		{87, 15, 42, 55, 64},
		{93, 30, 83, 80, 46},
		{24, 81, 26, 31, 8},
		{84, 14, 67, 82, 23},
		{75, 22, 94, 74, 40},
	},
	[][]int{
		{40, 21, 75, 2, 78},
		{25, 15, 49, 61, 55},
		{98, 70, 92, 93, 63},
		{53, 1, 0, 33, 32},
		{12, 59, 18, 44, 73},
	},
	[][]int{
		{78, 11, 12, 58, 61},
		{26, 8, 51, 28, 69},
		{64, 35, 89, 95, 1},
		{20, 79, 62, 13, 83},
		{53, 7, 84, 18, 34},
	},
}

func TestDay4(t *testing.T) {
	if res := day4(draws, boards); res != 10374 {
		t.Errorf("expected res is 10374, what you get is %d", res)
	}
}
