diff --git a/lesson_07/conditionals/src/lesson7.ts b/lesson_07/conditionals/src/lesson7.ts index 52f45df8b..747669fac 100644 --- a/lesson_07/conditionals/src/lesson7.ts +++ b/lesson_07/conditionals/src/lesson7.ts @@ -7,7 +7,11 @@ import { computeLexicographicDistance } from "./util.js"; * @return True if the age corresponds to a voting age and false otherwise. */ export function canVote(age: number): boolean { - return false; + if (age >= 18) { + return true; + } else { + return false; + } } /** @@ -18,13 +22,17 @@ export function canVote(age: number): boolean { * @return -1 if a is less than b, 1 if a is greater than b, and 0 otherwise. */ export function compareStrings(a: string, b: string): number { + const distance = computeLexicographicDistance(a, b); + + if (distance < 0) { + return -1; + } + + return distance; // The distance will be a number less than 0 if string `a` is lexicographically less than `b`, 1 // if it is greater, and 0 if the strings are equal. - const distance = computeLexicographicDistance(a, b); // TODO(you): Finish this method. - - return 0; } /** @@ -37,7 +45,30 @@ export function compareStrings(a: string, b: string): number { * @return The letter grade ("A+", "A", "A-", "B+", etc.). */ export function convertGpaToLetterGrade(gpa: number): string { - return "F"; + if (gpa < 0 || gpa > 4.0) { + return "Invaild GPA"; + } else if (gpa < 1) { + return "F"; + } else if (gpa < 1.3 && gpa >= 1.0) { + return "D"; + } else if (gpa < 1.7 && gpa >= 1.3) { + return "D+"; + } else if (gpa < 2.0 && gpa >= 1.7) { + return "C-"; + } else if (gpa < 2.3 && gpa >= 2.0) { + return "C"; + } else if (gpa < 2.7 && gpa >= 2.3) { + return "C+"; + } else if (gpa < 3.0 && gpa >= 2.7) { + return "B-"; + } else if (gpa < 3.3 && gpa >= 3.0) { + return "B"; + } else if (gpa < 3.7 && gpa >= 3.3) { + return "B+"; + } else if (gpa < 4.0 && gpa >= 3.7) { + return "A-"; + } + return "A"; } /** @@ -47,9 +78,12 @@ export function convertGpaToLetterGrade(gpa: number): string { * @return The factorial of n. */ export function computeFactorial(n: number): number { - return 0; + let sum = 1; + for (let i = 1; i <= n; i++) { + sum = sum *= i; + } + return sum; } - /** * Adds all of the provided values and returns the sum. * @@ -57,7 +91,11 @@ export function computeFactorial(n: number): number { * @return The sum of all the values. */ export function addNumbers(values: number[]): number { - return 0; + let sum = 0; + for (const i of values) { + sum += i; + } + return sum; } /** @@ -67,7 +105,18 @@ export function addNumbers(values: number[]): number { * @return An array containing the first `n` Fibonacci values. */ export function getFirstNFibonacciNumbers(n: number): number[] { - return []; + let current = 1; + let prev = 0; + + const numbers = []; + + for (let i = 1; i <= n; i++) { + numbers.push(current); + const nextNumber = current + prev; + prev = current; + current = nextNumber; + } + return numbers; } /** @@ -91,6 +140,13 @@ export function binarySearch( } const pivotIndex = Math.floor((start + end) / 2); // The index in the middle of the array. + if (values[pivotIndex] === value) { + return pivotIndex; + } else if (values[pivotIndex] > value) { + return binarySearch(values, start, pivotIndex - 1, value); + } else { + return binarySearch(values, pivotIndex + 1, end, value); + } // TODO(you): Finish implementing this algorithm