From 00462705081bf2fd31dc276830b14cfc294c5e64 Mon Sep 17 00:00:00 2001 From: Miguel Rios Date: Tue, 19 Sep 2023 12:25:14 +0200 Subject: [PATCH] question: `buildStaircase` --- README.md | 1 + src/2023/318-buildStaircase/README.md | 25 ++++++++++++++ .../318-buildStaircase/buildStaircase.test.ts | 33 +++++++++++++++++++ src/2023/318-buildStaircase/buildStaircase.ts | 25 ++++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 src/2023/318-buildStaircase/README.md create mode 100644 src/2023/318-buildStaircase/buildStaircase.test.ts create mode 100644 src/2023/318-buildStaircase/buildStaircase.ts diff --git a/README.md b/README.md index 02f1d86..362d550 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,7 @@ I started this in the [issue #176](https://buttondown.email/cassidoo/archive/we- - [314 - guessingGame](src/2023/314-guessingGame) - [315 - countAndSay](src/2023/315-countAndSay) - [316 - minSubs](src/2023/316-minSubs) +- [318 - buildStaircase](src/2023/318-buildStaircase) ## Installing & Running diff --git a/src/2023/318-buildStaircase/README.md b/src/2023/318-buildStaircase/README.md new file mode 100644 index 0000000..c29784a --- /dev/null +++ b/src/2023/318-buildStaircase/README.md @@ -0,0 +1,25 @@ +# buildStaircase + +Interview question of the [issue #318 of rendezvous with cassidoo](https://buttondown.email/cassidoo/archive/let-us-remember-that-our-voice-is-a-precious-gift/). + +## The Question + +**You have `n` equal-sized blocks and you want to build a staircase with them. Return the number of steps you can fully build.** + +Example: + +```js +> buildStaircase(6) +> 3 + +// # +// ## +// ### + +> buildStaircase(9) +> 3 // it takes 10 blocks to make 4 steps +``` + +## Installing & Running + +Just `pnpm i` to install all dependencies and then `pnpm t` to run the tests! diff --git a/src/2023/318-buildStaircase/buildStaircase.test.ts b/src/2023/318-buildStaircase/buildStaircase.test.ts new file mode 100644 index 0000000..d23595c --- /dev/null +++ b/src/2023/318-buildStaircase/buildStaircase.test.ts @@ -0,0 +1,33 @@ +import { buildStaircase } from './buildStaircase'; + +describe('#buildStaircase', () => { + it('should return 0 for n equal to 0', () => { + expect(buildStaircase(0)).toBe(0); + }); + + it('should return 1 for n less than 3', () => { + expect(buildStaircase(1)).toBe(1); + expect(buildStaircase(2)).toBe(1); + }); + + it('should return 2 for n less than 6', () => { + expect(buildStaircase(3)).toBe(2); + expect(buildStaircase(4)).toBe(2); + expect(buildStaircase(5)).toBe(2); + }); + + it('should return 3 for n less than 10', () => { + expect(buildStaircase(6)).toBe(3); + expect(buildStaircase(7)).toBe(3); + expect(buildStaircase(8)).toBe(3); + expect(buildStaircase(9)).toBe(3); + }); + + it('should return 4 for n less than 15', () => { + expect(buildStaircase(10)).toBe(4); + expect(buildStaircase(11)).toBe(4); + expect(buildStaircase(12)).toBe(4); + expect(buildStaircase(13)).toBe(4); + expect(buildStaircase(14)).toBe(4); + }); +}); diff --git a/src/2023/318-buildStaircase/buildStaircase.ts b/src/2023/318-buildStaircase/buildStaircase.ts new file mode 100644 index 0000000..30c6b39 --- /dev/null +++ b/src/2023/318-buildStaircase/buildStaircase.ts @@ -0,0 +1,25 @@ +/* +You have `n` equal-sized blocks and you want to build a staircase with them. +Return the number of steps you can fully build. + +Example: + +> buildStaircase(6) +> 3 + +// # +// ## +// ### + +> buildStaircase(9) +> 3 // it takes 10 blocks to make 4 steps +*/ + +export function buildStaircase(n: number): number { + let height = 2; + while (n > 0) { + n -= height; + height++; + } + return height - 2; +}