Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lesson_07/conditionals/.env.test
Original file line number Diff line number Diff line change
@@ -1 +1 @@
HW_VERSION=your homework version here
HW_VERSION=E
130 changes: 83 additions & 47 deletions lesson_07/conditionals/src/lesson7.ts
Original file line number Diff line number Diff line change
@@ -1,69 +1,105 @@
import { computeLexicographicDistance } from "./util.js";


/**
* Compares two strings lexicographically.
*
* @param a The first `string` to compare.
* @param b The second `string` to compare.
* @return -1 if a is less than b, 1 if a is greater than b, and 0 otherwise.
*/
* Compares two strings lexicographically.
*
* @param a The first `string` to compare.
* @param b The second `string` to compare.
* @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 {
// 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);
// 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;
// TODO(you): Finish this method.
if (distance > 0) {
return 1;
} else if (distance < 0) {
return -1;
} else {
return 0;
}
}

/**
* Computes the factorial of the given value of `n`.
*
* @param n The value for which to compute the factorial.
* @return The factorial of n.
*/
* Computes the factorial of the given value of `n`.
*
* @param n The value for which to compute the factorial.
* @return The factorial of n.
*/
export function computeFactorial(n: number): number {
return 0;
if (n < 0) {
return 0;
} else if (n === 0) {
return 1;
}
let ans = 1;
for (let i = 1; i <= n; i++) {
ans *= i;
}
return ans;
}


/**
* Returns an array of the first `n` Fibonacci numbers starting from 1.
*
* @param n The first `n` of Fibonacci values to compute.
* @return An array containing the first `n` Fibonacci values.
*/
* Returns an array of the first `n` Fibonacci numbers starting from 1.
*
* @param n The first `n` of Fibonacci values to compute.
* @return An array containing the first `n` Fibonacci values.
*/
export function getFirstNFibonacciNumbers(n: number): number[] {
return [];
const fib = [];
for (let i = 0; i < 2 && i < n; i++) {
fib.push(1);
}
for (let i = 2; i < n; i++) {
fib.push(fib[i - 1] + fib[i - 2]);
}
return fib;
}


/**
* Finds a value in an array of values.
*
* @param values The values to search.
* @param start The left most index to search.
* @param end The right most index to search.
* @param value The value to look for.
* @return The index of the value if found in the array and -1 otherwise.
*/
* Finds a value in an array of values.
*
* @param values The values to search.
* @param start The left most index to search.
* @param end The right most index to search.
* @param value The value to look for.
* @return The index of the value if found in the array and -1 otherwise.
*/
export function binarySearch(
values: number[],
start: number,
end: number,
value: number,
values: number[],
start: number,
end: number,
value: number,
): number {
if (end < start) {
// The range is not valid so just return -1.
return -1;
}
if (end < start) {
// The range is not valid so just return -1.
return -1;
}
const pivotIndex = Math.floor((start + end) / 2); // The index in the middle of the array.


// TODO(you): Finish implementing this algorithm


const pivotIndex = Math.floor((start + end) / 2); // The index in the middle of the array.
// If values[pivotIndex] is equal to value then return `pivotIndex`.
// Else if values[pivotIndex] is greater than the value, then
// call `binarySearch(values, start, pivotIndex - 1, value)` and return its value;
// Else call `binarySearch(values, pivotIndex + 1, end, value)` and return its value.

// TODO(you): Finish implementing this algorithm

// If values[pivotIndex] is equal to value then return `pivotIndex`.
// Else if values[pivotIndex] is greater than the value, then
// call `binarySearch(values, start, pivotIndex - 1, value)` and return its value;
// Else call `binarySearch(values, pivotIndex + 1, end, value)` and return its value.
return -1;
const mid = values[pivotIndex];
if (mid > value){return binarySearch(values, start, pivotIndex - 1, value)
}
else if (mid < value){

return binarySearch(values, pivotIndex + 1, end, value)
}
else{
return pivotIndex
}
}
46 changes: 24 additions & 22 deletions lesson_07/conditionals/src/part_e.ts
Original file line number Diff line number Diff line change
@@ -1,33 +1,35 @@
/**
* Write a function that takes a single character as an argument and
* returns boolean value true if the character is an uppercase letter.
*
* @param char
* @returns
*/
* Write a function that takes a single character as an argument and
* returns boolean value true if the character is an uppercase letter.
*
* @param char
* @returns
*/
export function isUppercase(char: string): boolean {
return false;
return (char.toUpperCase() === char && /[a-zA-Z]/.test(char));
}


/**
* Determine if a person is eligible for a driving license (age and test passed).
*
* @param age
* @param passedTest
* @returns
*/
* Determine if a person is eligible for a driving license (age and test passed).
*
* @param age
* @param passedTest
* @returns
*/
export function canGetDriverLicense(age: number, passedTest: boolean): boolean {
return false;
return age >= 18 && passedTest;
}


/**
* Check if a store is open based on the day and time. The store is open
* Monday to Saturday from 9 AM to 9 PM.
*
* @param day
* @param hour
* @returns
*/
* Check if a store is open based on the day and time. The store is open
* Monday to Saturday from 9 AM to 9 PM.
*
* @param day
* @param hour
* @returns
*/
export function isStoreOpen(day: string, hour: number): boolean {
return false;
return day.toLowerCase() !== "sunday" && (hour >=9 && hour <21);
}