79 lines
2.2 KiB
JavaScript
79 lines
2.2 KiB
JavaScript
var fs = require('fs');
|
|
|
|
let inputFile = fs.readFileSync('input.txt', 'utf-8');
|
|
|
|
let myArray = inputFile.split('\n').map((line) => line.split(' '));
|
|
|
|
const TOTAL_SIGNUP_TIME = parseInt(myArray[0][2]);
|
|
|
|
let libraryScores = [];
|
|
let libraryBooksScore = [];
|
|
let maxLibraries = [];
|
|
|
|
for (let i = 2; i < myArray.length; i += 2) {
|
|
const libraryBooks = myArray[i + 1];
|
|
|
|
const daysToScan = TOTAL_SIGNUP_TIME - parseInt(myArray[i][1]);
|
|
const maxBooks = parseInt(myArray[i][2]) * daysToScan;
|
|
|
|
let libraryBook = [];
|
|
|
|
const libraryScore = libraryBooks
|
|
.map((bookIndex) => parseInt(myArray[1][bookIndex]))
|
|
.sort()
|
|
.reverse()
|
|
.slice(0, maxBooks)
|
|
.map((bookValue) => {
|
|
myArray[1].forEach((v, i) => {
|
|
if (
|
|
v.toString() === bookValue.toString() &&
|
|
libraryBooks.includes(i.toString())
|
|
) {
|
|
libraryBook.push(i);
|
|
}
|
|
});
|
|
return bookValue;
|
|
})
|
|
.reduce((result, item) => result + item, 0);
|
|
|
|
libraryScores.push(libraryScore);
|
|
libraryBooksScore.push(libraryBook);
|
|
}
|
|
|
|
let copyLibraryScores = [...libraryScores];
|
|
copyLibraryScores = copyLibraryScores.sort().reverse();
|
|
copyLibraryScores.forEach((score) => {
|
|
libraryScores.forEach((s, libraryIndex) => {
|
|
if (s.toString() === score.toString()) {
|
|
maxLibraries.push(libraryIndex);
|
|
}
|
|
});
|
|
});
|
|
|
|
let totalNumberofLibraries = 0;
|
|
let totalSignupTime = TOTAL_SIGNUP_TIME;
|
|
|
|
while (totalSignupTime > 0 && totalNumberofLibraries < maxLibraries.length) {
|
|
totalSignupTime -= parseInt(
|
|
myArray[maxLibraries[totalNumberofLibraries] * 2 + 2][1]
|
|
);
|
|
totalNumberofLibraries++;
|
|
}
|
|
|
|
let booksToSendScanning = [];
|
|
let totalSignupYet = TOTAL_SIGNUP_TIME;
|
|
for (let j = 0; j < maxLibraries.length; j++) {
|
|
totalSignupYet -= myArray[maxLibraries[j] * 2 + 2][1];
|
|
const maxCurrentBooks =
|
|
(TOTAL_SIGNUP_TIME - totalSignupYet) * myArray[maxLibraries[j] * 2 + 2][2];
|
|
booksToSendScanning.push([
|
|
...libraryBooksScore[maxLibraries[j]].slice(0, maxCurrentBooks),
|
|
]);
|
|
}
|
|
|
|
console.log(`${totalNumberofLibraries}`);
|
|
for (let k = 0; k < booksToSendScanning.length; k++) {
|
|
console.log(`${maxLibraries[k]} ${booksToSendScanning[k].length}`);
|
|
console.log(`${booksToSendScanning[k].join(' ')}`);
|
|
}
|