788 lines
19 KiB
Haskell
788 lines
19 KiB
Haskell
import Data.Maybe ( catMaybes )
|
|
import Data.List ( find )
|
|
|
|
randoms :: [Int]
|
|
randoms = [13,47,64,52,60,69,80,85,57,1,2,6,30,81,86,40,27,26,97,77,70,92,43,94,8,78,3,88,93,17,55,49,32,59,51,28,33,41,83,67,11,91,53,36,96,7,34,79,98,72,39,56,31,75,82,62,99,66,29,58,9,50,54,12,45,68,4,46,38,21,24,18,44,48,16,61,19,0,90,35,65,37,73,20,22,89,42,23,15,87,74,10,71,25,14,76,84,5,63,95]
|
|
|
|
update 0 (_:rest) newValue = newValue : rest
|
|
update n (first:rest) newValue = first : update (n - 1) rest newValue
|
|
update _ [] _ = []
|
|
|
|
updateMatrix :: (Int, Int) -> [[t]] -> t -> [[t]]
|
|
updateMatrix (x, y) matrix newValue = update y matrix $ update x (matrix !! y) newValue
|
|
|
|
|
|
newtype Board = Board [[Maybe Int]] deriving Show
|
|
|
|
board :: [[Int]] -> Board
|
|
board list = Board $ (map $ map Just) list
|
|
|
|
boards :: [Board]
|
|
boards = [
|
|
board [
|
|
[88, 67, 20, 19, 15],
|
|
[22, 76, 86, 44, 73],
|
|
[ 7, 42, 6, 69, 25],
|
|
[12, 68, 92, 21, 75],
|
|
[97, 45, 13, 52, 70]
|
|
],
|
|
board [
|
|
[75, 98, 24, 18, 77],
|
|
[17, 93, 46, 49, 13],
|
|
[92, 56, 97, 57, 66],
|
|
[44, 0, 65, 54, 74],
|
|
[23, 6, 53, 42, 20]
|
|
],
|
|
board [
|
|
[92, 94, 9, 27, 41],
|
|
[73, 28, 62, 90, 40],
|
|
[78, 3, 12, 37, 32],
|
|
[ 8, 86, 91, 16, 30],
|
|
[84, 38, 68, 11, 19]
|
|
],
|
|
board [
|
|
[51, 5, 12, 76, 97],
|
|
[72, 31, 15, 61, 71],
|
|
[38, 32, 55, 87, 10],
|
|
[91, 4, 85, 84, 53],
|
|
[59, 79, 28, 69, 23]
|
|
],
|
|
board [
|
|
[35, 48, 10, 81, 60],
|
|
[25, 86, 24, 43, 15],
|
|
[44, 55, 12, 54, 62],
|
|
[94, 89, 95, 2, 23],
|
|
[64, 63, 45, 50, 66]
|
|
],
|
|
board [
|
|
[80, 87, 49, 88, 39],
|
|
[33, 81, 95, 68, 55],
|
|
[83, 46, 36, 41, 54],
|
|
[90, 74, 3, 52, 7],
|
|
[71, 40, 35, 8, 77]
|
|
],
|
|
board [
|
|
[34, 21, 24, 8, 97],
|
|
[99, 23, 94, 70, 9],
|
|
[14, 98, 2, 11, 10],
|
|
[16, 38, 92, 13, 35],
|
|
[82, 25, 76, 42, 39]
|
|
],
|
|
board [
|
|
[52, 76, 98, 25, 3],
|
|
[24, 41, 13, 39, 56],
|
|
[11, 72, 77, 47, 86],
|
|
[50, 32, 26, 88, 48],
|
|
[18, 99, 22, 78, 58]
|
|
],
|
|
board [
|
|
[22, 24, 53, 84, 80],
|
|
[26, 97, 42, 95, 11],
|
|
[ 1, 59, 81, 7, 35],
|
|
[47, 14, 40, 63, 30],
|
|
[37, 31, 10, 50, 43]
|
|
],
|
|
board [
|
|
[26, 86, 85, 69, 45],
|
|
[81, 43, 96, 12, 42],
|
|
[ 7, 36, 5, 28, 95],
|
|
[55, 90, 54, 4, 46],
|
|
[52, 30, 79, 59, 87]
|
|
],
|
|
board [
|
|
[76, 87, 62, 13, 38],
|
|
[40, 44, 75, 2, 37],
|
|
[51, 22, 58, 84, 57],
|
|
[ 1, 29, 82, 67, 35],
|
|
[39, 20, 31, 77, 32]
|
|
],
|
|
board [
|
|
[53, 62, 61, 26, 95],
|
|
[78, 44, 9, 5, 97],
|
|
[83, 11, 18, 69, 2],
|
|
[94, 66, 8, 14, 27],
|
|
[ 1, 6, 7, 73, 76]
|
|
],
|
|
board [
|
|
[87, 34, 62, 93, 43],
|
|
[49, 20, 63, 29, 22],
|
|
[30, 94, 11, 5, 69],
|
|
[74, 9, 89, 41, 37],
|
|
[98, 38, 72, 13, 97]
|
|
],
|
|
board [
|
|
[69, 39, 15, 59, 14],
|
|
[42, 84, 56, 23, 1],
|
|
[99, 16, 62, 83, 89],
|
|
[32, 36, 33, 24, 3],
|
|
[22, 31, 55, 10, 13]
|
|
],
|
|
board [
|
|
[22, 44, 75, 3, 17],
|
|
[51, 79, 37, 59, 19],
|
|
[98, 4, 86, 35, 34],
|
|
[36, 20, 85, 5, 23],
|
|
[62, 92, 43, 7, 90]
|
|
],
|
|
board [
|
|
[ 3, 68, 95, 51, 71],
|
|
[20, 62, 47, 4, 30],
|
|
[60, 91, 27, 86, 73],
|
|
[14, 76, 66, 97, 85],
|
|
[79, 65, 8, 11, 36]
|
|
],
|
|
board [
|
|
[38, 63, 1, 64, 14],
|
|
[10, 52, 17, 90, 98],
|
|
[28, 61, 29, 20, 55],
|
|
[49, 58, 43, 3, 7],
|
|
[88, 81, 67, 32, 68]
|
|
],
|
|
board [
|
|
[63, 65, 15, 61, 57],
|
|
[47, 94, 6, 14, 49],
|
|
[42, 3, 83, 96, 31],
|
|
[23, 77, 1, 70, 18],
|
|
[45, 36, 64, 48, 35]
|
|
],
|
|
board [
|
|
[ 8, 92, 88, 32, 95],
|
|
[26, 41, 34, 11, 48],
|
|
[81, 35, 36, 62, 28],
|
|
[64, 33, 52, 97, 82],
|
|
[ 7, 37, 78, 0, 86]
|
|
],
|
|
board [
|
|
[75, 64, 84, 80, 60],
|
|
[17, 5, 55, 95, 70],
|
|
[ 0, 90, 68, 53, 93],
|
|
[ 8, 50, 38, 9, 65],
|
|
[97, 35, 26, 30, 6]
|
|
],
|
|
board [
|
|
[76, 87, 36, 5, 74],
|
|
[79, 94, 82, 48, 20],
|
|
[24, 88, 90, 62, 45],
|
|
[ 9, 40, 78, 22, 68],
|
|
[73, 71, 35, 42, 66]
|
|
],
|
|
board [
|
|
[52, 11, 17, 9, 72],
|
|
[45, 13, 90, 0, 80],
|
|
[93, 77, 37, 51, 96],
|
|
[ 3, 68, 94, 61, 1],
|
|
[26, 78, 12, 29, 66]
|
|
],
|
|
board [
|
|
[49, 14, 74, 11, 48],
|
|
[73, 58, 54, 3, 40],
|
|
[90, 38, 62, 18, 26],
|
|
[53, 93, 19, 41, 94],
|
|
[35, 63, 7, 80, 68]
|
|
],
|
|
board [
|
|
[13, 19, 92, 38, 1],
|
|
[63, 69, 4, 99, 36],
|
|
[53, 57, 54, 21, 80],
|
|
[97, 17, 2, 44, 29],
|
|
[ 0, 3, 89, 45, 58]
|
|
],
|
|
board [
|
|
[ 9, 26, 45, 57, 67],
|
|
[72, 10, 59, 79, 88],
|
|
[32, 2, 87, 42, 60],
|
|
[62, 98, 1, 93, 28],
|
|
[24, 99, 41, 44, 29]
|
|
],
|
|
board [
|
|
[57, 60, 54, 36, 84],
|
|
[28, 5, 32, 66, 77],
|
|
[13, 19, 42, 39, 37],
|
|
[56, 89, 74, 50, 55],
|
|
[ 8, 71, 78, 0, 80]
|
|
],
|
|
board [
|
|
[62, 38, 24, 44, 4],
|
|
[17, 8, 70, 77, 86],
|
|
[98, 6, 9, 88, 23],
|
|
[85, 63, 78, 60, 72],
|
|
[71, 48, 36, 69, 81]
|
|
],
|
|
board [
|
|
[84, 19, 8, 20, 17],
|
|
[40, 88, 33, 52, 81],
|
|
[29, 83, 11, 36, 92],
|
|
[66, 6, 73, 32, 82],
|
|
[44, 39, 26, 60, 63]
|
|
],
|
|
board [
|
|
[13, 73, 45, 32, 42],
|
|
[69, 20, 83, 8, 84],
|
|
[82, 61, 11, 89, 25],
|
|
[ 6, 92, 99, 52, 57],
|
|
[88, 22, 46, 26, 86]
|
|
],
|
|
board [
|
|
[74, 65, 17, 64, 94],
|
|
[19, 34, 40, 69, 80],
|
|
[43, 83, 45, 77, 87],
|
|
[41, 49, 13, 51, 89],
|
|
[91, 72, 54, 1, 60]
|
|
],
|
|
board [
|
|
[38, 10, 16, 51, 46],
|
|
[80, 60, 64, 62, 70],
|
|
[89, 71, 58, 49, 39],
|
|
[37, 5, 35, 88, 40],
|
|
[93, 72, 98, 42, 13]
|
|
],
|
|
board [
|
|
[ 9, 47, 91, 69, 68],
|
|
[27, 1, 49, 60, 13],
|
|
[ 6, 17, 95, 59, 35],
|
|
[26, 14, 75, 57, 11],
|
|
[15, 18, 19, 46, 74]
|
|
],
|
|
board [
|
|
[88, 66, 25, 89, 6],
|
|
[63, 4, 56, 73, 8],
|
|
[57, 0, 51, 5, 36],
|
|
[68, 96, 84, 67, 53],
|
|
[49, 82, 7, 32, 9]
|
|
],
|
|
board [
|
|
[81, 75, 92, 1, 62],
|
|
[ 0, 96, 27, 63, 46],
|
|
[76, 31, 93, 67, 12],
|
|
[74, 78, 59, 5, 60],
|
|
[69, 33, 25, 94, 43]
|
|
],
|
|
board [
|
|
[40, 72, 79, 58, 22],
|
|
[16, 24, 99, 96, 44],
|
|
[69, 4, 87, 90, 26],
|
|
[34, 43, 56, 15, 35],
|
|
[63, 88, 89, 52, 54]
|
|
],
|
|
board [
|
|
[43, 7, 44, 31, 24],
|
|
[71, 18, 84, 17, 64],
|
|
[ 8, 47, 93, 85, 36],
|
|
[72, 29, 22, 67, 74],
|
|
[69, 41, 58, 98, 61]
|
|
],
|
|
board [
|
|
[55, 21, 72, 14, 3],
|
|
[75, 12, 69, 91, 54],
|
|
[80, 40, 78, 39, 4],
|
|
[44, 88, 84, 76, 25],
|
|
[96, 57, 49, 52, 28]
|
|
],
|
|
board [
|
|
[54, 74, 32, 40, 64],
|
|
[ 5, 94, 71, 80, 22],
|
|
[82, 92, 79, 93, 16],
|
|
[53, 33, 98, 85, 14],
|
|
[29, 49, 9, 47, 12]
|
|
],
|
|
board [
|
|
[98, 67, 8, 10, 6],
|
|
[58, 13, 77, 99, 81],
|
|
[ 5, 55, 21, 19, 1],
|
|
[ 0, 26, 44, 70, 93],
|
|
[41, 96, 31, 91, 27]
|
|
],
|
|
board [
|
|
[50, 28, 48, 13, 18],
|
|
[96, 43, 25, 2, 78],
|
|
[88, 60, 0, 16, 73],
|
|
[12, 32, 15, 68, 22],
|
|
[95, 74, 10, 80, 21]
|
|
],
|
|
board [
|
|
[18, 49, 85, 55, 21],
|
|
[11, 68, 80, 59, 41],
|
|
[56, 94, 14, 62, 60],
|
|
[32, 20, 40, 6, 2],
|
|
[42, 66, 98, 71, 17]
|
|
],
|
|
board [
|
|
[13, 38, 1, 63, 82],
|
|
[33, 55, 54, 53, 92],
|
|
[36, 20, 39, 84, 83],
|
|
[67, 43, 70, 73, 75],
|
|
[94, 77, 76, 29, 16]
|
|
],
|
|
board [
|
|
[82, 27, 25, 18, 86],
|
|
[73, 3, 36, 28, 1],
|
|
[11, 96, 40, 23, 93],
|
|
[58, 90, 88, 35, 64],
|
|
[ 9, 38, 69, 8, 43]
|
|
],
|
|
board [
|
|
[87, 90, 16, 56, 67],
|
|
[41, 75, 89, 1, 80],
|
|
[22, 62, 5, 45, 69],
|
|
[28, 36, 19, 96, 71],
|
|
[26, 63, 88, 76, 31]
|
|
],
|
|
board [
|
|
[68, 80, 83, 95, 20],
|
|
[75, 0, 16, 38, 21],
|
|
[34, 89, 87, 36, 14],
|
|
[94, 47, 53, 73, 71],
|
|
[63, 8, 61, 96, 50]
|
|
],
|
|
board [
|
|
[81, 23, 6, 14, 26],
|
|
[86, 42, 82, 95, 85],
|
|
[77, 52, 38, 2, 33],
|
|
[69, 98, 54, 37, 4],
|
|
[78, 39, 3, 75, 80]
|
|
],
|
|
board [
|
|
[92, 99, 93, 28, 44],
|
|
[ 5, 8, 67, 45, 10],
|
|
[61, 79, 63, 85, 81],
|
|
[ 2, 87, 76, 68, 18],
|
|
[69, 52, 22, 16, 12]
|
|
],
|
|
board [
|
|
[95, 50, 21, 82, 60],
|
|
[ 5, 8, 6, 28, 26],
|
|
[52, 3, 38, 70, 74],
|
|
[75, 0, 53, 51, 44],
|
|
[10, 30, 34, 47, 71]
|
|
],
|
|
board [
|
|
[71, 44, 65, 48, 51],
|
|
[78, 57, 75, 6, 86],
|
|
[95, 58, 66, 12, 92],
|
|
[22, 61, 68, 88, 50],
|
|
[ 4, 36, 45, 28, 54]
|
|
],
|
|
board [
|
|
[37, 17, 5, 2, 52],
|
|
[57, 47, 4, 53, 39],
|
|
[11, 72, 66, 81, 46],
|
|
[27, 0, 67, 40, 83],
|
|
[98, 19, 10, 35, 84]
|
|
],
|
|
board [
|
|
[43, 59, 30, 72, 17],
|
|
[66, 50, 12, 84, 65],
|
|
[49, 60, 14, 1, 29],
|
|
[89, 75, 62, 82, 47],
|
|
[33, 5, 9, 58, 45]
|
|
],
|
|
board [
|
|
[14, 9, 3, 47, 74],
|
|
[69, 29, 57, 62, 22],
|
|
[ 4, 90, 40, 64, 15],
|
|
[21, 27, 30, 2, 63],
|
|
[97, 96, 99, 55, 41]
|
|
],
|
|
board [
|
|
[75, 73, 3, 59, 80],
|
|
[65, 34, 52, 20, 72],
|
|
[50, 84, 81, 69, 41],
|
|
[97, 77, 19, 85, 39],
|
|
[88, 46, 15, 35, 87]
|
|
],
|
|
board [
|
|
[96, 42, 74, 38, 78],
|
|
[58, 73, 67, 70, 10],
|
|
[62, 8, 82, 64, 16],
|
|
[65, 25, 13, 3, 89],
|
|
[40, 30, 53, 95, 51]
|
|
],
|
|
board [
|
|
[ 7, 16, 92, 88, 38],
|
|
[14, 52, 46, 93, 64],
|
|
[49, 48, 8, 76, 51],
|
|
[97, 67, 89, 75, 19],
|
|
[69, 9, 29, 43, 82]
|
|
],
|
|
board [
|
|
[81, 51, 24, 57, 9],
|
|
[46, 43, 77, 11, 35],
|
|
[83, 5, 14, 25, 84],
|
|
[70, 99, 47, 37, 16],
|
|
[ 3, 39, 75, 97, 80]
|
|
],
|
|
board [
|
|
[18, 74, 64, 6, 94],
|
|
[12, 59, 46, 48, 31],
|
|
[73, 77, 33, 1, 39],
|
|
[ 0, 69, 10, 24, 56],
|
|
[83, 66, 5, 76, 58]
|
|
],
|
|
board [
|
|
[40, 48, 72, 65, 2],
|
|
[19, 28, 93, 53, 44],
|
|
[75, 85, 42, 68, 66],
|
|
[99, 49, 55, 31, 41],
|
|
[94, 35, 78, 13, 61]
|
|
],
|
|
board [
|
|
[ 4, 20, 54, 33, 21],
|
|
[50, 61, 17, 53, 64],
|
|
[69, 30, 24, 90, 95],
|
|
[82, 51, 39, 52, 67],
|
|
[43, 73, 44, 62, 83]
|
|
],
|
|
board [
|
|
[31, 32, 63, 42, 60],
|
|
[39, 41, 28, 51, 53],
|
|
[15, 20, 24, 54, 5],
|
|
[ 9, 65, 70, 57, 99],
|
|
[50, 29, 35, 4, 47]
|
|
],
|
|
board [
|
|
[40, 99, 95, 72, 35],
|
|
[10, 14, 52, 83, 19],
|
|
[ 5, 51, 87, 49, 16],
|
|
[60, 66, 13, 63, 93],
|
|
[68, 57, 31, 6, 78]
|
|
],
|
|
board [
|
|
[58, 96, 49, 87, 28],
|
|
[95, 50, 54, 53, 52],
|
|
[24, 16, 64, 9, 5],
|
|
[ 7, 63, 8, 4, 17],
|
|
[59, 98, 3, 31, 25]
|
|
],
|
|
board [
|
|
[31, 83, 61, 58, 93],
|
|
[94, 52, 97, 30, 98],
|
|
[99, 2, 13, 66, 73],
|
|
[69, 71, 68, 40, 19],
|
|
[74, 84, 45, 25, 77]
|
|
],
|
|
board [
|
|
[58, 85, 45, 64, 74],
|
|
[18, 88, 91, 53, 2],
|
|
[93, 0, 92, 55, 39],
|
|
[75, 49, 87, 80, 4],
|
|
[89, 97, 57, 14, 54]
|
|
],
|
|
board [
|
|
[20, 92, 64, 50, 25],
|
|
[52, 90, 80, 31, 38],
|
|
[55, 54, 10, 76, 21],
|
|
[95, 97, 4, 77, 19],
|
|
[30, 26, 12, 39, 11]
|
|
],
|
|
board [
|
|
[71, 10, 84, 68, 77],
|
|
[48, 82, 69, 75, 3],
|
|
[93, 24, 16, 42, 60],
|
|
[15, 62, 76, 36, 20],
|
|
[21, 18, 94, 22, 45]
|
|
],
|
|
board [
|
|
[10, 91, 66, 56, 75],
|
|
[ 6, 8, 45, 59, 83],
|
|
[52, 93, 48, 81, 87],
|
|
[99, 78, 43, 64, 84],
|
|
[21, 12, 61, 71, 9]
|
|
],
|
|
board [
|
|
[98, 77, 95, 63, 15],
|
|
[30, 14, 39, 12, 20],
|
|
[13, 32, 27, 0, 5],
|
|
[86, 80, 51, 40, 99],
|
|
[68, 44, 26, 29, 91]
|
|
],
|
|
board [
|
|
[92, 79, 49, 44, 33],
|
|
[88, 4, 34, 3, 90],
|
|
[51, 46, 31, 50, 47],
|
|
[61, 11, 94, 6, 24],
|
|
[72, 18, 98, 65, 57]
|
|
],
|
|
board [
|
|
[88, 94, 93, 11, 33],
|
|
[75, 77, 53, 54, 51],
|
|
[97, 15, 89, 38, 76],
|
|
[47, 64, 55, 22, 0],
|
|
[40, 56, 34, 19, 3]
|
|
],
|
|
board [
|
|
[36, 55, 51, 86, 91],
|
|
[49, 21, 78, 6, 58],
|
|
[90, 1, 88, 45, 33],
|
|
[37, 69, 75, 41, 50],
|
|
[81, 24, 34, 38, 93]
|
|
],
|
|
board [
|
|
[21, 73, 99, 50, 65],
|
|
[72, 77, 86, 7, 68],
|
|
[24, 63, 71, 26, 25],
|
|
[ 9, 12, 29, 93, 87],
|
|
[81, 23, 22, 94, 67]
|
|
],
|
|
board [
|
|
[37, 47, 66, 89, 73],
|
|
[49, 23, 79, 31, 86],
|
|
[58, 52, 21, 39, 15],
|
|
[60, 38, 82, 50, 36],
|
|
[74, 30, 25, 35, 99]
|
|
],
|
|
board [
|
|
[ 6, 18, 53, 36, 87],
|
|
[ 3, 59, 50, 2, 75],
|
|
[69, 61, 57, 19, 63],
|
|
[44, 77, 42, 22, 7],
|
|
[89, 29, 45, 35, 71]
|
|
],
|
|
board [
|
|
[28, 26, 53, 47, 21],
|
|
[31, 71, 27, 58, 85],
|
|
[10, 20, 74, 59, 42],
|
|
[89, 44, 12, 91, 54],
|
|
[32, 87, 36, 22, 7]
|
|
],
|
|
board [
|
|
[62, 17, 61, 75, 51],
|
|
[44, 60, 37, 14, 76],
|
|
[96, 0, 1, 52, 5],
|
|
[57, 42, 97, 66, 90],
|
|
[12, 23, 50, 98, 25]
|
|
],
|
|
board [
|
|
[42, 30, 86, 89, 66],
|
|
[41, 98, 39, 29, 23],
|
|
[75, 73, 20, 79, 90],
|
|
[38, 60, 45, 16, 18],
|
|
[17, 10, 47, 5, 13]
|
|
],
|
|
board [
|
|
[ 4, 10, 26, 74, 38],
|
|
[66, 84, 60, 23, 57],
|
|
[30, 59, 58, 2, 49],
|
|
[83, 82, 70, 64, 43],
|
|
[71, 31, 35, 90, 0]
|
|
],
|
|
board [
|
|
[27, 99, 33, 56, 3],
|
|
[41, 97, 1, 68, 88],
|
|
[43, 63, 81, 89, 22],
|
|
[30, 32, 59, 64, 12],
|
|
[84, 58, 10, 39, 76]
|
|
],
|
|
board [
|
|
[98, 16, 75, 27, 57],
|
|
[ 0, 9, 3, 79, 50],
|
|
[ 5, 34, 93, 6, 21],
|
|
[52, 70, 87, 31, 49],
|
|
[58, 46, 24, 20, 45]
|
|
],
|
|
board [
|
|
[78, 24, 19, 13, 30],
|
|
[83, 59, 79, 37, 72],
|
|
[84, 81, 99, 17, 77],
|
|
[10, 93, 3, 33, 70],
|
|
[29, 35, 49, 6, 5]
|
|
],
|
|
board [
|
|
[47, 6, 82, 94, 53],
|
|
[83, 19, 25, 54, 64],
|
|
[ 9, 56, 39, 31, 96],
|
|
[ 1, 81, 66, 41, 5],
|
|
[55, 48, 43, 12, 14]
|
|
],
|
|
board [
|
|
[47, 55, 86, 31, 17],
|
|
[89, 45, 65, 34, 56],
|
|
[99, 88, 18, 97, 3],
|
|
[52, 21, 14, 68, 13],
|
|
[ 9, 26, 22, 7, 32]
|
|
],
|
|
board [
|
|
[75, 27, 62, 19, 72],
|
|
[20, 49, 7, 21, 85],
|
|
[53, 46, 1, 59, 99],
|
|
[61, 71, 87, 24, 83],
|
|
[ 5, 77, 41, 51, 73]
|
|
],
|
|
board [
|
|
[57, 59, 82, 77, 52],
|
|
[99, 49, 81, 37, 54],
|
|
[70, 89, 23, 20, 90],
|
|
[31, 1, 21, 98, 66],
|
|
[86, 35, 46, 36, 18]
|
|
],
|
|
board [
|
|
[37, 39, 70, 76, 27],
|
|
[68, 84, 25, 1, 33],
|
|
[50, 82, 77, 20, 44],
|
|
[18, 11, 51, 62, 54],
|
|
[80, 67, 35, 89, 30]
|
|
],
|
|
board [
|
|
[85, 96, 1, 3, 73],
|
|
[25, 47, 10, 46, 98],
|
|
[ 2, 33, 91, 71, 35],
|
|
[ 0, 32, 11, 55, 67],
|
|
[14, 81, 17, 5, 94]
|
|
],
|
|
board [
|
|
[68, 84, 46, 43, 81],
|
|
[42, 35, 48, 89, 30],
|
|
[ 4, 17, 65, 77, 6],
|
|
[49, 97, 85, 12, 66],
|
|
[75, 25, 13, 90, 51]
|
|
],
|
|
board [
|
|
[94, 42, 46, 58, 56],
|
|
[97, 50, 86, 84, 15],
|
|
[52, 9, 28, 32, 59],
|
|
[26, 96, 91, 57, 83],
|
|
[29, 99, 18, 31, 43]
|
|
],
|
|
board [
|
|
[ 2, 19, 31, 10, 32],
|
|
[81, 16, 50, 59, 7],
|
|
[76, 30, 63, 44, 95],
|
|
[82, 54, 61, 75, 36],
|
|
[85, 78, 12, 67, 9]
|
|
],
|
|
board [
|
|
[92, 1, 72, 27, 37],
|
|
[22, 13, 91, 4, 34],
|
|
[53, 82, 76, 70, 19],
|
|
[99, 38, 59, 33, 52],
|
|
[ 0, 61, 36, 67, 75]
|
|
],
|
|
board [
|
|
[94, 41, 5, 57, 1],
|
|
[37, 36, 99, 34, 47],
|
|
[40, 93, 62, 32, 76],
|
|
[61, 75, 48, 42, 73],
|
|
[35, 69, 54, 13, 50]
|
|
],
|
|
board [
|
|
[76, 12, 51, 11, 74],
|
|
[30, 83, 73, 33, 78],
|
|
[95, 77, 15, 14, 80],
|
|
[86, 37, 91, 50, 10],
|
|
[52, 67, 3, 60, 17]
|
|
],
|
|
board [
|
|
[68, 7, 42, 81, 15],
|
|
[46, 58, 9, 31, 18],
|
|
[91, 1, 28, 34, 37],
|
|
[17, 57, 6, 2, 70],
|
|
[97, 54, 20, 27, 44]
|
|
],
|
|
board [
|
|
[44, 80, 45, 28, 14],
|
|
[94, 47, 29, 50, 54],
|
|
[64, 67, 96, 95, 93],
|
|
[76, 36, 82, 39, 43],
|
|
[30, 55, 97, 3, 2]
|
|
],
|
|
board [
|
|
[43, 2, 15, 99, 34],
|
|
[97, 75, 26, 9, 67],
|
|
[30, 63, 74, 12, 82],
|
|
[18, 6, 49, 48, 55],
|
|
[47, 36, 41, 56, 83]
|
|
],
|
|
board [
|
|
[26, 70, 87, 80, 89],
|
|
[17, 50, 61, 21, 96],
|
|
[43, 83, 85, 46, 64],
|
|
[66, 75, 23, 47, 69],
|
|
[22, 72, 55, 52, 8]
|
|
],
|
|
board [
|
|
[67, 54, 11, 29, 42],
|
|
[16, 45, 56, 86, 66],
|
|
[ 4, 80, 43, 72, 91],
|
|
[90, 87, 63, 39, 50],
|
|
[32, 6, 59, 27, 89]
|
|
],
|
|
board [
|
|
[14, 92, 78, 47, 59],
|
|
[98, 0, 63, 85, 31],
|
|
[52, 8, 84, 70, 91],
|
|
[43, 3, 76, 65, 57],
|
|
[87, 22, 99, 94, 58]
|
|
],
|
|
board [
|
|
[26, 53, 58, 52, 1],
|
|
[82, 57, 32, 40, 20],
|
|
[72, 21, 74, 46, 43],
|
|
[41, 15, 98, 2, 11],
|
|
[ 5, 96, 22, 18, 55]
|
|
]
|
|
]
|
|
|
|
row n (Board board) = board !! n
|
|
column n (Board board) = [ x !! n | x <- board ]
|
|
|
|
score :: Board -> Int
|
|
score (Board board) = sum $ catMaybes $ concat board
|
|
|
|
mark :: Board -> (Int, Int) -> Either Board Int
|
|
mark (Board board) pos = if isWin then Right $ score newBoard else Left newBoard
|
|
where
|
|
newBoard = Board $ updateMatrix pos board Nothing
|
|
isWin = row y newBoard == cleared || column x newBoard == cleared
|
|
(x, y) = pos
|
|
cleared = replicate 5 Nothing
|
|
|
|
findPosition :: Board -> Int -> Maybe (Int, Int)
|
|
findPosition (Board board) value = find (\(x,y) -> board !! y !! x == Just value) indexes
|
|
where
|
|
indexes = [(x,y) | x <- [0..4], y <- [0..4]]
|
|
|
|
markTile :: Board -> Int -> Either Board Int
|
|
markTile board num = case pos of
|
|
Nothing -> Left board
|
|
Just pos -> mark board pos
|
|
where
|
|
pos = findPosition board num
|
|
|
|
markAll :: [Board] -> Int -> Either [Board] Int
|
|
markAll boards num = getResult $ map (`markTile` num) boards
|
|
where
|
|
getResult [] = Left []
|
|
getResult (Right score : rest) = Right score
|
|
getResult (Left board : rest) = case getResult rest of
|
|
Left boards -> Left $ board : boards
|
|
Right score -> Right score
|
|
|
|
|
|
markAllUntilLast :: [Board] -> Int -> Either [Board] Int
|
|
markAllUntilLast boards num = getResult $ map (`markTile` num) boards
|
|
where
|
|
getResult [] = Left []
|
|
getResult [Right score] = Right score
|
|
getResult (Right _ : rest) = getResult rest
|
|
getResult (Left board : rest) = case getResult rest of
|
|
Left boards -> Left $ board : boards
|
|
Right _ -> Left [board]
|
|
|
|
|
|
play :: [Board] -> [Int] -> ([Board] -> Int -> Either [Board] Int) -> Maybe Int
|
|
play boards numbers markAll = playRound numbers boards
|
|
where
|
|
playRound [] _ = Nothing
|
|
playRound (cur:rest) boards = case markAll boards cur of
|
|
Left newBoards -> playRound rest newBoards
|
|
Right score -> Just (score * cur)
|
|
|
|
|
|
{-
|
|
|
|
>>> play boards randoms markAll
|
|
Just 49686
|
|
|
|
>>> play boards randoms markAllUntilLast
|
|
Just 26878
|
|
|
|
-}
|