From 4a6e21dafb7785bb0f373e20d3286a4db762a594 Mon Sep 17 00:00:00 2001 From: Pgodwin1 Date: Tue, 8 Aug 2023 14:38:05 +0100 Subject: [PATCH] my first commit --- src/brackets/index.js | 19 ++++++++++++++++++- src/roman-numerals/index.js | 25 ++++++++++++++++++++++++- src/transpose/index.js | 16 +++++++++++++++- 3 files changed, 57 insertions(+), 3 deletions(-) diff --git a/src/brackets/index.js b/src/brackets/index.js index 96b6766..a36bdd7 100644 --- a/src/brackets/index.js +++ b/src/brackets/index.js @@ -4,6 +4,23 @@ * @param {string} str The string of brackets. * @returns {"valid" | "invalid"} Whether or not the string is valid. */ -function isValid(str) {} +function isValid(str) { + const stack = []; + const open = "({["; + const close = ")}]"; + + for(let char of str) { + if(open.includes(char)) { + stack.push(char); + } else if(close.includes(char)) { + const lastOpenBracket = stack.pop(); + if(!lastOpenBracket || open.indexOf(lastOpenBracket) !== close.indexOf(char)) { + return "invalid"; + } + } + } + return stack.length === 0 ? "valid" : "invalid"; +} + module.exports = isValid; diff --git a/src/roman-numerals/index.js b/src/roman-numerals/index.js index 38afb19..4c5b753 100644 --- a/src/roman-numerals/index.js +++ b/src/roman-numerals/index.js @@ -4,6 +4,29 @@ * @param {string} roman The all-caps Roman numeral between 1 and 3999 (inclusive). * @returns {number} The decimal equivalent. */ -function romanToDecimal(roman) {} +function romanToDecimal(roman) { + let numeral = new Map(); + + numeral.set('I', 1); + numeral.set('V', 5); + numeral.set('X', 10); + numeral.set('L', 50); + numeral.set('C', 100); + numeral.set('D', 500); + numeral.set('M', 1000); + + let decimal = 0; + for(let i = 0; i < roman.length; i++) { + const numeralSymbol = numeral.get(roman[i]); + const nextNumeralSymbol = (i + 1 < roman.length) ? numeral.get(roman[i + 1]) : 0; + + if(numeralSymbol < nextNumeralSymbol) { + decimal -= numeralSymbol; + } else { + decimal += numeralSymbol; + } + } + return decimal; +} module.exports = romanToDecimal; diff --git a/src/transpose/index.js b/src/transpose/index.js index adec201..7502b70 100644 --- a/src/transpose/index.js +++ b/src/transpose/index.js @@ -4,6 +4,20 @@ * @param {number[]} array The array to transpose * @returns {number[]} The transposed array */ -function transpose(array) {} +function transpose(array) { + let rows = array.length; + let cols = array[0].length; + + let transposedMatrix = []; + for(let c = 0; c < cols; c++) { + transposedMatrix[c] = Array(rows); + } + for(let r = 0; r < rows; r++) { + for(let c = 0; c < cols; c++) { + transposedMatrix[c][r] = array[r][c]; + } + } + return transposedMatrix; +} module.exports = transpose;