-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday-4.js
110 lines (100 loc) · 16.1 KB
/
day-4.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
const BOARDS = [
["57","80","91","40","12","62","36","72","0","20","55","60","25","92","96","14","2","17","18","86","1","4","90","66","38"],["1","25","81","16","24","33","40","86","28","96","4","97","90","32","13","50","38","35","14","56","73","42","9","36","67"],["46","25","28","59","88","33","48","15","0","95","16","30","24","2","71","11","81","58","70","65","37","1","26","94","75"],["53","56","5","72","99","46","27","23","49","4","3","93","21","65","37","35","7","50","32","24","81","78","52","54","88"],["76","14","58","84","17","5","89","97","57","15","19","77","35","56","93","31","71","92","2","39","10","27","91","67","47"],["27","95","74","40","50","49","66","37","80","75","54","70","1","16","41","11","77","61","6","89","71","45","73","23","29"],["87","72","85","89","18","91","56","54","14","88","84","46","35","9","69","36","66","53","34","17","71","57","4","16","7"],["35","85","76","2","59","47","51","36","29","22","25","62","86","78","95","61","13","97","99","65","92","52","39","9","73"],["51","39","78","88","62","79","91","58","50","15","25","82","89","20","1","12","73","7","95","32","54","67","98","77","4"],["49","38","14","68","13","33","42","44","58","65","15","47","29","84","82","34","94","18","99","11","89","43","23","0","78"],["90","66","44","50","75","71","57","87","40","98","73","49","13","38","21","35","6","11","91","84","26","14","52","82","56"],["81","38","54","73","42","16","12","94","36","60","45","98","10","70","46","4","58","96","53","64","48","84","30","0","2"],["37","16","48","41","97","85","43","78","35","42","39","18","30","44","82","93","74","14","19","56","87","10","80","77","17"],["27","38","36","91","45","71","33","72","9","89","26","39","25","74","88","1","81","35","86","59","10","63","14","61","53"],["96","44","76","21","91","82","31","90","4","48","25","85","20","18","75","64","71","98","47","49","11","70","3","8","99"],["71","73","69","20","39","63","25","28","32","1","8","29","41","36","74","24","59","95","16","76","70","4","68","60","46"],["35","73","66","20","44","91","87","24","72","90","64","81","84","83","30","93","14","80","49","56","53","94","10","92","34"],["6","79","37","43","78","81","64","27","26","86","11","80","21","52","93","30","72","23","51","40","12","97","71","38","41"],["30","74","71","69","78","85","56","23","58","24","32","87","60","29","47","67","19","57","35","14","84","55","52","54","10"],["81","23","12","54","20","27","67","33","17","15","16","11","40","73","32","72","30","35","7","71","94","68","3","61","84"],["9","12","73","84","90","99","36","93","62","47","28","54","59","17","74","87","32","15","52","85","31","11","82","1","43"],["7","92","57","6","71","28","90","78","66","48","25","35","72","58","65","64","68","49","83","2","36","0","52","88","3"],["31","21","25","76","55","32","53","92","38","6","36","43","64","10","95","96","79","90","8","54","40","18","30","72","71"],["61","1","52","70","60","47","69","57","74","35","3","34","85","66","14","92","33","7","31","20","29","54","23","38","2"],["39","49","87","43","11","74","16","42","69","29","17","60","0","38","66","93","31","50","28","40","75","76","12","79","88"],["93","44","15","97","1","47","14","75","0","28","27","49","45","59","91","7","42","72","86","74","57","3","16","36","79"],["11","78","4","0","21","71","9","18","88","80","57","16","1","7","75","25","50","70","3","22","23","68","89","19","65"],["99","17","60","70","66","88","24","30","8","62","49","59","4","29","7","14","81","65","26","36","46","15","80","95","6"],["70","79","91","85","26","89","63","86","73","82","41","29","6","27","66","59","39","37","17","51","98","11","7","5","15"],["47","13","36","27","83","55","64","8","87","76","4","2","75","71","28","79","12","85","94","54","45","17","14","30","62"],["21","20","46","80","25","71","33","36","54","81","76","34","63","40","35","16","24","8","89","82","1","87","64","84","14"],["43","3","63","50","25","65","14","4","92","60","26","45","49","51","96","74","11","40","46","7","90","67","77","56","68"],["4","24","92","95","44","68","78","42","6","52","17","23","89","56","38","35","30","55","22","53","73","64","61","34","19"],["77","50","94","27","31","16","39","12","14","95","24","48","26","71","67","85","3","43","66","82","92","56","8","44","0"],["37","46","31","67","9","30","89","90","0","75","99","45","73","93","52","24","64","70","56","98","53","48","10","51","14"],["84","28","33","23","27","53","13","87","1","24","86","16","10","90","62","88","12","99","43","22","40","97","78","77","9"],["97","43","61","53","90","89","19","7","60","66","5","58","18","16","10","14","13","47","39","20","67","72","51","85","25"],["54","2","70","69","91","14","23","49","59","7","64","88","33","65","56","31","12","36","73","46","82","87","66","71","95"],["78","37","84","17","34","64","6","68","74","46","28","39","24","20","55","12","61","97","60","98","56","22","7","8","26"],["97","46","67","51","92","79","82","63","69","80","83","84","26","10","65","90","35","49","95","14","89","36","17","39","45"],["56","85","31","43","97","48","84","83","12","28","39","42","14","64","82","98","17","72","29","91","32","6","75","15","37"],["35","75","70","16","55","60","47","96","51","21","65","52","54","6","3","24","12","72","64","78","8","17","34","83","71"],["62","34","27","90","22","53","79","40","19","78","52","77","23","60","54","68","47","59","85","31","1","26","45","6","29"],["64","74","89","6","97","99","94","36","72","32","59","13","42","69","16","66","37","41","55","83","35","75","54","95","57"],["61","52","9","18","70","41","53","90","94","87","80","20","0","11","42","8","46","63","29","5","34","15","7","91","10"],["4","90","30","28","64","38","35","42","79","21","37","65","88","83","56","78","11","12","22","50","74","49","81","82","71"],["99","89","13","71","39","96","78","67","82","59","65","75","55","69","17","16","15","86","27","85","58","46","11","32","9"],["76","42","24","97","47","72","55","28","32","18","8","65","50","84","71","52","56","36","87","59","20","33","89","46","41"],["59","84","46","15","11","52","60","31","97","16","67","3","53","10","61","36","80","6","43","2","95","91","14","76","77"],["89","27","59","4","99","71","56","74","19","5","11","84","61","90","16","29","93","97","24","52","64","88","18","34","50"],["63","18","38","79","34","17","67","96","87","70","60","2","54","29","81","24","72","12","39","8","59","36","44","97","69"],["47","87","74","21","73","64","67","89","92","6","95","26","77","65","45","22","69","31","13","61","29","43","68","81","28"],["12","30","18","91","27","37","4","75","67","72","99","33","19","90","25","86","24","22","52","80","38","62","94","11","44"],["53","47","36","57","9","14","92","27","29","67","21","87","76","5","60","88","10","54","95","48","32","18","64","8","37"],["83","53","88","51","46","36","85","31","0","95","58","52","57","2","75","78","74","3","27","20","86","99","7","29","96"],["48","32","52","95","21","80","20","75","68","29","38","56","94","16","50","99","91","26","6","82","8","93","25","43","61"],["92","4","79","73","82","68","20","44","15","70","37","69","96","58","53","25","76","86","54","47","38","3","1","33","46"],["62","84","30","15","35","65","90","46","0","38","87","93","70","26","44","41","1","11","66","14","45","22","55","96","57"],["31","52","45","82","53","61","15","40","83","68","87","29","8","36","85","26","47","12","37","32","67","4","58","17","65"],["31","14","4","22","93","47","50","41","29","6","69","63","3","38","7","82","23","75","48","90","73","66","83","87","5"],["23","71","21","24","29","52","94","84","14","58","70","49","27","96","64","48","66","38","65","89","67","36","19","26","9"],["2","22","40","34","12","13","78","75","68","36","19","50","79","9","5","95","10","54","71","37","20","63","7","97","31"],["8","31","88","80","63","33","25","77","37","89","22","49","66","20","43","50","21","30","57","99","9","47","48","26","44"],["22","28","39","26","57","49","43","37","76","95","83","30","41","50","27","46","51","55","96","47","87","62","24","19","60"],["48","68","34","73","84","21","28","90","38","4","13","19","27","45","36","32","44","69","37","75","8","60","92","85","58"],["53","77","25","45","8","34","41","80","79","81","32","65","98","86","91","74","38","50","58","44","56","75","52","33","97"],["85","12","64","3","58","90","36","27","71","78","44","84","54","87","31","16","50","14","17","93","72","55","97","4","38"],["99","41","38","68","51","73","25","5","59","9","48","83","36","58","55","31","53","35","64","98","66","80","30","13","92"],["20","7","90","3","59","83","49","42","26","22","53","56","23","13","19","63","5","74","97","79","1","92","32","73","4"],["52","79","29","27","14","8","39","0","71","82","18","85","88","81","10","15","2","63","9","23","26","84","12","46","40"],["56","63","16","1","40","44","18","5","50","80","19","88","25","79","36","17","89","78","76","46","99","29","35","2","10"],["62","96","27","68","31","34","30","7","8","21","70","22","80","40","42","61","18","98","23","5","38","69","24","78","65"],["75","12","1","56","73","25","90","9","10","53","18","30","59","76","77","39","40","28","68","46","82","83","42","15","95"],["47","83","65","24","35","94","30","12","17","63","66","75","56","40","41","67","53","26","27","64","55","22","31","74","11"],["14","21","4","79","38","52","70","50","44","29","93","67","65","54","73","83","34","97","30","60","27","76","33","6","39"],["16","62","3","75","84","54","10","1","2","44","21","42","0","99","64","91","45","67","34","82","83","78","17","53","6"],["83","0","44","31","72","73","19","18","85","45","59","51","11","75","64","90","56","97","46","53","39","32","17","60","10"],["50","57","93","43","9","63","20","15","5","17","35","48","2","52","60","34","33","90","85","16","13","53","47","59","62"],["25","75","7","58","98","28","66","20","21","84","16","19","85","89","0","4","63","70","48","61","13","8","23","15","37"],["19","15","8","88","97","81","70","4","59","72","34","24","39","47","58","11","10","50","18","99","40","16","78","45","74"],["82","98","67","94","22","43","81","96","38","77","15","6","0","40","62","52","11","83","54","69","12","7","70","5","31"],["30","57","73","38","85","35","84","25","19","65","17","6","33","54","13","10","24","31","50","88","2","8","1","59","43"],["34","86","21","13","33","37","20","39","57","66","10","72","98","40","3","83","23","87","11","70","71","24","38","2","58"],["47","99","60","43","0","66","84","40","29","79","52","58","25","91","55","37","69","22","82","4","65","62","2","31","28"],["42","10","1","23","3","27","53","46","89","31","55","9","36","49","85","87","73","92","5","61","98","72","86","65","94"],["6","58","78","75","3","72","84","79","17","71","66","0","90","81","28","94","7","63","76","40","85","82","49","74","65"],["46","27","38","87","55","93","21","40","61","82","43","75","54","32","77","6","23","84","10","4","92","89","51","0","86"],["71","6","28","94","26","12","84","39","65","22","73","23","78","2","59","40","66","83","91","92","67","25","64","42","41"],["43","92","81","83","99","59","18","23","78","94","89","40","47","56","4","24","73","9","29","60","5","26","51","68","6"],["59","7","83","32","72","46","82","58","78","44","70","45","64","84","38","34","8","79","1","81","41","98","48","33","18"],["68","30","32","16","88","33","76","41","99","60","11","38","14","49","65","89","58","24","26","34","70","92","29","64","94"],["78","87","15","29","5","75","54","63","20","33","84","88","25","80","11","93","73","92","39","22","2","10","4","82","77"],["93","33","71","39","3","27","42","76","12","13","20","64","52","37","72","94","21","23","99","91","95","97","10","63","92"],["30","65","97","73","85","90","60","34","1","37","79","47","40","31","9","62","51","15","19","76","96","77","64","72","71"],["69","88","51","14","64","77","12","96","46","58","89","2","49","80","37","32","62","44","23","84","78","97","87","41","85"],["17","40","61","68","81","52","24","77","30","80","75","88","27","78","87","94","16","36","67","19","95","43","97","46","93"],["32","60","9","75","98","74","82","94","20","81","47","7","10","76","48","88","11","86","69","67","72","36","83","62","34"],["26","8","64","47","76","27","15","82","65","80","54","79","84","87","37","97","18","3","93","20","88","7","40","99","35"],["40","94","6","53","58","45","60","81","64","30","66","55","74","37","7","63","95","23","72","17","80","18","69","89","28"],["48","83","84","85","3","98","80","50","96","91","18","69","44","62","15","20","88","12","45","28","8","29","0","37","27"]
];
const CALLS = ["17","11","37","7","89","48","99","28","56","55","57","27","83","59","53","72","6","87","33","82","13","23","35","40","71","47","78","2","39","4","51","1","67","31","79","69","15","73","80","22","92","95","91","43","26","97","36","34","12","96","86","52","66","94","61","76","64","77","85","98","42","68","84","63","60","30","65","19","54","58","24","20","25","75","93","16","18","44","14","88","45","10","9","3","70","74","81","90","46","38","21","49","29","50","0","5","8","32","62","41"];
const ROWS = [
[0,1,2,3,4],
[5,6,7,8,9],
[10,11,12,13,14],
[15,16,17,18,19],
[20,21,22,23,24],
[0,5,10,15,20],
[1,6,11,16,21],
[2,7,12,17,22],
[3,8,13,18,23],
[4,9,14,19,24]
];
function getMatches(board, call) {
let matches = [];
for (let i = 0; i < board.length; i++) {
if (board[i] === call) matches.push(i);
}
return matches;
}
console.assert(getMatches([0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4], 4)[0] === 4);
console.assert(getMatches([0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4], 4)[1] === 14);
console.assert(getMatches([0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4], 4)[2] === 24);
console.assert(typeof getMatches([0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4], 4)[3] === "undefined");
function updateBoardStatus(status, matches) {
let newStatus = status.slice();
for (let i = 0; i < matches.length; i++) {
newStatus[matches[i]] = true;
}
return newStatus;
}
let testStatus = new Array(25).fill(false);
let statusAfterMatches = new Array(25).fill(false);
statusAfterMatches[4] = true;
statusAfterMatches[14] = true;
statusAfterMatches[24] = true;
console.assert(updateBoardStatus(testStatus, [4,14,24])[4] === true);
console.assert(updateBoardStatus(testStatus, [4,14,24])[14] === true);
console.assert(updateBoardStatus(testStatus, [4,14,24])[24] === true);
console.assert(updateBoardStatus(testStatus, [4,14,24])[3] === false);
console.assert(updateBoardStatus(testStatus, [4,14,24])[12] === false);
console.assert(updateBoardStatus(testStatus, [4,14,24])[20] === false);
function checkForBingo(status) {
for (let i = 0, row; i < ROWS.length; i++) {
row = ROWS[i];
if (status[row[0]] && status[row[1]] && status[row[2]] && status[row[3]] && status[row[4]]) {
return row;
}
}
return false;
}
let testStatus2 = new Array(25).fill(false);
testStatus2[4] = true;
testStatus2[8] = true;
testStatus2[12] = true;
testStatus2[16] = true;
testStatus2[20] = true;
console.assert(checkForBingo(testStatus2)[0] === 4);
console.assert(checkForBingo(testStatus2)[1] === 8);
console.assert(checkForBingo(testStatus2)[2] === 12);
console.assert(checkForBingo(testStatus2)[3] === 16);
console.assert(checkForBingo(testStatus2)[4] === 20);
function sumOfUnmarkedNumbersTimesCall(board, status, call) {
let sum = 0;
for (let i = 0; i < board.length; i++) {
if (status[i] === false) {
sum += Number(board[i]);
}
}
return sum * Number(call);
}
function playBingo() {
let oneBoardInitialStatus = new Array(25).fill(false);
let statusArr = new Array(100).fill(oneBoardInitialStatus);
let deadBoards = new Array(100).fill(false);
let winningBoardCount = 0;
for (let i = 0, call; i < CALLS.length; i++) {
call = CALLS[i];
for (let j = 0, board, status, matches; j < BOARDS.length; j++) {
if (deadBoards[j]) continue;
board = BOARDS[j];
matches = getMatches(board, call);
status = updateBoardStatus(statusArr[j], matches);
statusArr.splice(j, 1, status);
if (checkForBingo(status)) {
winningBoardCount++;
if (winningBoardCount < 100) {
// console.log(`BINGO! on board ${j+1} after ${i+1} calls`);
// return sumOfUnmarkedNumbersTimesCall(board, status, call);
deadBoards[j] = true;
} else {
return sumOfUnmarkedNumbersTimesCall(board, status, call);
}
}
}
}
}