Advertisement
dilyana2001

The Pianist

Aug 5th, 2021
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function thePianist(arr) {
  2.     let n = Number(arr.shift())
  3.     let collection = {}
  4.     arr.splice(0, n).map(row => row.split('|')).forEach(row => collection[row[0]] = { composer: row[1], key: row[2] })
  5.     let commandParser = {
  6.         'Add': (piece, composer, key) => {
  7.             if (!collection.hasOwnProperty(piece)) {
  8.                 collection[piece] = { composer: composer, key: key }
  9.                 console.log(`${piece} by ${composer} in ${key} added to the collection!`)
  10.             } else {
  11.                 console.log(`${piece} is already in the collection!`)
  12.             }
  13.         },
  14.         'Remove': (piece) => {
  15.             if (!collection.hasOwnProperty(piece)) {
  16.                 console.log(`Invalid operation! ${piece} does not exist in the collection.`)
  17.             } else {
  18.                 delete collection[piece]
  19.                 console.log(`Successfully removed ${piece}!`)
  20.             }
  21.         },
  22.         'ChangeKey': (piece, key) => {
  23.             if (!collection.hasOwnProperty(piece)) {
  24.                 console.log(`Invalid operation! ${piece} does not exist in the collection.`)
  25.             } else {
  26.                 collection[piece].key = key
  27.                 console.log(`Changed the key of ${piece} to ${key}!`)
  28.             }
  29.         },
  30.         'Stop': () => {
  31.             Object.entries(collection).sort((a, b) => a[0].localeCompare(b[0]) ||
  32.                     (a[1].composer).localeCompare(b[1].composer))
  33.                 .map(row => console.log(`${row[0]} -> Composer: ${row[1].composer}, Key: ${row[1].key}`))
  34.         }
  35.     }
  36.     arr.forEach(row => {
  37.         let [command, ...args] = row.split('|')
  38.         commandParser[command](...args)
  39.     })
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement