Skip to content
Open
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
20 changes: 20 additions & 0 deletions task-1/leap-year.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,23 @@ const prompt = promptSync();
// Step 1: prompt the user to enter a year
// Step 2: convert the user input to a number so we can perform calculations
// Step 3: Implement the logic
let UserInput = prompt('Enter an year: ');

let year = Number(UserInput);
Comment on lines +10 to +12

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice clear variable names. Since these variables are not reassigned, you could use const instead of let to make that clearer. This is a small best-practice improvement.



if(year<1 || year >9999 || isNaN(year)){

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good job using isNaN(year) to handle invalid input 👍

console.log('Invalid Year');}

else if(year % 400 === 0 ){
console.log('Yes,' +year+' is a leap year');
}
else if(year % 100 ===0 || !year % 4 ===0){

console.log('no,' +year+' is not a leap year');
}
Comment on lines +21 to +24

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a small mistake in this part. !year % 4 === 0 does not mean “year is not divisible by 4”.

year is a number → usually truthy (Why is it a number? check line 12 in your code)
!year becomes false
false % 4 becomes 0
0 === 0 is true
Example: with input 2024, your code can end up printing “not a leap year”, but 2024 is a leap year.
Could you think of a way to fix this?


One more thing in this part, since that detials matters. console.log('no,' +year+' is not a leap year');
The n in no should be Upper case.

Comment on lines +16 to +24

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One small style note: consistent indentation (spacing at the beginning of lines) makes the code easier to read. Try to align if / else blocks consistently.

Suggested change
console.log('Invalid Year');}
else if(year % 400 === 0 ){
console.log('Yes,' +year+' is a leap year');
}
else if(year % 100 ===0 || !year % 4 ===0){
console.log('no,' +year+' is not a leap year');
}
console.log('Invalid Year');
} else if (year % 400 === 0) {
console.log('Yes, ' + year + ' is a leap year');
} else if (year % 100 === 0 || !year % 4 === 0) {
console.log('No, ' + year + ' is not a leap year');
}

else{
console.log('No,' +year+' is not a leap year');
}


39 changes: 39 additions & 0 deletions task-2/login.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,48 @@ import { errorMessage, successMessage } from './app.js';
let incorrectAttempts = 0;

function onLogin(username, password) {

// Write your code here.
// Use the variables 'username' and 'password' to access the input values
// Use incorrectAttempts to track the number of failed attempts

const validUsers =[
{username : 'admin', password : 'Hack1234'},
{username : 'user', password : 7654321}
];
if (incorrectAttempts >= 4){
errorMessage('Login blocked: Too many incorrect attempts');
return;
}

let foundCorrectUser = false;


if (username === validUsers[0].username && password === validUsers[0].password) {
foundCorrectUser = true;
}


if (username === validUsers[1].username && password === validUsers[1].password) {
foundCorrectUser = true;
}


if (foundCorrectUser === true) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small style note, what you wrote is correct. But you can also write it in another way:
since foundCorrectUser is already a boolean, you can simply write if (foundCorrectUser) {. Both are correct.

incorrectAttempts = 0;
successMessage("Logged in successfully");
} else {

incorrectAttempts = incorrectAttempts + 1;


if (incorrectAttempts >= 4) {
errorMessage("Login blocked: Too many incorrect attempts");
} else {
errorMessage("Incorrect credentials");
}
}

}

// Do not change the line below
Expand Down
42 changes: 42 additions & 0 deletions task-2/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions task-2/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"dependencies": {
"prompt-sync": "^4.2.0"
},
"type": "module"
}
15 changes: 10 additions & 5 deletions task-3/converter.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,19 @@ const prompt = promptSync();
const EUR_USD_RATE = 1.1643;

// Menu display
conole.log("Hello and welcome to the currency converter. Please choose: ");
console.log("Hello and welcome to the currency converter. Please choose: ");
console.log("1: Convert EUR to USD");
console.log("2: Convert USD to EUR");
const menuSelection = prompt("Select your option [1 or 2]: ");
console.log("3: Display the current exchange rate")
const menuSelection = prompt("Select your option [1 , 2 or 3]: ");

console.log("\n");

if (menuSelection === "1") {
// EUR to USD
const eurAmountInput = prompt("Enter amount in EUR: ");
const eurAmountNum = Number(eurAmountInput);
if (Number.isNaN(eurAmountNum) || eurAmountNum > 0) {
if (Number.isNaN(eurAmountNum) || eurAmountNum < 0) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here you can also reject 0. Using <= 0 instead of < 0 would handle this edge case.

console.log("Please enter a valid positive number for the amount.");
} else {
const usdAmount = eurAmountNum * EUR_USD_RATE;
Expand All @@ -29,9 +30,13 @@ if (menuSelection === "1") {
if (Number.isNaN(usdAmountNum) || usdAmountNum < 0) {
console.log("Please enter a valid positive number for the amount.");
} else {
const eurAmount = usdAmountNum / eur_usd_rate;
const eurAmount = usdAmountNum / EUR_USD_RATE;
console.log(usdAmountNum.toFixed(2) + ' USD is equal to ' + usdAmountNum.toFixed(2) + ' EUR.');

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here you are printing the USD amount twice. You should display the calculated EUR amount instead.

}
} else {
}
else if (menuSelection === "3"){
console.log("The current exchange rate is 1 EUR = 1.1643 USD.");

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small improvement: instead of hardcoding the exchange rate value, you could use the EUR_USD_RATE constant here. This keeps the output consistent and makes the code easier to maintain if the rate changes later for example.

}
else {
console.log("Invalid selection. Please choose either 1 or 2.");

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here in line 41. The menu has three options. The invalid selection message should also mention options 1, 2, or 3.

}
Loading