Liliana797979

viarno reshenie the pianist - final exam

Aug 10th, 2021
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(input) {
  2.     // parse initial catalog
  3.     // - determine number of initial pieces
  4.     // - for the next n lines, parse input and store piece in catalog
  5.     let catalog = {};
  6.     let n = Number(input.shift());
  7.     //console.log(n);
  8.     for (let i = 0; i < n; i++) {
  9.         let [name, composer, key] = input.shift().split("|");
  10.         //console.log(name, composer, key);
  11.         catalog[name] = {
  12.             composer,
  13.             key
  14.         };
  15.     }
  16.  
  17.     // parse commands
  18.     // - for each line, until "Stop" is received
  19.     // -- determine command
  20.     // -- execute operation, using given parameters
  21.     while (input[0] != "Stop") {
  22.         let tokens = input.shift().split("|");
  23.         let command = tokens[0];
  24.         let name = tokens[1];
  25.         if (command == "Add") {
  26.             if (catalog[name] != undefined) {
  27.                 console.log(`${name} is already in the collection!`);
  28.             } else {
  29.                 catalog[name] = {
  30.                     composer: tokens[2],
  31.                     key: tokens[3]
  32.                 };
  33.                 console.log(`${name} by ${tokens[2]} in ${tokens[3]} added to the collection!`);
  34.             }
  35.         } else if (command == "Remove") {
  36.            // if (catalog.hasOwnProperty(name) == false) {
  37.             if (catalog[name] == undefined) {
  38.                 console.log(`Invalid operation! ${name} does not exist in the collection.`);
  39.             } else {
  40.                 delete catalog[name];
  41.                 console.log(`Successfully removed ${name}!`);
  42.             }
  43.         } else if (command == "ChangeKey") {
  44.             if (catalog[name] == undefined) {
  45.                 console.log(`Invalid operation! ${name} does not exist in the collection.`);
  46.             } else {
  47.                 catalog[name].key = tokens[2];
  48.                 console.log(`Changed the key of ${name} to ${tokens[2]}!`);
  49.             }
  50.         }
  51.     }
  52.     //console.log(catalog);
  53.  
  54.     // sort catalog
  55.     // - convert object into array
  56.     // - sort aaray based on lexicographical order of piece name and then composer name
  57.     let sorted = Object.entries(catalog).sort((a, b) => {
  58.         //console.log(a);
  59.         //console.log(b);
  60.         let nameA = a[0];
  61.         let nameB = b[0];
  62.  
  63.         let composerA = a[1].composer;
  64.         let composerB = b[1].composer;
  65.         return nameA.localeCompare(nameB) || composerA.localeCompare(composerB);
  66.     });
  67.     // print result
  68.     // - for each element of sorted result, print information
  69.     for (let [name, piece] of sorted) {
  70.         console.log(`${name} -> Composer: ${piece.composer}, Key: ${piece.key}`);
  71.     }
  72.     // Add
  73.     // - parse parameters
  74.     // - if piece exists, print error
  75.     // - else add new piece to catalog
  76.  
  77.     // Remove
  78.     // - parse parameters
  79.     // - if piece DOES NOT exist, print error
  80.     // - else, remove piece from catalog
  81.  
  82.     // ChangeKey
  83.     // - parse parameters
  84.     // - if piece DOES NOT exist, print error
  85.     // else update piece key to given value
  86.  
  87. }
  88.  
  89. solve([
  90.   '3',
  91.   'Fur Elise|Beethoven|A Minor',
  92.   'Moonlight Sonata|Beethoven|C# Minor',
  93.   'Clair de Lune|Debussy|C# Minor',
  94.   'Add|Sonata No.2|Chopin|B Minor',
  95.   'Add|Hungarian Rhapsody No.2|Liszt|C# Minor',
  96.   'Add|Fur Elise|Beethoven|C# Minor',
  97.   'Remove|Clair de Lune',
  98.   'ChangeKey|Moonlight Sonata|C# Major',
  99.   'Stop'  
  100. ]
  101. );
Advertisement
Add Comment
Please, Sign In to add comment