+
+
\ No newline at end of file
diff --git a/1-js-basics/subtask1.md b/1-js-basics/subtask1.md
new file mode 100644
index 0000000..91a3a8b
--- /dev/null
+++ b/1-js-basics/subtask1.md
@@ -0,0 +1,123 @@
+1. Subtopic data-types
+
+ Challenge:
+ The gotchas I found are:
+ - Difference between == and ===: '==' only checks if it's the same value and doesn't check the data type so int and str can be the same according to it but '===' checks both the value and the data type
+ - Using parseInt: Parsing strings normally converts them to their numbers but if the string starts with 0x then it takes 16 as the base when the base is generally 10
+
+ Assignment:
+ - We will need an **array** to store each iem inside the cart
+ - We would need an **object** (key-value pair) to store the details of each item
+2. Subtopic functions-methods
+
+ Challenge:
+ A **method** is a **function** that is defined inside an object as a property
+
+ Assignment:
+ functions that don't return anything:
+```
+function HelloWorld() {
+ console.log("Hello, World!");
+};
+HelloWorld()
+```
+ functions that return something:
+```
+function add(a, b) {
+ return a+b;
+};
+sum=add(5, 5);
+console.log(sum);
+```
+ A function with undefined variables
+```
+function Intro(name,age=17, country='India') {
+ console.log(`Hi, I am ${name}. I am ${age} years old and from ${country}`)
+};
+Intro ("Naveen","18","USA");
+Intro("Naveen");
+```
+ In the first call the age country are defined so it prints them but in the second call they are not defined so it prints the default values.
+
+3. Subtopic 3-making-decisions
+
+ Challenge:
+ A function using logic operators is:
+```
+let num=parseInt(prompt("Enter a number: "));
+if (num>0){
+ console.log("Positive")
+}
+else if (num<0){
+ console.log("Negative")
+}
+else{
+ console.log("Zero")
+}
+```
+ A function using ternary operators is:
+```
+let num=parseInt(prompt("Enter a number: "));
+if (num>0){
+ console.log("Positive")
+}
+else if (num<0){
+ console.log("Negative")
+}
+else{
+ console.log("Zero")
+}
+```
+ Assignment:
+```
+let allStudents=['A','B-',1,4,5,2]
+let studentswhoPassed=[];
+for (i=0;i=3){
+ studentswhoPassed.push(allStudents[i]);
+ }
+ }
+ else if (allStudents[i]!='C-') {
+ studentswhoPassed.push(allStudents[i]);
+ }
+}
+console.log(studentswhoPassed)
+```
+4. Subtopic arrays-loops
+
+ Challenge:
+ For loop:
+```
+let num=10;
+for (i=1;i i + 1);
+numbers.forEach(i=>{
+ console.log(i);
+```
+ for-of loop:
+```
+let num=10;
+const numbers = Array.from({ length: num }, (_, i) => i + 1);
+for (const i of numbers) {
+ console.log(i);
+}
+```
+ map:
+```
+let num=10;
+const numbers=Array.from({length: num }, (_, i) => i + 1);
+numbers.map(i=>console.log(i));
+```
+ Assignment:
+```
+for (i = 3; i <= 20; i +=3) {
+ console.log(i)
+}
+```
\ No newline at end of file
diff --git a/2-terrarium/.DS_Store b/2-terrarium/.DS_Store
new file mode 100644
index 0000000..447c446
Binary files /dev/null and b/2-terrarium/.DS_Store differ
diff --git a/2-terrarium/terrarium-solution/.DS_Store b/2-terrarium/terrarium-solution/.DS_Store
new file mode 100644
index 0000000..49e94e4
Binary files /dev/null and b/2-terrarium/terrarium-solution/.DS_Store differ
diff --git a/2-terrarium/terrarium-solution/3rd-assignment.md b/2-terrarium/terrarium-solution/3rd-assignment.md
new file mode 100644
index 0000000..c608b4d
--- /dev/null
+++ b/2-terrarium/terrarium-solution/3rd-assignment.md
@@ -0,0 +1,24 @@
+# NodeLists
+
+## What are NodeLists
+
+- NodeLists are a type of collection in JavaScript that is similar to arrays, but it is a collection of html elements by class, id
+- It can be created using queryselectorAll()
+- It does not map, filter, reduce methods like arrays
+- NodeLists also won't automatically update when the DOM changes so we have to manually update it
+
+## Uses
+
+- We can use NodeList to dynamically add ,remove or update elements from the DOM
+- We can use NodeLists to loop through elements
+- We can create event handlers for each element in the NodeList
+
+## Applications
+
+NodeLists are used in various websites like Google and Amazon to interact with **results of a search** or **details of a product**
+
+### In Google Search
+When we search for an item in Google:
+1. Each result is a DOM element with a unique tag
+2. Using document.querySelectorAll, Google collects all search result elements as a NodeList
+3. Google then loops through the NodeList to display each result
\ No newline at end of file
diff --git a/2-terrarium/terrarium-solution/images/plant1.png b/2-terrarium/terrarium-solution/images/plant1.png
new file mode 100644
index 0000000..9baee27
Binary files /dev/null and b/2-terrarium/terrarium-solution/images/plant1.png differ
diff --git a/2-terrarium/terrarium-solution/images/plant10.png b/2-terrarium/terrarium-solution/images/plant10.png
new file mode 100644
index 0000000..4b5136d
Binary files /dev/null and b/2-terrarium/terrarium-solution/images/plant10.png differ
diff --git a/2-terrarium/terrarium-solution/images/plant11.png b/2-terrarium/terrarium-solution/images/plant11.png
new file mode 100644
index 0000000..3530fe5
Binary files /dev/null and b/2-terrarium/terrarium-solution/images/plant11.png differ
diff --git a/2-terrarium/terrarium-solution/images/plant12.png b/2-terrarium/terrarium-solution/images/plant12.png
new file mode 100644
index 0000000..b7f6dfd
Binary files /dev/null and b/2-terrarium/terrarium-solution/images/plant12.png differ
diff --git a/2-terrarium/terrarium-solution/images/plant13.png b/2-terrarium/terrarium-solution/images/plant13.png
new file mode 100644
index 0000000..18938b7
Binary files /dev/null and b/2-terrarium/terrarium-solution/images/plant13.png differ
diff --git a/2-terrarium/terrarium-solution/images/plant14.png b/2-terrarium/terrarium-solution/images/plant14.png
new file mode 100644
index 0000000..87ccb62
Binary files /dev/null and b/2-terrarium/terrarium-solution/images/plant14.png differ
diff --git a/2-terrarium/terrarium-solution/images/plant2.png b/2-terrarium/terrarium-solution/images/plant2.png
new file mode 100644
index 0000000..b90853f
Binary files /dev/null and b/2-terrarium/terrarium-solution/images/plant2.png differ
diff --git a/2-terrarium/terrarium-solution/images/plant3.png b/2-terrarium/terrarium-solution/images/plant3.png
new file mode 100644
index 0000000..17e10d1
Binary files /dev/null and b/2-terrarium/terrarium-solution/images/plant3.png differ
diff --git a/2-terrarium/terrarium-solution/images/plant4.png b/2-terrarium/terrarium-solution/images/plant4.png
new file mode 100644
index 0000000..4bbafad
Binary files /dev/null and b/2-terrarium/terrarium-solution/images/plant4.png differ
diff --git a/2-terrarium/terrarium-solution/images/plant5.png b/2-terrarium/terrarium-solution/images/plant5.png
new file mode 100644
index 0000000..d303d40
Binary files /dev/null and b/2-terrarium/terrarium-solution/images/plant5.png differ
diff --git a/2-terrarium/terrarium-solution/images/plant6.png b/2-terrarium/terrarium-solution/images/plant6.png
new file mode 100644
index 0000000..823eeed
Binary files /dev/null and b/2-terrarium/terrarium-solution/images/plant6.png differ
diff --git a/2-terrarium/terrarium-solution/images/plant7.png b/2-terrarium/terrarium-solution/images/plant7.png
new file mode 100644
index 0000000..fceb7f2
Binary files /dev/null and b/2-terrarium/terrarium-solution/images/plant7.png differ
diff --git a/2-terrarium/terrarium-solution/images/plant8.png b/2-terrarium/terrarium-solution/images/plant8.png
new file mode 100644
index 0000000..40b4f15
Binary files /dev/null and b/2-terrarium/terrarium-solution/images/plant8.png differ
diff --git a/2-terrarium/terrarium-solution/images/plant9.png b/2-terrarium/terrarium-solution/images/plant9.png
new file mode 100644
index 0000000..17a3435
Binary files /dev/null and b/2-terrarium/terrarium-solution/images/plant9.png differ
diff --git a/2-terrarium/terrarium-solution/images/screenshot_gray.png b/2-terrarium/terrarium-solution/images/screenshot_gray.png
new file mode 100644
index 0000000..5d930e1
Binary files /dev/null and b/2-terrarium/terrarium-solution/images/screenshot_gray.png differ
diff --git a/2-terrarium/terrarium-solution/index.html b/2-terrarium/terrarium-solution/index.html
new file mode 100644
index 0000000..f911577
--- /dev/null
+++ b/2-terrarium/terrarium-solution/index.html
@@ -0,0 +1,70 @@
+
+
+
+
+
+ Terrarium
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/3-typing-game/typing-game-solution/assignment-typing-game/script.js b/3-typing-game/typing-game-solution/assignment-typing-game/script.js
new file mode 100644
index 0000000..5ca51a4
--- /dev/null
+++ b/3-typing-game/typing-game-solution/assignment-typing-game/script.js
@@ -0,0 +1,62 @@
+const quotes = [
+ "There is nothing more deceptive than an obvious fact",
+ "You see, but you do not observe",
+ "I am a brain, Watson. The rest of me is a mere appendix",
+ "The game is afoot!",
+ "Education never ends, Watson. It is a series of lessons with the greatest for the last"
+];
+
+const startBtn = document.getElementById("start-btn");
+const quoteElement = document.getElementById("quote");
+const inputElement = document.getElementById("input");
+const timerElement = document.getElementById("timer");
+
+let startTime, interval;
+
+function getRandomQuote() {
+ const randomIndex = Math.floor(Math.random() * quotes.length);
+ return quotes[randomIndex];
+}
+
+function startGame() {
+ const randomQuote = getRandomQuote();
+ quoteElement.textContent = randomQuote;
+ inputElement.value = "";
+ inputElement.disabled = false;
+ inputElement.focus();
+ startBtn.disabled = true;
+
+ startTime = new Date();
+ timerElement.textContent = "Time: 0s";
+
+ interval = setInterval(() => {
+ const elapsedTime = Math.floor((new Date() - startTime) / 1000);
+ timerElement.textContent = `Time: ${elapsedTime}s`;
+ }, 1000);
+}
+
+function calculateWPM(quote, timeInSeconds) {
+ const words = quote.split(" ").length; // Count the number of words in the quote
+ const timeInMinutes = timeInSeconds / 60; // Convert time to minutes
+ return Math.round(words / timeInMinutes); // Calculate WPM
+}
+
+function endGame() {
+ clearInterval(interval);
+ const elapsedTime = Math.floor((new Date() - startTime) / 1000);
+ const wpm = calculateWPM(quoteElement.textContent, elapsedTime);
+ alert(`You completed the game in ${elapsedTime} seconds! Your WPM is ${wpm}.`);
+ inputElement.disabled = true;
+ startBtn.disabled = false;
+}
+
+inputElement.addEventListener("input", () => {
+ const quoteText = quoteElement.textContent;
+ const userInput = inputElement.value;
+
+ if (userInput === quoteText) {
+ endGame();
+ }
+});
+
+startBtn.addEventListener("click", startGame);
\ No newline at end of file
diff --git a/3-typing-game/typing-game-solution/assignment-typing-game/style.css b/3-typing-game/typing-game-solution/assignment-typing-game/style.css
new file mode 100644
index 0000000..8e275a9
--- /dev/null
+++ b/3-typing-game/typing-game-solution/assignment-typing-game/style.css
@@ -0,0 +1,48 @@
+body {
+ font-family: Arial, sans-serif;
+ background-color: #f4f4f9;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100vh;
+ margin: 0;
+}
+
+.container {
+ text-align: center;
+ background: #fff;
+ padding: 20px;
+ border-radius: 10px;
+ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
+}
+
+textarea {
+ width: 80%;
+ height: 100px;
+ margin-top: 10px;
+ border: 2px solid #ddd;
+ border-radius: 5px;
+ padding: 10px;
+ font-size: 16px;
+ resize: none;
+}
+
+button {
+ margin-top: 10px;
+ padding: 10px 20px;
+ background: #007bff;
+ color: white;
+ border: none;
+ border-radius: 5px;
+ cursor: pointer;
+}
+
+button:hover {
+ background: #0056b3;
+}
+
+#timer {
+ margin-top: 10px;
+ font-size: 20px;
+ font-weight: bold;
+}
\ No newline at end of file
diff --git a/3-typing-game/typing-game-solution/challenge/index.html b/3-typing-game/typing-game-solution/challenge/index.html
new file mode 100644
index 0000000..3210abe
--- /dev/null
+++ b/3-typing-game/typing-game-solution/challenge/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+ Typing-Game
+
+
+
+
Typing game!
+
Practice your typing skills with a quote from Sherlock Holmes. Click **start** to begin!
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/3-typing-game/typing-game-solution/challenge/script.js b/3-typing-game/typing-game-solution/challenge/script.js
new file mode 100644
index 0000000..39ac62f
--- /dev/null
+++ b/3-typing-game/typing-game-solution/challenge/script.js
@@ -0,0 +1,51 @@
+// inside script.js
+// all of our quotes
+const quotes = [
+ 'When you have eliminated the impossible, whatever remains, however improbable, must be the truth.',
+ 'There is nothing more deceptive than an obvious fact.',
+ 'I ought to know by this time that when a fact appears to be opposed to a long train of deductions it invariably proves to be capable of bearing some other interpretation.',
+ 'I never make exceptions. An exception disproves the rule.',
+ 'What one man can invent another can discover.',
+ 'Nothing clears up a case so much as stating it to another person.',
+ 'Education never ends, Watson. It is a series of lessons, with the greatest for the last.',
+];
+// store the list of words and the index of the word the player is currently typing
+let words = [];
+let wordIndex = 0;
+// the starting time
+let startTime = Date.now();
+// page elements
+const quoteElement = document.getElementById('quote');
+const messageElement = document.getElementById('message');
+const typedValueElement = document.getElementById('typed-value');
+
+// at the end of script.js
+document.getElementById('start').addEventListener('click', () => {
+ // get a quote
+ const quoteIndex = Math.floor(Math.random() * quotes.length);
+ const quote = quotes[quoteIndex];
+ // Put the quote into an array of words
+ words = quote.split(' ');
+ // reset the word index for tracking
+ wordIndex = 0;
+
+ // UI updates
+ // Create an array of span elements so we can set a class
+ const spanWords = words.map(function (word) { return `${word} ` });
+ // Convert into string and set as innerHTML on quote display
+ quoteElement.innerHTML = spanWords.join('');
+ // Highlight the first word
+ quoteElement.childNodes[0].className = 'highlight';
+ // Clear any prior messages
+ messageElement.innerText = '';
+
+ // Setup the textbox
+ // Clear the textbox
+ typedValueElement.value = '';
+ // set focus
+ typedValueElement.focus();
+ // set the event handler
+
+ // Start the timer
+ startTime = new Date().getTime();
+});
\ No newline at end of file
diff --git a/3-typing-game/typing-game-solution/challenge/style.css b/3-typing-game/typing-game-solution/challenge/style.css
new file mode 100644
index 0000000..5cd1796
--- /dev/null
+++ b/3-typing-game/typing-game-solution/challenge/style.css
@@ -0,0 +1,9 @@
+/* inside style.css */
+.highlight {
+ background-color: yellow;
+}
+
+.error {
+ background-color: lightcoral;
+ border: red;
+}
\ No newline at end of file
diff --git a/4-bank-project/.DS_Store b/4-bank-project/.DS_Store
new file mode 100644
index 0000000..3dce8f9
Binary files /dev/null and b/4-bank-project/.DS_Store differ
diff --git a/4-bank-project/bank-project/Index.html b/4-bank-project/bank-project/Index.html
new file mode 100644
index 0000000..b9e5602
--- /dev/null
+++ b/4-bank-project/bank-project/Index.html
@@ -0,0 +1,101 @@
+
+
+
+
+
+ Bank App
+
+
+
+
+