diff --git a/.github/workflows/check_lesson_06_pr.yaml b/.github/workflows/check_lesson_06_pr.yaml new file mode 100644 index 000000000..8c667d78e --- /dev/null +++ b/.github/workflows/check_lesson_06_pr.yaml @@ -0,0 +1,32 @@ +name: Check Lesson 06 Pull Request + +on: + pull_request: + branches: [ "main" ] + paths: + - "lesson_06/expression/**" + +jobs: + build: + + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.x' + + - name: Build Shared Lib with Node.js + working-directory: ./lib/javascript/codedifferently-instructional + run: npm ci + + - name: Build Lesson 06 with Node.js + working-directory: ./lesson_06/expression + run: | + npm ci + npm run check \ No newline at end of file diff --git a/.github/workflows/check_lesson_06_quiz.yaml b/.github/workflows/check_lesson_06_quiz.yaml new file mode 100644 index 000000000..deaea1baa --- /dev/null +++ b/.github/workflows/check_lesson_06_quiz.yaml @@ -0,0 +1,32 @@ +name: Check Lesson 06 Quiz Pull Request + +on: + pull_request: + branches: [ "main" ] + paths: + - "lesson_06/quiz/**" + +jobs: + build: + + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.x' + + - name: Build Shared Lib with Node.js + working-directory: ./lib/javascript/codedifferently-instructional + run: npm ci + + - name: Build Lesson 06 Quiz with Node.js + working-directory: ./lesson_06/quiz + run: | + npm ci + npm run check \ No newline at end of file diff --git a/.github/workflows/check_push.yml b/.github/workflows/check_push.yml index 8fb59f86a..5edb6e191 100644 --- a/.github/workflows/check_push.yml +++ b/.github/workflows/check_push.yml @@ -8,6 +8,8 @@ on: - "lib/**" - "lesson_02/quiz/**" - "lesson_03/quiz/**" + - "lesson_06/quiz/**" + - "lesson_06/expression/**" jobs: build: runs-on: ubuntu-latest @@ -71,3 +73,16 @@ jobs: npm ci npm run compile npm run lint + + - name: Build Lesson 06 Quiz with Node.js + working-directory: ./lesson_06/quiz + run: | + npm ci + npm run compile + npm run lint + + - name: Build Lesson 06 Expression with Node.js + working-directory: ./lesson_06/expression + run: | + npm ci + npm run compile diff --git a/lesson_06/README.md b/lesson_06/README.md index cab259851..bdd1cffdb 100644 --- a/lesson_06/README.md +++ b/lesson_06/README.md @@ -23,6 +23,7 @@ HW_VERSION=D ``` 2. Run the program to determine the expression you must implement. ```bash +npm install npm run compile npm start ``` diff --git a/lesson_06/expression/.env.test b/lesson_06/expression/.env.test index 56cf4a06f..93aef4eca 100644 --- a/lesson_06/expression/.env.test +++ b/lesson_06/expression/.env.test @@ -1 +1 @@ -HW_VERSION=your assigned version here \ No newline at end of file +HW_VERSION=F \ No newline at end of file diff --git a/lesson_06/expression/src/expression_calculator.ts b/lesson_06/expression/src/expression_calculator.ts index 76b215c42..0b138ebb7 100644 --- a/lesson_06/expression/src/expression_calculator.ts +++ b/lesson_06/expression/src/expression_calculator.ts @@ -1,11 +1,24 @@ export class ExpressionCalculator { /** Returns a calculation involving a, b, c, d, and e */ - calculate(a: number, b: number, c: number, d: number, e: number): number { - // Implement your code here to return the correct value. - return 0; + + add(a: number, b: number): number { + return a + b; + } + + multiply(a: number, b: number): number { + return a * b; + } + + divide(a: number, b: number): number { + if (b === 0) throw new Error("Cannot divide by zero"); + return a / b; } pow(base: number, exponent: number): number { return Math.pow(base, exponent); } + + calculate(a: number, b: number, c: number, d: number, e: number): number { + return this.multiply(a, this.divide(this.pow(this.add(b, c), d), e)); + } } diff --git a/lesson_06/expression/src/functions.ts b/lesson_06/expression/src/functions.ts index ab7433c9c..e193d2f9b 100644 --- a/lesson_06/expression/src/functions.ts +++ b/lesson_06/expression/src/functions.ts @@ -1,16 +1,17 @@ -export const FUNCTIONS: Record = Object.freeze({ - A: (a: number, b: number, c: number, d: number, e: number) => - ((a + b) * c) / Math.pow(d, e), - B: (a: number, b: number, c: number, d: number, e: number) => - Math.pow(a + b, c) / (d * e), - C: (a: number, b: number, c: number, d: number, e: number) => - a / b + c * Math.pow(d, e), - D: (a: number, b: number, c: number, d: number, e: number) => - (a * b) / Math.pow(c + d, e), - E: (a: number, b: number, c: number, d: number, e: number) => - Math.pow((a + b) / c, d) * e, - F: (a: number, b: number, c: number, d: number, e: number) => - (a * Math.pow(b + c, d)) / e, - G: (a: number, b: number, c: number, d: number, e: number) => - ((Math.pow(a, b) + c) * d) / e, -}); +export const FUNCTIONS: Record number> = + Object.freeze({ + A: (a: number, b: number, c: number, d: number, e: number) => + ((a + b) * c) / Math.pow(d, e), + B: (a: number, b: number, c: number, d: number, e: number) => + Math.pow(a + b, c) / (d * e), + C: (a: number, b: number, c: number, d: number, e: number) => + a / b + c * Math.pow(d, e), + D: (a: number, b: number, c: number, d: number, e: number) => + (a * b) / Math.pow(c + d, e), + E: (a: number, b: number, c: number, d: number, e: number) => + Math.pow((a + b) / c, d) * e, + F: (a: number, b: number, c: number, d: number, e: number) => + (a * Math.pow(b + c, d)) / e, + G: (a: number, b: number, c: number, d: number, e: number) => + ((Math.pow(a, b) + c) * d) / e, + }); diff --git a/lesson_06/expression/src/lesson6.test.ts b/lesson_06/expression/src/lesson6.test.ts index c324ca280..509eb98f5 100644 --- a/lesson_06/expression/src/lesson6.test.ts +++ b/lesson_06/expression/src/lesson6.test.ts @@ -17,7 +17,7 @@ describe("Lesson6Test", () => { const c = 3; const d = 4; const e = 5; - const expected = FUNCTIONS[process.env.HW_VERSION!].call( + const expected = FUNCTIONS[process.env.HW_VERSION || ""].call( null, ...[a, b, c, d, e], ); diff --git a/lesson_06/expression/src/lesson6.ts b/lesson_06/expression/src/lesson6.ts index bfe71e676..00af72421 100644 --- a/lesson_06/expression/src/lesson6.ts +++ b/lesson_06/expression/src/lesson6.ts @@ -13,7 +13,7 @@ const rl = createInterface({ }); const main = async () => { - const testFunction = FUNCTIONS[process.env.HW_VERSION!]; + const testFunction = FUNCTIONS[process.env.HW_VERSION || ""]; if (testFunction === undefined) { console.log("HW_VERSION version not set in config. Exiting..."); process.exit(1); diff --git a/lesson_06/expression/src/utils.ts b/lesson_06/expression/src/utils.ts index e6f53b6a0..520741a62 100644 --- a/lesson_06/expression/src/utils.ts +++ b/lesson_06/expression/src/utils.ts @@ -12,9 +12,9 @@ export const askQuestion = ( }); }; -export const getFunctionBody = (f: Function) => { - const fString = f.toString().split("=>").pop()!; - return beautify(fString); +export const getFunctionBody = (f: () => unknown) => { + const fString = f.toString().split("=>").pop(); + return beautify(fString || ""); }; export const printFormualaWithValues = ( @@ -34,7 +34,7 @@ export const printFormualaWithValues = ( ["e", String(e)], ["pow", "Math.pow"], ).reduce( - (acc: string, param: string[]) => acc.replace(param[0]!, param[1]!), + (acc: string, param: string[]) => acc.replace(param[0], param[1]), functionBody, ); console.log(`\nNow computing the value of ${formula}`); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..7ffd06b2c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "code-differently-25-q1-fork", + "lockfileVersion": 3, + "requires": true, + "packages": {} +}