From 8e0ddf54c71c76f578e3a61f2c17c9a37ac8ef39 Mon Sep 17 00:00:00 2001 From: Hemephelus Date: Sat, 21 Jan 2023 15:21:15 +0100 Subject: [PATCH 1/4] Added the ROMAN TO NUMBER function --- functions/ROMAN_TO_NUMBER.gs | 56 ++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 functions/ROMAN_TO_NUMBER.gs diff --git a/functions/ROMAN_TO_NUMBER.gs b/functions/ROMAN_TO_NUMBER.gs new file mode 100644 index 0000000..b89b4bf --- /dev/null +++ b/functions/ROMAN_TO_NUMBER.gs @@ -0,0 +1,56 @@ +/** + * Returns the values of the Roman Text as an Integer. + * + * @param {A2:A9 or "XXIII"} range The roman text to convert. + * + * @return the values of the Roman Text as an Integer. + * @customfunction + */ +function ROMAN_TO_NUMBER(range) { + + let array = [] + + if(!Array.isArray(range))return ROM_TO_NUM_(range) + + + for (let i = 0; i < range.length; i++) { + + array.push([ROM_TO_NUM_(range[i][0])] ) + + } + return array +}; + +function ROM_TO_NUM_(roman_text) { + + let singleLetters = { + "I": 1, + "V": 5, + "X": 10, + "L": 50, + "C": 100, + "D": 500, + "M": 1000, + } + + + let total = 0 + let val = 0 + + for (let i = 0; i < roman_text.length; i++) { + + if (singleLetters[roman_text[i]] < singleLetters[roman_text[i + 1]]) { + + val = singleLetters[roman_text[i + 1]] - singleLetters[roman_text[i]] + total += val + i++ + + } else { + + total += singleLetters[roman_text[i]] + + } + + } + return total +}; \ No newline at end of file From f26a9c2450a706705d0a8039245a112e26b1af89 Mon Sep 17 00:00:00 2001 From: Hemephelus Date: Sat, 21 Jan 2023 15:23:39 +0100 Subject: [PATCH 2/4] Updated the ROMAN TO NUMBER function --- functions/ROMAN_TO_NUMBER.gs | 1 + 1 file changed, 1 insertion(+) diff --git a/functions/ROMAN_TO_NUMBER.gs b/functions/ROMAN_TO_NUMBER.gs index b89b4bf..d8252bb 100644 --- a/functions/ROMAN_TO_NUMBER.gs +++ b/functions/ROMAN_TO_NUMBER.gs @@ -1,3 +1,4 @@ +// @author Nwachukwu Ujubuonu https://github.com/Hemephelus/google-sheets-custom-function /** * Returns the values of the Roman Text as an Integer. * From 972418f70806605aae1ddf53a4cd4a6faa4f032e Mon Sep 17 00:00:00 2001 From: Hemephelus Date: Sat, 21 Jan 2023 17:14:50 +0100 Subject: [PATCH 3/4] Added the INVERSE METRIX function --- functions/INVERSE_METRIX.gs | 81 +++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 functions/INVERSE_METRIX.gs diff --git a/functions/INVERSE_METRIX.gs b/functions/INVERSE_METRIX.gs new file mode 100644 index 0000000..1492d3d --- /dev/null +++ b/functions/INVERSE_METRIX.gs @@ -0,0 +1,81 @@ +// @author Nwachukwu Ujubuonu https://github.com/Hemephelus/google-sheets-custom-function +/** + * Returns the inverse of a square metrix. + * + * @param {C1:D2} range The square metrix to invert. + * + * @return the inverse of a square metrix. + * @customfunction + */ +function INVERSE_METRIX(range) { + + if(range[i].length !== range.length)return 'this is not a square metrix' + + var temp, + N = range.length, + E = []; + + for (var i = 0; i < N; i++) + + E[i] = []; + + for (i = 0; i < N; i++) + + for (var j = 0; j < N; j++) { + + E[i][j] = 0; + if (i == j) + E[i][j] = 1; + + } + + for (var k = 0; k < N; k++) { + + temp = range[k][k]; + + for (var j = 0; j < N; j++) { + + range[k][j] /= temp; + E[k][j] /= temp; + } + + for (var i = k + 1; i < N; i++) { + + temp = range[i][k]; + + for (var j = 0; j < N; j++) { + + range[i][j] -= range[k][j] * temp; + E[i][j] -= E[k][j] * temp; + + } + + } + + } + + for (var k = N - 1; k > 0; k--) { + + for (var i = k - 1; i >= 0; i--) { + + temp = range[i][k]; + + for (var j = 0; j < N; j++) { + + range[i][j] -= range[k][j] * temp; + E[i][j] -= E[k][j] * temp; + + } + + } + + } + + for (var i = 0; i < N; i++) + + for (var j = 0; j < N; j++) + + range[i][j] = E[i][j]; + return range; + +} From 526fc7b0328f4a7ef5ff66a4af98189608c147f8 Mon Sep 17 00:00:00 2001 From: Hemephelus Date: Sat, 21 Jan 2023 20:53:25 +0100 Subject: [PATCH 4/4] Added the SUPER UNIQUE function --- functions/SUPER_UNIQUE.gs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 functions/SUPER_UNIQUE.gs diff --git a/functions/SUPER_UNIQUE.gs b/functions/SUPER_UNIQUE.gs new file mode 100644 index 0000000..470831e --- /dev/null +++ b/functions/SUPER_UNIQUE.gs @@ -0,0 +1,27 @@ +// @author Nwachukwu Ujubuonu https://github.com/Hemephelus/google-sheets-custom-function +/** + * Returns unique rows in the provided source range and selected columns, discarding duplicates. Rows are returned in the order in which they first appear in the source range. + * + * @param {C1:D2} range The data to filter by unique entries. + * @param {"1,2"} cols The columns you want to filter by. + * + * @return Unique rows in the provided source range and selected columns. + * @customfunction + */ +function SUPER_UNIQUE(range,cols) { + cols = cols.replace(" ","").split(',') + let newRange = {} + + for(let i = 0; i < range.length; i++){ + let subRange = '' + for(let j = 0; j < cols.length; j++){ + subRange = subRange+range[i][cols[j]-1] + } + newRange[subRange] = range[i] + + } + + return Object.values(newRange) + + +}