Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function solve(input) {
- // parse initial catalog
- // - determine number of initial pieces
- // - for the next n lines, parse input and store piece in catalog
- let catalog = {};
- let n = Number(input.shift());
- //console.log(n);
- for (let i = 0; i < n; i++) {
- let [name, composer, key] = input.shift().split("|");
- //console.log(name, composer, key);
- catalog[name] = {
- composer,
- key
- };
- }
- // parse commands
- // - for each line, until "Stop" is received
- // -- determine command
- // -- execute operation, using given parameters
- while (input[0] != "Stop") {
- let tokens = input.shift().split("|");
- let command = tokens[0];
- let name = tokens[1];
- if (command == "Add") {
- if (catalog[name] != undefined) {
- console.log(`${name} is already in the collection!`);
- } else {
- catalog[name] = {
- composer: tokens[2],
- key: tokens[3]
- };
- console.log(`${name} by ${tokens[2]} in ${tokens[3]} added to the collection!`);
- }
- } else if (command == "Remove") {
- // if (catalog.hasOwnProperty(name) == false) {
- if (catalog[name] == undefined) {
- console.log(`Invalid operation! ${name} does not exist in the collection.`);
- } else {
- delete catalog[name];
- console.log(`Successfully removed ${name}!`);
- }
- } else if (command == "ChangeKey") {
- if (catalog[name] == undefined) {
- console.log(`Invalid operation! ${name} does not exist in the collection.`);
- } else {
- catalog[name].key = tokens[2];
- console.log(`Changed the key of ${name} to ${tokens[2]}!`);
- }
- }
- }
- //console.log(catalog);
- // sort catalog
- // - convert object into array
- // - sort aaray based on lexicographical order of piece name and then composer name
- let sorted = Object.entries(catalog).sort((a, b) => {
- //console.log(a);
- //console.log(b);
- let nameA = a[0];
- let nameB = b[0];
- let composerA = a[1].composer;
- let composerB = b[1].composer;
- return nameA.localeCompare(nameB) || composerA.localeCompare(composerB);
- });
- // print result
- // - for each element of sorted result, print information
- for (let [name, piece] of sorted) {
- console.log(`${name} -> Composer: ${piece.composer}, Key: ${piece.key}`);
- }
- // Add
- // - parse parameters
- // - if piece exists, print error
- // - else add new piece to catalog
- // Remove
- // - parse parameters
- // - if piece DOES NOT exist, print error
- // - else, remove piece from catalog
- // ChangeKey
- // - parse parameters
- // - if piece DOES NOT exist, print error
- // else update piece key to given value
- }
- solve([
- '3',
- 'Fur Elise|Beethoven|A Minor',
- 'Moonlight Sonata|Beethoven|C# Minor',
- 'Clair de Lune|Debussy|C# Minor',
- 'Add|Sonata No.2|Chopin|B Minor',
- 'Add|Hungarian Rhapsody No.2|Liszt|C# Minor',
- 'Add|Fur Elise|Beethoven|C# Minor',
- 'Remove|Clair de Lune',
- 'ChangeKey|Moonlight Sonata|C# Major',
- 'Stop'
- ]
- );
Advertisement
Add Comment
Please, Sign In to add comment