From 120eccaa4b8c317f7aab3ee78be17ba91476a3ee Mon Sep 17 00:00:00 2001 From: Vasily Guzov Date: Wed, 13 Nov 2024 01:39:58 +0300 Subject: [PATCH] [HAI] home work leetcode WIP https://leetcode.com/problems/string-compression/submissions/1451041094/ --- lib/compress/compress.test.ts | 36 ++++++++++++++++++ lib/compress/compress.ts | 70 +++++++++++++++++++++++++++++++++++ lib/compress/index.ts | 3 ++ 3 files changed, 109 insertions(+) create mode 100644 lib/compress/compress.test.ts create mode 100644 lib/compress/compress.ts create mode 100644 lib/compress/index.ts diff --git a/lib/compress/compress.test.ts b/lib/compress/compress.test.ts new file mode 100644 index 0000000..ded3bbb --- /dev/null +++ b/lib/compress/compress.test.ts @@ -0,0 +1,36 @@ +import { describe, it, expect } from "vitest"; +import { compress } from "./compress.ts"; + +describe("compress", () => { + + it(`["a", "a", "b", "b", "c", "c", "c"] => a2b2c3 => 6`, () => { + const arr = ["a", "a", "b", "b", "c", "c", "c"]; + expect(compress(arr)).toBe(6); + }); + + it(`["a"] => a => 1`, () => { + const arr = ["a"]; + expect(compress(arr)).toBe(1); + }); + + it(`["a","b","b","b","b","b","b","b","b","b","b","b","b"] => ab12 => 4`, () => { + const arr = ["a", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b"]; + expect(compress(arr)).toBe(4); + }); + + it(`["a","a","a","b","b","a","a"] => a3b2a2 => 6`, () => { + const arr = ["a", "a", "a", "b", "b", "a", "a"]; + expect(compress(arr)).toBe(6); + }); + + it(`["a","a","a","a","a","b"] => a5b => 3`, () => { + const arr = ["a", "a", "a", "a", "a", "b"]; + expect(compress(arr)).toBe(3); + }); + + it(`["a","a","a","b","b","b","c","c","c"] => a3b3c3 => 6`, () => { + const arr = ["a", "a", "a", "b", "b", "b", "c", "c", "c"]; + expect(compress(arr)).toBe(6); + }); + +}); diff --git a/lib/compress/compress.ts b/lib/compress/compress.ts new file mode 100644 index 0000000..2ee8190 --- /dev/null +++ b/lib/compress/compress.ts @@ -0,0 +1,70 @@ +// export function compress(chars: string[]) { +// let L = 0; +// let R = 1; +// const N = chars.length; +// let result = ""; +// let currentCounter = 1; + +// while (L <= N && R <= N) { +// const curL = chars[L]; +// const curR = chars[R]; + + +// if (curL !== curR || curR === undefined) { +// result += curL; +// if (currentCounter > 1) { +// result += currentCounter; +// currentCounter = 1; +// } +// L = R; +// } + +// if (curL === curR) { +// currentCounter++; +// } + +// R++ +// } + +// return result.length; +// }; + +export function compress(chars: string[]) { + let L = 0; + let R = 1; + const N = chars.length; + let currentCounter = 1; + + while (L <= N && R <= N) { + const curL = chars[L]; + const curR = chars[R]; + + + if (curL !== curR || curR === undefined) { + if (currentCounter > 1) { + [...("" + currentCounter)].forEach((item, i) => { + chars[L + 1 + i] = item; + }); + currentCounter = 1; + } + L = R; + } + + if (curL === curR) { + currentCounter++; + chars[R] = ""; + } + + R++ + } + + for (let [key, value] of Object.entries(chars)) { + if (value === "") { + chars.splice(+key, 1) + } + } + + console.log({ chars }) + + return chars.filter(item => item).length; +}; diff --git a/lib/compress/index.ts b/lib/compress/index.ts new file mode 100644 index 0000000..074afb0 --- /dev/null +++ b/lib/compress/index.ts @@ -0,0 +1,3 @@ +import { compress } from "./compress"; + +export default compress;