This commit is contained in:
Kishan Takoordyal 2021-02-21 16:03:55 +04:00
commit f34bb76472
No known key found for this signature in database
GPG Key ID: 304DF64F0804D6A1
10 changed files with 211012 additions and 0 deletions

78
Library/index.js Normal file
View File

@ -0,0 +1,78 @@
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(' ')}`);
}

6
Library/input.txt Normal file
View File

@ -0,0 +1,6 @@
6 2 7
1 2 3 6 5 4
5 2 2
0 1 2 3 4
4 3 1
3 2 5 0

5
Library/result.txt Normal file
View File

@ -0,0 +1,5 @@
2
0 5
3 4 2 1 0
1 1
5

132
Library/solution.js Normal file
View File

@ -0,0 +1,132 @@
const fs = require('fs');
const file = fs.readFileSync('input.txt', 'utf-8');
const result = file.split('\n').map((item) => item.split(' '));
const readyLibraries = [];
const set = {
bookNumber: parseInt(result[0][0]),
deadline: parseInt(result[0][2]),
booksScore: [...result[1].map((it) => parseInt(it, 10))],
libraries: [],
};
// Loop on all libraries
for (let i = 0; i < result[0][1]; i++) {
const firstRow = result[i * 2 + 2];
const secondRow = result[i * 2 + 3];
set.libraries.push({
daysToSignUp: parseInt(firstRow[1]),
scanPerDay: parseInt(firstRow[2]),
// Sort & insert list of books in descending order of highest value per lib
books: [
...secondRow
.map((it) => parseInt(it, 10))
.sort((a, b) => set.booksScore[b] - set.booksScore[a]),
],
});
}
let signupLibrary = null;
for (let j = 0; j < set.deadline; j++) {
if (!signupLibrary) {
signupLibrary = findLibraryToSetup(j);
}
if (signupLibrary) {
signupLibrary.daysToSignUp--;
if (signupLibrary.daysToSignUp === 0) {
// Keep only max number of books possible
const scannedBooks = set.libraries[signupLibrary.id].books.slice(
0,
signupLibrary.booksCount
);
readyLibraries.push({
id: signupLibrary.id,
books: scannedBooks,
});
set.libraries[signupLibrary.id] = undefined;
signupLibrary = null;
removeDuplicates(scannedBooks);
}
}
}
function findLibraryToSetup(currentDay) {
const availableLibraries = set.libraries
.map((library, index) =>
library !== undefined
? {
id: index,
value: 0,
daysToSignUp: library.daysToSignUp,
}
: undefined
)
.filter((item) => item !== undefined);
availableLibraries.forEach((library) => {
const activeDays = set.deadline - currentDay - library.daysToSignUp;
const trueLibrary = set.libraries[library.id];
// Find minimum of max books per day * days available OR amount of books in lib
const scannedBooks = Math.min(
activeDays * trueLibrary.scanPerDay,
trueLibrary.books.length
);
library.booksCount = scannedBooks;
trueLibrary.books.slice(0, scannedBooks).forEach((id) => {
library.value += set.booksScore[id];
});
// Get a kind of score ratio
library.value /= library.daysToSignUp;
});
const sorted = availableLibraries.sort((a, b) => {
// If equal value, put the one with the highest value first
if (b.value === a.value) {
return b.daysToSignUp - a.daysToSignUp;
}
return b.value - a.value;
});
return sorted[0];
}
function removeDuplicates(booksToRemove) {
set.libraries.forEach((library) => {
if (library) {
library.books = library.books.filter(
(book) => !booksToRemove.some((book1) => book1 === book)
);
}
});
}
let results = 0;
readyLibraries.forEach((lib) => {
lib.books.forEach((book) => {
results += set.booksScore[book];
});
});
console.log(`score: ${results}`);
const finalResult = [readyLibraries.length];
readyLibraries.forEach((library) => {
finalResult.push(`${library.id} ${library.books.length}`);
finalResult.push(library.books.join(' '));
});
// fs.writeFileSync(files[process.env.FILE].output, finalResult.join("\n"))
fs.writeFileSync('result.txt', finalResult.join('\n'));

6
Pizza/data/a_example Normal file
View File

@ -0,0 +1,6 @@
5 1 2 1
3 onion pepper olive
3 mushroom tomato basil
3 chicken mushroom pepper
3 tomato mushroom basil
2 chicken basil

View File

@ -0,0 +1,501 @@
500 65 60 60
5 mushrooms onions neapolitan-crust emmental-cheese cheddar
8 mushrooms tomatoes onions pineapple neapolitan-crust emmental-cheese mozzarella cheddar
1 basil
3 tomatoes emmental-cheese mozzarella
1 pineapple
4 onions neapolitan-crust emmental-cheese mozzarella
3 mushrooms basil mozzarella
7 mushrooms onions pineapple ham neapolitan-crust mozzarella cheddar
3 pineapple ham neapolitan-crust
1 ham
3 tomatoes basil mozzarella
6 mushrooms tomatoes ham neapolitan-crust mozzarella cheddar
9 mushrooms tomatoes onions ham basil neapolitan-crust emmental-cheese mozzarella cheddar
3 mushrooms tomatoes mozzarella
8 mushrooms onions pineapple neapolitan-crust ham basil emmental-cheese cheddar
4 mushrooms emmental-cheese mozzarella cheddar
2 basil cheddar
7 tomatoes pineapple neapolitan-crust basil emmental-cheese mozzarella cheddar
3 ham neapolitan-crust mozzarella
4 onions ham basil cheddar
4 pineapple ham emmental-cheese mozzarella
8 mushrooms tomatoes onions pineapple basil neapolitan-crust mozzarella cheddar
2 ham neapolitan-crust
3 neapolitan-crust emmental-cheese cheddar
3 mushrooms basil neapolitan-crust
2 pineapple mozzarella
2 mushrooms tomatoes
2 emmental-cheese mozzarella
10 mushrooms tomatoes onions pineapple basil ham neapolitan-crust emmental-cheese mozzarella cheddar
2 mushrooms ham
1 mozzarella
3 onions basil cheddar
2 onions cheddar
9 mushrooms tomatoes onions pineapple neapolitan-crust basil emmental-cheese mozzarella cheddar
4 mushrooms tomatoes basil emmental-cheese
10 mushrooms tomatoes onions pineapple ham basil neapolitan-crust emmental-cheese mozzarella cheddar
2 onions neapolitan-crust
1 emmental-cheese
5 mushrooms tomatoes onions basil cheddar
1 onions
2 mushrooms emmental-cheese
2 onions mozzarella
1 ham
1 ham
2 mushrooms onions
2 tomatoes cheddar
2 pineapple neapolitan-crust
9 mushrooms tomatoes onions neapolitan-crust basil ham emmental-cheese mozzarella cheddar
5 mushrooms pineapple ham basil emmental-cheese
1 mozzarella
2 tomatoes cheddar
1 basil
5 mushrooms onions ham neapolitan-crust mozzarella
1 ham
2 onions neapolitan-crust
3 mushrooms basil emmental-cheese
2 mozzarella cheddar
1 emmental-cheese
1 ham
2 emmental-cheese mozzarella
4 mushrooms tomatoes basil emmental-cheese
4 mushrooms basil emmental-cheese cheddar
1 cheddar
1 basil
6 tomatoes onions pineapple basil mozzarella cheddar
3 neapolitan-crust emmental-cheese cheddar
2 neapolitan-crust emmental-cheese
1 cheddar
1 basil
2 mozzarella cheddar
2 tomatoes ham
3 onions neapolitan-crust mozzarella
6 mushrooms tomatoes basil ham emmental-cheese cheddar
6 tomatoes ham neapolitan-crust emmental-cheese mozzarella cheddar
1 mushrooms
1 ham
2 mushrooms emmental-cheese
1 pineapple
2 mushrooms onions
2 onions mozzarella
2 pineapple cheddar
2 emmental-cheese cheddar
1 ham
1 basil
1 basil
1 onions
7 mushrooms tomatoes onions pineapple neapolitan-crust basil ham
1 emmental-cheese
1 cheddar
3 mushrooms neapolitan-crust ham
3 basil mozzarella cheddar
3 mushrooms tomatoes emmental-cheese
2 mushrooms neapolitan-crust
10 mushrooms tomatoes onions pineapple neapolitan-crust basil ham emmental-cheese mozzarella cheddar
1 tomatoes
2 tomatoes onions
1 basil
10 mushrooms tomatoes onions pineapple neapolitan-crust ham basil emmental-cheese mozzarella cheddar
1 cheddar
3 onions neapolitan-crust basil
2 ham cheddar
2 tomatoes neapolitan-crust
1 neapolitan-crust
1 tomatoes
2 pineapple neapolitan-crust
3 neapolitan-crust basil emmental-cheese
2 onions basil
2 basil emmental-cheese
5 mushrooms tomatoes basil neapolitan-crust emmental-cheese
2 basil emmental-cheese
1 tomatoes
5 mushrooms pineapple basil ham cheddar
2 ham basil
5 mushrooms tomatoes pineapple basil ham
2 tomatoes pineapple
2 onions mozzarella
2 pineapple mozzarella
3 onions emmental-cheese cheddar
1 pineapple
2 ham cheddar
6 pineapple ham neapolitan-crust basil mozzarella cheddar
3 pineapple basil ham
1 ham
3 onions pineapple basil
2 onions emmental-cheese
1 cheddar
1 onions
1 ham
2 pineapple basil
2 neapolitan-crust emmental-cheese
1 pineapple
1 pineapple
2 ham cheddar
1 mozzarella
1 neapolitan-crust
1 pineapple
2 onions pineapple
1 cheddar
2 pineapple basil
3 mushrooms onions emmental-cheese
1 neapolitan-crust
6 onions pineapple basil neapolitan-crust emmental-cheese mozzarella
1 mushrooms
1 emmental-cheese
2 mushrooms basil
1 mozzarella
1 tomatoes
4 ham neapolitan-crust basil cheddar
2 tomatoes pineapple
3 tomatoes onions ham
1 basil
2 tomatoes ham
2 ham mozzarella
2 mushrooms cheddar
7 mushrooms tomatoes onions pineapple neapolitan-crust emmental-cheese mozzarella
5 pineapple basil neapolitan-crust emmental-cheese mozzarella
6 tomatoes onions neapolitan-crust emmental-cheese mozzarella cheddar
1 neapolitan-crust
6 tomatoes onions neapolitan-crust ham emmental-cheese cheddar
3 pineapple mozzarella cheddar
2 ham emmental-cheese
1 pineapple
3 mushrooms tomatoes neapolitan-crust
3 pineapple ham neapolitan-crust
2 onions emmental-cheese
9 mushrooms tomatoes onions pineapple neapolitan-crust basil emmental-cheese mozzarella cheddar
5 mushrooms tomatoes onions ham cheddar
1 neapolitan-crust
1 emmental-cheese
1 onions
6 mushrooms tomatoes basil neapolitan-crust mozzarella cheddar
1 basil
2 neapolitan-crust cheddar
1 mushrooms
2 ham mozzarella
4 tomatoes onions neapolitan-crust emmental-cheese
1 neapolitan-crust
3 onions pineapple ham
1 emmental-cheese
1 mozzarella
3 tomatoes pineapple ham
4 tomatoes ham neapolitan-crust emmental-cheese
6 mushrooms tomatoes onions pineapple emmental-cheese mozzarella
1 pineapple
1 emmental-cheese
2 onions cheddar
2 onions neapolitan-crust
4 mushrooms basil emmental-cheese mozzarella
3 neapolitan-crust basil mozzarella
7 tomatoes onions pineapple basil ham mozzarella cheddar
10 mushrooms tomatoes onions pineapple ham neapolitan-crust basil emmental-cheese mozzarella cheddar
1 basil
3 mushrooms onions basil
4 tomatoes pineapple neapolitan-crust mozzarella
1 basil
2 neapolitan-crust basil
10 mushrooms tomatoes onions pineapple basil ham neapolitan-crust emmental-cheese mozzarella cheddar
10 mushrooms tomatoes onions pineapple ham neapolitan-crust basil emmental-cheese mozzarella cheddar
2 onions ham
4 tomatoes basil emmental-cheese cheddar
2 basil mozzarella
3 tomatoes neapolitan-crust ham
1 mushrooms
3 mushrooms pineapple neapolitan-crust
2 emmental-cheese cheddar
1 basil
1 cheddar
2 basil mozzarella
4 mushrooms pineapple basil emmental-cheese
1 cheddar
5 pineapple basil emmental-cheese mozzarella cheddar
1 cheddar
7 mushrooms tomatoes ham neapolitan-crust basil mozzarella cheddar
6 mushrooms pineapple basil ham neapolitan-crust mozzarella
3 tomatoes onions neapolitan-crust
1 neapolitan-crust
1 mozzarella
2 onions neapolitan-crust
3 onions pineapple mozzarella
4 mushrooms tomatoes onions emmental-cheese
1 mozzarella
5 tomatoes pineapple basil emmental-cheese cheddar
1 ham
1 ham
1 tomatoes
3 mushrooms onions ham
2 mushrooms basil
1 ham
1 pineapple
1 tomatoes
3 mushrooms onions basil
4 mushrooms pineapple basil ham
1 pineapple
2 tomatoes ham
5 tomatoes pineapple neapolitan-crust emmental-cheese cheddar
3 tomatoes emmental-cheese cheddar
4 tomatoes ham mozzarella cheddar
2 onions basil
1 onions
1 mozzarella
4 tomatoes onions pineapple neapolitan-crust
1 mushrooms
3 tomatoes neapolitan-crust emmental-cheese
1 mozzarella
2 mushrooms ham
2 pineapple basil
1 basil
2 emmental-cheese cheddar
1 ham
4 mushrooms pineapple basil emmental-cheese
1 tomatoes
2 emmental-cheese mozzarella
10 mushrooms tomatoes onions pineapple neapolitan-crust ham basil emmental-cheese mozzarella cheddar
1 emmental-cheese
2 mushrooms tomatoes
1 basil
8 mushrooms tomatoes pineapple ham neapolitan-crust basil emmental-cheese mozzarella
1 onions
4 mushrooms ham basil neapolitan-crust
2 mozzarella cheddar
1 neapolitan-crust
5 mushrooms tomatoes pineapple neapolitan-crust ham
1 onions
3 mushrooms neapolitan-crust cheddar
5 onions pineapple basil ham mozzarella
1 mushrooms
6 mushrooms onions pineapple ham mozzarella cheddar
2 tomatoes basil
3 mushrooms neapolitan-crust mozzarella
2 neapolitan-crust emmental-cheese
1 pineapple
4 mushrooms tomatoes ham mozzarella
1 tomatoes
4 tomatoes pineapple emmental-cheese cheddar
2 pineapple cheddar
1 pineapple
3 pineapple ham neapolitan-crust
4 mushrooms pineapple neapolitan-crust ham
3 onions neapolitan-crust basil
8 mushrooms tomatoes pineapple ham basil emmental-cheese mozzarella cheddar
2 mushrooms onions
1 pineapple
2 pineapple cheddar
3 mushrooms tomatoes emmental-cheese
2 basil mozzarella
2 mushrooms onions
10 mushrooms tomatoes onions pineapple ham neapolitan-crust basil emmental-cheese mozzarella cheddar
1 basil
4 mushrooms ham emmental-cheese mozzarella
2 mozzarella cheddar
1 mozzarella
1 cheddar
4 mushrooms tomatoes ham cheddar
1 emmental-cheese
3 pineapple neapolitan-crust emmental-cheese
2 mushrooms mozzarella
1 cheddar
1 mushrooms
5 mushrooms pineapple neapolitan-crust ham mozzarella
8 mushrooms tomatoes onions pineapple neapolitan-crust ham basil emmental-cheese
9 mushrooms onions pineapple ham neapolitan-crust basil emmental-cheese mozzarella cheddar
6 mushrooms tomatoes pineapple neapolitan-crust basil emmental-cheese
3 mushrooms mozzarella cheddar
1 emmental-cheese
2 tomatoes emmental-cheese
1 mushrooms
8 mushrooms tomatoes onions pineapple neapolitan-crust ham basil emmental-cheese
2 tomatoes onions
1 cheddar
1 mushrooms
5 mushrooms tomatoes basil neapolitan-crust mozzarella
4 mushrooms tomatoes basil neapolitan-crust
1 mushrooms
1 pineapple
1 onions
8 tomatoes onions pineapple neapolitan-crust ham emmental-cheese mozzarella cheddar
1 pineapple
1 emmental-cheese
1 emmental-cheese
6 mushrooms onions basil neapolitan-crust emmental-cheese mozzarella
4 onions ham basil cheddar
1 mozzarella
8 tomatoes onions basil ham neapolitan-crust emmental-cheese mozzarella cheddar
1 onions
4 pineapple ham neapolitan-crust mozzarella
2 ham cheddar
9 mushrooms tomatoes onions pineapple ham basil neapolitan-crust emmental-cheese mozzarella
1 tomatoes
3 mushrooms ham mozzarella
5 tomatoes pineapple ham mozzarella cheddar
8 tomatoes onions pineapple basil neapolitan-crust ham emmental-cheese cheddar
1 neapolitan-crust
2 mushrooms neapolitan-crust
10 mushrooms tomatoes onions pineapple basil ham neapolitan-crust emmental-cheese mozzarella cheddar
7 mushrooms onions pineapple ham basil emmental-cheese cheddar
1 onions
3 mushrooms neapolitan-crust mozzarella
6 onions neapolitan-crust ham basil emmental-cheese mozzarella
1 emmental-cheese
2 onions basil
1 pineapple
2 basil neapolitan-crust
1 mushrooms
1 onions
1 emmental-cheese
3 pineapple basil cheddar
1 emmental-cheese
2 pineapple neapolitan-crust
3 mushrooms pineapple basil
1 mozzarella
5 mushrooms tomatoes pineapple mozzarella cheddar
3 mushrooms tomatoes ham
7 mushrooms tomatoes onions basil neapolitan-crust mozzarella cheddar
3 emmental-cheese mozzarella cheddar
1 emmental-cheese
1 pineapple
4 mushrooms onions basil cheddar
1 basil
7 onions pineapple neapolitan-crust ham emmental-cheese mozzarella cheddar
2 tomatoes mozzarella
4 onions basil ham neapolitan-crust
2 tomatoes cheddar
3 pineapple neapolitan-crust mozzarella
2 mushrooms cheddar
3 pineapple ham neapolitan-crust
2 tomatoes mozzarella
1 ham
4 mushrooms pineapple basil cheddar
1 neapolitan-crust
10 mushrooms tomatoes onions pineapple ham basil neapolitan-crust emmental-cheese mozzarella cheddar
1 basil
5 mushrooms ham neapolitan-crust emmental-cheese cheddar
2 basil neapolitan-crust
2 mushrooms emmental-cheese
1 onions
3 mushrooms tomatoes neapolitan-crust
5 tomatoes onions ham basil neapolitan-crust
2 tomatoes mozzarella
2 mushrooms basil
2 tomatoes ham
1 tomatoes
1 mushrooms
1 mushrooms
1 pineapple
3 tomatoes neapolitan-crust ham
4 tomatoes pineapple basil cheddar
1 cheddar
4 pineapple ham neapolitan-crust emmental-cheese
3 mushrooms onions basil
1 emmental-cheese
2 tomatoes mozzarella
3 onions ham neapolitan-crust
3 mushrooms ham mozzarella
1 cheddar
3 onions emmental-cheese cheddar
2 onions ham
4 tomatoes emmental-cheese mozzarella cheddar
3 pineapple neapolitan-crust emmental-cheese
1 mozzarella
3 neapolitan-crust basil ham
3 neapolitan-crust emmental-cheese cheddar
2 emmental-cheese mozzarella
1 tomatoes
3 basil neapolitan-crust mozzarella
1 cheddar
4 onions basil emmental-cheese cheddar
1 ham
3 mushrooms tomatoes pineapple
1 neapolitan-crust
4 tomatoes ham basil cheddar
6 tomatoes onions basil neapolitan-crust emmental-cheese cheddar
2 onions neapolitan-crust
3 onions pineapple ham
1 mozzarella
7 onions pineapple neapolitan-crust ham emmental-cheese mozzarella cheddar
1 neapolitan-crust
1 emmental-cheese
1 neapolitan-crust
1 pineapple
4 tomatoes basil ham neapolitan-crust
10 mushrooms tomatoes onions pineapple neapolitan-crust basil ham emmental-cheese mozzarella cheddar
8 mushrooms tomatoes onions ham basil emmental-cheese mozzarella cheddar
3 tomatoes ham mozzarella
10 mushrooms tomatoes onions pineapple ham neapolitan-crust basil emmental-cheese mozzarella cheddar
3 onions ham basil
2 mushrooms tomatoes
1 mushrooms
3 tomatoes ham neapolitan-crust
1 pineapple
3 onions pineapple ham
4 mushrooms ham mozzarella cheddar
3 onions ham neapolitan-crust
2 tomatoes neapolitan-crust
4 pineapple neapolitan-crust ham cheddar
5 tomatoes ham basil emmental-cheese mozzarella
1 ham
1 tomatoes
3 onions neapolitan-crust emmental-cheese
3 onions neapolitan-crust ham
4 mushrooms tomatoes onions neapolitan-crust
1 mozzarella
10 mushrooms tomatoes onions pineapple ham basil neapolitan-crust emmental-cheese mozzarella cheddar
3 tomatoes onions ham
6 mushrooms ham basil emmental-cheese mozzarella cheddar
3 tomatoes onions ham
4 basil emmental-cheese mozzarella cheddar
2 mushrooms tomatoes
3 tomatoes neapolitan-crust ham
5 mushrooms tomatoes ham basil emmental-cheese
3 onions basil cheddar
2 tomatoes basil
5 mushrooms tomatoes pineapple mozzarella cheddar
5 mushrooms pineapple emmental-cheese mozzarella cheddar
2 mushrooms emmental-cheese
8 mushrooms tomatoes onions neapolitan-crust basil ham mozzarella cheddar
4 tomatoes pineapple basil emmental-cheese
1 ham
1 neapolitan-crust
1 mushrooms
3 tomatoes ham mozzarella
2 mushrooms onions
2 tomatoes cheddar
6 tomatoes pineapple basil neapolitan-crust emmental-cheese cheddar
5 tomatoes onions pineapple emmental-cheese cheddar
1 tomatoes
1 onions
1 mozzarella
3 mushrooms tomatoes emmental-cheese
2 pineapple emmental-cheese
1 pineapple
1 onions
1 emmental-cheese
3 onions ham mozzarella
4 tomatoes onions neapolitan-crust basil
3 tomatoes pineapple emmental-cheese
5 mushrooms tomatoes basil ham cheddar
1 pineapple
1 mushrooms
1 cheddar
1 tomatoes
1 tomatoes
1 mushrooms
9 mushrooms tomatoes onions pineapple basil neapolitan-crust ham mozzarella cheddar
1 ham
6 mushrooms tomatoes pineapple ham basil mozzarella
1 neapolitan-crust
5 tomatoes onions neapolitan-crust emmental-cheese mozzarella
1 cheddar
1 basil
1 ham
2 pineapple ham
1 cheddar
7 onions pineapple basil ham emmental-cheese mozzarella cheddar
1 mushrooms
2 tomatoes basil
6 mushrooms pineapple ham basil mozzarella cheddar
1 onions
3 ham basil emmental-cheese
4 mushrooms emmental-cheese mozzarella cheddar
4 tomatoes pineapple neapolitan-crust basil

File diff suppressed because it is too large Load Diff

100001
Pizza/data/d_many_pizzas.in Normal file

File diff suppressed because it is too large Load Diff

100001
Pizza/data/e_many_teams.in Normal file

File diff suppressed because it is too large Load Diff

281
Pizza/index.js Normal file
View File

@ -0,0 +1,281 @@
const fs = require('fs');
const file_a = fs.readFileSync('data/a_example', 'utf-8');
const file_b = fs.readFileSync('data/b_little_bit_of_everything.in', 'utf-8');
const file_c = fs.readFileSync('data/c_many_ingredients.in', 'utf-8');
const file_d = fs.readFileSync('data/d_many_pizzas.in', 'utf-8');
const file_e = fs.readFileSync('data/e_many_teams.in', 'utf-8');
let totalScore = 0;
function main(file, char) {
const myArray = file.split('\n').map((line) => line.split(' '));
let finalPizzas = [];
const set = {
numberOfPizzas: parseInt(myArray[0][0]),
teams_2: parseInt(myArray[0][1]),
teams_3: parseInt(myArray[0][2]),
teams_4: parseInt(myArray[0][3]),
pizzas: [],
};
// Insert all pizzas in set
for (let i = 1; i < myArray.length; i++) {
let pizza = {};
pizza.id = i - 1;
pizza.numberOfIngredients = parseInt(myArray[i][0]);
pizza.ingredients = myArray[i].slice(1, myArray[i].length).sort();
set.pizzas.push(pizza);
}
// Sort pizzas in descending order of most ingredients
set.pizzas.sort((a, b) => b.numberOfIngredients - a.numberOfIngredients);
let availablePizzas = [...set.pizzas];
/*
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
///////////////////////////////// 2 TEAMS //////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
*/
const find_for_two = () => {
let currentPizza = { ...availablePizzas[0] };
const selectedPizzas = [{ ...currentPizza }];
let mostDifferentPizzas = [];
for (let k = 1; k < availablePizzas.length; k++) {
let differentIngredients = availablePizzas[k].ingredients.length;
for (let l = 0; l < availablePizzas[k].ingredients.length; l++) {
if (
currentPizza.ingredients.includes(availablePizzas[k].ingredients[l])
) {
differentIngredients--;
}
}
mostDifferentPizzas.push({
...availablePizzas[k],
difference: differentIngredients,
});
}
mostDifferentPizzas.sort((a, b) => b.difference - a.difference);
selectedPizzas.push({ ...mostDifferentPizzas[0] });
let totalDifference =
selectedPizzas[0].numberOfIngredients + selectedPizzas[1].difference;
finalPizzas.push({
teamSize: 2,
pizzas: [...selectedPizzas],
totalDifference: totalDifference,
});
availablePizzas = availablePizzas.filter(
(p) => !selectedPizzas.map((s) => s.id).includes(p.id)
);
};
/*
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
///////////////////////////////// 3 TEAMS //////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
*/
const find_for_three = () => {
let currentPizza = { ...availablePizzas[0] };
const selectedPizzas = [{ ...currentPizza }];
let mostDifferentPizzas = [];
for (let k = 1; k < availablePizzas.length; k++) {
let differentIngredients = availablePizzas[k].ingredients.length;
for (let l = 0; l < availablePizzas[k].ingredients.length; l++) {
if (
currentPizza.ingredients.includes(availablePizzas[k].ingredients[l])
) {
differentIngredients--;
}
}
mostDifferentPizzas.push({
...availablePizzas[k],
difference: differentIngredients,
});
}
mostDifferentPizzas.sort((a, b) => b.difference - a.difference);
selectedPizzas.push({ ...mostDifferentPizzas[0] });
for (let m = 1; m < mostDifferentPizzas.length; m++) {
let differentIngredients = mostDifferentPizzas[m].difference;
for (let n = 0; n < mostDifferentPizzas[m].ingredients.length; n++) {
if (
mostDifferentPizzas[0].ingredients.includes(
mostDifferentPizzas[m].ingredients[n]
)
) {
differentIngredients--;
}
}
mostDifferentPizzas[m].difference = differentIngredients;
}
mostDifferentPizzas.sort((a, b) => b.difference - a.difference);
selectedPizzas.push({ ...mostDifferentPizzas[1] });
let totalDifference =
selectedPizzas[0].numberOfIngredients +
selectedPizzas[1].difference +
selectedPizzas[2].difference;
finalPizzas.push({
teamSize: 3,
pizzas: [...selectedPizzas],
totalDifference: totalDifference,
});
availablePizzas = availablePizzas.filter(
(p) => !selectedPizzas.map((s) => s.id).includes(p.id)
);
};
/*
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
///////////////////////////////// 4 TEAMS //////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
*/
const find_for_four = () => {
let currentPizza = { ...availablePizzas[0] };
const selectedPizzas = [{ ...currentPizza }];
let mostDifferentPizzas = [];
for (let k = 1; k < availablePizzas.length; k++) {
let differentIngredients = availablePizzas[k].ingredients.length;
for (let l = 0; l < availablePizzas[k].ingredients.length; l++) {
if (
currentPizza.ingredients.includes(availablePizzas[k].ingredients[l])
) {
differentIngredients--;
}
}
mostDifferentPizzas.push({
...availablePizzas[k],
difference: differentIngredients,
});
}
mostDifferentPizzas.sort((a, b) => b.difference - a.difference);
selectedPizzas.push({ ...mostDifferentPizzas[0] });
for (let m = 1; m < mostDifferentPizzas.length; m++) {
let differentIngredients = mostDifferentPizzas[m].difference;
for (let n = 0; n < mostDifferentPizzas[m].ingredients.length; n++) {
if (
mostDifferentPizzas[0].ingredients.includes(
mostDifferentPizzas[m].ingredients[n]
)
) {
differentIngredients--;
}
}
mostDifferentPizzas[m].difference = differentIngredients;
}
mostDifferentPizzas.sort((a, b) => b.difference - a.difference);
selectedPizzas.push({ ...mostDifferentPizzas[1] });
for (let o = 2; o < mostDifferentPizzas.length; o++) {
let differentIngredients = mostDifferentPizzas[o].difference;
for (let p = 0; p < mostDifferentPizzas[o].ingredients.length; p++) {
if (
mostDifferentPizzas[1].ingredients.includes(
mostDifferentPizzas[o].ingredients[p]
)
) {
differentIngredients--;
}
}
mostDifferentPizzas[o].difference = differentIngredients;
}
mostDifferentPizzas.sort((a, b) => b.difference - a.difference);
selectedPizzas.push({ ...mostDifferentPizzas[2] });
let totalDifference =
selectedPizzas[0].numberOfIngredients +
selectedPizzas[1].difference +
selectedPizzas[2].difference +
selectedPizzas[3].difference;
finalPizzas.push({
teamSize: 4,
pizzas: [...selectedPizzas],
totalDifference: totalDifference,
});
availablePizzas = availablePizzas.filter(
(p) => !selectedPizzas.map((s) => s.id).includes(p.id)
);
};
while (availablePizzas.length > 0) {
if (
set.teams_2 + set.teams_3 + set.teams_4 === 0 ||
(availablePizzas.length === 2 && set.teams_2 === 0) ||
(availablePizzas.length === 3 && set.teams_3 === 0)
) {
break;
}
if (
(availablePizzas.length % 2 !== 0 || set.teams_2 + set.teams_4 === 0) &&
set.teams_3 > 0
) {
find_for_three();
set.teams_3--;
} else {
if (availablePizzas.length > 2 && set.teams_4 > 0) {
find_for_four();
set.teams_4--;
} else {
find_for_two();
set.teams_2--;
}
}
}
const finalScore = finalPizzas.reduce(
(result, item) => result + item.totalDifference * item.totalDifference,
0
);
console.log(`Score ${char}: ${finalScore}`);
totalScore += finalScore;
}
main(file_a, 'A');
main(file_b, 'B');
main(file_c, 'C');
main(file_d, 'D');
main(file_e, 'E');
console.log(`Total Score: ${totalScore}`);