From 6b933a4345cf96579decb774a7b9abf02cf150ec Mon Sep 17 00:00:00 2001 From: Shubhadip Bhowmik Date: Tue, 25 Jun 2024 09:22:24 +0530 Subject: [PATCH] Restructuring The Codebase --- README.md | 1 - SECURITY.md | 21 - backend/.gitignore | 28 - backend/config/config.js | 6 - backend/controllers/authController.js | 69 - backend/controllers/errorHandler.js | 1 - backend/index.js | 35 - backend/middleware/authMiddleware.js | 24 - backend/middleware/validationMiddleware.js | 18 - backend/models/user.js | 10 - backend/package-lock.json | 1345 ----------- backend/package.json | 22 - backend/routers/auth.js | 9 - backend/routers/router.js | 8 - .../dynamic-programming-problems.md | 36 - blog/2021-08-01-mdx-blog-post.mdx | 20 - .../docusaurus-plushie-banner.jpeg | Bin 96122 -> 0 bytes blog/2024-05-23-hello-world/index.md | 11 - blog/2024-06-03-STL-problems/STL-problems.md | 27 - .../array-problems.md | 62 - .../control-structure-problems.md | 43 - .../function-problems.md | 90 - .../introductory-problems.md | 25 - .../sorting-problems.md | 66 - .../string-problems.md | 60 - .../structure-problems.md | 15 - .../2024-06-13-tree-problems/tree-problems.md | 36 - .../2024-06-14-heap-problems/HEAP-problems.md | 29 - .../pointers-problem.md | 31 - .../recursion-problem.md | 27 - .../linked-list-problems.md | 36 - .../LinkedList-problems.md | 16 - blog/authors.yml | 18 + blog/tags.yml | 4 + docs/Day 17/_category.json | 7 - docs/Day 17/exception-handling.md | 177 -- docs/Day 18/Doubly-Linked-list.md | 224 -- docs/Day 18/Stack-in-cpp.md | 176 -- docs/Day 18/_category_.json | 7 - .../Array/Battleships-in-a-Board.md | 86 - .../String/Longest-Uncommon-Subsequence-II.md | 112 - .../Tree/Convert-BST-to-Greater-Tree.md | 89 - docs/day-02/_category_.json | 7 - docs/day-02/comments-in-cpp.md | 77 - docs/day-02/first-cpp-program.md | 110 - docs/day-02/keywords-identifiers.md | 123 - docs/day-02/new-line-in-cpp.md | 71 - docs/day-03/_category_.json | 7 - docs/day-03/cpp-type-modifiers.md | 95 - docs/day-03/datatypes-in-cpp.md | 132 -- .../variables-literals-constant-in-cpp.md | 224 -- docs/day-04/_category_.json | 7 - docs/day-04/constants-in-cpp.md | 89 - docs/day-04/input-output-in-cpp.md | 67 - docs/day-04/operators-in-cpp.md | 362 --- docs/day-05/Logical Operators.md | 53 - docs/day-05/_category_.json | 7 - docs/day-05/arithmetic-Operators.md | 67 - docs/day-05/do-while-loop.md | 112 - docs/day-05/for-loop.md | 140 -- docs/day-05/if-else-statement.md | 134 -- docs/day-05/relational_operators.md | 75 - docs/day-06/If-statement.md | 79 - docs/day-06/_category_.json | 7 - docs/day-06/break-statement.md | 72 - docs/day-06/continue-statement.md | 104 - docs/day-06/goto-statement.md | 44 - docs/day-07/_category_.json | 7 - .../friend-and-virtual-functions-in-cpp.md | 124 - docs/day-07/function-in-cpp.md | 129 -- docs/day-07/switch-case-statement.md | 119 - docs/day-07/ternary-operator.md | 106 - docs/day-08/_category_.json | 7 - docs/day-08/default-argument.md | 60 - docs/day-08/function-overloading.md | 363 --- docs/day-08/inline-function.md | 60 - docs/day-09/_category_.json | 7 - docs/day-09/array-in-cpp.md | 531 ----- docs/day-09/array-in-function.md | 184 -- docs/day-09/recursion-in-cpp.md | 219 -- docs/day-10/_category_.json | 7 - docs/day-10/multidimentional-array.md | 76 - docs/day-10/singledimensional-array.md | 116 - docs/day-10/string-class.md | 108 - docs/day-10/string-in-cpp.md | 181 -- docs/day-11/_category_.json | 7 - docs/day-11/pass-by-reference.md | 130 -- docs/day-11/pass-by-value.md | 131 -- docs/day-11/pointers-in-array.md | 92 - docs/day-11/pointers-in-cpp.md | 257 --- docs/day-11/reference-in-cpp.md | 157 -- docs/day-11/reference-vs-pointers.md | 201 -- docs/day-11/returning-by-reference.md | 125 - docs/day-12/Access Specifiers.md | 51 - docs/day-12/Class and object.md | 70 - docs/day-12/Classes and Objects.md | 52 - docs/day-12/Examples.md | 80 - docs/day-12/_category_.json | 7 - docs/day-12/destructors.md | 27 - docs/day-12/dma-in-cpp.md | 102 - .../day-12/dynamic-array_and_smart-pointer.md | 71 - docs/day-12/introduction-to-dma.md | 79 - docs/day-12/introduction.md | 25 - docs/day-12/member-init-list.md | 26 - docs/day-12/memoryleak.md | 39 - docs/day-12/new_and_delete.md | 43 - docs/day-12/object-oriented-programming.md | 388 ---- docs/day-12/oops-in-cpp.md | 143 -- docs/day-12/oops.md | 41 - docs/day-12/pointers_to_structures.md | 19 - docs/day-12/problems-in-dma.md | 59 - docs/day-12/structures.md | 21 - docs/day-12/structures_and_functions.md | 21 - docs/day-12/types-of-constructors.md | 73 - docs/day-13/Function-overloading.md | 123 - docs/day-13/_category_.json | 8 - docs/day-13/about_oops.md | 82 - docs/day-13/oops_classes.md | 42 - docs/day-13/oops_objects.md | 63 - docs/day-14/Create-References.md | 32 - docs/day-14/Memory-Address.md | 25 - docs/day-14/_category_.json | 8 - docs/day-14/category_.json | 8 - docs/day-14/constructor.md | 95 - docs/day-14/destructor.md | 41 - docs/day-14/stl-algorithms.md | 0 docs/day-14/stl-containers.md | 122 - docs/day-14/stl-introduction.md | 0 docs/day-14/stl-iterators.md | 42 - docs/day-14/typesofconstructor.md | 72 - docs/day-15/Abstraction.md | 138 -- docs/day-15/Encapsulation.md | 104 - docs/day-15/_category_.json | 7 - docs/day-16/_category_.json | 7 - docs/day-16/function-overloading.md | 68 - docs/day-16/operator-overloading.md | 67 - docs/day-18/Linked-List-in-cpp.md | 74 - docs/day-18/Operations-on-linked-list.md | 210 -- docs/day-18/_category_.json | 7 - docs/day-19/_category_.json | 7 - docs/day-19/examples.md | 146 -- docs/day-19/polymorphism.md | 26 - docs/day-19/types-of-polymorphism.md | 174 -- docs/day-20/Big_Five_In_OOP.md | 231 -- .../day-20/Deep_Copying_vs_Shallow_Copying.md | 163 -- docs/day-20/_category_.json | 7 - docs/day-20/image.png | Bin 380021 -> 0 bytes docs/day-20/practice-questions.md | 299 --- ...essions and Functional Programming copy.md | 155 -- docs/day-21/Macros.md | 132 -- docs/day-21/_category_.json | 7 - docs/day-23/type_of_trees.md | 114 - docs/day-25/_category_.json | 7 - docs/day-25/medium-level-questions.md | 143 -- docs/day-25/solution.md | 790 ------- docusaurus.config.js | 118 +- package-lock.json | 2011 +++++++---------- package.json | 29 +- sidebars.js | 1 - siteConfig.js | 211 +- src/components/Callout/Callout.js | 18 - src/components/Chatbot/chatbot.js | 32 - src/components/Chatbot/style.css | 247 -- src/components/Contact/Contact.css | 106 - src/components/Contact/Contact.js | 99 - src/components/DailyTips/DailyTips.css | 53 - src/components/DailyTips/DailyTips.js | 39 - src/components/HomepageFeatures/index.js | 31 +- .../HomepageFeatures/styles.module.css | 48 +- .../ScrollToTop/ScrollToTopButton.js | 40 - .../ScrollToTop/ScrollToTopButton.module.css | 25 - src/components/Toast/Toast.js | 28 - src/components/Toast/toastStyles.css | 25 - src/css/custom.css | 323 +-- src/data/dailyTips.json | 31 - src/pages/index.js | 112 +- src/pages/index.module.css | 65 - src/pages/login.js | 103 - src/pages/login.md | 19 - src/pages/markdown-page.md | 7 + src/pages/signup.js | 119 - src/pages/signup.md | 20 - src/pages/test.js | 22 - static/img/docusaurus-social-card.jpg | Bin 55746 -> 0 bytes static/img/docusaurus.png | Bin 5142 -> 0 bytes 185 files changed, 1079 insertions(+), 17082 deletions(-) delete mode 100644 SECURITY.md delete mode 100644 backend/.gitignore delete mode 100644 backend/config/config.js delete mode 100644 backend/controllers/authController.js delete mode 100644 backend/controllers/errorHandler.js delete mode 100644 backend/index.js delete mode 100644 backend/middleware/authMiddleware.js delete mode 100644 backend/middleware/validationMiddleware.js delete mode 100644 backend/models/user.js delete mode 100644 backend/package-lock.json delete mode 100644 backend/package.json delete mode 100644 backend/routers/auth.js delete mode 100644 backend/routers/router.js delete mode 100644 blog/2021-06-15-dynamic-programming/dynamic-programming-problems.md delete mode 100644 blog/2021-08-01-mdx-blog-post.mdx delete mode 100644 blog/2024-05-23-hello-world/docusaurus-plushie-banner.jpeg delete mode 100644 blog/2024-05-23-hello-world/index.md delete mode 100644 blog/2024-06-03-STL-problems/STL-problems.md delete mode 100644 blog/2024-06-03-array-problems/array-problems.md delete mode 100644 blog/2024-06-03-control-structure-problems/control-structure-problems.md delete mode 100644 blog/2024-06-03-function-problems/function-problems.md delete mode 100644 blog/2024-06-03-introductory-problems/introductory-problems.md delete mode 100644 blog/2024-06-03-sorting-problems/sorting-problems.md delete mode 100644 blog/2024-06-03-string-problems/string-problems.md delete mode 100644 blog/2024-06-03-structure-probelms/structure-problems.md delete mode 100644 blog/2024-06-13-tree-problems/tree-problems.md delete mode 100644 blog/2024-06-14-heap-problems/HEAP-problems.md delete mode 100644 blog/2024-06-14-pointers-problems/pointers-problem.md delete mode 100644 blog/2024-06-14-recursion-problem/recursion-problem.md delete mode 100644 blog/2024-06-15-linked-list/linked-list-problems.md delete mode 100644 blog/2024-06-17-LinkedList-problem/LinkedList-problems.md create mode 100644 blog/tags.yml delete mode 100644 docs/Day 17/_category.json delete mode 100644 docs/Day 17/exception-handling.md delete mode 100644 docs/Day 18/Doubly-Linked-list.md delete mode 100644 docs/Day 18/Stack-in-cpp.md delete mode 100644 docs/Day 18/_category_.json delete mode 100644 docs/Practice_Question/Array/Battleships-in-a-Board.md delete mode 100644 docs/Practice_Question/String/Longest-Uncommon-Subsequence-II.md delete mode 100644 docs/Practice_Question/Tree/Convert-BST-to-Greater-Tree.md delete mode 100644 docs/day-02/_category_.json delete mode 100644 docs/day-02/comments-in-cpp.md delete mode 100644 docs/day-02/first-cpp-program.md delete mode 100644 docs/day-02/keywords-identifiers.md delete mode 100644 docs/day-02/new-line-in-cpp.md delete mode 100644 docs/day-03/_category_.json delete mode 100644 docs/day-03/cpp-type-modifiers.md delete mode 100644 docs/day-03/datatypes-in-cpp.md delete mode 100644 docs/day-03/variables-literals-constant-in-cpp.md delete mode 100644 docs/day-04/_category_.json delete mode 100644 docs/day-04/constants-in-cpp.md delete mode 100644 docs/day-04/input-output-in-cpp.md delete mode 100644 docs/day-04/operators-in-cpp.md delete mode 100644 docs/day-05/Logical Operators.md delete mode 100644 docs/day-05/_category_.json delete mode 100644 docs/day-05/arithmetic-Operators.md delete mode 100644 docs/day-05/do-while-loop.md delete mode 100644 docs/day-05/for-loop.md delete mode 100644 docs/day-05/if-else-statement.md delete mode 100644 docs/day-05/relational_operators.md delete mode 100644 docs/day-06/If-statement.md delete mode 100644 docs/day-06/_category_.json delete mode 100644 docs/day-06/break-statement.md delete mode 100644 docs/day-06/continue-statement.md delete mode 100644 docs/day-06/goto-statement.md delete mode 100644 docs/day-07/_category_.json delete mode 100644 docs/day-07/friend-and-virtual-functions-in-cpp.md delete mode 100644 docs/day-07/function-in-cpp.md delete mode 100644 docs/day-07/switch-case-statement.md delete mode 100644 docs/day-07/ternary-operator.md delete mode 100644 docs/day-08/_category_.json delete mode 100644 docs/day-08/default-argument.md delete mode 100644 docs/day-08/function-overloading.md delete mode 100644 docs/day-08/inline-function.md delete mode 100644 docs/day-09/_category_.json delete mode 100644 docs/day-09/array-in-cpp.md delete mode 100644 docs/day-09/array-in-function.md delete mode 100644 docs/day-09/recursion-in-cpp.md delete mode 100644 docs/day-10/_category_.json delete mode 100644 docs/day-10/multidimentional-array.md delete mode 100644 docs/day-10/singledimensional-array.md delete mode 100644 docs/day-10/string-class.md delete mode 100644 docs/day-10/string-in-cpp.md delete mode 100644 docs/day-11/_category_.json delete mode 100644 docs/day-11/pass-by-reference.md delete mode 100644 docs/day-11/pass-by-value.md delete mode 100644 docs/day-11/pointers-in-array.md delete mode 100644 docs/day-11/pointers-in-cpp.md delete mode 100644 docs/day-11/reference-in-cpp.md delete mode 100644 docs/day-11/reference-vs-pointers.md delete mode 100644 docs/day-11/returning-by-reference.md delete mode 100644 docs/day-12/Access Specifiers.md delete mode 100644 docs/day-12/Class and object.md delete mode 100644 docs/day-12/Classes and Objects.md delete mode 100644 docs/day-12/Examples.md delete mode 100644 docs/day-12/_category_.json delete mode 100644 docs/day-12/destructors.md delete mode 100644 docs/day-12/dma-in-cpp.md delete mode 100644 docs/day-12/dynamic-array_and_smart-pointer.md delete mode 100644 docs/day-12/introduction-to-dma.md delete mode 100644 docs/day-12/introduction.md delete mode 100644 docs/day-12/member-init-list.md delete mode 100644 docs/day-12/memoryleak.md delete mode 100644 docs/day-12/new_and_delete.md delete mode 100644 docs/day-12/object-oriented-programming.md delete mode 100644 docs/day-12/oops-in-cpp.md delete mode 100644 docs/day-12/oops.md delete mode 100644 docs/day-12/pointers_to_structures.md delete mode 100644 docs/day-12/problems-in-dma.md delete mode 100644 docs/day-12/structures.md delete mode 100644 docs/day-12/structures_and_functions.md delete mode 100644 docs/day-12/types-of-constructors.md delete mode 100644 docs/day-13/Function-overloading.md delete mode 100644 docs/day-13/_category_.json delete mode 100644 docs/day-13/about_oops.md delete mode 100644 docs/day-13/oops_classes.md delete mode 100644 docs/day-13/oops_objects.md delete mode 100644 docs/day-14/Create-References.md delete mode 100644 docs/day-14/Memory-Address.md delete mode 100644 docs/day-14/_category_.json delete mode 100644 docs/day-14/category_.json delete mode 100644 docs/day-14/constructor.md delete mode 100644 docs/day-14/destructor.md delete mode 100644 docs/day-14/stl-algorithms.md delete mode 100644 docs/day-14/stl-containers.md delete mode 100644 docs/day-14/stl-introduction.md delete mode 100644 docs/day-14/stl-iterators.md delete mode 100644 docs/day-14/typesofconstructor.md delete mode 100644 docs/day-15/Abstraction.md delete mode 100644 docs/day-15/Encapsulation.md delete mode 100644 docs/day-15/_category_.json delete mode 100644 docs/day-16/_category_.json delete mode 100644 docs/day-16/function-overloading.md delete mode 100644 docs/day-16/operator-overloading.md delete mode 100644 docs/day-18/Linked-List-in-cpp.md delete mode 100644 docs/day-18/Operations-on-linked-list.md delete mode 100644 docs/day-18/_category_.json delete mode 100644 docs/day-19/_category_.json delete mode 100644 docs/day-19/examples.md delete mode 100644 docs/day-19/polymorphism.md delete mode 100644 docs/day-19/types-of-polymorphism.md delete mode 100644 docs/day-20/Big_Five_In_OOP.md delete mode 100644 docs/day-20/Deep_Copying_vs_Shallow_Copying.md delete mode 100644 docs/day-20/_category_.json delete mode 100644 docs/day-20/image.png delete mode 100644 docs/day-20/practice-questions.md delete mode 100644 docs/day-21/Lambda Expressions and Functional Programming copy.md delete mode 100644 docs/day-21/Macros.md delete mode 100644 docs/day-21/_category_.json delete mode 100644 docs/day-23/type_of_trees.md delete mode 100644 docs/day-25/_category_.json delete mode 100644 docs/day-25/medium-level-questions.md delete mode 100644 docs/day-25/solution.md delete mode 100644 src/components/Callout/Callout.js delete mode 100644 src/components/Chatbot/chatbot.js delete mode 100644 src/components/Chatbot/style.css delete mode 100644 src/components/Contact/Contact.css delete mode 100644 src/components/Contact/Contact.js delete mode 100644 src/components/DailyTips/DailyTips.css delete mode 100644 src/components/DailyTips/DailyTips.js delete mode 100644 src/components/ScrollToTop/ScrollToTopButton.js delete mode 100644 src/components/ScrollToTop/ScrollToTopButton.module.css delete mode 100644 src/components/Toast/Toast.js delete mode 100644 src/components/Toast/toastStyles.css delete mode 100644 src/data/dailyTips.json delete mode 100644 src/pages/login.js delete mode 100644 src/pages/login.md create mode 100644 src/pages/markdown-page.md delete mode 100644 src/pages/signup.js delete mode 100644 src/pages/signup.md delete mode 100644 src/pages/test.js delete mode 100644 static/img/docusaurus-social-card.jpg delete mode 100644 static/img/docusaurus.png diff --git a/README.md b/README.md index 1d3768a80..7e0c276cc 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,6 @@ Happy coding! ## Thanks to Our Contributors 🌟 - diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 034e84803..000000000 --- a/SECURITY.md +++ /dev/null @@ -1,21 +0,0 @@ -# Security Policy - -## Supported Versions - -Use this section to tell people about which versions of your project are -currently being supported with security updates. - -| Version | Supported | -| ------- | ------------------ | -| 5.1.x | :white_check_mark: | -| 5.0.x | :x: | -| 4.0.x | :white_check_mark: | -| < 4.0 | :x: | - -## Reporting a Vulnerability - -Use this section to tell people how to report a vulnerability. - -Tell them where to go, how often they can expect to get an update on a -reported vulnerability, what to expect if the vulnerability is accepted or -declined, etc. diff --git a/backend/.gitignore b/backend/.gitignore deleted file mode 100644 index 0c4f703e5..000000000 --- a/backend/.gitignore +++ /dev/null @@ -1,28 +0,0 @@ -# Node modules -node_modules/ - -# Environment variables -.env - -# IDE/Editor specific files -.vscode/ -.idea/ - -# Dependency directories (remove if not using Yarn) -/yarn-error.log -/.pnp -.pnp.js - -# macOS specific files -.DS_Store - -# Windows thumbnail cache files -Thumbs.db - -# Logs -logs/ -*.log - -# Build directories (remove if not using any build tools) -/build/ -/dist/ diff --git a/backend/config/config.js b/backend/config/config.js deleted file mode 100644 index 8c61e8c3e..000000000 --- a/backend/config/config.js +++ /dev/null @@ -1,6 +0,0 @@ -// config/config.js -module.exports = { - JWT_SECRET: 'your_jwt_secret', // Replace with your own secret - mongoURI: 'ADD_MONGO_DB_URI' // Replace with your MongoDB URI -}; -//must be replaced with .env file in futher commets \ No newline at end of file diff --git a/backend/controllers/authController.js b/backend/controllers/authController.js deleted file mode 100644 index df1b0be34..000000000 --- a/backend/controllers/authController.js +++ /dev/null @@ -1,69 +0,0 @@ -// controllers/authController.js -const bcrypt = require('bcryptjs'); -const jwt = require('jsonwebtoken'); -const User = require('../models/user'); -const config = require('../config/config'); - -exports.signup = async (req, res) => { - const { username, email, password } = req.body; - - try { - // Check if user already exists - const existingUser = await User.findOne({ email }); - const existingUsername = await User.findOne({ username }); - if (existingUser) { - return res.status(400).json({ message: 'User already exists' }); - } - if (existingUsername) { - return res.status(400).json({ message: 'Username already exists' }); - } - - // Hash the password - const hashedPassword = await bcrypt.hash(password, 10); - - // Create new user - const newUser = new User({ - username, - email, - password: hashedPassword - }); - - await newUser.save(); - - // Generate JWT token - const token = jwt.sign({ userId: newUser._id }, config.JWT_SECRET, { expiresIn: '1h' }); - - // Respond with token - res.status(201).json({ token }); - } catch (error) { - console.error('Signup error:', error); - res.status(500).json({ message: 'Server error' }); - } -}; - -exports.login = async (req, res) => { - const { email, password } = req.body; - - try { - // Check if user exists - const user = await User.findOne({ email }); - if (!user) { - return res.status(400).json({ message: 'Invalid email or password' }); - } - - // Check password - const isMatch = await bcrypt.compare(password, user.password); - if (!isMatch) { - return res.status(400).json({ message: 'Invalid email or password' }); - } - - // Generate JWT token - const token = jwt.sign({ userId: user._id }, config.JWT_SECRET, { expiresIn: '1h' }); - - // Respond with token - res.status(200).json({ token }); - } catch (error) { - console.error('Login error:', error); - res.status(500).json({ message: 'Server error' }); - } -}; diff --git a/backend/controllers/errorHandler.js b/backend/controllers/errorHandler.js deleted file mode 100644 index 56f46ac13..000000000 --- a/backend/controllers/errorHandler.js +++ /dev/null @@ -1 +0,0 @@ -// Centralized error handling middleware \ No newline at end of file diff --git a/backend/index.js b/backend/index.js deleted file mode 100644 index c6958c2fc..000000000 --- a/backend/index.js +++ /dev/null @@ -1,35 +0,0 @@ -// index.js -const express = require('express'); -const mongoose = require('mongoose'); -const bodyParser = require('body-parser'); -const cors = require('cors'); -const config = require('./config/config'); -const router = require('./routers/router'); - -const app = express(); -const PORT = process.env.PORT || 5000; - -// Middleware -app.use(bodyParser.json()); -app.use(cors()); - -// MongoDB connection -mongoose.connect(config.mongoURI, { - useNewUrlParser: true, - useUnifiedTopology: true -}) -.then(() => console.log('MongoDB connected')) -.catch(err => console.error('MongoDB connection error:', err)); - -// Routes -app.use('/api', router); - -// Error handling middleware -app.use((err, req, res, next) => { - console.error('Error:', err.stack); - res.status(500).json({ message: 'Server error' }); -}); - -app.listen(PORT, () => { - console.log(`Server running on port ${PORT}`); -}); diff --git a/backend/middleware/authMiddleware.js b/backend/middleware/authMiddleware.js deleted file mode 100644 index 170f474fd..000000000 --- a/backend/middleware/authMiddleware.js +++ /dev/null @@ -1,24 +0,0 @@ -// middleware/authMiddleware.js -const jwt = require('jsonwebtoken'); -const config = require('../config/config'); - -module.exports = (req, res, next) => { - // Get token from header - const token = req.header('Authorization'); - - // Check if not token - if (!token) { - return res.status(401).json({ message: 'Authorization denied' }); - } - - try { - // Verify token - const decoded = jwt.verify(token, config.JWT_SECRET); - - // Add user from payload - req.user = decoded; - next(); - } catch (error) { - res.status(401).json({ message: 'Token is not valid' }); - } -}; diff --git a/backend/middleware/validationMiddleware.js b/backend/middleware/validationMiddleware.js deleted file mode 100644 index 65e2f4bed..000000000 --- a/backend/middleware/validationMiddleware.js +++ /dev/null @@ -1,18 +0,0 @@ -// middleware/validationMiddleware.js -// Example validation middleware using Joi -const Joi = require('joi'); - -exports.validateSignup = (req, res, next) => { - const schema = Joi.object({ - username: Joi.string().alphanum().min(3).max(30).required(), - email: Joi.string().email().required(), - password: Joi.string().min(6).required() - }); - - const { error } = schema.validate(req.body); - if (error) { - return res.status(400).json({ message: error.details[0].message }); - } - - next(); -}; diff --git a/backend/models/user.js b/backend/models/user.js deleted file mode 100644 index f2cf7fa0b..000000000 --- a/backend/models/user.js +++ /dev/null @@ -1,10 +0,0 @@ -// models/user.js -const mongoose = require('mongoose'); - -const userSchema = new mongoose.Schema({ - username: { type: String, required: true, unique: true }, - email: { type: String, required: true, unique: true }, - password: { type: String, required: true } -}); - -module.exports = mongoose.model('User', userSchema); diff --git a/backend/package-lock.json b/backend/package-lock.json deleted file mode 100644 index b1147524c..000000000 --- a/backend/package-lock.json +++ /dev/null @@ -1,1345 +0,0 @@ -{ - "name": "backend", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "backend", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "bcryptjs": "^2.4.3", - "body-parser": "^1.20.2", - "cors": "^2.8.5", - "express": "^4.19.2", - "jsonwebtoken": "^9.0.2", - "mongoose": "^8.4.1", - "nodemon": "^3.1.3" - } - }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", - "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", - "dependencies": { - "sparse-bitfield": "^3.0.3" - } - }, - "node_modules/@types/webidl-conversions": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", - "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" - }, - "node_modules/@types/whatwg-url": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", - "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", - "dependencies": { - "@types/webidl-conversions": "*" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bson": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-6.7.0.tgz", - "integrity": "sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ==", - "engines": { - "node": ">=16.20.1" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/kareem": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", - "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mongodb": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", - "integrity": "sha512-ZF9Ugo2JCG/GfR7DEb4ypfyJJyiKbg5qBYKRintebj8+DNS33CyGMkWbrS9lara+u+h+yEOGSRiLhFO/g1s1aw==", - "dependencies": { - "@mongodb-js/saslprep": "^1.1.5", - "bson": "^6.7.0", - "mongodb-connection-string-url": "^3.0.0" - }, - "engines": { - "node": ">=16.20.1" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.188.0", - "@mongodb-js/zstd": "^1.1.0", - "gcp-metadata": "^5.2.0", - "kerberos": "^2.0.1", - "mongodb-client-encryption": ">=6.0.0 <7", - "snappy": "^7.2.2", - "socks": "^2.7.1" - }, - "peerDependenciesMeta": { - "@aws-sdk/credential-providers": { - "optional": true - }, - "@mongodb-js/zstd": { - "optional": true - }, - "gcp-metadata": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "snappy": { - "optional": true - }, - "socks": { - "optional": true - } - } - }, - "node_modules/mongodb-connection-string-url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", - "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", - "dependencies": { - "@types/whatwg-url": "^11.0.2", - "whatwg-url": "^13.0.0" - } - }, - "node_modules/mongoose": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.1.tgz", - "integrity": "sha512-odQ2WEWGL3hb0Qex+QMN4eH6D34WdMEw7F1If2MGABApSDmG9cMmqv/G1H6WsXmuaH9mkuuadW/WbLE5+tHJwA==", - "dependencies": { - "bson": "^6.7.0", - "kareem": "2.6.3", - "mongodb": "6.6.2", - "mpath": "0.9.0", - "mquery": "5.0.0", - "ms": "2.1.3", - "sift": "17.1.3" - }, - "engines": { - "node": ">=16.20.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mongoose" - } - }, - "node_modules/mongoose/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/mpath": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", - "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mquery": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", - "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", - "dependencies": { - "debug": "4.x" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/mquery/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mquery/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/nodemon": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.3.tgz", - "integrity": "sha512-m4Vqs+APdKzDFpuaL9F9EVOF85+h070FnkHVEoU4+rmT6Vw0bmNl7s61VEkY/cJkL7RCv1p4urnUDUMrS5rk2w==", - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sift": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", - "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", - "dependencies": { - "memory-pager": "^1.0.2" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", - "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tr46": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", - "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", - "dependencies": { - "punycode": "^2.3.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-url": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", - "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", - "dependencies": { - "tr46": "^4.1.1", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=16" - } - } - } -} diff --git a/backend/package.json b/backend/package.json deleted file mode 100644 index dbb85c1f4..000000000 --- a/backend/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "backend", - "version": "1.0.0", - "main": "index.js", - "scripts": { - "start": "nodemon index.js", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "description": "", - "dependencies": { - "bcryptjs": "^2.4.3", - "body-parser": "^1.20.2", - "cors": "^2.8.5", - "express": "^4.19.2", - "jsonwebtoken": "^9.0.2", - "mongoose": "^8.4.1", - "nodemon": "^3.1.3" - } -} diff --git a/backend/routers/auth.js b/backend/routers/auth.js deleted file mode 100644 index f12433479..000000000 --- a/backend/routers/auth.js +++ /dev/null @@ -1,9 +0,0 @@ -// routes/auth.js -const express = require('express'); -const router = express.Router(); -const authController = require('../controllers/authController'); - -router.post('/signup', authController.signup); -router.post('/login', authController.login); - -module.exports = router; diff --git a/backend/routers/router.js b/backend/routers/router.js deleted file mode 100644 index dab572a37..000000000 --- a/backend/routers/router.js +++ /dev/null @@ -1,8 +0,0 @@ -// routes/router.js -const express = require('express'); -const router = express.Router(); -const authRoutes = require('./auth'); - -router.use('/auth', authRoutes); - -module.exports = router; diff --git a/blog/2021-06-15-dynamic-programming/dynamic-programming-problems.md b/blog/2021-06-15-dynamic-programming/dynamic-programming-problems.md deleted file mode 100644 index 4a1852227..000000000 --- a/blog/2021-06-15-dynamic-programming/dynamic-programming-problems.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -slug: dynamic-programming-problems -title: Dynamic Programming Problems -authors: [Anshika] -tags: ["30daysofcpp", "arrays", "practice-problems","leetcode","geeksforgeeks"] ---- - -- [Maximum Subarray](https://leetcode.com/problems/maximum-subarray/description/) - -- [Valid Parenthesis String](https://leetcode.com/problems/valid-parenthesis-string/description/) - -- [Minimum Number of Operations to Satisfy Conditions](https://leetcode.com/problems/minimum-number-of-operations-to-satisfy-conditions/description/) - -- [N-th Tribonacci Number](https://leetcode.com/problems/n-th-tribonacci-number/description/) - -- [Is Subsequence](https://leetcode.com/problems/is-subsequence/description/) - -- [Counting Bits](https://leetcode.com/problems/counting-bits/description/) - -- [Best Time to Buy and Sell Stock](https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/) - -- [Pascal's Triangle](https://leetcode.com/problems/pascals-triangle/description/) - -- [Climbing Stairs](https://leetcode.com/problems/climbing-stairs/description/) - -- [Maximum Product Subarray](https://www.geeksforgeeks.org/problems/maximum-product-subarray3604/1?page=1&category=Dynamic%20Programming&sortBy=submissions) - -- [Perfect Sum Problem](https://www.geeksforgeeks.org/problems/perfect-sum-problem5633/1?page=1&category=Dynamic%20Programming&sortBy=submissions) - -- [Subset Sum Problem](https://www.geeksforgeeks.org/problems/subset-sum-problem-1611555638/1?page=1&category=Dynamic%20Programming&sortBy=submissions) - -- [Minimum sum partition](https://www.geeksforgeeks.org/problems/minimum-sum-partition3317/1?page=2&category=Dynamic%20Programming&sortBy=submissions) - -- [Nth catalan numbe](https://www.geeksforgeeks.org/problems/nth-catalan-number0817/1?page=2&category=Dynamic%20Programming&sortBy=submissions) - -- [Word Break](https://www.geeksforgeeks.org/problems/word-break1352/1?page=2&category=Dynamic%20Programming&sortBy=submissions) diff --git a/blog/2021-08-01-mdx-blog-post.mdx b/blog/2021-08-01-mdx-blog-post.mdx deleted file mode 100644 index 7dcdf78f8..000000000 --- a/blog/2021-08-01-mdx-blog-post.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -slug: mdx-blog-post -title: MDX Blog Post -authors: [shubhadip] -tags: [docusaurus] ---- - -Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/). - -:::tip - -Use the power of React to create interactive blog posts. - -```js - -``` - - - -::: diff --git a/blog/2024-05-23-hello-world/docusaurus-plushie-banner.jpeg b/blog/2024-05-23-hello-world/docusaurus-plushie-banner.jpeg deleted file mode 100644 index 11bda0928456b12f8e53d0ba5709212a4058d449..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96122 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 diff --git a/blog/2024-05-23-hello-world/index.md b/blog/2024-05-23-hello-world/index.md deleted file mode 100644 index 0c0383fd1..000000000 --- a/blog/2024-05-23-hello-world/index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -slug: hello-world -title: Hello World -authors: [shubhadip] -tags: ["30daysofcpp", "first-blog", "opensource"] ---- - -## Hello World - -Hi, folks. -My name is Shubhadip and I am a student at Chandigarh University. I am a beginner in open source and I am participating in the #30DaysOfC++ challenge. I am excited to learn and contribute to open source. I will be sharing my journey through this blog. Stay tuned for more updates. diff --git a/blog/2024-06-03-STL-problems/STL-problems.md b/blog/2024-06-03-STL-problems/STL-problems.md deleted file mode 100644 index a1ab3672d..000000000 --- a/blog/2024-06-03-STL-problems/STL-problems.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -slug: stl-problems -title: STL Problems -authors: [chaitanya] -tags: ["30daysofcpp", "standard-template-library", "vectors", "sets", "maps","practice-problems","codeforces","hackerrank","geeksforgeeks","spoj"] ---- - -- [Vector-STL](https://www.geeksforgeeks.org/problems/c-stl-set-1-vector/1) - -- [Sets-STL](https://www.hackerrank.com/challenges/cpp-sets/problem) - -- [Map-STL](https://www.hackerrank.com/challenges/cpp-maps/problem) - -- [Tom Riddle's Diary](https://codeforces.com/contest/855/problem/A) - -- [Find the frequency](https://www.geeksforgeeks.org/problems/find-the-frequency/1) - -- [Pretty Print](https://www.hackerrank.com/challenges/prettyprint/problem?isFullScreen=true) - -- [Twice Counter](https://www.geeksforgeeks.org/problems/twice-counter4236/1) - -- [Radio Station](https://codeforces.com/contest/918/problem/B) - -- [Dequeue-STL](https://www.hackerrank.com/challenges/deque-stl/problem) - -- [RPLD Database](https://www.spoj.com/problems/RPLD/) - diff --git a/blog/2024-06-03-array-problems/array-problems.md b/blog/2024-06-03-array-problems/array-problems.md deleted file mode 100644 index 5e0f3c8e2..000000000 --- a/blog/2024-06-03-array-problems/array-problems.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -slug: array-problems -title: Array Problems -authors: [chaitanya] -tags: ["30daysofcpp", "arrays", "practice-problems","leetcode","hackerrank","geeksforgeeks","edabit"] ---- - -- [Array Introduction](https://www.hackerrank.com/challenges/arrays-introduction/problem?isFullScreen=true) - -- [Index Multiplier](https://edabit.com/challenge/QcDeF47azy5bhPos6) - -- [2D array](https://www.geeksforgeeks.org/problems/two-dimensional-world/1) - -- [Perfect Square Patch](https://edabit.com/challenge/omTRzwvBibk4etBkx) - -- [Merge two arrays](https://www.geeksforgeeks.org/problems/merge-two-sorted-arrays-1587115620/1) - -- [Peak Element](https://www.geeksforgeeks.org/problems/peak-element/1) - -- [Eliminate the odds](https://edabit.com/challenge/7iT6DbY3GsHnLBPq4) - -- [Variable Sized Array](https://www.hackerrank.com/challenges/variable-sized-arrays/problem?isFullScreen=true) - -- [Check if sorted](https://leetcode.com/problems/check-if-array-is-sorted-and-rotated/description/) - -- [Best time to buy and sell stock](https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/) - -- [Search for the element](https://www.geeksforgeeks.org/problems/who-will-win-1587115621/1?utm_source=youtube&utm_medium=collab_striver_ytdescription&utm_campaign=who-will-win) - -- [Majority Element](https://leetcode.com/problems/majority-element/description/) - -- [Trapping rainwater](https://www.geeksforgeeks.org/problems/trapping-rain-water-1587115621/1) - -- [Pascal's Triangle](https://leetcode.com/problems/pascals-triangle/description/) - -- [Count Inversion](https://www.geeksforgeeks.org/problems/inversion-of-array-1587115620/1?utm_source=youtube&utm_medium=collab_striver_ytdescription&utm_campaign=inversion-of-array) - -- [Concatenation of Array](https://leetcode.com/problems/concatenation-of-array/description/) - -- [Build Array from Permutation](https://leetcode.com/problems/build-array-from-permutation/description/) - -- [Number of Good Pairs](https://leetcode.com/problems/number-of-good-pairs/description/) - -- [Shuffle the Array](https://leetcode.com/problems/shuffle-the-array/description/) - -- [Largest Local Values in a Matrix](https://leetcode.com/problems/largest-local-values-in-a-matrix/description/) - -- [Convert an Array Into a 2D Array With Conditions](https://leetcode.com/problems/convert-an-array-into-a-2d-array-with-conditions/description/) - -- [Running Sum of 1d Array](https://leetcode.com/problems/running-sum-of-1d-array/description/) - -- [Decode XORed Array](https://leetcode.com/problems/decode-xored-array/description/) - -- [Check If Two String Arrays are Equivalent](https://leetcode.com/problems/check-if-two-string-arrays-are-equivalent/description/) - -- [Maximum Product Difference Between Two Pairs](https://leetcode.com/problems/maximum-product-difference-between-two-pairs/description/) - -- [Maximum Product of Two Elements in an Array](https://leetcode.com/problems/maximum-product-of-two-elements-in-an-array/description/) - -- [Height Checker](https://leetcode.com/problems/height-checker/description/) - -- [Unique Morse Code Words](https://leetcode.com/problems/unique-morse-code-words/description/) \ No newline at end of file diff --git a/blog/2024-06-03-control-structure-problems/control-structure-problems.md b/blog/2024-06-03-control-structure-problems/control-structure-problems.md deleted file mode 100644 index 29ca8ba7f..000000000 --- a/blog/2024-06-03-control-structure-problems/control-structure-problems.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -slug: control-structure-problems -title: Control Structure Problems -authors: [chaitanya] -tags: ["30daysofcpp", "control-flow", "conditionals", "loops", "jump-controls","practice-problems","geeksforgeeks","codechef","edabit"] ---- - -## Conditionals - -- [Christmas? or not?](https://www.codechef.com/problems/CHRISTGREET) - -- [Find out how much the food costs](https://www.codechef.com/problems/FOODCOST) - -- [Equality of given numbers](https://edabit.com/challenge/uSiEPX7YrhNsqtzMr) - -- [Mango lassi](https://www.codechef.com/problems/MANGOLASSI) - -- [The farm problem](https://edabit.com/challenge/aADAoRtkbZWEKw9Ap) - -- [Reach on time](https://www.codechef.com/problems/TIMELY) - -- [Consonants and vowels](https://www.geeksforgeeks.org/problems/consonants-and-vowels-check/1) - -## Jump control - -- [Return number in words](https://www.geeksforgeeks.org/problems/c-switch-case-statement5900/1) - -## Loops - -- [Count the words](https://www.codechef.com/problems/CNTWRD) - -- [Reverse the digits](https://www.geeksforgeeks.org/problems/reverse-digit0316/1) - -- [LCM and GCD](https://www.geeksforgeeks.org/problems/lcm-and-gcd4516/1) - -- [Armstrong numbers](https://workat.tech/problem-solving/practice/armstrong-number) - -- [Palindrome numbers](https://www.geeksforgeeks.org/problems/palindrome0746/1) - -- [Prime numbers in range](https://www.geeksforgeeks.org/problems/find-prime-numbers-in-a-range4718/1) - -- [Patterns](https://www.geeksforgeeks.org/problems/pattern/1) - diff --git a/blog/2024-06-03-function-problems/function-problems.md b/blog/2024-06-03-function-problems/function-problems.md deleted file mode 100644 index 5ac1397ed..000000000 --- a/blog/2024-06-03-function-problems/function-problems.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -slug: function-structure-problems -title: Function Problems -authors: [chaitanya] -tags: ["30daysofcpp", "functions", "practice-problems","leetcode","hackerrank","geeksforgeeks","codechef","edabit"] ---- - -- [Functions in Cpp](https://www.codechef.com/learn/course/cpp/LTCCPP27/problems/CPPFUNC01) - -- [User defined functions](https://www.codechef.com/learn/course/cpp/LTCCPP27/problems/CPPFUNC03) - -- [Function within a function](https://www.codechef.com/learn/course/cpp/LTCCPP27/problems/CPPFUNC08) - -- [Predefined functions](https://www.codechef.com/learn/course/cpp/LTCCPP27/problems/CPPFUNC09) - -- [Basic math functions](https://www.codechef.com/learn/course/cpp-beginner/BC00BC08/problems/BMMC08A) - -- [Repdigit or not](https://edabit.com/challenge/ciHft8ompLrYCyiEq) - -- [Sum of numbers](https://www.hackerrank.com/challenges/c-tutorial-functions/problem?isFullScreen=true) - -- [Prime Number](https://www.geeksforgeeks.org/problems/prime-number2314/1) - -- [Sum Of Digits](https://www.geeksforgeeks.org/problems/sum-of-digits1742/1) - -- [Coded words](https://edabit.com/challenge/7CaLzrWHhfzGw4CaT) - -- [Reverse and capitalize](https://edabit.com/challenge/mCfMS42XCvAGnH7q7) - -- [Compute with functions](https://www.codechef.com/learn/course/cpp/LTCCPP27/problems/CPPFUNC01) - -- [Print without loop](https://www.geeksforgeeks.org/problems/print-1-to-n-without-using-loops-1587115620/1?utm_source=youtube&utm_medium=collab_striver_ytdescription&utm_campaign=print-1-to-n-without-using-loops) - -- [Fibonacci Numnber](https://leetcode.com/problems/fibonacci-number/description/) - -- [Armstrong Numbers](https://www.geeksforgeeks.org/problems/armstrong-numbers2727/1) - -- [Factorial of numbers](https://www.geeksforgeeks.org/problems/find-all-factorial-numbers-less-than-or-equal-to-n3548/0?problemType=functional&difficulty%255B%255D=-1&page=1&query=problemTypefunctionaldifficulty%255B%255D-1page1) - -- [Anagram of String](https://www.geeksforgeeks.org/problems/anagram-of-string/1) - -- [Power of two](https://leetcode.com/problems/power-of-two/description/) - -- [Function Composition](https://leetcode.com/problems/function-composition/description/) - -- [Palindrome Number](https://leetcode.com/problems/palindrome-number/description/) - -- [The Palindrome Pattern](https://www.geeksforgeeks.org/problems/the-palindrome-pattern3900/1?page=1&category=Functions&sortBy=submissions) - -- [Compare the Triplets](https://www.hackerrank.com/challenges/compare-the-triplets/problem) - -- [A Very Big Sum](https://www.hackerrank.com/challenges/a-very-big-sum/problem) - -- [Sum of Digits](https://www.geeksforgeeks.org/problems/sum-of-digits-of-a-number-in-cpp/) - -- [Palindrome Number](https://leetcode.com/problems/palindrome-number/description/) - -- [Count Characters](https://edabit.com/challenge/et2Zbmb3bxdcm6xnf) - -- [Calculate Distance](https://www.hackerrank.com/challenges/kruskalmstrsub/problem) - -- [Generate Parentheses](https://leetcode.com/problems/generate-parentheses/description/) - -- [Maximum Prime Difference](https://leetcode.com/problems/maximum-prime-difference/description/) - -- [Sum of Digit Differences of All Pairs](https://leetcode.com/problems/sum-of-digit-differences-of-all-pairs/description/) - -- [Harshad Number](https://leetcode.com/problems/harshad-number/description/) - -- [Most Frequent Prime](https://leetcode.com/problems/most-frequent-prime/description/) - -- [Find Missing and Repeated Values](https://leetcode.com/problems/find-missing-and-repeated-values/description/) - -- [Maximum Xor Product](https://leetcode.com/problems/maximum-xor-product/description/) - -- [Maximum Odd Binary Number](https://leetcode.com/problems/maximum-odd-binary-number/description/) - -- [Check if The Number is Fascinating](https://leetcode.com/problems/check-if-the-number-is-fascinating/description/) - -- [Find the Pivot Integer](https://leetcode.com/problems/find-the-pivot-integer/description/) - -- [Sum of Number and Its Reverse](https://leetcode.com/problems/sum-of-number-and-its-reverse/description/) - -- [Find Triangular Sum of an Array](https://leetcode.com/problems/find-triangular-sum-of-an-array/description/) - -- [Count Square Sum Triples](https://leetcode.com/problems/count-square-sum-triples/description/) - - - - diff --git a/blog/2024-06-03-introductory-problems/introductory-problems.md b/blog/2024-06-03-introductory-problems/introductory-problems.md deleted file mode 100644 index de0c21602..000000000 --- a/blog/2024-06-03-introductory-problems/introductory-problems.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -slug: introductory-problems -title: Basic CPP Problems -authors: [chaitanya] -tags: ["30daysofcpp", "beginner", "operations", "input", "output","practice-problems","hackerrank","geeksforgeeks","codechef","edabit"] ---- - -- [Say "Hello World!" with C++](https://hackerrank.com/challenges/cpp-hello-world/problem?isFullScreen=true) - -- [Read and print an Integer](https://www.codechef.com/problems/START01) - -- [Add two numbers](https://edabit.com/challenge/SFzHtm63XT6EYNHWY) - -- [Find the Size of various data types](https://www.geeksforgeeks.org/problems/data-type-1666706751/1?utm_source=youtube&utm_medium=collab_striver_ytdescription&utm_campaign=data-type) - -- [Return next digit](https://edabit.com/challenge/QgCMMMyMmckvHbfKv) - -- [Convert Minutes into Seconds](https://edabit.com/challenge/MtNAJmJZ49i5Xf3AW) - -- [Maximum edge of a triangle](https://edabit.com/challenge/56XXwAkLJGbEccYfn) - -- [Clear day](https://www.codechef.com/problems/CLEARDAY) - -- [Double the rent](https://www.codechef.com/problems/DOUBLERENT) - diff --git a/blog/2024-06-03-sorting-problems/sorting-problems.md b/blog/2024-06-03-sorting-problems/sorting-problems.md deleted file mode 100644 index 6788437a1..000000000 --- a/blog/2024-06-03-sorting-problems/sorting-problems.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -slug: sorting-problems -title: Sorting Problems -authors: [chaitanya] -tags: ["30daysofcpp", "sorting","practice-problems","leetcode","codeforces","geeksforgeeks"] ---- - -- [Gravity Flip](https://codeforces.com/problemset/problem/405/A) - -- [Honest Coach](https://codeforces.com/problemset/problem/1360/B) - -- [Selection Sort](https://www.geeksforgeeks.org/problems/selection-sort/1?utm_source=youtube&utm_medium=collab_striver_ytdescription&utm_campaign=selection-sort) - -- [Majority element](https://leetcode.com/problems/majority-element/description/) - -- [Bubble Sort](https://www.geeksforgeeks.org/problems/bubble-sort/1?utm_source=youtube&utm_medium=collab_striver_ytdescription&utm_campaign=bubble-sort) - -- [Quick Sort](https://www.geeksforgeeks.org/problems/quick-sort/1?utm_source=youtube&utm_medium=collab_striver_ytdescription&utm_campaign=quick-sort) - -- [Merge Sorted Array](https://leetcode.com/problems/merge-sorted-array/description/) - -- [Symmetric Encoding](https://codeforces.com/problemset/problem/1974/B) - -- [Insertion Sort](https://www.geeksforgeeks.org/problems/insertion-sort/0?category%5B%5D=Algorithms&page=1&query=category%5B%5DAlgorithmspage1&utm_source=youtube&utm_medium=collab_striver_ytdescription&utm_campaign=insertion-sort) - -- [Sort Colors](https://leetcode.com/problems/sort-colors/description/) - -- [Find Players With Zero or One Losses](https://leetcode.com/problems/find-players-with-zero-or-one-losses/description/) - -- [Custom Sort String](https://leetcode.com/problems/custom-sort-string/description/) - -- [K Closest Points to Origin](https://leetcode.com/problems/k-closest-points-to-origin/description/) - -- [Minimum Number of Arrows to Burst Balloons](https://leetcode.com/problems/minimum-number-of-arrows-to-burst-balloons/description/) - -- [Bag of Tokens](https://leetcode.com/problems/bag-of-tokens/description/) - -- [Hand of Straights](https://leetcode.com/problems/hand-of-straights/description/) - -- [Determine if Two Strings Are Close](https://leetcode.com/problems/determine-if-two-strings-are-close/description/) - -- [Merge Intervals](https://leetcode.com/problems/merge-intervals/description/) - -- [3Sum](https://leetcode.com/problems/3sum/description/) - -- [Contains Duplicate](https://leetcode.com/problems/contains-duplicate/description/) - -- [Maximum Product of Three Numbers](https://leetcode.com/problems/maximum-product-of-three-numbers/description/) - -- [Set Mismatch](https://leetcode.com/problems/set-mismatch/description/) - -- [Relative Sort Array](https://leetcode.com/problems/relative-sort-array/description/) - -- [Array Partition](https://leetcode.com/problems/array-partition/description/) - -- [Relative Ranks](https://leetcode.com/problems/relative-ranks/description/) - -- [H-Index](https://leetcode.com/problems/h-index/description/) - -- [Largest Number](https://leetcode.com/problems/largest-number/description/) - -- [Meeting Rooms II](https://leetcode.com/problems/meeting-rooms-ii/description/) - -- [Wiggle Sort II](https://leetcode.com/problems/wiggle-sort-ii/description/) - -- [Sort Characters By Frequency](https://leetcode.com/problems/sort-characters-by-frequency/description/) \ No newline at end of file diff --git a/blog/2024-06-03-string-problems/string-problems.md b/blog/2024-06-03-string-problems/string-problems.md deleted file mode 100644 index 45747a226..000000000 --- a/blog/2024-06-03-string-problems/string-problems.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -slug: string-problems -title: String Problems -authors: [chaitanya] -tags: ["30daysofcpp", "strings","practice-problems","leetcode","codeforces","geeksforgeeks","codechef","edabit"] ---- - -- [DNA Storage](https://www.codechef.com/practice/course/strings/STRINGS/problems/DNASTORAGE) - -- [Way too long words](https://codeforces.com/problemset/problem/71/A) - -- [Remove outermost parantheses](https://leetcode.com/problems/remove-outermost-parentheses/description/) - -- [Anagram](https://geeksforgeeks.org/problems/anagram-1587115620/1?page=1&category=Strings&sortBy=submissions) - -- [Verify Password](https://codeforces.com/contest/1976/problem/A) - -- [Blobby Volley Scores](https://www.codechef.com/practice/course/strings/STRINGS/problems/BLOBBYVOLLEY) - -- [Reverse every word in a string](https://leetcode.com/problems/reverse-words-in-a-string/description/) - -- [Dubstep](https://codeforces.com/problemset/problem/208/A) - -- [White Spaces](https://edabit.com/challenge/df9LtdceySMvqQJtW) - -- [Longest Common Prefix](https://leetcode.com/problems/longest-common-prefix/description/) - -- [Count number of substrings](https://www.geeksforgeeks.org/problems/count-number-of-substrings4528/1?utm_source=youtube&utm_medium=collab_striver_ytdescription&utm_campaign=count-number-of-substrings) - -- [Double Character Swap](https://edabit.com/challenge/s695FkhRd3J65tmdQ) - -- [Validate an IP Adress](https://www.geeksforgeeks.org/problems/validate-an-ip-address-1587115621/1?page=1&category=Strings&sortBy=submissions) - -- [String to Integer](https://leetcode.com/problems/string-to-integer-atoi/description/) - -- [Roman to Integer](https://leetcode.com/problems/roman-to-integer/description/) - -- [Sort Vowels in a String](https://leetcode.com/problems/sort-vowels-in-a-string/description/) - -- [Letter Tile Possibilities](https://leetcode.com/problems/letter-tile-possibilities/description/) - -- [Append Characters to String to Make Subsequence](https://leetcode.com/problems/append-characters-to-string-to-make-subsequence/description/) - -- [Custom Sort String](https://leetcode.com/problems/custom-sort-string/description/) - -- [Minimum Remove to Make Valid Parentheses](https://leetcode.com/problems/minimum-remove-to-make-valid-parentheses/description/) - -- [Letter Combinations of a Phone Number](https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/) - -- [Maximum Product of Word Lengths](https://leetcode.com/problems/maximum-product-of-word-lengths/description/) - -- [Minimum Length of String After Deleting Similar Ends](https://leetcode.com/problems/minimum-length-of-string-after-deleting-similar-ends/description/) - -- [Determine if Two Strings Are Close](https://leetcode.com/problems/determine-if-two-strings-are-close/description/) - -- [Valid Parenthesis String](https://leetcode.com/problems/valid-parenthesis-string/description/) - -- [Longest Substring Without Repeating Characters](https://leetcode.com/problems/longest-substring-without-repeating-characters/description/) - -- [Remove K Digits](https://leetcode.com/problems/remove-k-digits/description/) \ No newline at end of file diff --git a/blog/2024-06-03-structure-probelms/structure-problems.md b/blog/2024-06-03-structure-probelms/structure-problems.md deleted file mode 100644 index 68ee62c19..000000000 --- a/blog/2024-06-03-structure-probelms/structure-problems.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -slug: structure-problems -title: Structures and Pointers Problems -authors: [chaitanya] -tags: ["30daysofcpp", "struct", "pointer","practice-problems","hackerrank","geeksforgeeks","codechef"] ---- - -- [Cataloging Books](https://www.codechef.com/learn/course/college-oops-cpp/CPOPCPP05/problems/PPSCPP227) - -- [Student Details](https://www.hackerrank.com/challenges/c-tutorial-struct/problem) - -- [Structs and Objects](https://www.geeksforgeeks.org/problems/structs-and-objects/1) - -- [Pointer](https://www.hackerrank.com/challenges/c-tutorial-pointer/problem) - diff --git a/blog/2024-06-13-tree-problems/tree-problems.md b/blog/2024-06-13-tree-problems/tree-problems.md deleted file mode 100644 index 843dce82c..000000000 --- a/blog/2024-06-13-tree-problems/tree-problems.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -slug: tree-problems -title: Trees Problems -authors: [khushi-kalra] -tags: ["30daysofcpp", "trees", "binaryTrees","practice-problems","leetcode"] ---- - -- [Invert Binary Tree](https://leetcode.com/problems/invert-binary-tree/description/) - -- [Maximum Depth of Binary Tree](https://leetcode.com/problems/maximum-depth-of-binary-tree/description/) - -- [Diameter of Binary Tree](https://leetcode.com/problems/diameter-of-binary-tree/description/) - -- [Balanced Binary Tree](https://leetcode.com/problems/balanced-binary-tree/description/) - -- [Same Tree](https://leetcode.com/problems/same-tree/description/) - -- [Subtree of Another Tree](https://leetcode.com/problems/subtree-of-another-tree/description/) - -- [Lowest Common Ancestor of a Binary Search Tree](https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/description/) - -- [Binary Tree Level Order Traversal](https://leetcode.com/problems/binary-tree-level-order-traversal/description/) - -- [Binary Tree Right Side View](https://leetcode.com/problems/binary-tree-right-side-view/description/) - -- [Count Good Nodes In Binary Tree](https://leetcode.com/problems/count-good-nodes-in-binary-tree/description/) - -- [Validate Binary Search Tree](https://leetcode.com/problems/validate-binary-search-tree/description/) - -- [Kth Smallest Element In a BST](https://leetcode.com/problems/kth-smallest-element-in-a-bst/description/) - -- [Construct Binary Tree From Preorder And Inorder Traversal](https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/) - -- [Binary Tree Maximum Path Sum](https://leetcode.com/problems/binary-tree-maximum-path-sum/description/) - -- [Serialize And Deserialize Binary Tree](https://leetcode.com/problems/serialize-and-deserialize-binary-tree/description/) \ No newline at end of file diff --git a/blog/2024-06-14-heap-problems/HEAP-problems.md b/blog/2024-06-14-heap-problems/HEAP-problems.md deleted file mode 100644 index 1a752df78..000000000 --- a/blog/2024-06-14-heap-problems/HEAP-problems.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -slug: heap-problems -title: HEAP Problems -authors: [amruta] -tags: ["30daysofcpp", "heap", "techiedelight","practice-problems","codechef","hackerearth","geeksforgeeks","leetcode"] ---- - -- [Kth smallest element in an array](https://www.geeksforgeeks.org/kth-smallest-largest-element-in-unsorted-array/) - -- [Heap Sort](https://www.geeksforgeeks.org/problems/heap-sort/1) - -- [Merge `M` sorted lists of variable length](https://www.techiedelight.com/merge-m-sorted-lists-variable-length/) - -- [Minimum product of k integers](https://www.geeksforgeeks.org/minimum-product-k-integers-array-positive-integers/) - -- [Deletion in a Heap](https://www.codechef.com/practice/course/heaps/HEAPF/problems/HEAPEDU2) - -- [Insertion in a Heap](https://www.codechef.com/practice/course/heaps/HEAPF/problems/HEAPEDU1) - -- [Mode of an array](https://www.hackerearth.com/practice/data-structures/trees/heapspriority-queues/practice-problems/algorithm/making-more-e942ff93/) - -- [Find Median from Data Stream](https://leetcode.com/problems/find-median-from-data-stream/description/) - -- [The Skyline Problem](https://leetcode.com/problems/the-skyline-problem/description/) - -- [Sliding Window Maximum](https://leetcode.com/problems/sliding-window-maximum/description/) - -- [Strong Password Checker](https://leetcode.com/problems/strong-password-checker/description/) - diff --git a/blog/2024-06-14-pointers-problems/pointers-problem.md b/blog/2024-06-14-pointers-problems/pointers-problem.md deleted file mode 100644 index 198de170e..000000000 --- a/blog/2024-06-14-pointers-problems/pointers-problem.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -slug: pointers-problems -title: Pointers Problems -authors: [Anshika] -tags: ["30daysofcpp", "pointers","practice-problems","leetcode","geeksforgeeks"] ---- - -- [Count Pairs Whose Sum is Less than Target](https://leetcode.com/problems/count-pairs-whose-sum-is-less-than-target/description/) - -- [Reverse Prefix of Word](https://leetcode.com/problems/reverse-prefix-of-word/description/) - -- [Partition Array According to Given Pivot](https://leetcode.com/problems/partition-array-according-to-given-pivot/description/) - -- [Flipping an Image](https://leetcode.com/problems/flipping-an-image/description/) - -- [Interval List Intersections](https://leetcode.com/problems/interval-list-intersections/description/) - -- [Sort Array By Parity II](https://leetcode.com/problems/sort-array-by-parity-ii/description/) - -- [Apply Operations to an Array](https://leetcode.com/problems/apply-operations-to-an-array/description/) - -- [ Divide Players Into Teams of Equal Skill](https://leetcode.com/problems/divide-players-into-teams-of-equal-skill/description/) - -- [Delete the Middle Node of a Linked List](https://leetcode.com/problems/delete-the-middle-node-of-a-linked-list/description/) -- [Move Zeroes](https://leetcode.com/problems/move-zeroes/description/) - -- [Count the triplets](https://www.geeksforgeeks.org/problems/count-the-triplets4615/1?page=1&category=two-pointer-algorithm&difficulty=Easy&sortBy=submissions) - -- [Intersection of two arrays](https://www.geeksforgeeks.org/problems/intersection-of-two-arrays2404/1?page=1&category=two-pointer-algorithm&difficulty=Easy&sortBy=submissions) - -- [Four Elements](https://www.geeksforgeeks.org/problems/four-elements2452/1?page=1&category=two-pointer-algorithm&difficulty=Easy&sortBy=submissions) diff --git a/blog/2024-06-14-recursion-problem/recursion-problem.md b/blog/2024-06-14-recursion-problem/recursion-problem.md deleted file mode 100644 index 72542bcbe..000000000 --- a/blog/2024-06-14-recursion-problem/recursion-problem.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -slug: recursion-problems -title: Recursion Problems -authors: [Anshika] -tags: ["30daysofcpp", "recursion","practice-problems","leetcode","geeksforgeeks"] ---- - --[Fibonacci Number](https://leetcode.com/problems/fibonacci-number/description/) - -- [Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/description/) - -- [Merge Two Sorted Lists](https://leetcode.com/problems/merge-two-sorted-lists/description/) - -- [Power of Four](https://leetcode.com/problems/power-of-four/description/) - -- [Power of Two](https://leetcode.com/problems/power-of-two/description/) - -- [Power of Three](https://leetcode.com/problems/power-of-three/description/) - -- [Print Pattern](https://www.geeksforgeeks.org/problems/print-pattern3549/1?page=1&category=Recursion&difficulty=Easy&sortBy=submissions) - -- [Recursive sequence](https://www.geeksforgeeks.org/problems/recursive-sequence1611/1?page=1&category=Recursion&difficulty=Easy&sortBy=submissions) - -- [Print N to 1 without loop](https://www.geeksforgeeks.org/problems/print-n-to-1-without-loop/1?page=1&category=Recursion&difficulty=Easy&sortBy=submissions) - -- [Divisor Game](https://www.geeksforgeeks.org/problems/divisor-game-1664432414/1?page=1&category=Recursion&difficulty=Easy&sortBy=submissions) - diff --git a/blog/2024-06-15-linked-list/linked-list-problems.md b/blog/2024-06-15-linked-list/linked-list-problems.md deleted file mode 100644 index 047986172..000000000 --- a/blog/2024-06-15-linked-list/linked-list-problems.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -slug: linked-list-problems -title: Linked List Problems -authors: [Anshika] -tags: ["30daysofcpp", "arrays", "practice-problems","leetcode","geeksforgeeks"] ---- - -- [Remove Linked List Elements](https://leetcode.com/problems/remove-linked-list-elements/description/) - -- [Design HashMap](https://leetcode.com/problems/design-hashmap/description/) - -- [Intersection of Two Linked Lists](https://leetcode.com/problems/intersection-of-two-linked-lists/description/) - -- [Add Two Numbers](https://leetcode.com/problems/add-two-numbers/description/) - -- [Remove Nth Node From End of List](https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/) - -- [Merge Two Sorted Lists](https://leetcode.com/problems/merge-two-sorted-lists/description/) - -- [Merge k Sorted Lists](https://leetcode.com/problems/merge-k-sorted-lists/description/) - -- [Swap Nodes in Pairs](https://leetcode.com/problems/swap-nodes-in-pairs/description/) - -- [Remove Duplicates from Sorted List](https://leetcode.com/problems/remove-duplicates-from-sorted-list/description/) - -- [Remove loop in Linked List](https://www.geeksforgeeks.org/problems/remove-loop-in-linked-list/1?page=1&category=Linked%20List&sortBy=submissions) - -- [Detect Loop in linked list](https://www.geeksforgeeks.org/problems/detect-loop-in-linked-list/1?page=1&category=Linked%20List&sortBy=submissions) - -- [Middle of a Linked List](https://www.geeksforgeeks.org/problems/finding-middle-element-in-a-linked-list/1?page=1&category=Linked%20List&sortBy=submissions) - -- [Rotate a Linked List](https://www.geeksforgeeks.org/problems/rotate-a-linked-list/1?page=1&category=Linked%20List&sortBy=submissions) - -- [Delete without head pointer](https://www.geeksforgeeks.org/problems/delete-without-head-pointer/1?page=1&category=Linked%20List&sortBy=submissions) - -- [Linked List Insertion](https://www.geeksforgeeks.org/problems/linked-list-insertion-1587115620/1?page=1&category=Linked%20List&sortBy=submissions) \ No newline at end of file diff --git a/blog/2024-06-17-LinkedList-problem/LinkedList-problems.md b/blog/2024-06-17-LinkedList-problem/LinkedList-problems.md deleted file mode 100644 index e0992c825..000000000 --- a/blog/2024-06-17-LinkedList-problem/LinkedList-problems.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -slug: LinkedList-problems -title: LinkedList Problems -authors: [Braj] -tags: ["30daysofcpp", "linkedlist","practice-problems","leetcode","codeforces","geeksforgeeks","codechef","edabit"] ---- - -- [Find Middle of the Linked List](https://www.geeksforgeeks.org/write-a-c-function-to-print-the-middle-of-the-linked-list/) - -- [Reverse a Linked List](https://www.geeksforgeeks.org/reverse-a-linked-list/) - -- [Detect loop or cycle in a linked list](https://www.geeksforgeeks.org/detect-loop-in-a-linked-list/) - -- [Remove Nth Node from end of List](https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/) - -- [Remove Duplicates from Sorted List](https://www.codechef.com/practice/course/linked-lists/LINKLISTF/problems/PREP55) \ No newline at end of file diff --git a/blog/authors.yml b/blog/authors.yml index 5c7a384bc..df2511348 100644 --- a/blog/authors.yml +++ b/blog/authors.yml @@ -22,3 +22,21 @@ khushikalra: url: https://github.com/abckhush image_url: https://yt3.googleusercontent.com/BpaBYEiGibr8uiNMCWytJ5BdKbPtpqTJAuA5Ida5rXAe8Zfvr8keZSPXYSqGasjGo7OunF2w=s176-c-k-c0x00ffffff-no-rj +Anshika: + name: Khushi Kalra + title: GSSoC'24 Contributor @30DaysOfCPP + url: https://github.com/abckhush + image_url: https://yt3.googleusercontent.com/BpaBYEiGibr8uiNMCWytJ5BdKbPtpqTJAuA5Ida5rXAe8Zfvr8keZSPXYSqGasjGo7OunF2w=s176-c-k-c0x00ffffff-no-rj + + +khushi-kalra: + name: Khushi Kalra + title: GSSoC'24 Contributor @30DaysOfCPP + url: https://github.com/abckhush + image_url: https://i.ibb.co/CP5hv84/user-1.png + +Braj: + name: Braj + title: GSSoC'24 Contributor @30DaysOfCPP + url: https://github.com/abckhush + image_url: https://i.ibb.co/CP5hv84/user-1.png diff --git a/blog/tags.yml b/blog/tags.yml new file mode 100644 index 000000000..ab8356058 --- /dev/null +++ b/blog/tags.yml @@ -0,0 +1,4 @@ +cpp: + label: C++ + permalink: /cpp + description: C Plus Plus Programming diff --git a/docs/Day 17/_category.json b/docs/Day 17/_category.json deleted file mode 100644 index c457f615c..000000000 --- a/docs/Day 17/_category.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 17", - "position": 17, - "link": { - "type": "generated-index" - } - } \ No newline at end of file diff --git a/docs/Day 17/exception-handling.md b/docs/Day 17/exception-handling.md deleted file mode 100644 index 38392acad..000000000 --- a/docs/Day 17/exception-handling.md +++ /dev/null @@ -1,177 +0,0 @@ ---- -sidebar_position: 1 -title: "Exception Handling in C++" -description: "Exception Handling provides a mechanism to handle unexpected situations (exceptions) that occur during the execution of a program, ensuring that the program can continue to operate or fail gracefully." -sidebar_label: "Exception Handling" -slug: exception-handling-in-cpp ---- - -# Exception Handling in C++ - -Exception handling in C++ is a powerful feature that allows developers to manage and respond to runtime errors in a controlled way. It provides a mechanism to handle unexpected situations (exceptions) that occur during the execution of a program, ensuring that the program can continue to operate or fail gracefully. - -It enables a program to deal with anomalies and unexpected conditions in a consistent and manageable way. It allows developers to separate error-handling code from regular code, improving readability and maintainability. - -## Basics of Exception Handling -The basic concept of exception handling involves three keywords: `try`, `throw`, and `catch`. - -1. **try:** The try block contains the code that may potentially throw an exception. -2. **throw:** The throw keyword is used to signal the occurrence of an anomaly or exceptional condition. -3. **catch:** The catch block handles the exception thrown by the throw statement. - -```cpp -#include -using namespace std; - -int main() { - try { - // Code that may throw an exception - throw 20; - } - catch (int e) { - // Code that handles the exception - cout << "An exception occurred. Exception Nr. " << e << endl; - } - return 0; -} -``` - -## Exception Handling Mechanism - -The exception handling mechanism in C++ involves the following steps: -1. **Throwing an Exception:** When an error occurs, the program throws an exception using the throw keyword. -2. **Catching the Exception:** The thrown exception is caught by a catch block that matches the type of the exception. -3. **Handling the Exception:** The catch block contains code to handle the exception. - -### Throwing Exceptions -An exception can be thrown using the throw keyword followed by an exception object. This object can be of any type, including built-in types or user-defined types. - -```cpp -#include -using namespace std; - -void test(int x) { - if (x == 0) { - throw "Division by zero condition!"; - } -} - -int main() { - try { - test(0); - } - catch (const char* msg) { - cout << "Caught: " << msg << endl; - } - return 0; -} -``` - -### Catching Exceptions -The catch block is used to handle exceptions. It must follow a try block. The parameter of the catch block determines the type of exception it can handle. - -```cpp -#include -using namespace std; - -int main() { - try { - throw 100; - } - catch (int e) { - cout << "An exception occurred. Exception Nr. " << e << endl; - } - return 0; -} -``` - -### Multiple Catch Blocks -A single try block can have multiple catch blocks to handle different types of exceptions. - -```cpp -#include -using namespace std; - -int main() { - try { - throw 100.5; - } - catch (int e) { - cout << "Caught an integer exception. Exception Nr. " << e << endl; - } - catch (double e) { - cout << "Caught a double exception. Exception Nr. " << e << endl; - } - return 0; -} -``` - -### Standard Exception Classes -C++ provides a set of standard exception classes defined in the `` header file. Some of the commonly used standard exception classes are: - -1. `std::exception`: Base class for all standard exceptions. -2. `std::bad_alloc`: Thrown by new on allocation failure. -3. `std::bad_cast`: Thrown by dynamic_cast when it fails with a reference type. -4. `std::bad_typeid`: Thrown by typeid. -5. `std::logic_error`: Represents logic errors. -6. `std::runtime_error`: Represents runtime errors. - - -### User-Defined Exceptions -You can define your own exception classes by inheriting from the std::exception class or any of its derived classes. - -```cpp -#include -#include -using namespace std; - -class MyException : public exception { - virtual const char* what() const throw() { - return "My custom exception occurred"; - } -}; - -int main() { - try { - throw MyException(); - } - catch (MyException& e) { - cout << e.what() << endl; - } - return 0; -} -``` - -### Stack Unwinding -When an exception is thrown, the stack unwinding process occurs. It means the destructor of each object is called for all objects constructed since the entry to the try block. - -```cpp -#include -using namespace std; - -class Test { -public: - Test() { cout << "Constructor called" << endl; } - ~Test() { cout << "Destructor called" << endl; } -}; - -int main() { - try { - Test t; - throw 20; - } - catch (int e) { - cout << "Caught " << e << endl; - } - return 0; -} -``` - -## Best Practices -1. **Use Exceptions for Exceptional Conditions:** Exceptions should represent unexpected conditions, not regular control flow. -2. **Catch Specific Exceptions:** Catch specific exceptions to handle different error conditions appropriately. -3. **Resource Management:** Use RAII (Resource Acquisition Is Initialization) to manage resources, ensuring they are released even when exceptions occur. -4. **Minimize Exception Usage in Destructors:** Destructors should not throw exceptions to avoid unexpected behavior during stack unwinding. -5. **Document Exception Specifications:** Clearly document the exceptions that functions might throw. - -By understanding and effectively using exception handling in C++, you can write more robust and maintainable code, ensuring your programs can gracefully handle unexpected conditions and errors. \ No newline at end of file diff --git a/docs/Day 18/Doubly-Linked-list.md b/docs/Day 18/Doubly-Linked-list.md deleted file mode 100644 index 823b2308a..000000000 --- a/docs/Day 18/Doubly-Linked-list.md +++ /dev/null @@ -1,224 +0,0 @@ ---- -id: doubly-linked-list-cpp -title: Doubly Linked List in C++ -sidebar_label: Doubly Linked List in C++ -tags: -- Data Structures -- Linked List -- C++ -description: "A comprehensive guide to implementing and understanding doubly linked lists in C++." ---- - -## Doubly Linked List in C++ - -A doubly linked list is a type of linked list in which each node contains a data part and two pointers that reference the next and previous nodes in the sequence. This allows for traversal of the list in both directions. - -### Node Structure - -Each node in a doubly linked list contains three components: -1. **Data**: The value stored in the node. -2. **Next**: A pointer to the next node in the list. -3. **Prev**: A pointer to the previous node in the list. - -### Diagram - -Here is a visual representation of a doubly linked list: -``` -+------+ +------+ +------+ +------+ -| Prev |<--->| Prev |<--->| Prev |<--->| Prev | -| Data | | Data | | Data | | Data | -| Next |---> | Next |---> | Next |---> | Next | -+------+ +------+ +------+ +------+ -``` - -### Implementation - -Let's implement a doubly linked list in C++. - -#### Node Definition - -First, we define the structure of a node. - -```cpp -#include - -struct Node { - int data; - Node* next; - Node* prev; - - Node(int val) : data(val), next(nullptr), prev(nullptr) {} -}; -``` -#### Doubly Linked List Class -Next, we define the class for the doubly linked list which includes methods for various operations like insertion, deletion, and traversal. - -```cpp -class DoublyLinkedList { -private: - Node* head; - -public: - DoublyLinkedList() : head(nullptr) {} - - // Insert at the beginning - void insertAtBeginning(int val) { - Node* newNode = new Node(val); - if (head != nullptr) { - head->prev = newNode; - } - newNode->next = head; - head = newNode; - } - - // Insert at the end - void insertAtEnd(int val) { - Node* newNode = new Node(val); - if (head == nullptr) { - head = newNode; - return; - } - Node* temp = head; - while (temp->next != nullptr) { - temp = temp->next; - } - temp->next = newNode; - newNode->prev = temp; - } - - // Delete a node - void deleteNode(int val) { - Node* temp = head; - while (temp != nullptr && temp->data != val) { - temp = temp->next; - } - if (temp == nullptr) return; // Node not found - - if (temp->prev != nullptr) { - temp->prev->next = temp->next; - } else { - head = temp->next; - } - if (temp->next != nullptr) { - temp->next->prev = temp->prev; - } - delete temp; - } - - // Display the list - void display() { - Node* temp = head; - while (temp != nullptr) { - std::cout << temp->data << " "; - temp = temp->next; - } - std::cout << std::endl; - } -}; -``` -### Operations - -#### Insertion at the Beginning -To insert a new node at the beginning of the list: - -1) Create a new node. -2) Set the new node's next pointer to the current head. -3) Set the current head's previous pointer to the new node. -4) Update the head to the new node. - -```cpp -void insertAtBeginning(int val) { - Node* newNode = new Node(val); - if (head != nullptr) { - head->prev = newNode; - } - newNode->next = head; - head = newNode; -} -``` -#### Insertion at the End -To insert a new node at the end of the list: - -1) Create a new node. -2) Traverse to the end of the list. -3) Set the last node's next pointer to the new node. -4) Set the new node's previous pointer to the last node. - -```cpp -void insertAtEnd(int val) { - Node* newNode = new Node(val); - if (head == nullptr) { - head = newNode; - return; - } - Node* temp = head; - while (temp->next != nullptr) { - temp = temp->next; - } - temp->next = newNode; - newNode->prev = temp; -} -``` -#### Deletion of a Node -To delete a node from the list: - -1) Traverse the list to find the node. -2) Update the previous node's next pointer to the node's next pointer. -3) Update the next node's previous pointer to the node's previous pointer. -4) Delete the node. - -```cpp -void deleteNode(int val) { - Node* temp = head; - while (temp != nullptr && temp->data != val) { - temp = temp->next; - } - if (temp == nullptr) return; // Node not found - - if (temp->prev != nullptr) { - temp->prev->next = temp->next; - } else { - head = temp->next; - } - if (temp->next != nullptr) { - temp->next->prev = temp->prev; - } - delete temp; -} -``` -#### Display the List -To display the list: - -1) Traverse from the head to the end of the list. -2) Print each node's data. - -```cpp -void display() { - Node* temp = head; - while (temp != nullptr) { - std::cout << temp->data << " "; - temp = temp->next; - } - std::cout << std::endl; -} -``` -### Example Usage - -```cpp -int main() { - DoublyLinkedList dll; - dll.insertAtBeginning(10); - dll.insertAtEnd(20); - dll.insertAtEnd(30); - dll.display(); // Output: 10 20 30 - dll.deleteNode(20); - dll.display(); // Output: 10 30 - return 0; -} -``` -### Conclusion -A doubly linked list is a versatile data structure that allows for efficient insertion and deletion of nodes from both ends. Understanding the implementation of a doubly linked list in C++ provides a solid foundation for working with more complex data structures. - -### References -- GeeksforGeeks: Doubly Linked List -- Wikipedia: Doubly Linked List \ No newline at end of file diff --git a/docs/Day 18/Stack-in-cpp.md b/docs/Day 18/Stack-in-cpp.md deleted file mode 100644 index 3d48e7651..000000000 --- a/docs/Day 18/Stack-in-cpp.md +++ /dev/null @@ -1,176 +0,0 @@ ---- -sidebar_position: 1 -title: "Stack in C++" -description: "In this tutorial, we will learn about Stack in C++ with the help of examples. Stack is a data structure which work on the principle of LIFO i.e Last-In-First-Out " -sidebar_label: "Stack" -slug: stack-in-cpp ---- - -# Stack in C++ -A Stack is a fundamental data structure in that follows the principle of Last-In-First-Out(LIFO). This means that the most recently added item is the first one to be removed. - -C++ has STL Library that provides built-in implementation of stack. -The stack template class in C++ STL provides an easy-to-use stack implementation. - -## Syntax of using Stack in C++ -```cpp -stack St; -``` - -- Stack: it is name of stack template keyword we use to construct a stack object. -- type: it defines the data type of the element to be stored. -- St: it is the name of the stack object. - -## Header file for including Stack - -```cpp -#include -``` - -## Operations associated with a stack - -1. Push : Adds an element to the top of the stack. - -2. Pop : Removes the element at the top of the stack. - -3. Peek(or Top) : Returns the element at the top of stack without removing it. - -4. IsEmpty : Returns 1 if stack is empty else returns 0 if stack is not empty. - -5. Size : Returns the number of element in the stack. - -## Characteristics of a Stack - -- LIFO Principle : The last element added to the stack is the first element to be removed. -- Order : Elements are accessed in a sequential order determined by the operations(Push or Pop). -- Implementation : Can be implemented using arrays, linkedlist , or other data structures. - -## Example -```cpp -#include -#include -using namespace std; -int main(){ - // creation - stackst; - - // insertion - st.push(10); - st.push(20); - st.push(30); - // size check - cout<<"size of stack "<Function Calls : Used in the programming languages to store function call information. -- Expression Evaluation : Used in evaluating expressions , especially arithmetic expressions involving parentheses. -- Backtracking : Used in algorithm like Depth-First-Search(DFS) to store states for backtracking. - -## Implementation of Stack using Array - -Here's basic implementation program for stack using array - -```cpp -#include -using namespace std; -class Stack{ - public: - int* arr; - int size; - int top; - Stack(int size){ - arr = new int(size); - this->size=size; - this->top=-1; - } - void push(int data){ - if(top==size-1){ - cout<<"overflow"<>& board) { - int count = 0; - for (int i = 0; i < board.size(); i++) { - for (int j = 0; j < board[0].size(); j++) { - if (board[i][j] == 'X') { - if (i > 0 && board[i - 1][j] == 'X') continue; - if (j > 0 && board[i][j - 1] == 'X') continue; - count++; - } - } - } - return count; - } -}; -``` -### Complexity Analysis -**Time Complexity:** O(m * n) ->Reason: We traverse each cell of the board once. - -**Space Complexity:** O(1) ->Reason: We do not use any extra space that scales with the input size. - -### References -**LeetCode Problem:** Battleships in a Board - -**Solution Link:** Battleships in a Board Solution on LeetCode \ No newline at end of file diff --git a/docs/Practice_Question/String/Longest-Uncommon-Subsequence-II.md b/docs/Practice_Question/String/Longest-Uncommon-Subsequence-II.md deleted file mode 100644 index 493b369b4..000000000 --- a/docs/Practice_Question/String/Longest-Uncommon-Subsequence-II.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -id: longest-uncommon-subsequence-ii -title: Longest Uncommon Subsequence II -sidebar_label: 0522-Longest-Uncommon-Subsequence-II -tags: -- String -- Sorting -description: "Given an array of strings strs, return the length of the longest uncommon subsequence between them. If the longest uncommon subsequence does not exist, return -1." ---- - -## Problem - -Given an array of strings `strs`, return the length of the longest uncommon subsequence between them. An uncommon subsequence is a subsequence that is not common to any other string in the array. - -A **subsequence** of a string `s` is a string that can be obtained after deleting any number of characters from `s`. - -### Examples - -**Example 1:** - -**Input:** `strs = ["aba","cdc","eae"]` -**Output:** `3` - -**Example 2:** - -**Input:** `strs = ["aaa","aaa","aa"]` -**Output:** `-1` - -### Constraints - -- `2 <= strs.length <= 50` -- `1 <= strs[i].length <= 10` -- `strs[i]` consists of lowercase English letters. - ---- - -## Approach - -To find the longest uncommon subsequence, we need to consider the following: - -1. If a string is unique in the list (i.e., it does not appear more than once), we need to check if it is not a subsequence of any other string. -2. If a string is not unique (i.e., it appears more than once), it cannot be an uncommon subsequence. -3. We can start by checking the strings in descending order of their lengths. This way, we can return the first string that meets the criteria as soon as we find it. - -### Steps: - -1. Sort the strings by length in descending order. -2. Check each string: - - If the string appears only once in the list. - - If it is not a subsequence of any other string longer than it. -3. If such a string is found, return its length. -4. If no such string is found, return `-1`. - -### Helper Function - -A helper function `is_subsequence` can be used to determine if one string is a subsequence of another. - -### C++ Solution -```cpp -#include -#include -#include -using namespace std; - -class Solution { -public: - int findLUSlength(vector& strs) { - sort(strs.begin(), strs.end(), [](const string &a, const string &b) { - return b.size() < a.size(); - }); - - for (int i = 0; i < strs.size(); i++) { - bool isSubsequence = false; - for (int j = 0; j < strs.size(); j++) { - if (i != j && isSubsequence(strs[i], strs[j])) { - isSubsequence = true; - break; - } - } - if (!isSubsequence) { - return strs[i].size(); - } - } - return -1; - } - -private: - bool isSubsequence(const string &a, const string &b) { - int i = 0, j = 0; - while (i < a.size() && j < b.size()) { - if (a[i] == b[j]) { - i++; - } - j++; - } - return i == a.size(); - } -}; -``` -### Complexity Analysis -**Time Complexity:** O(n^2 * l) ->Reason: Sorting the list takes O(n log n). Checking if a string is a subsequence of another string takes O(l) time, and this is done for each pair of strings, leading to O(n^2 * l) in total. - -**Space Complexity:** O(1) ->Reason: The space complexity is constant as we are not using any extra space proportional to the input size, other than the space required for sorting. - -### References -**LeetCode Problem:** Longest Uncommon Subsequence II - -**Solution Link:** LeetCode Solution - -**Wikipedia:** Subsequence \ No newline at end of file diff --git a/docs/Practice_Question/Tree/Convert-BST-to-Greater-Tree.md b/docs/Practice_Question/Tree/Convert-BST-to-Greater-Tree.md deleted file mode 100644 index 3c6cfbb1e..000000000 --- a/docs/Practice_Question/Tree/Convert-BST-to-Greater-Tree.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -id: convert-bst-to-greater-tree -title: Convert BST to Greater Tree -sidebar_label: 0538-Convert-BST-to-Greater-Tree -tags: -- Tree -- Depth-First Search -- Binary Search Tree -- Binary Tree -description: "Given the root of a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus the sum of all keys greater than the original key in BST." ---- - -## Problem - -Given the root of a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus the sum of all keys greater than the original key in BST. - -### Examples - -**Example 1:** - -**Input:** `root = [4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]` -**Output:** `[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]` - -**Example 2:** - -**Input:** `root = [0,null,1]` -**Output:** `[1,null,1]` - -### Constraints - -- The number of nodes in the tree is in the range `[0, 10^4]`. -- `-10^4 <= Node.val <= 10^4` -- All the values in the tree are unique. -- `root` is guaranteed to be a valid binary search tree. - ---- - -## Approach - -To convert a BST to a Greater Tree, we need to accumulate the sum of all nodes that are greater than the current node. This can be efficiently done using a reverse in-order traversal (right-root-left), which processes nodes from the largest to the smallest. - -### Steps: - -1. Initialize a variable to keep track of the running sum. -2. Perform a reverse in-order traversal of the tree. -3. During the traversal, update the value of each node to include the running sum. -4. Update the running sum with the value of the current node. - -### C++ Solution - -```cpp -#include -using namespace std; - -struct TreeNode { - int val; - TreeNode *left; - TreeNode *right; - TreeNode(int x) : val(x), left(NULL), right(NULL) {} -}; - -class Solution { -private: - int sum = 0; -public: - TreeNode* convertBST(TreeNode* root) { - if (root != nullptr) { - convertBST(root->right); - sum += root->val; - root->val = sum; - convertBST(root->left); - } - return root; - } -}; -``` -### Complexity Analysis -**Time Complexity:** O(n) ->Reason: Each node is visited once during the traversal. - -**Space Complexity:** O(h) ->Reason: The space complexity is determined by the recursion stack, which in the worst case (unbalanced tree) is O(n), but on average (balanced tree) is O(log n). - -### References -**LeetCode Problem:** Convert BST to Greater Tree - -**Solution Link:** LeetCode Solution - -**Wikipedia:** Binary Search Tree \ No newline at end of file diff --git a/docs/day-02/_category_.json b/docs/day-02/_category_.json deleted file mode 100644 index 7ced805b4..000000000 --- a/docs/day-02/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 02", - "position": 3, - "link": { - "type": "generated-index" - } -} diff --git a/docs/day-02/comments-in-cpp.md b/docs/day-02/comments-in-cpp.md deleted file mode 100644 index 3f4aab9ae..000000000 --- a/docs/day-02/comments-in-cpp.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -sidebar_position: 2 -title: "Comment in C++" -description: "This is a simple program to demonstrate the use of comments in C Plus Plus." -sidebar_label: "Comment" -slug: comment-in-cpp ---- - - - -## 1. What is Comment in C++? -- A comment in C++ is a programmer-readable note that is inserted directly into the source code of a program. -- Comments are ignored by the compiler and are meant for the programmer’s use only. -- They serve as a form of in-code documentation, helping developers understand the purpose, logic, or explanation behind specific code lines - -## 2. Why do we use comments in C++? -Comments serve several purposes: -- Explanation: They explain the code, making it more readable and understandable for other programmers. -- Debugging: Comments can be useful for debugging by providing context or temporarily disabling code segments. -- Documentation: They document algorithms, variable purposes, or clarify unclear code segments. -- Collaboration: Comments help other developers understand your code when collaborating on projects. - -![comment-in-cpp](../../static/img/day-02/comment-in-cpp.png) - -## 3. Write a simple program to demonstrate the use of comments in C++. -```cpp -#include -using namespace std; - -int main() { - // This is a single-line comment - cout << "Hello, World!"; // Another single-line comment - return 0; -} -``` -In this program, we use both single-line comments (//) to explain the code and prevent execution of those comment lines - -## 4. Types of comments in C++ - i. Single Line Comment -- Starts with // and applies to a single line only. -- Compiler ignores any text after //. -- Used for brief explanations or annotations within a line of code. -Example: -``` cpp -int age = 25; // Stores the user's age - -``` - ii. Multi Line Comment -- Starts with /* and ends with */. -- Can span multiple lines but cannot be nested. -- Any text between /* and */ is ignored by the compiler. -- Used for longer descriptions, explaining complex logic or function purposes. -Example: -```cpp -/* -* This function calculates the area of a rectangle -* given its length and width. -*/ -int calculateArea(int length, int width) { - // ... function implementation -} - - ``` - iii. Documentation Comment -- Used for documenting functions, classes, and their parameters. -- Typically starts with /** and ends with */. -- Contains additional information for tools like Doxygen. -- Example (not standard C++): -```cpp -/** - * @param x integer value to add - * @param y integer value to add - @@ -66,3 +75,4 @@ int add(int x, int y) { -} -``` - -By effectively using comments, you can improve the understandability and maintainability of your C++ programs, both for yourself and others who may read your code in the future. \ No newline at end of file diff --git a/docs/day-02/first-cpp-program.md b/docs/day-02/first-cpp-program.md deleted file mode 100644 index a176d8db9..000000000 --- a/docs/day-02/first-cpp-program.md +++ /dev/null @@ -1,110 +0,0 @@ ---- -sidebar_position: 1 -title: "First C++ Program: Hello, World!" -description: "Learn how to write and execute your first C++ program with a simple 'Hello, World!' example." -sidebar_label: "First C++ Program" -slug: first-cpp-program ---- - -## Your First Steps in C++: Hello, World! - -Welcome to the exciting world of C++ programming! Today, we'll embark on a journey together, crafting our very first C++ program - the classic "Hello, World!". This simple program lays the foundation for understanding core C++ concepts. - -### Setting Up - -Before diving into code, you'll need a text editor or an Integrated Development Environment (IDE) to write and compile your C++ program. Popular choices include Notepad++, Visual Studio Code, or Code::Blocks. - -![first-programme-in-cpp](../../static/img/day-02/first-program.png) - -### Write a Simple "Hello, World!" Program in C++ - -``` -#include - -int main() { - std::cout << "Hello, World!" << std::endl; - return 0; -} - -``` -### 2. Output of the program. -When you run this program, it will display the following output: -``` -Hello, World! -``` -You'll need a C++ compiler to run this program. Here's a general process: - -- Save the code in a file with a `.cpp` extension (e.g., `hello_world.cpp`). -- Compile the code using a C++ compiler. The specific command will vary depending on your compiler. -- Execute the compiled program (the generated executable file). - -![first-programme-in-cpp](../../static/img/day-02/first-program.png) - -### 3. Explain the code line by line. - -1. `#include `: This line is called a preprocessor directive. It instructs the compiler to include the contents of the ` `header file. This header file provides essential input/output functionalities like cout for printing to the console. - - -2. `int main()`: This line declares the main function, which is the program's entry point. The int keyword specifies that the main function will return an integer value (usually 0 to indicate successful execution). - - -3. { }: The curly braces mark the beginning and end of the code block for the main function. All the statements within this block will be executed when the program runs. - -4. std::cout > > "Hello, World!" > > std::endl;: This line is the heart of the program. It performs the following actions: - - - std::cout: This is an object of the ostream class (from >iostream<) used for standard output (printing to the console). - - > >: This is the stream insertion operator. It's used to send data to the output stream (cout) on the left side. - - "Hello, World!": This is the actual string literal that you want to print. - - std::endl: This manipulator inserts a newline character after the string, ensuring the output appears on a new line. -5. return 0; : This line exits the main function and returns the value 0 to the operating system. A return value of 0 typically indicates successful program execution. - -### 4. Explain Basic Structure of C++ Program. -1. Preprocessor Directives (Optional): - -- Lines starting with `#`. -- Not actual C++ statements but instructions for the preprocessor (a separate program that runs before compilation). -- Common example: `#include ` - This includes the `iostream` header file, providing input/output functionalities like cout for printing to the console. -2. Namespaces (Optional): - -- Lines using the `namespace` keyword. -- Help organize code by grouping related elements (like functions, classes) under a specific namespace. -- Common example: `using namespace std;` - This brings the std namespace (containing standard objects like `cout`) into scope, avoiding repetitive use of `std::`. -3. Function Definitions: - -- Functions are reusable blocks of code that perform specific tasks. -- Defined using a return type, name, parameter list (optional), and a code block within curly braces `({})`. -- The `main` function is the entry point of the program, where execution begins. -4. Variable Declarations: - -Variables store data during program execution. -Declared using a data type (e.g., `int`, `double`) and a name following specific naming rules (letters, numbers, underscores, case-sensitive). -Example: `int age = 25;` - Declares an integer variable `age` and initializes it with the value 25. -5. Statements: - -Lines that perform actions or control the program flow. -Examples: - - `cout << "Hello, World!" << endl;` - Prints "Hello, World!" to the console. - - `if (age >= 18) { ... }` - Conditional statement to check if age is greater than or equal to 18 and execute code within the block if true. - - `for (int i = 0; i < 3; i++) { ... }` - Loop that iterates three times. -6. Comments (Optional): - -- Lines starting with `//` (single line comment) or `/* ... */` (multi-line comment). -- Provide explanations within the code for better understanding. -- Ignored by the compiler but essential for human-readable code. -Here's a basic program structure summarizing these elements: -``` -C++ -#include // Preprocessor directive (optional) - -using namespace std; // Namespaces (optional) - -// Function definitions -int main() { - // Variable declarations and statements - cout << "Hello, World!" << endl; - return 0; -} -``` - - -Remember, this is a basic structure, and more complex programs may involve additional elements like classes, objects, and header files for custom functions. \ No newline at end of file diff --git a/docs/day-02/keywords-identifiers.md b/docs/day-02/keywords-identifiers.md deleted file mode 100644 index c9955b4df..000000000 --- a/docs/day-02/keywords-identifiers.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -sidebar_position: 3 -title: "Keywords and Identifiers in C++" -description: "Keywords and Identifiers in C++. This is a simple program to demonstrate the use of keywords and identifiers in C Plus Plus." -sidebar_label: "Keywords and Identifiers" -slug: keywords-and-identifiers-in-cpp ---- - - -### 1. What is Keywords and Identifiers in C++? - -## Keywords: -- Keywords are predefined words that have special meanings to the C++ compiler. -- They are part of the language syntax and serve specific purposes. -- They are always written in lowercase in C++. -- It have a fixed set(around 32 in C++)that doesn't change. -- For example, int, if, while, and class are keywords. -- Keywords cannot be used as identifiers (variable names, function names, etc.) because they already have predefined meanings. -## Identifiers: -- Identifiers are unique names given to variables, functions, classes, and other entities by the programmer. -- They help us create meaningful and descriptive names for program elements. -- Examples of identifiers: money, accountBalance, studentAge, and calculateSum. -- Must follow the below specific naming rules: - -### Rules for naming identifiers: -- Can consist of letters (A-Z or a-z), digits (0-9), and underscores (_). -- Must begin with a letter or an underscore. -- Are case-sensitive (e.g., Num and num are different). -- Cannot use reserved keywords as identifiers. -- Must be unique within their namespace (e.g., no two variables with the same name in the same scope)31. -### 2. Why do we use Keywords and Identifiers in C++? -#### we use keywords: -- Syntax: Keywords define the syntax and structure of the language. They help the compiler understand the code. -- Reserved Meanings: Each keyword has a reserved purpose (e.g., if for conditional statements, while for loops, class for defining classes). -- Consistency: Using keywords ensures consistency across different C++ programs. -- Efficiency: Keywords allow the compiler to optimize code execution. -- Readability: They make the code more readable and self-explanatory. -#### we use identifiers: -- Descriptive Names: Identifiers give meaningful names to program entities (e.g., totalAmount, calculateAverage). -- Readability: Well-chosen identifiers enhance code readability for both programmers and collaborators. -- Avoid Magic Numbers: Instead of using raw numbers (e.g., 42), we use identifiers (e.g., MAX_SCORE) to make the code self-documenting. -- Modularity: Identifiers help organize code into logical units (functions, classes, etc.). -- Avoid Confusion: Descriptive identifiers prevent confusion and improve maintainability. -### 3. Write a simple program to demonstrate the use of Keywords and Identifiers in C++. -```cpp -#include - -using namespace std; - -int main() { - // Integer variable to store age (identifier) - int age = 25; - - // `if` is a keyword for conditional statement - if (age >= 18) { - cout << "You are eligible to vote." << endl; - } - - // `for` is a keyword for loop - for (int i = 0; i < 3; i++) { - cout << "Iteration: " << i << endl; - } - - // `double` is a keyword for floating-point numbers (identifier) - double pi = 3.14159; - cout << "Value of pi: " << pi << endl; - - // `calculateArea` is a user-defined identifier (function name) - int area = calculateArea(5, 4); // Assuming calculateArea is defined elsewhere - cout << "Area of rectangle: " << area << endl; - - return 0; -} - -// This function (identifier) is not defined here, but for demonstration purposes -int calculateArea(int length, int width) { - return length * width; -} -``` -![keywords-and-identifiers-in-cpp](../../static/img/day-02/keywords-in-cpp.png) -### 4. List of Keywords in C++ -C++ has a set of around 32 keywords that have special meanings within the language. Here's a list for your reference: -- Basic data types: int, float, double, char, bool -- Storage specifiers: auto, register, static, extern -- Type specifiers: void, const, volatile -- Control flow: if, else, for, while, do, switch, case, break, continue, return -- Function definitions: inline, friend, virtual -- Object-oriented programming: class, struct, public, private, protected, this, new, delete -- Exception handling: try, catch, throw -- Other: sizeof, namespace, template, typedef -``Note``: This is not an exhaustive list, and the exact number of keywords may vary slightly depending on the C++ version you're using. It's always a good practice to refer to the official C++ documentation for the latest keyword definitions. -### 5. Rules for defining Identifiers in C++ -Remember these rules when defining identifiers: -- Must start with a letter or underscore. Cannot start with a digit. -- Consist of letters, digits, and underscores. -- Avoid using reserved keywords as identifiers. -- Be case-sensitive (e.g., myVar and MyVar are different). -- No limit on the length of an identifier. -- Cannot be the same as keywords in C++. -### 6. Examples of Identifiers in C++ -#### Valid Identifiers: - - Starts with letter or underscore - `age`, `_temporary`, `myObject` - - Can contain letters, digits, and underscores - `calculate_area`, `x123` - - Case-sensitive - `age`, `Age` - - Cannot be a keyword - `cpp_keyword` (not recommended) -#### Invalid Identifiers: -- Starts with a number - `1st_place` -- Contains hyphen - `my-function` -- Keywords - `int`,`while` -### 7. Difference between Keywords and Identifiers in C++ -- Keywords are predefined words with specific meanings in the language , while identifiers are user-defined names for program elements. -- Keyword can control flow and structure but Identifiers, identify program elements. -- Keywords cannot be used as identifiers.On the other hand, identifiers used for variables , functions , classes , etc. -- Keywords have fixed set, lowercase only but , identifiers defined by programmer , case sensitive. -- Examples of keyword: `int`,`if`,`while`,`class`. -- Examples of identifier: `age`,`calculateArea`,`myObject`. \ No newline at end of file diff --git a/docs/day-02/new-line-in-cpp.md b/docs/day-02/new-line-in-cpp.md deleted file mode 100644 index cb08eda31..000000000 --- a/docs/day-02/new-line-in-cpp.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -sidebar_position: 4 -title: "Adding New Line in C++" -description: "Explore various methods to add new line in C++ with illustrative examples." -sidebar_label: "New Line in C++" -slug: adding-new-line-in-cpp ---- - - -# Adding New Line in C++ -There are two common ways to add a new line in C++: using `"\n"` and `"std::endl"`. - -## Using `"\n"`: -The `"\n"` escape sequence is a simple way to add a new line in C++. It instructs the program to start printing from the next line. - -#### Example: -```cpp -#include -using namespace std; - -int main() { - cout << "Hello\n"; // Using newline character (\n) - cout << "World\n"; - return 0; -} -``` - -**Output**: -```cpp -Hello -World -``` - - -## Using `"std::endl"`: -`std::endl` is a manipulator in the C++ standard library that not only adds a new - line but also flushes the output buffer, ensuring immediate display. - -#### Example: -```cpp -#include -using namespace std; - -int main() { - cout << "Hello" << endl; // Using std::endl - cout << "World" << endl; - return 0; -} - -``` -**Output**: -```cpp -Hello -World -``` - - -## Comparison of `\n` and `endl`: -Both `"\n"` and `std::endl` produce the same output, but there are differences in their usage and performance. - -#### Performance : -In terms of performance, `\n` is generally faster than `std::endl`. -`std::endl` flushes the output buffer, which may impact performance, especially for large outputs. On the other hand, `\n` does not flush the buffer immediately, making it more efficient. - -#### Usage: - -- Use `std::endl` when you need immediate display of the output or when you want to ensure that certain messages are visible right away, such as in interactive programs or debugging scenarios. -- Use `\n` in most cases where immediate flushing isn't necessary for better performance. - -Understanding the differences between `std::endl` and `\n` helps in choosing the appropriate method based on the requirements of your program. - -Feel free to use either method based on your specific needs! \ No newline at end of file diff --git a/docs/day-03/_category_.json b/docs/day-03/_category_.json deleted file mode 100644 index 91740c50d..000000000 --- a/docs/day-03/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 03", - "position": 4, - "link": { - "type": "generated-index" - } -} diff --git a/docs/day-03/cpp-type-modifiers.md b/docs/day-03/cpp-type-modifiers.md deleted file mode 100644 index e73bae422..000000000 --- a/docs/day-03/cpp-type-modifiers.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -sidebar_position: 3 -title: "Type Modifiers in C++" -description: "Type modifiers are used to change the meaning of the fundamental data types. In this tutorial, we will learn about type-modifiers and how to use them in C++ programming with the help of examples." -sidebar_label: "Type Modifiers" -slug: type-modifiers-in-cpp ---- - - -### 1. What is Type Modifiers in C++? -Type modifiers in C++ are keywords that you use to alter the meaning of the basic data types to fit specific needs of your program. They allow you to specify more precisely the properties of variables, such as their size and whether they can hold negative values. The primary type modifiers in C++ are `short`, `long`, `signed`, and `unsigned`. - - -### 2. Types of Type Modifiers in C++ with Proper Examples. -#### Types of Type Modifiers in C++: -- `short` -- `long` -- `signed` -- `unsigned` -- `long long` -- `short int` -- `long int` -- `long double` - -![Type Modifiers in CPP](../../static/img/day-03/type-modifiers-in-cpp.png) - -### 3. short type Modifier -The `short` modifier reduces the size of the `int` data type. Typically, a `short int` is at least 16 bits. -```cpp -short a; // Declares a short integer variable -short int b; // Equivalent to short a -``` -### 4. long type Modifier -The `long` modifier increases the size of the `int` data type. Typically, a `long int` is at least 32 bits. - -Example: - -```cpp -long a; // Declares a long integer variable -long int b; // Equivalent to long a -``` -### 5. signed type Modifier -The `signed` modifier allows a data type to store both positive and negative values. By default, integer types are `signed`. - -Example: - -```cpp - -signed int a; // Explicitly declares a signed integer variable -signed char b; // Declares a signed character variable -``` -### 6. unsigned type Modifier -- These modifiers can be used with `int` and `char` data types. -- `Signed` variables can hold both positive and negative integers, including zero. -- By default, integers are `signed`, so we can directly use `int`. -- `unsigned` variables can hold only non-negative integer values. -Example: -```cpp -signed int x = 23; // Positive-valued integer -signed int y = -13; // Negative-valued integer -unsigned int u = 2; // Positive-valued integer -``` -### 7. long long type Modifier -- The `long long` type modifier can be repeated twice to create the `long long` type. -- It is used for even larger numbers than `long`. -- This modifier can only be used with `int`. -Example: -```cpp -long long num = 12345678; // Very large integer -``` -### 8. short int type Modifier -- The `short int` type modifier is used to create a smaller integer variable that occupies less memory than a regular `int`. -- It restricts the range of values that can be stored in the variable. -- A `short int` typically uses two bytes of memory. -Example: -```cpp -short int smallNumber = 12345; -``` -### 9. long int type Modifier -- The `long int` type modifier is used to create an integer variable that can store larger values than a regular `int`. -- It extends the range of values that an int can hold. -- A `long int` typically uses four bytes of memory (32 bits). -- The range of a long int is -2,147,483,648 to 2,147,483,647. -- The format specifier for `long int` is `%ld`. -Example: -```cpp -long int largeNumber = 1234567890; -``` -### 10. long double type Modifier -The `long double` modifier is used for large floating-point numbers. -Example: -```cpp -long double c = 0.333333333333333333L; // Large floating-point number -``` - diff --git a/docs/day-03/datatypes-in-cpp.md b/docs/day-03/datatypes-in-cpp.md deleted file mode 100644 index f3438a94d..000000000 --- a/docs/day-03/datatypes-in-cpp.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -sidebar_position: 2 -title: "Data Types in C++" -description: "In this tutorial, we will learn about basic data types such as int, float, char, etc. in C++ programming with the help of examples. A data type determines the type and size of an variable." -sidebar_label: "Datatypes" -slug: data-types-in-cpp ---- - -### 1. What is Data Types in C++? -All variables use data type during declaration to restrict the type of data to be stored. Therefore, we can say that data types are used to tell the variables the type of data they can store. Whenever a variable is defined in C++, the compiler allocates some memory for that variable based on the data type with which it is declared. Every data type requires a different amount of memory. -#### C++ supports the following data types: - -1. Primary or Built-in or Fundamental data type -2. Derived data types -3. User-defined data types - -![Type Modifiers in CPP](../../static/img/day-03/datatypes-in-cpp.png) - -### 2. C++ Fundamental Data Types - These data types are built-in or predefined data types and can be used directly by the user to declare variables. example: int, char, float, bool, etc. Fundamental data types available in C++ are: - -- Integer -- Character -- Boolean -- Floating Point -- Double Floating Point -- Valueless or Void -- Wide Character -### 3. Examples of Data Types in C++ -- Integer: The keyword used for integer data types is ``int``. Integers typically require 4 bytes of memory space and range from -2147483648 to 2147483647. -- Character: Character data type is used for storing characters. The keyword used for the character data type is ``char``. Characters typically require 1 byte of memory space and range from -128 to 127 or 0 to 255. -- Boolean: Boolean data type is used for storing Boolean or logical values. A Boolean variable can store either `true` or `false`. The keyword used for the Boolean data type is ``bool``. -- Floating Point: Floating Point data type is used for storing single-precision floating-point values or decimal values. The keyword used for the floating-point data type is ``float``. Float variables typically require 4 bytes of memory space. -- Double Floating Point: Double Floating Point data type is used for storing double-precision floating-point values or decimal values. The keyword used for the double floating-point data type is ``double``. Double variables typically require 8 bytes of memory space. -- void: Void means without any value. void data type represents a valueless entity. A ``void`` data type is used for those function which does not return a value. -- Wide Character: Wide character data type is also a character data type but this data type has a size greater than the normal 8-bit data type. Represented by ``wchar_t``. It is generally 2 or 4 bytes long. -- sizeof() operator: ``sizeof()`` operator is used to find the number of bytes occupied by a variable/data type in computer memory. -### 4. C++ Modified Data Types List -1. Enumerations (enum): -Enumerations allow you to define a set of named integer constants. -```cpp -Example: - -enum Color { RED, GREEN, BLUE }; -``` - -2. Structures (struct): -Structures allow you to group related variables of different data types into a single unit. -```cpp -Example: - -struct Point { - int x; - int y; -}; -``` - -3. Unions (union): -Unions allow you to store different data types in the same memory location. -Only one member of the union can be accessed at a time. -```cpp -Example: - -union Data { - int i; - float f; - char c; -}; -``` - -4. Classes (class): -Classes are used for object-oriented programming. -They encapsulate data (attributes) and methods (functions) into a single unit. -```cpp -Example: - -class Circle { - double radius; -public: - double getArea() { return 3.14 * radius * radius; } -}; -``` - -5. Arrays: -Arrays allow you to store multiple elements of the same data type in a contiguous memory block. -```cpp -Example: - -int scores[5] = { 90, 85, 78, 92, 88 }; -``` -### 5. Derived Data Types in C++ - Derived data types that are derived from the primitive or built-in datatypes are referred to as Derived Data Types. These can be of four types namely: - -1. Function: -A function is a block of code or program segment that performs a specific well-defined task. -Functions allow you to encapsulate a set of instructions and reuse them. -```cpp -Example: - -int max(int x, int y) { - return (x > y) ? x : y; -} -``` - -2. Array: -An array is a collection of elements of the same data type stored in contiguous memory locations. -It allows you to represent many instances of a value in a single variable. -```cpp -Example: - -int scores[5] = { 90, 85, 78, 92, 88 }; -``` - -3. Pointers: -Pointers are symbolic representations of memory addresses. -They allow programs to simulate call-by-reference and create dynamic data structures. -```cpp -Example: - -int num = 42; -int* ptr = # -``` - -4. References: -References provide an alias for an existing variable. -They allow you to work with the original variable directly. -```cpp -Example: - -int original = 100; -int& ref = original; -``` diff --git a/docs/day-03/variables-literals-constant-in-cpp.md b/docs/day-03/variables-literals-constant-in-cpp.md deleted file mode 100644 index 7f6c0a74a..000000000 --- a/docs/day-03/variables-literals-constant-in-cpp.md +++ /dev/null @@ -1,224 +0,0 @@ ---- -sidebar_position: 1 -title: "Variables, Literals, and Constants in C++" -description: "This is a simple program to demonstrate the use of variables, literals, and constants in C Plus Plus." -sidebar_label: "Variables, Literals, and Constants" -slug: variables-literals-constant-in-cpp ---- - - - -### 1. What is Variables, Literals, and Constants in C++? -#### Variables -- A variable is a container (storage area) used to hold data. -- Each variable is given a unique name (identifier) to indicate its storage area. -```cpp -For example: -int age = 14; // 'age' is a variable of the int data type -age = 17; // Now 'age' is 17 -``` -- Variables allow us to store and manipulate data during program execution. -#### Constants: -- A constant is a value that cannot be changed once it has been defined. -- Constants are treated like regular variables, but their values remain fixed. -- We use the const keyword to declare constants. -```cpp -Example: -const int LIGHT_SPEED = 299792458; // LIGHT_SPEED is a constant -// Attempting to change LIGHT_SPEED will result in an error -``` - -- Constants ensure that specific, unchanging values are used throughout the program. -#### Literals: -- Literals are fixed values used directly in the code. -- They represent specific data without any variables or calculations. -```cpp -Examples of literals: -Integer literals: 9, 42, -5 -Floating-point literals: 3.14, -0.005 -Character literals: 'A', 'b', '1' -String literals: "Hello, World!", "C++ is fun" -``` -- Literals cannot be assigned different values; they remain constant. -### 2. Why do we use Variables, Literals, and Constants in C++? -1. Variables: -- Allow us to store and manipulate data dynamically during program execution. -- Enable flexibility and adaptability in our code. -- Improve readability by giving meaningful names to data. -2. Constants: -- Ensure specific values remain fixed throughout the program. -- Enhance code clarity by using descriptive names for important values. -- Prevent accidental modification of critical data. -3. Literals: -- Provide fixed values directly in the code. -- Improve code readability by eliminating magic numbers. -- Represent specific data without the need for variables. -### 3. Write a simple program to demonstrate the use of Variables, Literals, and Constants in C++. -```c++ -#include -using namespace std; - -int main() { - // Variables - int age = 25; - double pi = 3.14; - char grade = 'A'; - - // Constants - const int LIGHT_SPEED = 299792458; - - // Literals - int num1 = 42; // Integer literal - double num2 = 2.71828; // Floating-point literal - char letter = 'X'; // Character literal - string message = "Hello, World!"; // String literal - - // Display values - cout << "Age: " << age << endl; - cout << "Pi: " << pi << endl; - cout << "Grade: " << grade << endl; - cout << "Speed of light: " << LIGHT_SPEED << " m/s" << endl; - cout << "Integer literal: " << num1 << endl; - cout << "Floating-point literal: " << num2 << endl; - cout << "Character literal: " << letter << endl; - cout << "String literal: " << message << endl; - - return 0; -} -``` -![variables in c++](../../static/img/day-03/variables-literals-constarts-in-cpp.png) - -### 4. Types of Variables in C++ -i. Local Variables: -- Local variables are declared within a function or a block of code. -- They have local scope, meaning they are accessible only within the function or block where they are defined. -- Local variables are created when the function or block is entered and destroyed when it exits. -```c++ -Example: -void myFunction() { - int localVar = 42; // Local variable - // ... -} -``` -ii. Global Variables: -- Global variables are declared outside any function or block. -- They have global scope, meaning they can be accessed from any part of the program. -- Global variables exist throughout the program’s execution. -```c++ -Example: -int globalVar = 100; // Global variable - -void myFunction() { - // Access globalVar here - // ... -} -``` -iii. Static Variables: -- Static variables are local variables with a special property. -- They retain their value between function calls. -- Static variables are initialized only once, even if the function is called multiple times. -```c++ -Example: -void myFunction() { - static int count = 0; // Static variable - count++; - // ... -} -``` - -iv. Register Variables: -- Register variables are used to request the compiler to store the variable in a CPU register for faster access. -- The register keyword hints the compiler to optimize access to this variable. -- Note that the compiler may ignore the request if it deems it unnecessary. -```c++ -Example: -register int speed = 100; // Register variable -``` -### 5. Types of Literals in C++ -Literals are the constant values that are assigned to the variables. Literals represent fixed values that cannot be modified. Literals contain memory but they do not have references as variables. Generally, both terms, constants, and literals are used interchangeably. -For example, “const int = 5;“, is a constant expression and the value 5 is referred to as a constant integer literal. -i. Integer Literals: -- Integer literals represent whole numbers without any fractional part. -- They can be positive or negative. -```c++ -Examples: -Decimal Integer: 42, -123 -Octal Integer: 012, 077 -Hexadecimal Integer: 0xff, 0x2a -Binary Integer (Java SE 7 and above): 0b1010101 -``` -ii. Floating Point Literals: -- Floating-point literals represent decimal numbers with a fractional part. -- They can be either single-precision (float) or double-precision (double). -```c++ -Examples: -3.14, -0.005, 2.71828 -``` -iii. Character Literals: --Character literals represent single characters enclosed in single quotes. -```c++ -Examples: -'A', 'b', '1' -``` -iv. String Literals: --String literals represent sequences of characters enclosed in double quotes. -```c++ -Example: -"Hello, World!" -``` -v. Boolean Literals: -- Boolean literals represent the truth values true or false. -```c++ -Example: -true, false -``` -vi. Pointer Literals: -Pointer literals are memory addresses represented as hexadecimal values. -```c++ -Example: -nullptr (represents a null pointer) -``` -### 6. Types of Constants in C++ -i. Integer Constants: -- Integer constants represent whole numbers without any fractional part. -- They can be positive or negative. -```c++ -Examples: -Decimal Integer: 42, -123 -Octal Integer: 012, 077 -Hexadecimal Integer: 0xff, 0x2a -Binary Integer (since C23): 0b1010101 -``` -ii. Floating Point Constants: -- Floating-point constants represent decimal numbers with a fractional part. -- They can be either single-precision (float) or double-precision (double). -```c++ -Examples: -3.14, -0.005, 2.71828 -``` -iii. Character Constants: -Character constants represent single characters enclosed in single quotes. -```c++ -Examples: -'A', 'b', '1' -``` -iv. String Constants: -- String constants represent sequences of characters enclosed in double quotes. -```c++ -Example: -"Hello, World!" -``` -v. Boolean Constants: -- Boolean constants represent the truth values true or false. -```c++ -Example: -true, false -``` -vi. Pointer Constants: -- Pointer constants are memory addresses represented as hexadecimal values. -```c++ -Example: -nullptr (represents a null pointer) -``` - - diff --git a/docs/day-04/_category_.json b/docs/day-04/_category_.json deleted file mode 100644 index 69bcfe455..000000000 --- a/docs/day-04/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 04", - "position": 5, - "link": { - "type": "generated-index" - } -} diff --git a/docs/day-04/constants-in-cpp.md b/docs/day-04/constants-in-cpp.md deleted file mode 100644 index 79111e3a0..000000000 --- a/docs/day-04/constants-in-cpp.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -sidebar_position: 1 -title: "Constants in C++" -description: "The C++ const keyword is used to specify that the value of a variable cannot be changed. In this tutorial, you will learn about C++ constants with the help of examples." -sidebar_label: "Constants" -slug: constants-in-cpp ---- - -## What is Constants in C++? -Constants in C++ are fixed values that cannot be altered during the execution of a program. They are used to define values that should remain unchanged throughout the program, providing a way to ensure data integrity and improving code readability. - - - -IMAGE FILE: -![Constants in CPP](../../static/img/day-04/constants-in-cpp.png) - -## How to Declare Constants in C++? -Constants can be declared in C++ using the `const` keyword. The `const` keyword is placed before the data type of the variable to indicate that its value will not change. - -### Example: -```cpp -const int DAYS_IN_WEEK = 7; -const float PI = 3.14159; -``` - -## How to Define Constants in C++? -Constants are defined at the time of declaration by assigning them a fixed value. Once defined, their value cannot be modified. - -### Example: -```cpp -const double GRAVITY = 9.81; // gravitational constant in m/s^2 -const char NEWLINE = '\n'; // newline character -``` - -## How to Use Constants in C++? -Constants are used just like regular variables in expressions, function calls, and other places where a variable would be used. The key difference is that their value remains unchanged. - -### Example - -```cpp -const int MAX_USERS = 100; - -int main() { - int users = MAX_USERS; - std::cout << "Maximum number of users: " << users << std::endl; - return 0; -} -``` - -## What are the Advantages of Constants in C++? -- Readability: Constants make the code more readable by giving meaningful names to fixed values. -- Maintainability: Constants allow easy modification of values without changing multiple instances in the code. -- Safety: Constants prevent accidental modification of values that should remain fixed, reducing bugs and errors. -- Optimization: Constants can sometimes allow the compiler to optimize the code better since their values are known at compile time. - -## Best Practices for Using Constants in C++: -- Use Descriptive Names: Choose names that clearly describe the value or purpose of the constant. -- All Uppercase with Underscores: Use all uppercase letters with underscores to separate words for naming constants, making them easily distinguishable from variables. -- Define Constants at the Top: Define all constants at the beginning of the file or in a dedicated section for easy reference and modification. -- Group Related Constants: Group related constants together to improve code organization. -- Use constexpr for Compile-Time Constants: Use constexpr when the constant value can be determined at compile time for better performance. - -### Example: -```cpp -constexpr int ARRAY_SIZE = 50; -const double SPEED_OF_LIGHT = 299792458.0; // in meters per second -``` - -## Examples of Constants in C++ - -```cpp -#include - -const int MAX_AGE = 120; -constexpr double PLANCK_CONSTANT = 6.62607015e-34; - -int main() { - const char GRADE = 'A'; - const std::string SCHOOL_NAME = "Greenwood High"; - - std::cout << "Max age allowed: " << MAX_AGE << std::endl; - std::cout << "Planck constant: " << PLANCK_CONSTANT << std::endl; - std::cout << "Grade: " << GRADE << std::endl; - std::cout << "School name: " << SCHOOL_NAME << std::endl; - - return 0; -} -``` - diff --git a/docs/day-04/input-output-in-cpp.md b/docs/day-04/input-output-in-cpp.md deleted file mode 100644 index 9c2ff5238..000000000 --- a/docs/day-04/input-output-in-cpp.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -sidebar_position: 2 -title: "Input and Output in C++" -description: "In this tutorial, we will learn to use the cin object to take input from the user, and the cout object to display output to the user with the help of examples." -sidebar_label: "Input and Output" -slug: input-output-in-cpp ---- - -## What is Input and Output in C++? - -Input and Output (I/O) in C++ refer to the process of communicating with the user or other parts of the program. Input typically involves receiving data from an external source, such as the user via keyboard, or from a file. Output involves displaying information to the user, writing data to files, or sending data to other devices. - - - - -IMAGE FILE: -![Input Output in CPP](../../static/img/day-04/input-output-in-cpp.png) - - -## Why do we use Input and Output in C++? - -Input and Output are essential for creating interactive programs. They allow users to provide input to the program, which can then process the data and produce output, making the program more useful and versatile. - -## How to take input from the user in C++? - -In C++, you can take input from the user using the `std::cin` object, which is part of the `` library. Here's an example: - -```cpp -#include - -int main() { - int num; - std::cout << "Enter a number: "; - std::cin >> num; - std::cout << "You entered: " << num << std::endl; - return 0; -} -``` - -## How to display output to the user in C++? - -To display output to the user in C++, you can use the `std::cout` object, also part of the `` library. Here's an example: - -```cpp -#include - -int main() { - std::cout << "Hello, world!" << std::endl; - return 0; -} -``` - -## Take Multiple Inputs from the User in C++ - -To take multiple inputs from the user in C++, you can simply use multiple `std::cin` statements. Here's an example: - -```cpp -#include - -int main() { - int num1, num2; - std::cout << "Enter two numbers: "; - std::cin >> num1 >> num2; - std::cout << "Sum: " << num1 + num2 << std::endl; - return 0; -} -``` diff --git a/docs/day-04/operators-in-cpp.md b/docs/day-04/operators-in-cpp.md deleted file mode 100644 index b2900319f..000000000 --- a/docs/day-04/operators-in-cpp.md +++ /dev/null @@ -1,362 +0,0 @@ ---- -sidebar_position: 3 -title: "Operators in C++" -description: "In this tutorial, we will learn about the different types of operators in C++ with the help of examples. In programming, an operator is a symbol that operates on a value or a variable." -sidebar_label: "Operators" -slug: operators-in-cpp ---- - -## 1. What is Operators in C++? - -In programming, an operator is a symbol that operates on a value or a variable. Operators are essential building blocks in C++, allowing you to perform various operations on data, such as arithmetic calculations, comparisons, and logical operations.--- - -![Operator in CPP](../../static/img/day-04/operator-in-cpp.png) - -## 2. Types of Operators in C++ - -Operators in C++ can be broadly categorized into several types: - -1. Arithmetic Operators -2. Relational Operators -3. Logical Operators -4. Bitwise Operators -5. Assignment Operators -6. Increment and Decrement Operators -7. Conditional (Ternary) Operator -8. Compound Operators -9. `sizeof` Operator -10. Comma Operator--- - -## 3. Explain All the Operators in C++ with Proper Examples - -### 1. Arithmetic Operators - -Arithmetic operators are used to perform basic mathematical operations. Here are the common arithmetic operators in C++: - -- **Addition (+)** : Adds two operands. -- **Subtraction (-)** : Subtracts the second operand from the first. -- **Multiplication (\*)** : Multiplies two operands. -- **Division (/)** : Divides the first operand by the second. -- **Modulus (%)** : Returns the remainder of a division operation. - -**Example:** - -```cpp -#include -using namespace std; - -int main() { - int a = 10, b = 3; - cout << "a + b = " << a + b << endl; // Output: 13 - cout << "a - b = " << a - b << endl; // Output: 7 - cout << "a * b = " << a * b << endl; // Output: 30 - cout << "a / b = " << a / b << endl; // Output: 3 - cout << "a % b = " << a % b << endl; // Output: 1 - return 0; -} -``` - -### 2. Relational Operators - -Relational operators are used to compare two values. They return a boolean result (`true` or `false`). - -- **Equal to (==)** : Returns `true` if both operands are equal. -- **Not equal to (!=)** : Returns `true` if operands are not equal. -- **Greater than (>)** : Returns `true` if the first operand is greater than the second. -- **Less than ({'<'})** : Returns `true` if the first operand is less than the second. -- **Greater than or equal to (>=)** : Returns `true` if the first operand is greater than or equal to the second. -- **Less than or equal to ({'<'}=)** : Returns `true` if the first operand is less than or equal to the second. - -**Example:** - -```cpp -#include -using namespace std; - -int main() { - int a = 10, b = 20; - cout << (a == b) << endl; // Output: 0 (false) - cout << (a != b) << endl; // Output: 1 (true) - cout << (a > b) << endl; // Output: 0 (false) - cout << (a < b) << endl; // Output: 1 (true) - cout << (a >= b) << endl; // Output: 0 (false) - cout << (a <= b) << endl; // Output: 1 (true) - return 0; -} -``` - -### 3. Logical Operators - -Logical operators are used to perform logical operations, often with boolean values. - -- **Logical AND (&&)** : Returns `true` if both operands are true. -- **Logical OR (||)** : Returns `true` if at least one of the operands is true. -- **Logical NOT (!)** : Returns `true` if the operand is false, and `false` if the operand is true. - -**Example:** - -```cpp -#include -using namespace std; - -int main() { - bool a = true, b = false; - cout << (a && b) << endl; // Output: 0 (false) - cout << (a || b) << endl; // Output: 1 (true) - cout << (!a) << endl; // Output: 0 (false) - cout << (!b) << endl; // Output: 1 (true) - return 0; -} -``` - -### 4. Bitwise Operators - -Bitwise operators perform bit-by-bit operations on integer data types. - -- **AND (&)** : Performs a bitwise AND operation. -- **OR (|)** : Performs a bitwise OR operation. -- **XOR (^)** : Performs a bitwise XOR operation. -- **NOT (~)** : Performs a bitwise NOT operation. -- **Left shift ({'<'}{'<'})** : Shifts bits to the left. -- **Right shift (>>)** : Shifts bits to the right. - -**Example:** - -```cpp -#include -using namespace std; - -int main() { - int a = 5; // 0101 in binary - int b = 3; // 0011 in binary - cout << (a & b) << endl; // Output: 1 (0001 in binary) - cout << (a | b) << endl; // Output: 7 (0111 in binary) - cout << (a ^ b) << endl; // Output: 6 (0110 in binary) - cout << (~a) << endl; // Output: -6 (Two's complement of 0101) - cout << (a << 1) << endl; // Output: 10 (1010 in binary) - cout << (a >> 1) << endl; // Output: 2 (0010 in binary) - return 0; -} -``` - -### 5. Assignment Operators - -Assignment operators are used to assign values to variables. Here are some commonly used assignment operators: - -- **Assign (=)** : Assigns the right operand to the left operand. -- **Add and assign (+=)** : Adds the right operand to the left operand and assigns the result to the left operand. -- **Subtract and assign (-=)** : Subtracts the right operand from the left operand and assigns the result to the left operand. -- **Multiply and assign (\*=)** : Multiplies the right operand with the left operand and assigns the result to the left operand. -- **Divide and assign (/=)** : Divides the left operand by the right operand and assigns the result to the left operand. -- **Modulus and assign (%=)** : Computes the modulus using the two operands and assigns the result to the left operand. - -**Example:** - -```cpp -#include -using namespace std; - -int main() { - int a = 10; - a += 5; // Equivalent to a = a + 5 - cout << a << endl; // Output: 15 - a -= 3; // Equivalent to a = a - 3 - cout << a << endl; // Output: 12 - a *= 2; // Equivalent to a = a * 2 - cout << a << endl; // Output: 24 - a /= 4; // Equivalent to a = a / 4 - cout << a << endl; // Output: 6 - a %= 5; // Equivalent to a = a % 5 - cout << a << endl; // Output: 1 - return 0; -} -``` - -### 6. Increment and Decrement Operators - -Increment and decrement operators are used to increase or decrease the value of a variable by one. - -- **Increment (++)** : Increases the value of a variable by one. -- **Decrement (--)** : Decreases the value of a variable by one. - -**Example:** - -```cpp -#include -using namespace std; - -int main() { - int a = 10; - cout << "a = " << a << endl; // Output: a = 10 - a++; - cout << "a++ = " << a << endl; // Output: a++ = 11 - a--; - cout << "a-- = " << a << endl; // Output: a-- = 10 - return 0; -} -``` - -### 7. Conditional (Ternary) Operator - -The conditional operator (?:) is a shorthand for an `if-else` statement. It takes three operands. - -**Syntax:** - -```css -condition ? expression1 : expression2; -``` - -If the condition is true, it evaluates `expression1`; otherwise, it evaluates `expression2`. - -**Example:** - -```cpp -#include -using namespace std; - -int main() { - int a = 10, b = 20; - int max = (a > b) ? a : b; - cout << "The maximum value is " << max << endl; // Output: The maximum value is 20 - return 0; -} -``` - -### 8. Compound Operators - -Compound operators combine an arithmetic operator with an assignment operator. - -- **Add and assign (+=)** -- **Subtract and assign (-=)** -- **Multiply and assign (\*=)** -- **Divide and assign (/=)** -- **Modulus and assign (%=)** - -These operators have already been covered under assignment operators. - -### 9. `sizeof` Operator - -The `sizeof` operator is used to determine the size of a data type or a variable in bytes. - -**Example:** - -```cpp -#include -using namespace std; - -int main() { - cout << "Size of int: " << sizeof(int) << " bytes" << endl; // Output: 4 bytes - cout << "Size of double: " << sizeof(double) << " bytes" << endl; // Output: 8 bytes - int a; - cout << "Size of variable a: " << sizeof(a) << " bytes" << endl; // Output: 4 bytes - return 0; -} -``` - -### 10. Comma Operator - -The comma operator (,) is used to separate two or more expressions. The expressions are evaluated from left to right, and the value of the rightmost expression is the result. - -**Example:** - -```cpp -#include -using namespace std; - -int main() { - int a, b; - a = (b = 3, b + 2); - cout << "a = " << a << endl; // Output: a = 5 - return 0; -} -``` -## 4. Operator Overloading - -### Introduction - -Operator overloading allows you to redefine the way operators work for user-defined types (classes and structs). It enables you to specify more intuitive ways to perform operations on objects of your classes. - -Overloading an operator does not change: -- the operator precedence, -- the associativity of the operator, -- the arity of the operator, or -- the meaning of how the operator works on objects of -built-in types. - -### Syntax -An overloaded operator is implemented as a special member function with the keyword `operator` followed by the symbol of the operator being overloaded. - -```cpp -class ClassName { -public: - ReturnType operatorOpSymbol (ParameterList) { - // Function body - } -}; -``` - -### Example -```cpp -class Complex { -public: - double real, imag; - - Complex(double r = 0, double i = 0) : real(r), imag(i) {} - - // Overload the + operator - Complex operator+ (Complex& obj) { - return Complex(real + obj.real, imag + obj.imag); - } -}; -``` - -### Types of Operators that Can Be Overloaded - -- Arithmetic operators: `+`, `-`, `*`, `/`, `%` -- Relational operators: `==`, `!=`, `<`, `>`, `<=`, `>=` -- Logical operators: `&&`, `||`, `!` -- Bitwise operators: `&`, `|`, `^`, `~`, `<<`, `>>` -- Increment and decrement operators: `++`, `--` -- Assignment operators: `=`, `+=`, `-=`, `*=`, `/=`, `%=` -- Subscript operator: `[]` -- Function call operator: `()` -- Member access operators: `->`, `.` (only for pointers to members) -- Input and output operators: `>>`, `<<` - -Operators that **cannot** be overloaded include: `::`, `.*`, `.`, `? :`, `sizeof` - -### Example: -```cpp -#include - -class Complex { -public: - double real, imag; - - Complex(double r = 0, double i = 0) : real(r), imag(i) {} - - // Overload the == operator - bool operator== (const Complex& obj) const { - return (real == obj.real && imag == obj.imag); - } -}; - -int main() { - Complex c1(3.0, 4.0), c2(3.0, 4.0); - if (c1 == c2) { - std::cout << "c1 and c2 are equal" << std::endl; - } else { - std::cout << "c1 and c2 are not equal" << std::endl; - } - return 0; -} -``` - -### Operator Overloading Rules - -When overloading operators, there are several rules to keep in mind: - -1. **Preserve the Operator's Original Meaning**: The overloaded operator should make sense in the context of the operation it performs. -2. **Return Types**: The return type should be appropriate for the operation. For example, `operator+` should return a new object, while `operator+=` should return a reference to `*this`. -3. **Symmetry**: Ensure symmetric behavior where applicable. For example, `a == b` should return the same result as `b == a`. -4. **Do Not Overload Operators Irrelevantly**: Only overload operators that make sense for your class. For example, overloading the arithmetic operators for a class that represents a complex number makes sense, but overloading them for a class that represents a database connection does not. diff --git a/docs/day-05/Logical Operators.md b/docs/day-05/Logical Operators.md deleted file mode 100644 index 97fe28e4b..000000000 --- a/docs/day-05/Logical Operators.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -sidebar_position: 6 -title: "Logical Operators" -description: "In this tutorial, we will learn about Logical Operators in C++ programming with the help of examples." -sidebar_label: "Logical Operators" -slug: Logical-Operators-cpp ---- -# Logical Operators in C++ - -This repository provides an explanation of logical operators in C++, along with examples of their usage. - -## Table of Contents - -- [Introduction](#introduction) -- [Logical Operators](#logical-operators) - - [AND (`&&`)](#and-) - - [OR (`||`)](#or-) - - [NOT (`!`)](#not-) -- [Examples](#examples) - -## Introduction - -Logical operators in C++ are used to perform logical operations on boolean operands. This document provides an overview of these operators and demonstrates their usage through examples. - -## Logical Operators - -### AND (`&&`) - -The AND operator returns `true` if both operands are `true`, otherwise it returns `false`. - -### OR (`||`) - -The OR operator returns `true` if at least one of the operands is `true`, otherwise it returns `false`. - -### NOT (`!`) - -The NOT operator negates the value of its operand. If the operand is `true`, it returns `false`, and if the operand is `false`, it returns `true`. - -## Examples - -```cpp -bool a = true; -bool b = false; - -// Using AND operator -bool result = (a && b); // result will be false - -// Using OR operator -result = (a || b); // result will be true - -// Using NOT operator -result = !a; // result will be false -``` \ No newline at end of file diff --git a/docs/day-05/_category_.json b/docs/day-05/_category_.json deleted file mode 100644 index 47132fb0c..000000000 --- a/docs/day-05/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 05", - "position": 6, - "link": { - "type": "generated-index" - } -} diff --git a/docs/day-05/arithmetic-Operators.md b/docs/day-05/arithmetic-Operators.md deleted file mode 100644 index e41d5e62b..000000000 --- a/docs/day-05/arithmetic-Operators.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -sidebar_position: 4 -title: "Arithmetic Operators" -description: "In this tutorial, we will learn about Arithmetic Operators in C++ programming with the help of examples." -sidebar_label: "Arithmetic Operators" -slug: Arithmetic-Operators-cpp ---- - -# Arithmetic Operators in C++ - -Arithmetic operators in C++ are symbols used to perform mathematical operations on operands. These operators allow you to perform addition, subtraction, multiplication, division, and modulus operations. - -## Addition (+) - -Adds two operands together. - -```cpp - -int result = 5 + 3; // result will be 8 - -``` -## Subtraction (-) - -Subtracts the right operand from the left operand. - -```cpp - -int result = 7 - 4; // result will be 3 - -``` -## Multiplication (*) - -Multiplies two operands. - -```cpp - -int result = 6 * 2; // result will be 12 - -``` - -## Division (/) - -Divides the left operand by the right operand. If both operands are integers, the result will be an integer, with any remainder discarded. - -```cpp - -int result = 10 / 3; // result will be 3 - -``` -If you want to get a floating-point result, you can use floating-point operands: - -```cpp - -double result = 10.0 / 3.0; // result will be approximately 3.33333 - -``` - -## Modulus (%) - -Returns the remainder of the division of the left operand by the right operand. - -```cpp - -int result = 10 % 3; // result will be 1 - -``` -These operators can be used with variables, constants, or expressions. They follow the usual rules of precedence and associativity. Additionally, parentheses can be used to enforce a specific order of evaluation. diff --git a/docs/day-05/do-while-loop.md b/docs/day-05/do-while-loop.md deleted file mode 100644 index 3f225d43a..000000000 --- a/docs/day-05/do-while-loop.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -sidebar_position: 3 -title: "While and Do-While Loop in C++" -description: "In this tutorial, we will learn about the while and do-while loop in C++ programming with the help of examples. The while loop is used to execute a block of code multiple times." -sidebar_label: "While and Do-While Loop" -slug: while-and-do-while-loop-in-cpp ---- - - -## while Loop - -A `while` loop in C++ repeatedly executes a block of statements as long as a specified condition is true. The condition is evaluated before the execution of the loop's body. - -![Do While Loop](../../static/img/day-05/while-do-while-loop-in-cpp.png) - - - - -### Flowchart of while Loop - -```plaintext - +----------------------+ - | Start | - +----------------------+ - | - v - +----------------------+ - | Condition? | - +----------------------+ - | | - | v - True False - | | - v v -+----------------+ | -| Loop Body | | -+----------------+ | - | | - +----------+ - | - v - +----------------------+ - | End | - +----------------------+ -``` - -### Example 1: Display Numbers from 1 to 5 - -```cpp -#include - -int main() { - int i = 1; - while (i <= 5) { - std::cout << i << std::endl; - i++; - } - return 0; -} -``` - -## do...while Loop - -A `do...while` loop in C++ is similar to a `while` loop, except that the condition is evaluated after the execution of the loop's body. This guarantees that the loop body is executed at least once. - -### Flowchart of do...while Loop - -```plaintext - +----------------------+ - | Start | - +----------------------+ - | - v - +----------------------+ - | Loop Body | - +----------------------+ - | - v - +----------------------+ - | Condition? | - +----------------------+ - | | - | v - True False - | | - v v -+----------------+ | -| Loop Body | | -+----------------+ | - | | - +----------+ - | - v - +----------------------+ - | End | - +----------------------+ -``` - -### Example 2: Display Numbers from 1 to 5 - -```cpp -#include - -int main() { - int i = 1; - do { - std::cout << i << std::endl; - i++; - } while (i <= 5); - return 0; -} -``` diff --git a/docs/day-05/for-loop.md b/docs/day-05/for-loop.md deleted file mode 100644 index 18c29d3a8..000000000 --- a/docs/day-05/for-loop.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -sidebar_position: 2 -title: "For Loop in C++" -description: "In this tutorial, we will learn about the for loop in C++ programming with the help of examples. The for loop is used to execute a block of code multiple times." -sidebar_label: "For Loop" -slug: for-loop-in-cpp ---- - - -# C++ For Loop - -## What is the For Loop in C++? -A for loop in C++ is a fundamental control structure used to execute a block of code multiple times. It is particularly useful when the number of iterations is known before the loop starts. The for loop is one of the most versatile loops in C++ and allows for concise and clear code. It consists of three main parts: initialization, condition checking, and increment/decrement. These parts are usually handled within the loop statement, making the for loop compact and easy to understand. - -![For Loop](../../static/img/day-05/for-loop-in-cpp.png) - -## Syntax of For Loop in C++ -The for loop in C++ has a specific syntax that needs to be followed. Here’s the breakdown: - -```cpp -for (initialization; condition; increment/decrement) { - // Code to be executed -} -``` -- **Initialization**: This step is executed once at the beginning of the loop. It’s used to initialize loop control variables. For example, int i = 0;. - -- **Condition**: This boolean expression is evaluated before each iteration of the loop. If the condition is true, the loop body is executed. If it’s false, the loop terminates. For example, i < 10. - -- **Increment / Decrement**: This step is executed after each iteration of the loop body. It’s used to update the loop control variables. For example, i++ or i += 2. - -Here is a practical example: -```cpp -#include -using namespace std; - -int main() { - - for (int i = 0; i < 10; i++) { - cout << "Iteration: " << i << endl; - } - - return 0; -} -``` - -In this example: - -- The loop starts with i = 0. - -- It checks the condition i < 10. - - If the condition is true, it prints the value of iand increments i by 1. -- The loop repeats until i is no longer less than 10. - -## C++ for Loop - -Let's look at a more detailed example that calculates the sum of the first 10 natural numbers: - -```cpp -#include -using namespace std; - -int main() { - int sum = 0; - - for (int i = 1; i <= 10; i++) { - sum += i; - } - - cout << "The sum of the first 10 natural numbers is: " << sum << endl; - return 0; -} -``` - -In this example: - -- We initialize sum to 0. - -- The loop variable i starts at 1 and increments until it reaches 10. - - In each iteration, the value of i is added to sum. -- After the loop ends, the sum is printed. - -## 4. C++ Infinite for Loop -An infinite for loop runs indefinitely because the terminating condition is never met. This can be useful in programs that need to run continuously until an external event occurs, such as user input or a signal from another part of the program. - -Here is an example of an infinite for loop: - -```cpp -#include -using namespace std; - -int main() { - for (;;) { - cout << "This loop will run forever" << endl; - // You can include a break condition to exit the loop - // For example, if you want to break the loop after some condition - // if (someCondition) break; - } - return 0; -} -``` - -In this example: - -- The initialization, condition, and increment/decrement are omitted. - -- The loop runs forever, repeatedly printing the message. - -- A break statement can be added to exit the loop based on a specific condition. - -## 5. C++ Nested for Loop - -Nested for loops are loops within loops. They are often used to work with multi-dimensional data structures, like matrices or tables. Here’s an example of nested for loops to print a multiplication table: - -```cpp -#include -using namespace std; - -int main() { - for (int i = 1; i <= 10; i++) { - - for (int j = 1; j <= 10; j++) { - cout << i << " * " << j << " = " << i * j << "\t"; - } - - cout << endl; - } - - return 0; -} -``` - -In this example: - -- The outer loop iterates from 1 to 10 (rows of the table). - -- The inner loop iterates from 1 to 10 for each iteration of the outer loop (columns of the table). - -- The product of i and j is printed, resulting in a multiplication table. - -- Each row of the table is printed by the inner loop, and after the inner loop completes, a new line is started by the outer loop. \ No newline at end of file diff --git a/docs/day-05/if-else-statement.md b/docs/day-05/if-else-statement.md deleted file mode 100644 index 58c6ac3f7..000000000 --- a/docs/day-05/if-else-statement.md +++ /dev/null @@ -1,134 +0,0 @@ ---- -sidebar_position: 1 -title: "IF-ELSE Statement in C++" -description: "The if...else statement is used to run one block of code under certain conditions and another block of code under different conditions. In this tutorial, we will learn C++ if, if…else and nested if…else with the help of examples.." -sidebar_label: "IF-ELSE Statement" -slug: if-else-statement-in-cpp ---- - - -## 1. What is Control Statements in C++? -Control statements are the keywords and judgement makers of C++, which controls the run time process of a program. These statements enable the program to decide on a course of action, to compute repetitive tasks and to determine the program’s flow according to specific conditions that may have been defined in the statements. There are two primary types of control statements in C++: - - Conditionals - - Loops - -**Conditional Statements** -Conditional Statements are block of statements used to execute code based on a certain condition. -There are two types: `if-else` and `Switch` statements. - -**Loop Statements** -Loop statements are used to repeat certain task or a block of code. -Types are: `for`, `while` and `do-while` Loops. - - -![if else in cpp](../../static/img/day-05/if-else-statement.png) - - -## 2. What is the IF-ELSE Statement in C++? -The IF-ELSE statement in C++ is a conditional statement that executes different code blocks based on whether a given condition is `true` or `false`. This is a fundamental concept in programming that allows for decision-making and branching in the code. - -### Syntax - -```cpp -if (condition) { - // Code to execute if condition is true -} else { - // Code to execute if condition is false -} -``` - -## 3. C++ if Statement -The simplest form of the conditional statement that executes a block of code if the condition is `true`. - -### Example -```cpp -#include -using namespace std; - -int main(){ - int x = 10; - - if(x > 5){ - cout<<"the number is greater than 5"< -using namespace std; - -int main(){ - int x = 10; - - if (x > 15) { - cout << "x is greater than 15"; - } else { - cout << "x is not greater than 15"; - } -} -``` - -## 5. C++ Nested if-else Statement -You can also nest if-else statements inside another if or else block to create more complex conditions. - -### Example -```cpp -#include -using namespace std; - -int main(){ - int x = 10; - int y = 20; - if (x > 5) { - if (y > 15) { - cout << "x is greater than 5 and y is greater than 15"; - } else { - cout << "x is greater than 5 but y is not greater than 15"; - } - } else { - cout << "x is not greater than 5"; - } -} -``` -## 6. C++ if-else-if Ladder -This is used when you have multiple conditions to evaluate. Each condition is checked in sequence, and the block of code for the first true condition is executed. - -### Example -```cpp -#include -using namespace std; - -int main(){ - int x = 10; - if (x == 10) { - cout << "x is 10"; - } else if (x == 20) { - cout << "x is 20"; - } else if (x == 30) { - cout << "x is 30"; - } else { - cout << "x is not 10, 20, or 30"; - } -} - -``` -## 7. C++ Ternary Operator -The ternary operator is a shorthand way to write simple if-else statements. It is also known as the conditional operator. - -### Example -```cpp -#include -using namespace std; - -int main(){ - int x = 10; - string result = (x > 5) ? "x is greater than 5" : "x is not greater than 5"; - cout << result; -} -``` -NOTE: -> In the above code "?" refers to if-statement and statement after the ":" is executed if the if-statement is `false`. diff --git a/docs/day-05/relational_operators.md b/docs/day-05/relational_operators.md deleted file mode 100644 index a2e6ea923..000000000 --- a/docs/day-05/relational_operators.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -sidebar_position: 5 -title: "Relational Operators" -description: "In this tutorial, we will learn about Relational Operators in C++ programming with the help of examples." -sidebar_label: "Relational Operators" -slug: Relational-Operators-cpp ---- - -# Relational Operators in C++ - -Relational operators in C++ are used to compare two values and determine the relationship between them. These operators return a boolean value of true or false based on whether the comparison is true or false. Here are the commonly used relational operators: - -## Equal to (==) - -Compares if two operands are equal. Returns true if they are equal, false otherwise. - -```cpp -int a = 5, b = 5; -if (a == b) { - // This block will be executed because a is equal to b -} -``` - -## Not equal to (!=) - -Compares if two operands are not equal. Returns true if they are not equal, false otherwise. - -```cpp -int a = 5, b = 10; -if (a != b) { - // This block will be executed because a is not equal to b -} -``` -## Greater than (>) - -Checks if the left operand is greater than the right operand. Returns true if it is, false otherwise. - -```cpp -int a = 10, b = 5; -if (a > b) { - // This block will be executed because a is greater than b -} -``` - -## Less than ( < ) -Checks if the left operand is less than the right operand. Returns true if it is, false otherwise. - -```cpp -int a = 5, b = 10; -if (a < b) { - // This block will be executed because a is less than b -} - -``` -## Greater than or equal to (>=) - -Checks if the left operand is greater than or equal to the right operand. Returns true if it is, false otherwise. - -```cpp -int a = 10, b = 5; -if (a >= b) { - // This block will be executed because a is greater than or equal to b -} -``` -## Less than or equal to (< =) - -Checks if the left operand is less than or equal to the right operand. Returns true if it is, false otherwise. - -```cpp -int a = 5, b = 10; -if (a <= b) { - // This block will be executed because a is less than or equal to b -} - -``` \ No newline at end of file diff --git a/docs/day-06/If-statement.md b/docs/day-06/If-statement.md deleted file mode 100644 index b7436c00f..000000000 --- a/docs/day-06/If-statement.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -sidebar_position: 4 -title: "If Statements in C++" -description: "In this tutorial, we will learn about the If Statements in C++ programming with the help of examples. The If statement is used to conditional execution." -sidebar_label: "If Statements in C++" -slug: If-Statements ---- -# If Statements in C++ - -This repository provides an explanation of if statements in C++, along with examples of their usage. - -## Table of Contents - -- [Introduction](#introduction) -- [Basic If Statement](#basic-if-statement) -- [If-Else Statement](#if-else-statement) -- [Nested If Statements](#nested-if-statements) -- [If-Else If-Else Ladder](#if-else-if-else-ladder) -## Introduction - -If statements in C++ are used for conditional execution, allowing you to control the flow of your program based on certain conditions. - -## Basic If Statement - -```cpp -int x = 10; - -if (x > 5) { - std::cout << "x is greater than 5" << std::endl; -} -``` -In this example, the condition `x > 5` is evaluated. If it's true (which it is, since `x` is `10`), the code inside the curly braces `{}` is executed, and "x is greater than 5" is printed.` - -## If-Else Statement - -```cpp -int y = 2; - -if (y % 2 == 0) { - std::cout << "y is even" << std::endl; -} else { - std::cout << "y is odd" << std::endl; -} - -``` -In this example, if `y` is divisible by `2` (i.e., it's an even number), the first block of code is executed. Otherwise, if the condition is false, the code inside the `else` block is executed.` - -## Nested If Statements - -```cpp -int a = 5; -int b = 10; - -if (a > 0) { - if (b > 5) { - std::cout << "Both a and b are positive and b is greater than 5" << std::endl; - } -} - -``` -Here, we have an if statement nested inside another if statement. Both conditions must be true for the inner block of code to execute. - -## If-Else If-Else Ladder - -```cpp -int mark = 70; - -if (mark >= 90) { - std::cout << "Grade A" << std::endl; -} else if (mark >= 80) { - std::cout << "Grade B" << std::endl; -} else if (mark >= 70) { - std::cout << "Grade C" << std::endl; -} else { - std::cout << "Grade D" << std::endl; -} - -``` -In this example, the program checks the value of `mark` against multiple conditions in a sequential manner. Once a condition is met, the corresponding block of code is executed, and the rest of the conditions are skipped. \ No newline at end of file diff --git a/docs/day-06/_category_.json b/docs/day-06/_category_.json deleted file mode 100644 index d67bee4ff..000000000 --- a/docs/day-06/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 06", - "position": 7, - "link": { - "type": "generated-index" - } -} diff --git a/docs/day-06/break-statement.md b/docs/day-06/break-statement.md deleted file mode 100644 index 508fee79c..000000000 --- a/docs/day-06/break-statement.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -sidebar_position: 1 -title: "Break Statement in C++" -description: "In this tutorial, we will learn about the break statement in C++ programming with the help of examples. The break statement is used to terminate the loop or switch statement." -sidebar_label: "Break Statement" -slug: break-statement-in-cpp ---- - -## What is the Break Statement in C++? -The break statement in C++ is a control statement used to exit prematurely from loops (like for, while, or do-while loops) and switch statements. When encountered, the break statement immediately terminates the loop it's contained within, regardless of the loop's normal exit conditions. This allows for an early exit based on certain conditions without executing the remaining code inside the loop. - - - - -![Constants in CPP](../../static/img/day-04/constants-in-cpp.png) - -## Explain the Syntax of Break Statement in C++. -The syntax of the break statement in C++ is simple and straightforward.It's used without any conditions or expressions. Here's the syntax: - -### Syntax of break statement: - -```cpp - break; - -``` -When encountered within a loop or a switch statement, the break statement immediately terminates the nearest enclosing loop or switch statement and transfers control to the statement immediately following the terminated loop or switch. - -## C++ Break Statement Example - -```cpp -#include -using namespace std; - -int main() { - for (int i = 1; i <= 5; ++i) { - if (i == 3) { - cout << "Breaking out of the loop when i is 3." << endl; - break; - } - cout << i << " "; - } - return 0; -} - -``` - -## C++ Break Statement in Nested Loop. -The break statement can be especially helpful in C++ when utilising nested loops to manage the execution flow. It lets you break out of nested loops at any number of levels under specific circumstances. The following is an example of how to use break in nested loops: - -### Example - -```cpp -#include -using namespace std; - -int main() { - for (int i = 1; i <= 3; ++i) { - cout << "Outer loop iteration: " << i << endl; - for (int j = 1; j <= 3; ++j) { - cout << "Inner loop iteration: " << j << endl; - if (j == 2) { - cout << "Breaking out of the inner loop." << endl; - break; // Exits the inner loop when j equals 2 - } - } - } - return 0; -} - -``` - - diff --git a/docs/day-06/continue-statement.md b/docs/day-06/continue-statement.md deleted file mode 100644 index 32be52b81..000000000 --- a/docs/day-06/continue-statement.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -sidebar_position: 2 -title: "Continue Statement in C++" -description: "In this tutorial, we will learn about the continue statement in C++ programming with the help of examples. The continue statement is used to skip the current iteration of the loop and continue with the next iteration." -sidebar_label: "Continue Statement" -slug: continue-statement-in-cpp ---- -## What is the Continue Statement in C++? -In C++, the continue statement is used within loops to skip the rest of the current iteration and proceed directly to the next iteration of the loop. It's often used to avoid executing certain code in a loop under certain conditions. - - -### Example - -```cpp - #include - using namespace std; - int main() { - for (int i = 1; i <= 5; ++i) { - if (i == 3) { - // Skip the rest of the iteration if i equals 3 - continue; - } - cout << "Current value of i: " << i < - int main() { - for (int i = 1; i <= 5; ++i) { - if (i == 3) { - // Skip the rest of the iteration if i equals 3 - continue; - } - std::cout << "Current value of i: " << i << std::endl; - } - return 0; -} - -``` -### while loop - -```cpp - -#include - -int main() { - int i = 1; - while (i <= 5) { - if (i == 3) { - // Skip the rest of the iteration if i equals 3 - ++i; - continue; - } - std::cout << "Current value of i: " << i << std::endl; - ++i; - } - return 0; -} - -``` -### do-while loop - -```cpp - -#include - -int main() { - int i = 1; - do { - if (i == 3) { - // Skip the rest of the iteration if i equals 3 - ++i; - continue; - } - std::cout << "Current value of i: " << i << std::endl; - ++i; - } while (i <= 5); - return 0; -} - -``` diff --git a/docs/day-06/goto-statement.md b/docs/day-06/goto-statement.md deleted file mode 100644 index c66576830..000000000 --- a/docs/day-06/goto-statement.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -sidebar_position: 3 -title: "Go To Statement in C++" -description: "In this tutorial, we will learn about the goto statement in C++ programming with the help of examples. The goto statement is used to transfer control to the other part of the program." -sidebar_label: "Go To Statement" -slug: goto-statement-in-cpp ---- - -`NOTE:` The `return` statement is necessary in the code corresponding to `positive` label, as, otherwise the code corresponding to `negative` label will also get executed. - - -## Why is the Go To Statement Considered Harmful? - -The use of `goto` statement is considered to be a bad programming practice and use of it is highly discouraged. This is beacause it makes the program logic complex and also makes it difficult for us to trace the control flow of program. `goto` statements can be avoided as any program with `goto` can be rewritten using `break` and `continue` statements. - - - -## When to Use Go To Statement in C++? -Although the use of the `goto` statement is generally discouraged, there are specific cases where it can be useful. For instance, in a program with multiple nested loops, you might want to break out of all the loops simultaneously. Normally, this would require multiple `break` statements for each loop level. However, a single `goto` statement can achieve the same result more efficiently. - -# 4. Why is the Go To Statement Considered Harmful? - - -- Unstructured Code: "Go to" statements can lead to unstructured, spaghetti-like code. Programs with excessive "go to" statements become hard to read, understand, and maintain. Debugging such code can be a nightmare. - -- Difficulty in Control Flow Analysis: It becomes difficult to analyze and reason about the flow of control in programs that heavily use "go to" statements. This makes it harder to verify correctness and ensure robustness. - -- Code Obfuscation: "Go to" statements can obscure the logical flow of a program, making it challenging for other programmers (including your future self) to comprehend the code's intent and functionality. - -- Scope for Bugs and Errors: Misuse of "go to" statements can lead to subtle bugs and errors that are hard to detect and fix. It's easy to accidentally jump to the wrong part of the code or introduce unintended behavior. - -- Structured Programming Principles: The widespread adoption of structured programming principles advocates for the use of structured control flow constructs like loops, conditionals, and functions, which offer clearer program organization and better readability. - - - Portability and Maintainability: Code with "go to" statements can be less portable and harder to maintain. Modifying or extending such code becomes risky and error-prone. - -# 5. When to Use Go To Statement in C++? - -1. Breaking out of Nested Loops: Sometimes, you may encounter a situation where breaking out of nested loops using a "go to" statement could result in cleaner code than using nested break statements. - -2. Error Handling in Resource Cleanup: In scenarios where you need to perform resource cleanup (like closing files or releasing memory) when an error occurs, using a "go to" statement to jump to a common cleanup section can help avoid code duplication and ensure proper cleanup. - -3. Jumping within a Local Scope: Occasionally, in very specific algorithms or low-level code, jumping within a local scope using "go to" might provide a cleaner and more efficient solution compared to alternative approaches. However, this should be approached with caution and well-documented. - -4. Optimization in Performance-Critical Code: In rare cases where performance is critical and careful optimization is necessary, judicious use of "go to" might provide some benefits by avoiding unnecessary function calls or loop iterations. diff --git a/docs/day-07/_category_.json b/docs/day-07/_category_.json deleted file mode 100644 index 285ca7858..000000000 --- a/docs/day-07/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 07", - "position": 8, - "link": { - "type": "generated-index" - } -} diff --git a/docs/day-07/friend-and-virtual-functions-in-cpp.md b/docs/day-07/friend-and-virtual-functions-in-cpp.md deleted file mode 100644 index 64f257a72..000000000 --- a/docs/day-07/friend-and-virtual-functions-in-cpp.md +++ /dev/null @@ -1,124 +0,0 @@ -# Friend Functions - -A friend function is a function that is not a member of a class but has access to the class's private and protected members. It is declared within the class using the `friend` keyword. - -It used in the cases of **Operator Overloading** , accessing **Non-member functions**. - -Below is the flowchart for showing work of friend functions. - -```mermaid -flowchart TD - Start --> DefineClass - DefineClass --> DeclarePrivateMembers - DeclarePrivateMembers --> DeclareFriendFunction - DeclareFriendFunction --> CreateInstance - CreateInstance --> DefineFriendFunction - DefineFriendFunction --> CallFriendFunction - CallFriendFunction --> End - - subgraph Define and Declare - DefineClass[Define Class] - DeclarePrivateMembers[Declare Private Members] - DeclareFriendFunction[Declare Friend Function] - end - - subgraph Define and Use - CreateInstance[Create an Instance of the Class] - DefineFriendFunction[Define the Friend Function] - CallFriendFunction[Call Friend Function] - end - - End[End] -``` - -Example : - -```cpp -#include -using namespace std; - -class Box { -private: - double width; - -public: - Box(double w) : width(w) {} - - // Friend function declaration - friend void printWidth(Box box); -}; - -// Friend function definition -void printWidth(Box box) { - cout << "Width of box: " << box.width << endl; -} - -int main() { - Box box(10.0); - printWidth(box); // Accesses private member of Box - return 0; -} -``` - - -# Virtual Functions - -A virtual function is a member function in a base class that can be overridden in a derived class. It is declared using the `virtual` keyword in the base class and allows dynamic (runtime) polymorphism. - -Here is the flowchart which gives idea behind virtual functions. - -```mermaid -graph TD - A[Start] --> B[Base Class] - B --> C[Virtual Function Declaration] - C --> D[Derived Class] - D --> E[Override Virtual Function] - E --> F[Create Object of Derived Class] - F --> G[Call Virtual Function] - G --> H[Derived Class Implementation] - H --> I[End] - - subgraph Virtual_Function_Process - D --> C - E --> F - end -``` - -Example : - -```cpp -#include -using namespace std; - -class Base { -public: - virtual void display() { - cout << "Display of Base class" << endl; - } - - // Pure virtual function (abstract class) - virtual void pureVirtualFunction() = 0; -}; - -class Derived : public Base { -public: - void display() override { // Override the base class function - cout << "Display of Derived class" << endl; - } - - void pureVirtualFunction() override { - cout << "Implementation of pure virtual function in Derived class" << endl; - } -}; - -int main() { - Base* basePtr; - Derived derivedObj; - basePtr = &derivedObj; - - basePtr->display(); // Calls Derived's display function - basePtr->pureVirtualFunction(); // Calls Derived's implementation of pure virtual function - - return 0; -} -``` diff --git a/docs/day-07/function-in-cpp.md b/docs/day-07/function-in-cpp.md deleted file mode 100644 index 69a910b5f..000000000 --- a/docs/day-07/function-in-cpp.md +++ /dev/null @@ -1,129 +0,0 @@ ---- -sidebar_position: 3 -title: "Function in C++" -description: "In this tutorial, we will learn about functions in C++ programming with the help of examples. A function is a block of code that performs a specific task. It is used to break the code into smaller modules that can be reused." -sidebar_label: "Function" -slug: function-in-cpp ---- - - -## Functions in C++ - -In this tutorial, we will learn about functions in C++ programming with the help of examples. A function is a block of code that performs a specific task. It is used to break the code into smaller modules that can be reused. Think of it as an independent unit that takes some input (parameters), performs some operations, and returns an output (or no output if not specified). They are used to organize, improve code readability, and make code reusable. - -**Function Syntax:** - -```c++ -return_type function_name(parameter_list) { - // Body of the function - return value; -} -``` - -The above statement is an example of a function declaration in C++. It suggests that to declare a function, its `return type`, `function name`, and `parameter list` must be declared. - -**Example:** - -```c++ -int add(int a, int b) { - return a + b; -} -``` - -This function takes two integers as parameters and returns their sum. To call the function, you would simply write: - -```c++ -int sum = add(1, 2); -``` - -**How to Declare a Function:** - -To declare a function in C++, we must first define its return type: - -* `void`: Indicates the function doesn't return any value. -* `int`, `float`, etc.: Denotes the data type of the value the function returns. - -Next, provide the function name with arguments (parameters) in the parameter list, or leave it empty if not required. Here's an example: - -```c++ -int add(int a, int b) -``` - -Now, define the body of the function, which specifies the specific task you want the function to perform. - -**Advantages of Functions:** - -* **Reduced Redundancy:** Functions minimize code redundancy by allowing you to write a block of code once and reuse it throughout your program. -* **Improved Readability:** Functions enhance code readability by breaking down complex logic into smaller, more manageable units. -* **Enhanced Maintainability:** Functions improve code maintainability by encapsulating specific functionalities, making it easier to modify or debug specific sections. -* **Promotes Reusability:** Functions promote code reusability by allowing you to utilize the same function in different parts of your program or even across multiple projects. - -**Standard Practices:** - -* A function can take parameters or not. -* It can be defined inside a class or outside. -* It can use global variables, local variables, parameters, or nothing at all. -* It can return a value or not (void type). - -**Function Examples:** - -Here are some more examples of functions: - -```c++ -// Factorial function -int factorial(int n) { - if (n == 0 || n == 1) { - return 1; - } else { - return n * factorial(n - 1); - } -} - -// Function with parameters -int multiply(int a, int b) { - return a * b; -} - -// Function with return value -int sum(int x, int y) { - return x + y; -} -``` - -**C++ Function with Default Arguments:** - -A default argument is a value assigned to a parameter in the function declaration. If no value is provided during the function call, the default value is automatically used. Here's an example: - -```c++ -int sum(int x, int y, int z = 0, int w = 0) { - return (x + y + z + w); -} -``` - -**C++ Function with Function Overloading:** - -Function overloading allows you to define multiple functions with the same name but different parameter lists. The compiler chooses the appropriate function based on the number and types of arguments passed during the call. Here's an example: - -```c++ -int add(int a, int b) { - return a + b; -} - -float add(float a, float b) { - return a + b; -} -``` - -**C++ Function with Recursion:** - -Recursion is a technique where a function calls itself. This is useful for breaking down complex problems into smaller, self-similar subproblems. Here's an example of a recursive function to calculate factorial: - -```c++ -int factorial(int n) { - if (n == 0 || n == 1) { - return 1; - } else { - return n * factorial(n - 1); - } -} -``` diff --git a/docs/day-07/switch-case-statement.md b/docs/day-07/switch-case-statement.md deleted file mode 100644 index df998a244..000000000 --- a/docs/day-07/switch-case-statement.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -sidebar_position: 1 -title: "Switch Case Statement in C++" -description: "In this tutorial, we will learn about the switch case statement in C++ programming with the help of examples. The switch case statement is used to execute one statement from multiple conditions." -sidebar_label: "Switch Case Statement" -slug: switch-case-statement-in-cpp ---- - - - -### 1. What is the Switch Case Statement in C++? -The switch case statement in C++ is a control structure used to handle multiple selections by passing control to one of the case statements within its body. It is a more efficient alternative to using multiple if-else-if statements when you need to compare a variable to several constant values. - - -### 2. Explain the Syntax of Switch Case Statement in C++. -The basic syntax of a switch case statement in C++ is as follows: - -```cpp -switch (expression) { - case constant1: - // code to be executed if expression equals constant1; - break; - case constant2: - // code to be executed if expression equals constant2; - break; - ... - default: - // code to be executed if expression does not match any constant; -} -``` -- expression: This is the variable or value being compared. -- case constant: These are the values that expression is compared against. If a match is found, the corresponding block of code is executed. -- break: This statement terminates the switch case block. If omitted, execution will fall through to the next case. -- default: This is an optional case that runs if no other cases match. It's similar to the else in an if-else-if ladder. - -### 3. How does the Switch Case Statement work in C++? -The switch case statement evaluates the expression inside the switch and compares it with the constants of each case. When it finds a matching case, it executes the associated code block. If the break statement is encountered, the switch case block is terminated, and control is passed to the next line of code after the switch block. If no match is found, and a default case is provided, the code in the default block is executed. - -![Switch in CPP](../../static/img/day-07/switch-case.png) - -### 4. C++ Switch Case Statement Example -Here is a simple example of using a switch case statement in C++: - -```cpp -#include -using namespace std; - -int main() { - int day = 4; - - switch (day) { - case 1: - cout << "Monday"; - break; - case 2: - cout << "Tuesday"; - break; - case 3: - cout << "Wednesday"; - break; - case 4: - cout << "Thursday"; - break; - case 5: - cout << "Friday"; - break; - case 6: - cout << "Saturday"; - break; - case 7: - cout << "Sunday"; - break; - default: - cout << "Invalid day"; - } - - return 0; -} -``` -In this example, the output will be: -``` -Thursday -``` -### 5. C++ Switch Case Statement with Break -The break statement is crucial in a switch case to prevent the fall-through behavior, where execution continues to the next case even after a match is found. Here’s an example demonstrating its importance: -```cpp -#include -using namespace std; - -int main() { - int number = 2; - - switch (number) { - case 1: - cout << "Number is 1"; - break; - case 2: - cout << "Number is 2"; - // No break statement here - case 3: - cout << " or maybe 3"; - break; - default: - cout << "Number is not 1, 2, or 3"; - } - - return 0; -} -``` -In this example, the output will be: - -``` -Number is 2 or maybe 3 -``` -Without the break statement after case 2, the code "falls through" to case 3, and both case messages are printed. - -Using break statements appropriately ensures that only the matching case's code is executed, preventing unexpected behavior. - - diff --git a/docs/day-07/ternary-operator.md b/docs/day-07/ternary-operator.md deleted file mode 100644 index af2afd56a..000000000 --- a/docs/day-07/ternary-operator.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -sidebar_position: 2 -title: "Ternary Operator in C++" -description: "In this tutorial, we will learn about the ternary operator in C++ programming with the help of examples. The ternary operator is a conditional operator that returns a value based on the condition." -sidebar_label: "Ternary Operator" -slug: ternary-operator-in-cpp ---- - - -## What is the Ternary Operator in C++? -In C++, the ternary operator, also known as **conditional operator**, is a shorthand way of writing conditional (if-else) statements. It is known as ternary operator because it takes **three** operands. This operator can be used to replace simple multi-line if-else statements with a single line of code. - - - -![Ternary in CPP](../../static/img/day-07/ternary-operator.png) - -## Syntax of Ternary Operator in C++ -The ternary/conditional operator `(? :)` takes 3 operands (`condition`, `expression_1` and `expression_2`). The basic syntax of ternary operator is: -```cpp -condition ? expression_1 : expression_2; -``` -The above statement, if written using `if-else`, is the same as: -```cpp -if(condition){ - expression_1; -} -else{ - expression_2; -} -``` - -## How does the Ternary Operator work in C++? -The ternary operator works by first evaluating the condition. If the condition evaluates to `true`, then the code corresponding to `expression_1` is executed. If the condition evaluates to `false`, then code corresponding to `expression_2` is executed. - -## C++ Ternary Operator Examples -### 1. Print the max of two integers -The following program takes two integers as input and prints maximum of them. - -```cpp -#include -using namespace std; - -int main(){ - int a, b; - cout<<"Enter two numbers: "; - cin>>a>>b; - int maxi = (a > b) ? a : b; - cout<<"Max number is "<b` evaluates to `true`, then `maxi` stores the larger value `a`. If condition `a>b` evaluates to `false`, then `maxi` stores the value of `b`. - -### 2. Get absolute value of an integer -The function `get_abs` takes an integer as input and returns the absolute value of integer. The function shows the use of `return` with ternary operator. - -```cpp -#include -using namespace std; - -int get_abs(int n){ - return (n>=0 ? n : -n); -} - -int main() -{ - int n; - cout << "Enter a number: "; - cin >> n; - cout << "Absolute value is " << get_abs(n) << endl; - return (0); -} -``` - -`` -NOTE: -`` -The following syntax for the function is **incorrect**: -```cpp -int get_abs(int n){ - n>=0 ? return(n) : return(-n); -} -// This is because return is a statement -// whereas ternary operator requires operands -// to be expression and not statement. -``` - -## C++ Ternary Operator with Nested Ternary Operator -The following program takes three integers as input and prints maximum of them. -```cpp -#include -using namespace std; - -int main(){ - int a, b, c; - cout<<"Enter three numbers: "; - cin>>a>>b>>c; - int maxi = (a > b) ? ((a > c) ? a : c) : ((b>c) ? b : c); - cout<<"Max number is "<b` evaluates to `true`, then we check the condition `a>c`. If `a>c` evaluates to `true`, then `maxi` stores the value of `a`, else `maxi` stores the value of `c`. - - If condition `a>b` evaluates to `false`, then we check the condition `b>c`. If `b>c` evaluates to `true`, then `maxi` stores the value of `b`, else `maxi` stores the value of `c`. \ No newline at end of file diff --git a/docs/day-08/_category_.json b/docs/day-08/_category_.json deleted file mode 100644 index f5e549cad..000000000 --- a/docs/day-08/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 08", - "position": 9, - "link": { - "type": "generated-index" - } -} diff --git a/docs/day-08/default-argument.md b/docs/day-08/default-argument.md deleted file mode 100644 index 96ce0c949..000000000 --- a/docs/day-08/default-argument.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -sidebar_position: 1 -title: "Default Arguments in C++" -description: "In this tutorial, we will learn about Default Arguments in C++ programming with the help of examples. A default argument is a value provided in a function declaration that is automatically assigned by the compiler if the caller of the function does not provide a value for the argument." -sidebar_label: "Default Arguments" -slug: default-arguments-in-cpp ---- - - -### What is Default Arguments in C++? -Default arguments in C++ allow you to initialize a function parameter with a default value. This means that if the caller of the function doesn't provide a value for that parameter, the default value will be used. Default arguments provide flexibility and convenience in function calls by allowing some parameters to be optional. - - -![Switch in CPP](../../static/img/day-08/default-argument.png) - - -### Explain the Syntax of Default Arguments in C++. - -```cpp - -return_type function_name(type1 parameter1 = default_value1, type2 parameter2 = default_value2, ...); - -``` -Here, return_type is the type of value the function returns, function_name is the name of the function, type1, type2, etc., are the types of the function parameters, parameter1, parameter2, etc., are the names of the parameters, and default_value1, default_value2, etc., are the default values assigned to the parameters. - - -### How to Declare and Define a Function with Default Arguments in C++? - -```cpp - -#include -using namespace std; - -void printMessage(string message = "Hello, World!") { - cout << message << endl; -} - -``` -In this example, the function printMessage is declared with a default argument message set to "Hello, World!". If no argument is provided when calling this function, it will print "Hello, World!". - -### C++ Default Arguments Example. - -```cpp - -#include -using namespace std; - -void printNumber(int num, int width = 10) { - cout.width(width); - cout << num << endl; -} - -int main() { - printNumber(123); // Output: " 123" - printNumber(456, 5); // Output: " 456" - - return 0; -} - -``` diff --git a/docs/day-08/function-overloading.md b/docs/day-08/function-overloading.md deleted file mode 100644 index 261f131f7..000000000 --- a/docs/day-08/function-overloading.md +++ /dev/null @@ -1,363 +0,0 @@ ---- -sidebar_position: 2 -title: "Function Overloading in C++" -description: "In this tutorial, we will learn about Function Overloading in C++ programming with the help of examples. Function overloading is a feature in C++ where two or more functions can have the same name but different parameters." -sidebar_label: "Function Overloading" -slug: function-overloading-in-cpp ---- - -## 1. What is Function Overloading in C++? -Function overloading is a feature in C++ that allows you to define multiple functions with the same name, but with different parameters. This can be useful for creating functions that perform similar tasks, but with different inputs. - -## 2. Explain the Syntax of Function Overloading in C++ -To overload a function, you simply need to declare multiple functions with the same name, but with different parameter lists. The compiler will then choose the correct function to call based on the types of the arguments that you pass to it. -Here is an example of function overloading in C++: - -## Function Overloading in C++ -Function overloading in C++ is a feature that allows you to define multiple functions with the same name but with different parameter lists within the same scope. The parameter lists can differ in the number of parameters, the types of parameters, or both. The compiler determines which function to call based on the arguments used when the function is invoked. - -Here are the key points about function overloading: - -1. Same Function Name: All the overloaded functions must have the same name. -2. Different Parameter Lists: The functions must differ in the number and/or type of their parameters. This difference in the parameter list is known as the function's signature. -3. Return Type: The return type of the functions can be different, but the return type alone is not enough to distinguish overloaded functions. - -## Syntax of Function Overloading in C++ -The syntax of function overloading in C++ involves defining multiple functions with the same name but different parameter lists within the same scope. Here’s how you can do it, along with explanations and examples: - -### Basic Syntax - -1. **Function Declarations/Definitions**: - ```cpp - return_type function_name(parameter_list); - return_type function_name(parameter_list); - ``` - - - **return_type**: The return type of the function (e.g., `int`, `void`, `double`). - - **function_name**: The name of the function. - - **parameter_list**: A list of parameters that differ between overloaded functions. - -2. **Function Calls**: - ```cpp - function_name(arguments); - ``` - - ## How to Declare and Define a Function Overloading in C++ - Declaring and defining function overloading in C++ involves creating multiple functions with the same name but different parameter lists within the same scope. Here’s a step-by-step guide on how to declare and define overloaded functions. - -### Declaration of Overloaded Functions - -Function declarations, also known as function prototypes, provide the compiler with information about the function's name, return type, and parameters without giving the function's actual body. - -1. **Function Declaration Syntax**: - ```cpp - return_type function_name(parameter_list); - ``` - -2. **Example of Declarations**: - ```cpp - int add(int a, int b); // Declaration 1 - double add(double a, double b); // Declaration 2 - int add(int a, int b, int c); // Declaration 3 - ``` - -### Definition of Overloaded Functions - -Function definitions provide the actual body of the function. - -1. **Function Definition Syntax**: - ```cpp - return_type function_name(parameter_list) { - // Function body - } - ``` - -2. **Example of Definitions**: - ```cpp - int add(int a, int b) { - return a + b; - } - - double add(double a, double b) { - return a + b; - } - - int add(int a, int b, int c) { - return a + b + c; - } - ``` - -### Complete Example with Declarations and Definitions - -```cpp -#include -using namespace std; - -// Declarations -int add(int a, int b); -double add(double a, double b); -int add(int a, int b, int c); - -int main() { - // Calling overloaded functions - cout << "Sum of 2 and 3: " << add(2, 3) << endl; // Calls add(int, int) - cout << "Sum of 2.5 and 3.5: " << add(2.5, 3.5) << endl; // Calls add(double, double) - cout << "Sum of 1, 2, and 3: " << add(1, 2, 3) << endl; // Calls add(int, int, int) - return 0; -} - -// Definitions -int add(int a, int b) { - return a + b; -} - -double add(double a, double b) { - return a + b; -} - -int add(int a, int b, int c) { - return a + b + c; -} -``` - -### Explanation - -1. **Declarations**: - - The function prototypes for `add` are declared before `main()`. - - These prototypes inform the compiler about the existence of these functions and their signatures. - -2. **Definitions**: - - The actual function bodies are defined after `main()`. - - Each overloaded function performs addition, but they differ in their parameter lists. - -3. **Function Calls in `main()`**: - - `add(2, 3)` calls the first `add` function (`int add(int, int)`). - - `add(2.5, 3.5)` calls the second `add` function (`double add(double, double)`). - - `add(1, 2, 3)` calls the third `add` function (`int add(int, int, int)`). - -### Summary - -To declare and define overloaded functions in C++, you: - -1. **Declare** the functions with the same name but different parameter lists. -2. **Define** each function with the same name but different parameter lists. -3. **Call** the appropriate overloaded function based on the arguments provided. - -This approach allows you to use the same function name for different tasks based on different input parameters, enhancing code readability and maintainability. - -## C++ Function Overloading Example -This example shows how to use function overloading to create multiple functions with the same name but different parameter lists, enhancing code readability and functionality. - -### Example: Area Calculation - -We will overload a function named `area` to calculate the area of different shapes: a rectangle, a circle, and a triangle. - -### Code Example - -```cpp -#include -#include // For M_PI and sqrt -using namespace std; - -// Function to calculate the area of a rectangle -double area(double length, double width) { - return length * width; -} - -// Function to calculate the area of a circle -double area(double radius) { - return M_PI * radius * radius; -} - -// Function to calculate the area of a triangle using Heron's formula -double area(double side1, double side2, double side3) { - double s = (side1 + side2 + side3) / 2; // Semi-perimeter - return sqrt(s * (s - side1) * (s - side2) * (s - side3)); -} - -int main() { - double length = 5.0, width = 3.0; - double radius = 4.0; - double side1 = 3.0, side2 = 4.0, side3 = 5.0; - - cout << "Area of rectangle: " << area(length, width) << endl; - cout << "Area of circle: " << area(radius) << endl; - cout << "Area of triangle: " << area(side1, side2, side3) << endl; - - return 0; -} -``` - -### Explanation - -1. **Function to Calculate the Area of a Rectangle**: - ```cpp - double area(double length, double width) { - return length * width; - } - ``` - - This function takes two parameters: `length` and `width`. - - It returns the area of the rectangle using the formula \( \text{area} = \text{length} \times \text{width} \). - -2. **Function to Calculate the Area of a Circle**: - ```cpp - double area(double radius) { - return M_PI * radius * radius; - } - ``` - - This function takes one parameter: `radius`. - - It returns the area of the circle using the formula \( \text{area} = \pi \times \text{radius}^2 \). - - `M_PI` is a constant representing the value of π (pi). - -3. **Function to Calculate the Area of a Triangle Using Heron's Formula**: - ```cpp - double area(double side1, double side2, double side3) { - double s = (side1 + side2 + side3) / 2; // Semi-perimeter - return sqrt(s * (s - side1) * (s - side2) * (s - side3)); - } - ``` - - This function takes three parameters: `side1`, `side2`, and `side3`. - - It calculates the area of the triangle using Heron's formula: - - First, it computes the semi-perimeter \( s \). - - Then, it calculates the area using the formula \( \text{area} = \sqrt{s \times (s - \text{side1}) \times (s - \text{side2}) \times (s - \text{side3})} \). - -4. **Main Function**: - ```cpp - int main() { - double length = 5.0, width = 3.0; - double radius = 4.0; - double side1 = 3.0, side2 = 4.0, side3 = 5.0; - - cout << "Area of rectangle: " << area(length, width) << endl; - cout << "Area of circle: " << area(radius) << endl; - cout << "Area of triangle: " << area(side1, side2, side3) << endl; - - return 0; - } - ``` - - The `main` function initializes the dimensions of different shapes. - - It calls the overloaded `area` functions with appropriate arguments for each shape. - - It prints the calculated areas of the rectangle, circle, and triangle. - -### Output - -The program will output the calculated areas for the rectangle, circle, and triangle: - -``` -Area of rectangle: 15 -Area of circle: 50.2655 -Area of triangle: 6 -``` - -This example demonstrates how function overloading can be used to create multiple functions with the same name but different parameter lists, allowing you to perform similar operations on different types or numbers of inputs. - -### Summary - -Function overloading in C++ allows multiple functions with the same name but different parameter lists. This enhances code readability and usability by enabling functions to perform similar tasks with different types or numbers of inputs. The compiler uses the function signature (name + parameter list) to determine which function to call. - -```cpp -int add(int a, int b) { - return a + b; -} - -float add(float a, float b) { - return a + b; -} - -string add(string a, string b) { - return a + b; -} -``` - -IMAGE FILE: -![Ternary in CPP](../../static/img/day-08/function-overloading.png) - -## 3. How to Declare and Define a Function Overloading in C++? - -To declare a function overload, you simply need to define two or more functions with the same name, but with different parameter lists. The compiler will then choose the appropriate function to call based on the types of arguments that are passed in. -For example, the following code shows two overloaded functions named add(): - -```cpp -int add(int x, int y) { - return x + y; -} - -double add(double x, double y) { - return x + y; -} -``` - -The first add() function takes two integer arguments and returns an integer. The second add() function takes two double arguments and returns a double. -When you call the add() function, the compiler will choose the appropriate function to call based on the types of arguments that you pass in. For example, the following code will call the first add() function: - -```cpp -int sum = add(1, 2); -``` - -The following code will call the second add() function: - -```cpp -double sum = add(1.5, 2.5); -``` - -Function overloading can be a very useful feature, but it is important to use it carefully. If you are not careful, you can easily create situations where the compiler is unable to determine which function to call. This can lead to errors in your code. - -## 4. C++ Function Overloading Example - -```cpp -#include -using namespace std; - -// Prototype three print functions. -int print(std::string s); // Print a string. -int print(double dvalue); // Print a double. -int print(double dvalue, int prec); // Print a double with a -// given precision. - -int main(int argc, char *argv[]) { - const double d = 893094.2987; - - if (argc < 2) { - // These calls to print invoke print( char *s ). - print("This is a string."); - print(d); - } else { - // These calls to print invoke print( double dvalue, int prec ). - print(d, 2); - print(d, 5); - } - - return 0; -} - -// Define the three print functions. -int print(std::string s) { - std::cout << s << std::endl; - return 0; -} - -int print(double dvalue) { - std::cout << dvalue << std::endl; - return 0; -} - -int print(double dvalue, int prec) { - std::cout.precision(prec); - std::cout << fixed; - std::cout << dvalue << std::endl; - return 0; -} -``` - -This program defines three functions named print(). The first print() function takes a string argument and prints it to the console. The second print() function takes a double argument and prints it to the console. The third print() function takes two arguments: a double and an integer. The integer argument specifies the precision to which the double should be printed. - -The main() function calls the print() functions with different arguments. The first two calls to print() invoke the first print() function, which prints a string and a double to the console, respectively. The last two calls to print() invoke the third print() function, which prints the double argument with the specified precision. - -Here is the output of the program: - -```cpp -This is a string. -893094.2987 -893094.2987 -893094.29870 -``` \ No newline at end of file diff --git a/docs/day-08/inline-function.md b/docs/day-08/inline-function.md deleted file mode 100644 index 583a31aba..000000000 --- a/docs/day-08/inline-function.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -sidebar_position: 3 -title: "Inline Function in C++" -description: "In this tutorial, we will learn about Inline Function in C++ programming with the help of examples. An inline function is a function that is expanded in line when it is called. When the inline function is called, the compiler replaces the function call with the corresponding function code." -sidebar_label: "Inline Function" -slug: inline-function-in-cpp ---- - - -### What is Inline Function in C++? -An inline function in C++ is a function that is expanded in place at each point in the code where it is called, instead of being called like a regular function. The compiler replaces the function call with the actual code of the function. Inline functions are typically used for small, frequently called functions, where the overhead of a function call would be significant. - - -![Function in CPP](../../static/img/day-08/inline-function.png) - - -### Explain the Syntax of Inline Function in C++. -```cpp - -inline return_type function_name(parameters) { - // Function body -} - -``` -Here, inline is the keyword indicating that the function is inline, return_type is the type of value the function returns, function_name is the name of the function, and parameters are the input parameters to the function. - - -### How to Declare and Define an Inline Function in C++? -You can declare and define an inline function in the same way you declare and define a regular function, but with the inline keyword added: - -```cpp -inline int add(int a, int b) { - return a + b; -} - -``` - -This declares and defines an inline function add that takes two int parameters and returns their sum. - - -### C++ Inline Function Example. -```cpp -#include -using namespace std; - -// Inline function to calculate the square of a number -inline int square(int x) { - return x * x; -} - -int main() { - int num = 5; - - // Calling the inline function - cout << "Square of " << num << " is: " << square(num) << endl; - - return 0; -} - -``` diff --git a/docs/day-09/_category_.json b/docs/day-09/_category_.json deleted file mode 100644 index dc1940c8f..000000000 --- a/docs/day-09/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 09", - "position": 10, - "link": { - "type": "generated-index" - } -} diff --git a/docs/day-09/array-in-cpp.md b/docs/day-09/array-in-cpp.md deleted file mode 100644 index c7d3a9552..000000000 --- a/docs/day-09/array-in-cpp.md +++ /dev/null @@ -1,531 +0,0 @@ ---- -sidebar_position: 2 -title: "Array in C++" -description: "In this tutorial, we will learn about Arrays in C++ programming with the help of examples. An array is a collection of elements of the same data type that are stored in contiguous memory locations. Arrays are used to store multiple values in a single variable." -sidebar_label: "Array" -slug: array-in-cpp ---- - -TASK: - -1. What is an Array in C++? -2. Explain the Syntax of an Array in C++. -3. How to Declare and Define an Array in C++? -4. C++ Array Example -5. How to Access Elements of an Array in C++? -6. How to Update Elements of an Array in C++? -7. How to Calculate the Size of an Array in C++? -8. How to Traverse an Array in C++? -9. How to Pass an Array to a Function in C++? -10. How to Return an Array from a Function in C++? - - -### SOlution: -## What is an Array in C++? -In C++, an array is a data structure that can store a fixed-size sequential collection of elements of the same type. An array is used to store a collection of data, but it is often more useful to think of an array as a collection of variables of the same type. - -## Explain the syntax of an Array in C++? -The syntax of an array in C++ involves the declaration, initialization, and accessing of array elements. Here are the key aspects of array syntax in C++: - -1. Declaration: -To declare an array in C++, you specify the type of its elements, its name, and its size in square brackets. The general syntax is: - -```cpp -type arrayName[arraySize]; -``` - -- type: The data type of the elements in the array (e.g., int, float, double, char). -- arrayName: The name of the array. -- arraySize: The number of elements the array can hold. This must be a constant expression. - -```cpp -int numbers[10]; // declares an array of 10 integers -``` - -2. Initialization: -You can initialize an array at the time of declaration. This can be done in two ways: - -a. Initializing All Elements: -```cpp -type arrayName[arraySize] = {value1, value2, ..., valueN}; -``` -- value1, value2, ..., valueN: Initial values for the elements in the array. The number of values should not exceed arraySize. - -Example: -```cpp -int numbers[5] = {1, 2, 3, 4, 5}; // declares and initializes an array of 5 integers -``` - -b. Implicit Size Determination: -If the size of the array is omitted, the compiler determines the size based on the number of initializers. -```cpp -type arrayName[] = {value1, value2, ..., valueN}; -``` - -Example: -```cpp -int numbers[] = {1, 2, 3, 4, 5}; // size is automatically determined to be 5 -``` - -3. Accessing Elements: -Array elements are accessed using the index operator []. The index of the first element is 0. -```cpp -arrayName[index] -``` -- index: The position of the element in the array (starting from 0). - -Example: -```cpp -int firstElement = numbers[0]; // accesses the first element (1) -numbers[2] = 10; // sets the third element to 10 -``` - -4. Multi-dimensional Arrays: -C++ supports multi-dimensional arrays. The syntax for a two-dimensional array is: - -```cpp -type arrayName[size1][size2]; -``` - -### How to Declare and Define an Array in C++? -To declare and define an array in C++, you specify the type of its elements, its name, and its size. You can also initialize the array at the time of declaration. - -Declaration: -To declare an array, use the following syntax: -```cpp -type arrayName[arraySize]; -``` - -- type: The data type of the array elements (e.g., int, float, double, char). -- arrayName: The name of the array. -- arraySize: The number of elements the array can hold. - -Definition with Initialization: -You can define and initialize an array at the same time: - -With Explicit Size: -```cpp -type arrayName[arraySize] = {value1, value2, ..., valueN}; -``` - -With Implicit Size: -If you omit the size, the compiler determines it based on the number of initializers: -```cpp -type arrayName[] = {value1, value2, ..., valueN}; -``` - -## C++ Array Example - -- One-Dimensional Array Example - This example demonstrates how to declare, initialize, and access elements of a one-dimensional array. - ```cpp - #include -using namespace std; - -int main() { - // Declaration and initialization of a one-dimensional array - int numbers[5] = {10, 20, 30, 40, 50}; - - // Printing all elements of the array - for (int i = 0; i < 5; i++) { - cout << "Element at index " << i << ": " << numbers[i] << endl; - } - - // Modifying an element - numbers[2] = 35; // Change the third element from 30 to 35 - - // Printing the modified array - cout << "Modified array:" << endl; - for (int i = 0; i < 5; i++) { - cout << "Element at index " << i << ": " << numbers[i] << endl; - } - - return 0; -} -``` - -- Two-Dimensional Array Example - This example demonstrates how to declare, initialize, and access elements of a two-dimensional array. - -```cpp - #include -using namespace std; - -int main() { - // Declaration and initialization of a two-dimensional array - int matrix[2][3] = { - {1, 2, 3}, - {4, 5, 6} - }; - - // Printing all elements of the 2D array - for (int i = 0; i < 2; i++) { - for (int j = 0; j < 3; j++) { - cout << "Element at (" << i << ", " << j << "): " << matrix[i][j] << endl; - } - } - - // Modifying an element - matrix[1][2] = 10; // Change the element at row 1, column 2 from 6 to 10 - - // Printing the modified 2D array - cout << "Modified 2D array:" << endl; - for (int i = 0; i < 2; i++) { - for (int j = 0; j < 3; j++) { - cout << "Element at (" << i << ", " << j << "): " << matrix[i][j] << endl; - } - } - - return 0; -} -``` - -## How to Access Elements of an Array in C++? - -To access elements of an array in C++, you use the array name followed by the index of the element enclosed in square brackets ([]). The index is zero-based, meaning the first element has an index of 0, the second element has an index of 1, and so on. - -Syntax for Accessing Elements -```cpp -arrayName[index] -``` - -Example: One-Dimensional Array -Here is an example demonstrating how to access and manipulate elements of a one-dimensional array: - -```cpp -#include -using namespace std; - -int main() { - // Declaration and initialization of a one-dimensional array - int numbers[5] = {10, 20, 30, 40, 50}; - - // Accessing and printing elements of the array - cout << "First element: " << numbers[0] << endl; // Accessing the first element - cout << "Second element: " << numbers[1] << endl; // Accessing the second element - - // Modifying elements of the array - numbers[2] = 35; // Modifying the third element - numbers[4] = 55; // Modifying the fifth element - - // Printing all elements of the array after modification - for (int i = 0; i < 5; i++) { - cout << "Element at index " << i << ": " << numbers[i] << endl; - } - - return 0; -} -``` - -Example: Two-Dimensional Array -Here is an example demonstrating how to access and manipulate elements of a two-dimensional array: -```cpp -#include -using namespace std; - -int main() { - // Declaration and initialization of a two-dimensional array - int matrix[2][3] = { - {1, 2, 3}, - {4, 5, 6} - }; - - // Accessing and printing elements of the 2D array - cout << "Element at (0, 0): " << matrix[0][0] << endl; // Accessing the element at row 0, column 0 - cout << "Element at (1, 2): " << matrix[1][2] << endl; // Accessing the element at row 1, column 2 - - // Modifying elements of the 2D array - matrix[0][1] = 20; // Modifying the element at row 0, column 1 - matrix[1][2] = 60; // Modifying the element at row 1, column 2 - - // Printing all elements of the 2D array after modification - for (int i = 0; i < 2; i++) { - for (int j = 0; j < 3; j++) { - cout << "Element at (" << i << ", " << j << "): " << matrix[i][j] << endl; - } - } - - return 0; -} -``` - -## How to Update Elements of an Array in C++? -Updating elements of an array in C++ involves accessing the element using its index and then assigning a new value to it. This can be done using the assignment operator (=). Below are the steps and examples for updating elements in both one-dimensional and two-dimensional arrays. - -Syntax for Updating Elements -```cpp -arrayName[index] = newValue; -``` - -Example: Updating a One-Dimensional Array -Here's an example that demonstrates how to update elements in a one-dimensional array: -```cpp -#include -using namespace std; - -int main() { - // Declaration and initialization of a one-dimensional array - int numbers[5] = {10, 20, 30, 40, 50}; - - // Printing the original array - cout << "Original array:" << endl; - for (int i = 0; i < 5; i++) { - cout << "Element at index " << i << ": " << numbers[i] << endl; - } - - // Updating elements of the array - numbers[0] = 15; // Update the first element to 15 - numbers[3] = 45; // Update the fourth element to 45 - - // Printing the updated array - cout << "Updated array:" << endl; - for (int i = 0; i < 5; i++) { - cout << "Element at index " << i << ": " << numbers[i] << endl; - } - - return 0; -} -``` - -Example: Updating a Two-Dimensional Array -Here's an example that demonstrates how to update elements in a two-dimensional array: -```cpp -#include -using namespace std; - -int main() { - // Declaration and initialization of a two-dimensional array - int matrix[2][3] = { - {1, 2, 3}, - {4, 5, 6} - }; - - // Printing the original 2D array - cout << "Original 2D array:" << endl; - for (int i = 0; i < 2; i++) { - for (int j = 0; j < 3; j++) { - cout << "Element at (" << i << ", " << j << "): " << matrix[i][j] << endl; - } - } - - // Updating elements of the 2D array - matrix[0][1] = 20; // Update the element at row 0, column 1 to 20 - matrix[1][2] = 60; // Update the element at row 1, column 2 to 60 - - // Printing the updated 2D array - cout << "Updated 2D array:" << endl; - for (int i = 0; i < 2; i++) { - for (int j = 0; j < 3; j++) { - cout << "Element at (" << i << ", " << j << "): " << matrix[i][j] << endl; - } - } - - return 0; -} -``` - -## How to Calculate the Size of an Array in C++? - -In C++, you can calculate the size of an array using the sizeof operator or by dividing the total size of the array by the size of an individual element. Here are two common methods: - -Using sizeof Operator -You can use the sizeof operator to determine the size of an array in bytes. Divide the total size of the array by the size of an individual element to get the number of elements in the array. Here's how you can do it: - -```cpp -#include -using namespace std; - -int main() { - int numbers[5] = {1, 2, 3, 4, 5}; - - // Calculate the size of the array - int sizeOfArray = sizeof(numbers) / sizeof(numbers[0]); - - cout << "Size of the array: " << sizeOfArray << endl; - - return 0; -} -``` -Output: -```cpp -Size of the array: 5 -``` - -## How to Traverse an Array in C++? - -Traversing an array in C++ involves accessing each element of the array one by one. This is commonly done using a loop, such as a for loop. Here's how you can traverse an array: - -Example: Traversing a One-Dimensional Array -```cpp -#include -using namespace std; - -int main() { - // Declaration and initialization of a one-dimensional array - int numbers[5] = {10, 20, 30, 40, 50}; - - // Traversing the array using a for loop - cout << "Traversing the one-dimensional array:" << endl; - for (int i = 0; i < 5; i++) { - cout << "Element at index " << i << ": " << numbers[i] << endl; - } - - return 0; -} -``` - -Output: -```cpp -Traversing the one-dimensional array: -Element at index 0: 10 -Element at index 1: 20 -Element at index 2: 30 -Element at index 3: 40 -Element at index 4: 50 -``` - -Example: Traversing a Two-Dimensional Array -```cpp -#include -using namespace std; - -int main() { - // Declaration and initialization of a two-dimensional array - int matrix[2][3] = { - {1, 2, 3}, - {4, 5, 6} - }; - - // Traversing the array using nested for loops - cout << "Traversing the two-dimensional array:" << endl; - for (int i = 0; i < 2; i++) { - for (int j = 0; j < 3; j++) { - cout << "Element at (" << i << ", " << j << "): " << matrix[i][j] << endl; - } - } - - return 0; -} -``` - -Output: -```cpp -Traversing the two-dimensional array: -Element at (0, 0): 1 -Element at (0, 1): 2 -Element at (0, 2): 3 -Element at (1, 0): 4 -Element at (1, 1): 5 -Element at (1, 2): 6 -``` - -## How to Pass an Array to a Function in C++? - -In C++, you can pass an array to a function in two main ways: by passing the array name or by passing a pointer to the array. Here are both methods explained: - -Passing an Array to a Function Using Array Name -When you pass an array to a function using its name, you are actually passing a pointer to the first element of the array. Here's how you can do it: -```cpp -#include -using namespace std; - -// Function to print elements of an array -void printArray(int arr[], int size) { - for (int i = 0; i < size; i++) { - cout << arr[i] << " "; - } - cout << endl; -} - -int main() { - int numbers[] = {1, 2, 3, 4, 5}; - - // Passing the array to the function - printArray(numbers, 5); - - return 0; -} -``` - -Output: -```cpp -1 2 3 4 5 -``` - -## How to Return an Array from a Function in C++? -In C++, you cannot directly return an entire array from a function. However, you can return a pointer to the array or use other data structures like std::vector or std::array to achieve similar functionality. Below are two common methods: - -Method 1: Returning a Pointer to the Array -```cpp -#include -using namespace std; - -// Function to create and return an array -int* createArray(int size) { - int* arr = new int[size]; - for (int i = 0; i < size; ++i) { - arr[i] = i * 10; - } - return arr; -} - -int main() { - int size = 5; - int* myArray = createArray(size); - - // Printing the elements of the returned array - for (int i = 0; i < size; ++i) { - cout << myArray[i] << " "; - } - cout << endl; - - // Don't forget to delete the dynamically allocated array - delete[] myArray; - - return 0; -} -``` - -Output: -```cpp -0 10 20 30 40 -``` - -Method 2: Using std::vector -```cpp -#include -#include -using namespace std; - -// Function to create and return a vector -vector createArray(int size) { - vector arr(size); - for (int i = 0; i < size; ++i) { - arr[i] = i * 10; - } - return arr; -} - -int main() { - int size = 5; - vector myVector = createArray(size); - - // Printing the elements of the returned vector - for (int i = 0; i < size; ++i) { - cout << myVector[i] << " "; - } - cout << endl; - - return 0; -} -``` - -Output: -```cpp -0 10 20 30 40 -``` - - -IMAGE FILE: -![Ternary in CPP](../../static/img/day-09/array-in-cpp.png) - diff --git a/docs/day-09/array-in-function.md b/docs/day-09/array-in-function.md deleted file mode 100644 index 370d8ff88..000000000 --- a/docs/day-09/array-in-function.md +++ /dev/null @@ -1,184 +0,0 @@ ---- -sidebar_position: 3 -title: "Array in Function in C++" -description: "In this tutorial, we will learn about Arrays in Function in C++ programming with the help of examples. An array is a collection of elements of the same data type that are stored in contiguous memory locations. Arrays are used to store multiple values in a single variable." -sidebar_label: "Array in Function" -slug: array-in-function-in-cpp ---- - - -## Arrays in C++ Functions - -![Function in CPP](../../static/img/day-09/array-in-function.png) - -### 1. What are Arrays in Functions? - -In C++, an array within a function is a collection of elements with the same data type, stored contiguously in memory. You can use arrays in functions in two ways: - -* **Passing arrays as arguments:** Allow functions to operate on the elements of an existing array. -* **Declaring arrays within functions:** Create temporary arrays for specific function tasks. - -### 2. Syntax of Arrays in Functions - -**Passing Arrays as Arguments:** - -There are three common methods: - -* **By pointer:** - ```c++ - void myFunction(int *myArray, int size); // Function parameter - ``` -* **By sized array (deprecated):** - ```c++ - void myFunction(int myArray[10]); // Function parameter (deprecated) - ``` -* **By reference (C++11 and later):** - ```c++ - void myFunction(const int (&myArray)[10]); // Function parameter (C++11+) - ``` - -**Declaring Arrays within Functions:** - -```c++ -void myFunction() { - int localArray[5]; // Array declared locally within the function -} -``` - -## 3. How to Declare and Define an Array in Function in C++? - -### Declaring an Array in Function - -When declaring an array in the function parameter list, you typically just declare it as a pointer, because arrays decay to pointers when passed to functions. - -```cpp -void printArray(int arr[], int size); -``` - -### Defining a Function that Accepts an Array - -Here's how you might define a function that takes an array as an argument: - -```cpp -void printArray(int arr[], int size) { - for (int i = 0; i < size; i++) { - std::cout << arr[i] << " "; - } - std::cout << std::endl; -} -``` - - -### 4. C++ Array in Function Example (Passing by Pointer) - -```c++ -#include - -void printArray(int *arr, int size) { - for (int i = 0; i < size; i++) { - std::cout << arr[i] << " "; - } - std::cout << std::endl; -} - -int main() { - int myArray[] = {1, 2, 3, 4, 5}; - int n = sizeof(myArray) / sizeof(myArray[0]); // Get array size - printArray(myArray, n); // Pass array and its size - return 0; -} -``` - -This code defines a `printArray` function that takes an integer pointer and the array size as arguments. It then iterates through the array and prints its elements. - -## 5. How to Pass an Array to a Function in C++? - -To pass an array to a function in C++, you can simply specify the array name (which decays to a pointer) and optionally the size of the array. - -```cpp -#include - -void processArray(int arr[], int size) { - // Process array elements - for (int i = 0; i < size; i++) { - arr[i] *= 2; // Example processing: double each element - } -} - -int main() { - int myArray[] = {1, 2, 3, 4, 5}; - int size = sizeof(myArray) / sizeof(myArray[0]); - processArray(myArray, size); - - // Print the processed array - for (int i = 0; i < size; i++) { - std::cout << myArray[i] << " "; - } - std::cout << std::endl; - return 0; -} -``` - -## 6. How to Return an Array from a Function in C++? - -In C++, you cannot return arrays directly from functions. Instead, you can return a pointer to an array, or use other data structures like `std::vector` or `std::array` from the C++ Standard Library, which are more flexible and safer. - -### Example using a pointer: - -```cpp -#include - -int* createArray(int size) { - int* arr = new int[size]; - for (int i = 0; i < size; i++) { - arr[i] = i + 1; - } - return arr; -} - -int main() { - int size = 5; - int* myArray = createArray(size); - - for (int i = 0; i < size; i++) { - std::cout << myArray[i] << " "; - } - std::cout << std::endl; - - delete[] myArray; // Don't forget to free the allocated memory - return 0; -} -``` - -### Example using `std::vector`: - -```cpp -#include -#include - -std::vector createVector(int size) { - std::vector vec(size); - for (int i = 0; i < size; i++) { - vec[i] = i + 1; - } - return vec; -} - -int main() { - int size = 5; - std::vector myVector = createVector(size); - - for (int i = 0; i < size; i++) { - std::cout << myVector[i] << " "; - } - std::cout << std::endl; - return 0; -} -``` - -Using `std::vector` or `std::array` is generally preferred due to better safety, easier memory management, and more features compared to raw arrays. - - -**Note:** While sized arrays (like `void myFunction(int myArray[10])`) were used in the past, they are generally discouraged due to limitations and potential safety concerns. Prefer using pointers or references for better flexibility and clarity. - - diff --git a/docs/day-09/recursion-in-cpp.md b/docs/day-09/recursion-in-cpp.md deleted file mode 100644 index b23d4a50f..000000000 --- a/docs/day-09/recursion-in-cpp.md +++ /dev/null @@ -1,219 +0,0 @@ ---- -sidebar_position: 5 -title: "Recursion in C++" -description: "In this tutorial, we will learn about recursion in C++ with the help of examples. Recursion is a programming technique where a function calls itself to solve smaller instances of a problem." -sidebar_label: "Recursion" -slug: recursion-in-cpp ---- - - -## Recursion in C++? -Recursion in C++ is a technique in which a function calls itself repeatedly until a given condition is satisfied. It can be a powerful tool in programming, particularly for tasks that can be divided into smaller, similar sub-tasks. - -![Switch in CPP](../../static/img/day-09/recursion.png) - - -## Syntax -```cpp -return_type recursive_func { - .... - // Base Condition - // Recursive Case - .... -} -``` -A recursive function has a base condition that stops further calls by returning a result, and a recursive case that calls the function with smaller sub-problems until the base condition is met. - -## Recusive Function -A function that calls itself is called a recursive function. When a recursive function is called, it executes a set of instructions and then calls itself to execute the same set of instructions with a smaller input. - -## Why Use Recursion? - -Recursion is particularly useful for: -- Problems that can naturally be divided into similar sub-problems (e.g., factorial calculation, Fibonacci series). -- Implementing algorithms in a more readable and concise way (e.g., tree traversals, searching algorithms). - -## How Recursion Works - -A recursive function typically has two main components: -- **Base case**: A condition under which the function stops calling itself, preventing infinite recursion. -- **Recursive case**: The part of the function where the function calls itself with modified arguments. - -**Example Structure: - -```cpp -void recursiveFunction() { - if (baseCondition) { - // Base case - return; - } else { - // Recursive case - recursiveFunction(); - } -} -``` - -## How to Declare and Define a Recursive Function in C++? - -To declare and define a recursive function in C++, follow these steps: - -## Declaration : You need to declare the function prototype at the beginning of your code or before its first use if it’s being called in multiple functions. - -## Definition : You then define the function, specifying its behavior, including the base condition and the recursive case. - -## Example : -```cpp -#include - -// Declaration -int factorial(int n); - -// Definition -int factorial(int n) { - if (n <= 1) { - return 1; - } else { - return n * factorial(n - 1); // recursive call - } -} - -int main() { - int number = 5; - std::cout << "Factorial of " << number << " is " << factorial(number) << std::endl; - return 0; -} -``` -## Output -```cpp - Factorial of 5 is 125. -``` -Here in this example we have performed the task to calculate a factorial of numbers. - -## Advantages of C++ Recursion -- It makes our code shorter and cleaner. -- Recursion is required in problems concerning data structures and advanced algorithms, such as Graph and Tree Traversal. - -## Disadvantages of C++ Recursion -- It takes a lot of stack space compared to an iterative program. -- It uses more processor time. -- It can be more difficult to debug compared to an equivalent iterative program. - -## Types of Recursion in C++ -There are two different types of recursion which are as follows: - -1. Direct Recursion -2. Indirect Recursion - -## 1. Direct Recursion -Direct recursion involves a function calling itself directly within its body. It can be further categorized into three types: - -a) Head Recursion: In head recursion, the recursive call is present at the start of the function. It is a kind of linear recursion where only a single recursive call is used. - -b) Tail Recursion: Tail recursion is a linear recursion where it’s one and only recursive call is present at the end of the function. - -c) Tree Recursion: In Tree Recursion, there are multiple recursive calls present in the body of the function. - -## 2. Indirect Recursion -In indirect recursion, the function does not call itself directly but instead, it calls another function which then eventually calls the first function creating a cycle of function calls. - -## Example : -```cpp - #include -using namespace std; - -// Function for fibonacci -int fib(int n) -{ - // Stop condition - if (n == 0) - return 0; - // Stop condition - if (n == 1 || n == 2) - return 1; - // Recursion function - else - return (fib(n - 1) + fib(n - 2)); -} - -int main() -{ - // Initialize variable n. - int n = 5; - cout << "Fibonacci series of 5 numbers is: "; - // for loop to print the fibonacci series. - for (int i = 0; i < n; i++) { - cout << fib(i) << " "; - } - return 0; -} -``` -## Output -```cpp - Fibonacci series of 5 numbers is: 0 1 1 2 3 -``` - -## Applications of Recursion -Recursion has many applications in computer science and programming. Here are some of the most common applications of recursion: - -- Solving: Fibonacci sequences, Factorial Function, Reversing an array, Tower of Hanoi. -- Backtracking: It is a technique for solving problems by trying out different solutions and undoing them if they do not work. Recursive algorithms are often used in backtracking. -- Searching and Sorting Algorithms: Many searching and sorting algorithms, such as binary search and quicksort, use recursion to divide the problem into smaller - sub-problems. -- Tree and Graph Traversal: Recursive algorithms are often used to traverse trees and graphs, such as depth-first search and breadth-first search. -- Mathematical Computations: Recursion is also used in many mathematical computations, such as the factorial function and the Fibonacci sequence. -- Dynamic Programming: It is a technique for solving optimization problems by breaking them down into smaller sub-problems. Recursive algorithms are often used in dynamic programming. - -## Recursion Examples : - -Some more examples : - -## Example 1 : Reverse a String -```cpp -#include - -void reverseString(std::string& str, int start, int end) { - if (start >= end) - return; - std::swap(str[start], str[end]); - reverseString(str, start + 1, end - 1); -} - -int main() { - std::string str = "Hello"; - reverseString(str, 0, str.length() - 1); - std::cout << "Reversed string is: " << str << std::endl; - return 0; -} - -``` -## Output -```cpp - Reversed string is: olleH -``` - -## Example 2 : Sum of Digits -```cpp -#include -using namespace std; - -int sumOfDigits(int n) { - if (n == 0) // Base case - return 0; - return (n % 10) + sumOfDigits(n / 10); // Recursive case -} - -int main() { - int num = 12345; - cout << "Sum of digits of " << num << " is " << sumOfDigits(num) << endl; - return 0; -} - -``` -## Output -```cpp - Sum of digits of 12345 is 15. -``` -## Conclusion : - -Recursion is a fundamental concept in C++ that provides a straightforward way to solve problems by breaking them down into smaller sub-problems. Understanding how to use recursion effectively can greatly enhance your problem-solving skills and enable you to write cleaner, more efficient code. - - diff --git a/docs/day-10/_category_.json b/docs/day-10/_category_.json deleted file mode 100644 index fcb448061..000000000 --- a/docs/day-10/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 10", - "position": 11, - "link": { - "type": "generated-index" - } -} diff --git a/docs/day-10/multidimentional-array.md b/docs/day-10/multidimentional-array.md deleted file mode 100644 index e2ffc728f..000000000 --- a/docs/day-10/multidimentional-array.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -sidebar_position: 1 -title: "Multi-Dimensional Array in C++" -description: "In this tutorial, we will learn about Multi-Dimensional Arrays in C++ programming with the help of examples. A multi-dimensional array is an array of arrays. In C++, we can create a two-dimensional array, three-dimensional array, and so on." -sidebar_label: "Multi-Dimensional Array" -slug: multi-dimensional-array-in-cpp ---- - -### What is a Multi-Dimensional Array in C++? -A multi-dimensional array in C++ is an array that holds elements in more than one dimension. Unlike a one-dimensional array, which is a list of elements accessed by a single index, a multi-dimensional array is accessed by multiple indices. Common examples include 2D arrays (matrices) and 3D arrays (cubes). - - -1. What is a Multi-Dimensional Array in C++? -2. Explain the Syntax of a Multi-Dimensional Array in C++. -3. How to Declare and Define a Multi-Dimensional Array in C++? -4. C++ Multi-Dimensional Array Example -5. How do you access an element in a two-dimensional array in C++? -6. How do you pass a two-dimensional array to a function in C++? -7. What is the syntax for looping through all elements of a two-dimensional array in C++? -8. What is the difference between a multidimensional array and an array of arrays in C++? -9. Can you dynamically allocate a two-dimensional array in C++? If so,how? -10. What are the advantages and disadvantages of using multidimensional arrays in C++? -11. How do you deallocate a dynamically allocated multidimensional array in C++? -12. What is the memory layout of a two-dimensional array in C++? -13. How do you use multidimensional array to represent matrices in C++? -14. What is the role of the std::vector in handling multidimensional arrays in C++? -15. How do multidimensional arrays interact with pointers in C++? - - -![Multidimentional-array](../../static/img/day-10/multidimentional-array.png) - - -### Explain the Syntax of a Multi-Dimensional Array in C++. -```cpp - -data_type array_name[size1][size2]...[sizeN]; - -``` - -Here, data_type is the type of elements the array will hold, array_name is the name of the array, and size1, size2, ..., sizeN are the sizes of each dimension of the array. - - -### How to Declare and Define a Multi-Dimensional Array in C++? -```cpp - -int arr[3][4]; // Declares a 2D array with 3 rows and 4 columns - -// Another way to declare and initialize a 2D array: -int arr2[2][3] = {{1, 2, 3}, {4, 5, 6}}; - -``` - -### C++ Multi-Dimensional Array Example. - -```cpp - -#include -using namespace std; - -int main() { - int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; - - // Accessing elements of the array - cout << "Elements of the 2D array:" << endl; - for (int i = 0; i < 3; ++i) { - for (int j = 0; j < 3; ++j) { - cout << arr[i][j] << " "; - } - cout << endl; - } - - return 0; -} - -``` - diff --git a/docs/day-10/singledimensional-array.md b/docs/day-10/singledimensional-array.md deleted file mode 100644 index 3423b98b0..000000000 --- a/docs/day-10/singledimensional-array.md +++ /dev/null @@ -1,116 +0,0 @@ ---- -sidebar_position: 4 -title: "Single Dimensional Arrays in C++" -description: "In this tutorial, we will learn about single dimensional arrays in C++ with the help of examples. Arrays are used to store multiple values in a single variable." -sidebar_label: "Single Dimensional Arrays" -slug: single-dimensional-arrays-in-cpp ---- - -## 1. What is a Single Dimensional Array in C++? - -A single dimensional array is a collection of elements of the same data type, stored in contiguous memory locations. Arrays allow you to store multiple values in a single variable, which can be accessed using an index. - -![Single Dimensional Array in C++](../../static/img/day-10/singledimensional-array.png) - -## 2. Why Use Arrays? - -Arrays are used to: -- Store multiple values of the same type in a single variable. -- Easily access and manipulate a collection of data. -- Efficiently manage memory by storing elements in contiguous memory locations. - -## 3. Declaring and Initializing Arrays - -You can declare an array by specifying the data type, array name, and size. - -**Syntax:** - -```cpp -datatype arrayName[arraySize]; -``` - -You can also initialize an array at the time of declaration. - -**Example:** - -```cpp -#include -using namespace std; - -int main() { - int numbers[5]; // Declaration - int scores[5] = {85, 90, 78, 92, 88}; // Declaration and Initialization - return 0; -} -``` - -## 4. Accessing Array Elements - -Array elements are accessed using their index. The index of the first element is 0, and the index of the last element is `arraySize - 1`. - -**Example:** - -```cpp -#include -using namespace std; - -int main() { - int scores[5] = {85, 90, 78, 92, 88}; - cout << "First element: " << scores[0] << endl; // Output: 85 - cout << "Last element: " << scores[4] << endl; // Output: 88 - return 0; -} -``` - -## 5. Looping Through an Array - -You can use loops to iterate through array elements for processing. - -**Example:** - -```cpp -#include -using namespace std; - -int main() { - int scores[5] = {85, 90, 78, 92, 88}; - for (int i = 0; i < 5; i++) { - cout << "Element at index " << i << ": " << scores[i] << endl; - } - return 0; -} -``` - -## 6. Modifying Array Elements - -You can modify the elements of an array by accessing them via their index. - -**Example:** - -```cpp -#include -using namespace std; - -int main() { - int scores[5] = {85, 90, 78, 92, 88}; - scores[2] = 80; // Modify the element at index 2 - cout << "Modified element at index 2: " << scores[2] << endl; // Output: 80 - return 0; -} -``` - -## 7. Advantages and Disadvantages of Arrays - -### Advantages -- **Efficient Data Management**: Arrays allow efficient management and manipulation of data. -- **Ease of Access**: Direct access to any element using its index. -- **Memory Management**: Efficient use of memory by storing elements in contiguous locations. - -### Disadvantages -- **Fixed Size**: The size of an array is fixed at compile time and cannot be changed during runtime. -- **Single Data Type**: Arrays can store elements of only one data type. -- **Memory Waste**: If the array size is larger than the required number of elements, memory can be wasted. - -## 8. Conclusion - -Single dimensional arrays are a fundamental data structure in C++, providing an efficient way to store and manage collections of data. Understanding arrays and their operations is crucial for solving various programming problems effectively. \ No newline at end of file diff --git a/docs/day-10/string-class.md b/docs/day-10/string-class.md deleted file mode 100644 index 87833049f..000000000 --- a/docs/day-10/string-class.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -sidebar_position: 3 -title: "All About String Class" -description: "In this tutorial, we will learn about the String Class in C++ programming with the help of examples. A string is a sequence of characters that is used to represent text. In C++, strings are represented using the `std::string` class. The `std::string` class provides various member functions to manipulate strings." -sidebar_label: "String Class" -slug: string-class-in-cpp ---- - -### What is a String Class in C++? -In C++, a string class is a part of the Standard Template Library (STL) that provides a convenient way to work with strings of characters. It encapsulates various string operations and functionalities, making string manipulation easier for developers. - - -1. What is a String Class in C++? -2. Explain the Syntax of a String Class in C++. -3. How to Declare and Define a String Class in C++? -4. C++ String Class Example -5. How to Input and Output a String Class in C++? -6. How to Concatenate String Classes in C++? -7. what is the std::string class in C++? -8. How do you declare and initialize a std::string in C++? -9. How do you find the length of a std::string? -10. How do you compare two std::string objects in C++? - - -![Function in CPP](../../static/img/day-10/string-class.png) - -### Explain the Syntax of a String Class in C++. -The syntax for declaring a string object in C++ is: - -```cpp - -#include - -std::string myString; - -``` -Here, std::string is the string class, and myString is an instance of the class. - -### How to Declare and Define a String Class in C++? -To declare and define a string class in C++, you can simply create an object of the std::string class. -## Here's how: -```cpp - -#include - -std::string myString = "Hello, World!"; - -``` - -### C++ String Class Example. -Here's a basic example demonstrating the usage of the C++ string class: -```cpp - -#include -#include - -int main() { - std::string greeting = "Hello, "; - std::string name = "Tina"; - std::cout << greeting + name << std::endl; - return 0; -} - -``` - -### How to Input and Output a String Class in C++? -You can use the standard input/output operations to work with string classes in C++. -## Here's an example: - -```cpp - -#include -#include - -int main() { - std::string inputString; - std::cout << "Enter a string: "; - std::cin >> inputString; - std::cout << "You entered: " << inputString << std::endl; - return 0; -} - -``` - -### How to Concatenate String Classes in C++? -In C++, you can concatenate string classes using the + operator or the append() function. -## Examples of both methods: -```cpp - -#include -#include - -int main() { - std::string firstString = "Hello, "; - std::string secondString = "World!"; - - // Using the + operator - std::string result1 = firstString + secondString; - std::cout << "Concatenated string using + operator: " << result1 << std::endl; - - // Using the append() function - firstString.append(secondString); - std::cout << "Concatenated string using append(): " << firstString << std::endl; - - return 0; -} - -``` diff --git a/docs/day-10/string-in-cpp.md b/docs/day-10/string-in-cpp.md deleted file mode 100644 index 9206735c8..000000000 --- a/docs/day-10/string-in-cpp.md +++ /dev/null @@ -1,181 +0,0 @@ ---- -sidebar_position: 2 -title: "String in C++" -description: "In this tutorial, we will learn about Strings in C++ programming with the help of examples. A string is a sequence of characters that is used to represent text. In C++, strings are represented using the `std::string` class. The `std::string` class provides various member functions to manipulate strings." -sidebar_label: "String" -slug: string-in-cpp ---- - -### What is a String in C++? -In C++, a string is a sequence of characters stored in contiguous memory locations. It's a data type used to represent text rather than numerical values. - -### Explain the Syntax of a String in C++. -The syntax for declaring a string in C++ is -```cpp - -std::string myString; - -``` -Here, std::string is the data type for the string, and myString is the name of the string variable. - -![String in CPP](../../static/img/day-10/string-in-cpp.png) - - -### How to Declare and Define a String in C++? - -## Declaration -```cpp - -std::string myString; - -``` -## Defination -```cpp - -myString = "Hello, World!"; - -``` - -### C++ String Example - -```cpp - -#include -#include - -int main() { - std::string greeting = "Hello, World!"; - std::cout << greeting << std::endl; - return 0; -} - -``` - -### How to Input and Output a String in C++? - -## Input -```cpp - -std::string userInput; -std::cin >> userInput; - -``` -## Output -```cpp - -std::cout << userInput << std::endl; - -``` - -### How to Concatenate Strings in C++? -```cpp - -std::string str1 = "Hello"; -std::string str2 = "World"; -std::string result = str1 + str2; - -``` - -### How to Compare Strings in C++? - -```cpp - -std::string str1 = "Hello"; -std::string str2 = "World"; -if (str1 == str2) { - // Strings are equal -} else { - // Strings are not equal -} - -``` - -### How to Find the Length of a String in C++? - -```cpp - -std::string myString = "Hello"; -int length = myString.length(); - -``` - -### How to Access Characters in a String in C++? -```cpp - -std::string myString = "Hello"; -char firstChar = myString[0]; - -``` - -### How to Modify a String in C++? - -```cpp - -std::string myString = "Hello"; -myString[0] = 'J'; // Changes 'H' to 'J' - -``` - -### How to Convert a String to Uppercase and Lowercase in C++? - -```cpp - -std::string myString = "Hello"; -std::transform(myString.begin(), myString.end(), myString.begin(), ::toupper); -// To lowercase: std::transform(myString.begin(), myString.end(), myString.begin(), ::tolower); - -``` - -### How to Convert a String to Integer in C++? -```cpp - -std::string numString = "123"; -int num = std::stoi(numString); - -``` - -### How to Convert an Integer to String in C++? -```cpp - -int num = 123; -std::string numString = std::to_string(num); - -``` - -### How to Convert a String to Character Array in C++? - -```cpp - -std::string myString = "Hello"; -const char* charArray = myString.c_str(); - -``` - -### How to Convert a Character Array to String in C++? - -```cpp - -const char* charArray = "Hello"; -std::string myString(charArray); - -``` - -### How to Convert a String to C-Style String in C++? - -```cpp - -std::string myString = "Hello"; -const char* cStyleString = myString.c_str(); - -``` - -### How to Convert a C-Style String to String in C++? - -```cpp -const char* cStyleString = "Hello"; -std::string myString(cStyleString); - -``` - -### How to Split a String in C++? -To split a string using a delimiter, we can use std::getline combined with std::stringstream to extract all the tokens from the string separated by a specified delimiter, and keep storing the token in a vector of string. diff --git a/docs/day-11/_category_.json b/docs/day-11/_category_.json deleted file mode 100644 index e2d8f2577..000000000 --- a/docs/day-11/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 11", - "position": 12, - "link": { - "type": "generated-index" - } -} diff --git a/docs/day-11/pass-by-reference.md b/docs/day-11/pass-by-reference.md deleted file mode 100644 index d288d53f4..000000000 --- a/docs/day-11/pass-by-reference.md +++ /dev/null @@ -1,130 +0,0 @@ ---- - -sidebar_position: 5 -title: "Passing by Reference in C++" -description: "In this tutorial, we will learn about passing by reference in C++ with the help of examples. Passing by reference is a crucial concept for optimizing memory usage and improving performance in C++ programming." -sidebar_label: "Passing by Reference" -slug: passing-by-reference-in-cpp ---- - -## 1. What is Passing by Reference in C++? - -Passing by reference is a method of passing arguments to a function such that the function operates on the actual variables rather than a copy of them. This allows the function to modify the original variables and is more efficient for large data structures. - -![Passing by Reference in C++](../../static/img/day-11/passing-by-reference.png) - -## 2. Why Use Passing by Reference? - -- **Efficiency**: Avoids copying large data structures, saving time and memory. -- **Modify Original Data**: Allows functions to modify the original arguments. -- **Consistency**: Keeps data consistent across different scopes. - -## 3. Syntax for Passing by Reference - -Passing by reference is done using the reference operator (`&`) in the function parameter list. - -**Syntax:** - -```cpp -returnType functionName(dataType ¶meterName) { - // Function body -} -``` - -## 4. Examples - -### Example 1: Basic Passing by Reference - -In this example, we pass an integer by reference to a function that increments its value. - -```cpp -#include -using namespace std; - -void increment(int &num) { - num++; // Modifies the original variable -} - -int main() { - int a = 10; - increment(a); - cout << "a: " << a << endl; // Output: 11 - return 0; -} -``` - -### Example 2: Passing Objects by Reference - -Passing objects by reference can significantly improve performance by avoiding the overhead of copying large objects. - -```cpp -#include -using namespace std; - -class Example { -public: - int value; - Example(int v) : value(v) {} -}; - -void modify(Example &obj) { - obj.value += 10; -} - -int main() { - Example ex(20); - modify(ex); - cout << "ex.value: " << ex.value << endl; // Output: 30 - return 0; -} -``` - -## 5. Const References - -When you do not want the function to modify the passed argument, use `const` with the reference. This ensures the argument is not changed within the function. - -**Syntax:** - -```cpp -returnType functionName(const dataType ¶meterName) { - // Function body -} -``` - -**Example:** - -```cpp -#include -using namespace std; - -void display(const int &num) { - cout << "Number: " << num << endl; - // num++; // Error: Cannot modify a const reference -} - -int main() { - int a = 10; - display(a); - return 0; -} -``` - -## 6. When to Use Passing by Reference - -- When you need to modify the original variable. -- When passing large objects to avoid copying overhead. -- When consistency of data across function calls is required. - -## 7. Advantages and Disadvantages - -### Advantages -- **Performance**: More efficient for large data structures. -- **Modifiability**: Allows functions to modify the original arguments. - -### Disadvantages -- **Complexity**: Can make the function interface more complex. -- **Safety**: Requires careful handling to avoid unintended modifications. - -## 8. Conclusion - -Passing by reference is a powerful feature in C++ that enhances performance and allows functions to modify the original data. Understanding when and how to use it effectively is crucial for efficient C++ programming. \ No newline at end of file diff --git a/docs/day-11/pass-by-value.md b/docs/day-11/pass-by-value.md deleted file mode 100644 index caeb16ea3..000000000 --- a/docs/day-11/pass-by-value.md +++ /dev/null @@ -1,131 +0,0 @@ ---- - -sidebar_position: 3 -title: "Pass By Value in C++" -description: "In this tutorial, we will learn about Pass By Value in C++ programming with the help of examples. Pass By Value means passing a copy of the actual parameter to the function. Changes made to the parameter inside the function do not affect the original variable." -sidebar_label: "Pass By Value" -slug: pass-by-value-in-cpp ---- - -Before going to Pass By Reference, one should properly learn about Pass By Value. So here we go... - -## 1. What is Pass By Value in C++? - -Pass By Value in C++ means passing a copy of the actual parameter to a function. The function operates on the copy, and any modifications to the parameter inside the function do not affect the original variable. This method ensures that the original data remains unchanged. - -![Passing by Value in C++](../../static/img/day-11/reference-in-cpp.png) - -## 2. Explain the Syntax of Pass By Value in C++. - -The syntax for passing by value is straightforward. You simply pass the variable as an argument to the function. The function definition includes the parameter type and name without any special symbols. - -**Syntax:** - -```cpp -void functionName(dataType parameter); -``` - -## 3. How to Use Pass By Value in C++? - -**Using Pass By Value** -When you use pass by value, you call the function with the actual parameter, and a copy of it is passed to the function. - -```cpp -#include - -void increment(int num) { - num++; - std::cout << "Inside function: " << num << std::endl; // Outputs: 6 -} - -int main() { - int value = 5; - increment(value); - std::cout << "Outside function: " << value << std::endl; // Outputs: 5 - return 0; -} -``` - -### 4. C++ Pass By Value Example -Here is a simple example demonstrating pass by value: - -**Example:** - -```cpp -#include - -void multiplyByTwo(int num) { - num = num * 2; - std::cout << "Inside function: " << num << std::endl; // Outputs: 20 -} - -int main() { - int original = 10; - multiplyByTwo(original); - - std::cout << "Outside function: " << original << std::endl; // Outputs: 10 - return 0; -} -``` - -### 5. Advantages of Pass By Value - -- **Data Safety**: Since the function works on a copy, the original data remains unchanged. -- **Simplicity**: Easy to understand and implement, especially for small data types. - - -### 6. Disadvantages of Pass By Value - -- **Performance**: For large data types, copying can be inefficient and consume more memory. -- **Limited Modifiability**: The function cannot modify the original variable. - -### 7. When to Use Pass By Value? - -- **Small Data Types**: Use pass by value for small data types like integers, characters, and small structures. -- **Read-Only Operations**: When you do not need to modify the original variable and only need to read its value. - -**Example of Pass By Value with Small Data Types:** - -```cpp -#include - -void display(char ch) { - std::cout << "Character: " << ch << std::endl; -} - -int main() { - char letter = 'A'; - display(letter); - - return 0; -} -``` - -**Example of Pass By Value with Structures:** - -```cpp -#include - -struct Point { - int x, y; -}; - -void displayPoint(Point p) { - std::cout << "Point: (" << p.x << ", " << p.y << ")" << std::endl; -} - -int main() { - Point pt = {10, 20}; - displayPoint(pt); - - return 0; -} -``` - -By using pass by value, you ensure **data integrity** while performing read-only operations or working with small data types. However, be mindful of performance implications when dealing with larger objects. - -## 8. Conclusion - -Pass by value is a fundamental concept in C++ programming, providing a straightforward way to pass data to functions. While it has its advantages, such as **data safety** and **simplicity**, it also has performance drawbacks for large data types. Understanding when and how to use pass by value effectively is crucial for writing efficient and maintainable C++ code. - -By understanding the differences between pass by value and other parameter passing methods, such as pass by reference, you can make informed decisions about the best approach to use in your C++ programming. \ No newline at end of file diff --git a/docs/day-11/pointers-in-array.md b/docs/day-11/pointers-in-array.md deleted file mode 100644 index 66d35e0f4..000000000 --- a/docs/day-11/pointers-in-array.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -sidebar_position: 2 -title: "Pointers in Array in C++" -description: "In this tutorial, we will learn about Pointers in Array in C++ programming with the help of examples. A pointer is a variable that stores the memory address of another variable. Pointers are used to store the address of variables, arrays, and functions in C++." -sidebar_label: "Pointers in Array" -slug: pointers-in-array-in-cpp ---- - -### 1. What are Pointers in Array? -- In C++, pointers can be used with arrays to access their elements and perform operations. So, when we define a pointer to an array, we are essentially creating a pointer that points to the same address as the array name. -- Here is a simple program that demonstrates the use of pointers in array. -```cpp -#include -using namespace std; - -int main() -{ - int arr[5] = { 10, 20, 30, 40, 50 }; - int* ptr = arr; //Pointer to the first element of an array - - cout << "*arr = " << *arr << endl; //An array name is a pointer to its first element - cout << "arr = " << arr << endl; - cout << "*ptr = " << *ptr << endl; - cout << "ptr = " << ptr << endl; - - return 0; -} - -``` -Output -``` -*arr = 10 -arr = 0x7ffc096e3bc0 -*ptr = 10 -ptr = 0x7ffc096e3bc0 -``` - -### 2. Why do we need pointers in array? -- They provide a way to pass arrays to functions without passing the entire array (which can be inefficient if the array is large). -- They allow us to dynamically allocate memory for arrays at runtime. -- They can be used to implement data structures like linked lists, trees, etc. - -### 3. Example Program to Traverse an Array using Pointer -```cpp -#include -using namespace std; - -int main() { - int arr[] = {18, 23, 36, 45, 57}; - int *ptr = arr; // Pointer to the first element of the array - - for(int i = 0; i < 5; i++) { - cout << "Element at index " << i << " is: " << *(ptr + i) << endl; - } - - return 0; -} -``` -Output -``` -Element at index 0 is: 18 -Element at index 1 is: 23 -Element at index 2 is: 36 -Element at index 3 is: 45 -Element at index 4 is: 57 -``` -Here, -- arr is an Array of Integers. -- *ptr is a Pointer that points to the first element of the Array arr. -- The for loop iterates over each element of the array. *(ptr + i) gives the value at the ith index of the array. This is because adding i to the pointer ptr moves it i places in memory. Since ptr is a pointer to an integer, each move is the size of an integer. - -### Practice Questions -1. What is a Pointer in C++? -2. Explain the Syntax of a Pointer in C++. -3. How to Declare and Define a Pointer in C++? -4. How to Access the Value of a Pointer in C++? -5. How to Access the Address of a Pointer in C++? -6. How to Declare and Define a Pointer to a Pointer in C++? -7. How do you initialize a pointer to point to the first element ofan array? -8. Explain how pointer arithmetic works in the context of arrays? -9. How can you pass an array to a function using pointers? -10. What is the significance of null pointer in C++? -11. How do you iterate over an array using pointers? -12. Explain how memory is managed when using pointers with array in C++? -13. What is a pointer decay and how does it related to array? -14. Write a program to swap two elements in array using pointers? -15. How do you dynamically allocate an array using pointers? - - - -IMAGE FILE: -![Function in CPP](../../static/img/day-11/array-with-pointers.png) diff --git a/docs/day-11/pointers-in-cpp.md b/docs/day-11/pointers-in-cpp.md deleted file mode 100644 index d0bbc62a8..000000000 --- a/docs/day-11/pointers-in-cpp.md +++ /dev/null @@ -1,257 +0,0 @@ ---- -sidebar_position: 1 -title: "Pointers in C++" -description: "In this tutorial, we will learn about Pointers in C++ programming with the help of examples. A pointer is a variable that stores the memory address of another variable. Pointers are used to store the address of variables, arrays, and functions in C++." -sidebar_label: "Pointers" -slug: pointers-in-cpp ---- - -## What is a Pointer in C++? - -A pointer is a variable that stores the memory address of an object. Pointers are used extensively in both C and C++ for three main purposes: - -- To allocate new objects on the heap, -- To pass functions to other functions -- To iterate over elements in arrays or other data structures. - -In C-style programming, raw pointers are used for all these scenarios. However, raw pointers are the source of many serious programming errors. Therefore, their use is strongly discouraged except where they provide a significant performance benefit and there is no ambiguity as to which pointer is the owning pointer that is responsible for deleting the object. Modern C++ provides smart pointers for allocating objects, iterators for traversing data structures, and lambda expressions for passing functions. By using these language and library facilities instead of raw pointers, you will make your program safer, easier to debug, and simpler to understand and maintain. - -## Explain the Syntax of a Pointer in C++. - -Here's how to declare a pointer in C++: - -```cpp -data_type* pointer_name; -``` -```cpp -int num = 10; -int* ptr = # -``` - -In this example, * is the dereference operator. It is used to access the value that the pointer is pointing to. For example, to print the value of num using the pointer ptr, you can use the following code: - -```cpp -cout << *ptr << endl; -``` - -This will print the value 10 to the console. -Pointers can be used to point to any type of data, including arrays, structures, and classes. They can also be used to point to functions. - - -![Multidimentional-array](../../static/img/day-11/pointers.png) - -## How to Declare and Define a Pointer in C++? - -Declare the pointer variable. - -To declare a pointer variable, you need to use the * operator. For example, to declare a pointer variable named ptr that points to an integer variable named num, you can use the following code: - -```cpp -int* ptr; -``` - -This code declares a pointer variable named ptr that points to an integer variable. - -Initialize the pointer variable. - -Once you have declared the pointer variable, you need to initialize it. To initialize a pointer variable, you need to assign it the address of a variable. For example, to initialize the pointer variable ptr to point to the integer variable num, you can use the following code: - -```cpp -ptr = # -``` - -## How to Access the Value of a Pointer in C++? - -To access the value of a pointer in C++, you need to use the dereferencing operator (*). The dereferencing operator returns the value of the variable that the pointer points to. - -For example, if you have a pointer to an integer variable, you can use the dereferencing operator to get the value of the integer variable. - -Here is an example: - -```cpp -int my_int = 10; -int* my_pointer = &my_int; - -// Get the value of the integer variable using the dereferencing operator -int value = *my_pointer; - -// Print the value of the integer variable -std::cout << value << std::endl; -``` - -This code will print the value 10 to the console. -You can also use the dereferencing operator to modify the value of the variable that the pointer points to. -For example, you can use the following code to increment the value of the integer variable: - -```cpp -*my_pointer++; -``` - -## How to Access the Address of a Pointer in C++? - -To access the address of a pointer in C++, you can use the address-of operator (&). This operator returns the memory address of the variable that it is applied to. For example, if you have the following code: - -```cpp -int x = 10; -int *ptr = &x; -``` - -The variable ptr will store the memory address of the variable x. You can then use the dereference operator (*) to access the value stored at the memory location pointed to by ptr. For example, the following code will print the value 10 to the console: - -```cpp -cout << *ptr << endl; -``` - -## How to Declare and Define a Pointer to a Pointer in C++? - -To declare a pointer to a pointer in C++, you need to use the asterisk (*) symbol twice. For example, the following code declares a pointer to a pointer to an integer: - -```cpp -int** pInt; -``` -This means that the variable pInt can store the address of a pointer to an integer. -To define a pointer to a pointer, you need to assign it the address of a pointer to an integer. For example, the following code defines pInt to point to the pointer pInt2: - -```cpp -int* pInt2 = new int; -pInt = &pInt2; -``` - -The new operator allocates a new integer on the heap and returns a pointer to it. The & operator gets the address of a variable. So, the above code assigns the address of pInt2 to pInt. -Once pInt is defined, you can use it to access the integer that pInt2 points to. For example, the following code prints the value of the integer to the console: - -```cpp -cout << *pInt << endl; -``` - -## How to Declare and Define a Pointer to an Array in C++? - -To declare a pointer to an array in C++, you can use the following syntax: - -```cpp -// Declare a pointer to an array of integers -int* arr_ptr; - -// Initialize the pointer to point to the first element of the array -arr_ptr = &arr[0]; -``` - -Here, arr_ptr is a pointer to an array of integers. The & operator is used to get the address of the first element of the array. -To access the elements of the array through the pointer, you can use the dereference operator (*). For example, the following code will print the first element of the array: - -```cpp -cout << *arr_ptr << endl; -``` - -You can also use the pointer to iterate over the elements of the array. For example, the following code will print all elements of the array: - -```cpp -for (int i = 0; i < 10; i++) { - cout << *(arr_ptr + i) << endl; -} -``` - -Here, the arr_ptr + i expression gives the address of the ith element of the array. - -Here is an example of how to use a pointer to an array in C++: - -```cpp -#include - -using namespace std; - -int main() { - // Declare an array of integers - int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; - - // Declare a pointer to the array - int* arr_ptr = arr; - - // Print the elements of the array using the pointer - for (int i = 0; i < 10; i++) { - cout << *(arr_ptr + i) << endl; - } - - return 0; -} -``` - -Output: - -```cpp -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -``` - -## How to Declare and Define a Pointer to a Function in C++? - -To declare a pointer to a function in C++, you can use the following syntax: - -```cpp -// Declare a pointer to a function that takes two integers as arguments and returns an integer -int (*function_pointer)(int, int); - -// Define the function that the pointer will point to -int add(int a, int b) { - return a + b; -} - -// Assign the address of the function to the pointer -function_pointer = add; - -// Call the function through the pointer -int result = function_pointer(1, 2); - -// Print the result -std::cout << result << std::endl; -``` - -Output: - -```cpp -3 -``` - -In this example, we first declare a pointer to a function that takes two integers as arguments and returns an integer. We then define the function that the pointer will point to, which is a function called add() that takes two integers as arguments and returns their sum. We then assign the address of the add() function to the pointer. Finally, we call the add() function through the pointer and print the result. -Function pointers can be useful for a variety of purposes, such as passing functions as arguments to other functions or storing functions in an array. They can also be used to implement callback functions, which are functions that are called when a certain event occurs. - -## How to Pass a Pointer to a Function in C++? - -Here are the steps on how to pass a pointer to a function in C++: -- Declare a function that takes a pointer as a parameter. - -For example, the following function takes an integer pointer as a parameter and increments the value pointed to by the pointer: - -```cpp -void increment(int *p) { - *p += 1; -} -``` - -- Declare a pointer variable and point it to the variable or array you want to pass to the function. - -For example, the following code declares a pointer variable named p and points it to the integer variable x: - -```cpp -int x = 5; -int *p = &x; -``` - -- Call the function by passing the pointer as an argument. - -For example, the following code calls the increment() function and passes the pointer p as an argument: - -```cpp -increment(p); -``` - -After the increment() function is called, the value of the variable x will be incremented to 6. -Here is an example of a complete program that passes a pointer to a function: \ No newline at end of file diff --git a/docs/day-11/reference-in-cpp.md b/docs/day-11/reference-in-cpp.md deleted file mode 100644 index 3d0641d6d..000000000 --- a/docs/day-11/reference-in-cpp.md +++ /dev/null @@ -1,157 +0,0 @@ ---- -sidebar_position: 4 -title: "Reference in C++" -description: "In this tutorial, we will learn about Reference in C++ programming with the help of examples. A reference is an alias for a variable. It is a way to access the value of a variable using a different name. A reference is similar to a pointer, but it is simpler to use and safer than a pointer." -sidebar_label: "Reference" -slug: reference-in-cpp ---- - -## 1. What is a Reference in C++? - -When a variable is declared as a reference, it becomes an alternative name for an existing variable. A variable can be declared as a reference by putting ‘&’ in the declaration. - -Also, we can define a reference variable as a type of variable that can act as a reference to another variable. ‘&’ is used for signifying the address of a variable or any memory. Variables associated with reference variables can be accessed either by its name or by the reference variable associated with it. - -## 2. Explain the Syntax of a Reference in C++. - -The syntax for declaring a reference involves using the `&` symbol. You place the `&` symbol between the data type and the reference variable name. - -```cpp -dataType &referenceName = variableName; -``` - -## 3. How to Declare and Define a Reference in C++? - -### Declaring and Defining a Reference - -When you declare and define a reference, you must initialize it at the same time. References cannot be left uninitialized. - -```cpp -int original = 10; -int &ref = original; // 'ref' is a reference to 'original' -``` - -## 4. C++ Reference Example - -Here is a simple example demonstrating the use of a reference: - -```cpp -#include - -int main() { - int original = 10; - int &ref = original; - - std::cout << "Original: " << original << std::endl; // Outputs: 10 - std::cout << "Reference: " << ref << std::endl; // Outputs: 10 - - ref = 20; - std::cout << "After modifying reference:" << std::endl; - std::cout << "Original: " << original << std::endl; // Outputs: 20 - std::cout << "Reference: " << ref << std::endl; // Outputs: 20 - - return 0; -} -``` - -![String in CPP](../../static/img/day-11/reference-in-cpp.png) - - -## 5. How to Pass a Reference to a Function in C++? - -To pass a reference to a function, you use the same `&` syntax in the function parameter list. This allows the function to modify the original variable. - -```cpp -#include - -void increment(int &num) { - num++; -} - -int main() { - int value = 5; - increment(value); - std::cout << "Value after increment: " << value << std::endl; // Outputs: 6 - return 0; -} -``` - -## 6. How to Return a Reference from a Function in C++? - -- Declare a function with return type and parameter as reference variables. -- Perform the required actions with the reference variable inside the function. -- Return the reference variable. - -For example, the following function returns a reference to an integer: - -```cpp -int& returnValue(int& x) { - // Print the address. - std::cout << "x = " << x << " The address of x is " << &x << std::endl; - - // Return reference. - return x; -} -``` - -This function can be used as follows: - -```cpp -int main() { - int x = 10; - - // Get a reference to x. - int& ref = returnValue(x); - - // Modify the value of x through the reference. - ref = 20; - - // Print the value of x. - std::cout << "x = " << x << std::endl; - - return 0; -} -``` - -Output: - -```cpp -x = 10 The address of x is 0x7ffeed345678 -x = 20 -``` - -### Example of Returning a Reference from a Function - -```cpp -#include - -int& getElement(int arr[], int index) { - return arr[index]; // Returning a reference to the array element -} - -int main() { - int myArray[5] = {1, 2, 3, 4, 5}; - int &element = getElement(myArray, 2); // Get reference to the third element - - std::cout << "Original element: " << element << std::endl; // Outputs: 3 - element = 10; // Modify the element through the reference - std::cout << "Modified element: " << myArray[2] << std::endl; // Outputs: 10 - - return 0; -} -``` - -### Important Considerations - -- **Lifetime of the referred object**: Ensure that the object whose reference is returned is still alive when the reference is used. Returning references to local variables within a function is dangerous because the local variables will be destroyed when the function scope ends. -- **Const references**: Use const references when you don't need to modify the object, which helps in avoiding accidental changes. - -```cpp -const int& getElement(const int arr[], int index) { - return arr[index]; -} -``` - -By using references, you can efficiently manage large data and enhance performance by avoiding unnecessary copying of objects. - - diff --git a/docs/day-11/reference-vs-pointers.md b/docs/day-11/reference-vs-pointers.md deleted file mode 100644 index db7e7c246..000000000 --- a/docs/day-11/reference-vs-pointers.md +++ /dev/null @@ -1,201 +0,0 @@ ---- - -sidebar_position: 6 -title: "References vs Pointers in C++" -description: "In this tutorial, we will learn about the differences between references and pointers in C++ with the help of examples. Understanding references and pointers is crucial for effective C++ programming." -sidebar_label: "References vs Pointers" -slug: references-vs-pointers-in-cpp ---- - -## 1. What are References and Pointers in C++? - -In C++, both references and pointers are used to refer to memory locations, but they have different properties and uses. - -- **References**: An alias for another variable. -- **Pointers**: A variable that holds the memory address of another variable. - -![References vs Pointers in C++](../../static/img/day-11/references-vs-pointers.png) - -## 2. Declaring References and Pointers - -### Declaring References - -A reference is declared using the `&` operator. - -**Syntax:** - -```cpp -datatype &referenceName = variableName; -``` - -**Example:** - -```cpp -#include -using namespace std; - -int main() { - int a = 10; - int &ref = a; // ref is a reference to a - cout << "a: " << a << endl; // Output: 10 - cout << "ref: " << ref << endl; // Output: 10 - return 0; -} -``` - -### Declaring Pointers - -A pointer is declared using the `*` operator. - -**Syntax:** - -```cpp -datatype *pointerName; -``` - -**Example:** - -```cpp -#include -using namespace std; - -int main() { - int a = 10; - int *ptr = &a; // ptr holds the address of a - cout << "a: " << a << endl; // Output: 10 - cout << "ptr: " << ptr << endl; // Output: address of a - cout << "*ptr: " << *ptr << endl; // Output: 10 - return 0; -} -``` - -## 3. Differences Between References and Pointers - -### 1. Syntax and Usage - -- **References**: Use the `&` operator for declaration and do not require dereferencing. -- **Pointers**: Use the `*` operator for declaration and require dereferencing with `*`. - -**Example:** - -```cpp -int a = 5; -int &ref = a; // Reference -int *ptr = &a; // Pointer -``` - -### 2. Initialization - -- **References**: Must be initialized when declared. -- **Pointers**: Can be declared without initialization and assigned later. - -**Example:** - -```cpp -int a = 5; -int &ref = a; // Must be initialized -int *ptr; // Can be declared without initialization -ptr = &a; // Assigned later -``` - -### 3. Reassignment - -- **References**: Cannot be reassigned to refer to another variable. -- **Pointers**: Can be reassigned to point to different variables. - -**Example:** - -```cpp -int a = 5, b = 10; -int &ref = a; // Reference to a -// ref = b; // Error: Cannot reassign a reference - -int *ptr = &a; // Pointer to a -ptr = &b; // Pointer reassigned to b -``` - -### 4. Null Values - -- **References**: Cannot be null. -- **Pointers**: Can be null (useful to indicate that they are not pointing to any valid memory). - -**Example:** - -```cpp -int a = 5; -int &ref = a; // Reference cannot be null - -int *ptr = nullptr; // Pointer can be null -ptr = &a; // Pointer assigned to a valid address -``` - -### 5. Memory Address - -- **References**: Implicitly provide the memory address of the referenced variable. -- **Pointers**: Explicitly hold and can be used to manipulate memory addresses. - -**Example:** - -```cpp -int a = 5; -int &ref = a; // Reference to a -int *ptr = &a; // Pointer to a - -cout << "Address of a: " << &a << endl; -cout << "Address using ref: " << &ref << endl; -cout << "Address using ptr: " << ptr << endl; -``` - -## 4. When to Use References and Pointers - -### Use References: -- When you need an alias for another variable. -- When you want to avoid null checks and pointer arithmetic. -- For pass-by-reference in function arguments to avoid copying large objects. - -### Use Pointers: -- When you need to allocate memory dynamically. -- When you need to implement data structures like linked lists, trees, etc. -- When you need to use null values to indicate "no object". - -## 5. Examples - -### Example 1: Using References - -```cpp -#include -using namespace std; - -void increment(int &ref) { - ref++; -} - -int main() { - int a = 10; - increment(a); - cout << "a: " << a << endl; // Output: 11 - return 0; -} -``` - -### Example 2: Using Pointers - -```cpp -#include -using namespace std; - -void increment(int *ptr) { - (*ptr)++; -} - -int main() { - int a = 10; - increment(&a); - cout << "a: " << a << endl; // Output: 11 - return 0; -} -``` - -## 6. Conclusion - -Both references and pointers are powerful features in C++ that allow you to manipulate memory and create more efficient programs. Understanding the differences between them and knowing when to use each is crucial for effective C++ programming. \ No newline at end of file diff --git a/docs/day-11/returning-by-reference.md b/docs/day-11/returning-by-reference.md deleted file mode 100644 index 112a77135..000000000 --- a/docs/day-11/returning-by-reference.md +++ /dev/null @@ -1,125 +0,0 @@ ---- -sidebar_position: 7 -title: "Returning by Reference in C++" -description: "In this tutorial, we will learn about returning by reference in C++ with the help of examples. Returning by reference is a useful technique to optimize performance and handle large data efficiently." -sidebar_label: "Returning by Reference" -slug: returning-by-reference-in-cpp ---- - -## 1. What is Returning by Reference in C++? - -Returning by reference allows a function to return a reference to a variable rather than a copy of its value. This technique can be used to modify the original variable or to avoid copying large objects, thus improving performance. - -![Returning by Reference in C++](../../static/img/day-11/returning-by-reference.png) - -## 2. Why Use Returning by Reference? - -- **Efficiency**: Avoids copying large objects, saving time and memory. -- **Direct Access**: Provides direct access to the variable, allowing modifications. -- **Consistent Data**: Ensures that the changes made are reflected across different scopes. - -## 3. Syntax for Returning by Reference - -A function can be defined to return a reference by using the reference operator (`&`) in the return type. - -**Syntax:** - -```cpp -dataType& functionName(parameters) { - // Function body -} -``` - -## 4. Examples - -### Example 1: Returning a Reference to a Local Variable - -Returning a reference to a local variable is incorrect and leads to undefined behavior because the local variable's lifetime ends when the function exits. - -**Incorrect Example:** - -```cpp -#include -using namespace std; - -int& getLocalReference() { - int localVar = 10; - return localVar; // Warning: returning reference to local variable -} - -int main() { - int &ref = getLocalReference(); - cout << ref << endl; // Undefined behavior - return 0; -} -``` - -### Example 2: Returning a Reference to a Static Variable - -Returning a reference to a static variable is safe because static variables have a lifetime that extends across the entire program. - -```cpp -#include -using namespace std; - -int& getStaticReference() { - static int staticVar = 10; - return staticVar; -} - -int main() { - int &ref = getStaticReference(); - cout << ref << endl; // Output: 10 - ref = 20; - cout << getStaticReference() << endl; // Output: 20 - return 0; -} -``` - -### Example 3: Returning a Reference from a Class Member Function - -Returning a reference to a member variable is common in classes. - -```cpp -#include -using namespace std; - -class Example { -private: - int value; -public: - Example(int v) : value(v) {} - int& getValue() { - return value; - } -}; - -int main() { - Example ex(30); - int &ref = ex.getValue(); - cout << ref << endl; // Output: 30 - ref = 50; - cout << ex.getValue() << endl; // Output: 50 - return 0; -} -``` - -## 5. When to Use Returning by Reference - -- When you want to allow the caller to modify the returned variable. -- When dealing with large objects to avoid copying overhead. -- When you need the function to provide direct access to its internal variables. - -## 6. Advantages and Disadvantages - -### Advantages -- **Performance**: More efficient for large data structures. -- **Modifiability**: Allows functions to return variables that can be modified by the caller. - -### Disadvantages -- **Lifetime Issues**: Must ensure the returned reference remains valid. -- **Complexity**: Can make the function interface more complex and error-prone. - -## 7. Conclusion - -Returning by reference is a powerful feature in C++ that enhances performance and allows functions to return modifiable variables. Understanding when and how to use it effectively is crucial for efficient C++ programming. \ No newline at end of file diff --git a/docs/day-12/Access Specifiers.md b/docs/day-12/Access Specifiers.md deleted file mode 100644 index fe15ad4c9..000000000 --- a/docs/day-12/Access Specifiers.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -sidebar_position: 3 ---- -# Access Specifiers in C++ - -Access specifiers in C++ are keywords that control the visibility and accessibility of class members. - -## Types of Access Specifiers - -### 1. Public -- **Description**: Public members are accessible from outside the class. -- **Usage**: -```cpp -class MyClass { -public: - int myPublicMember; - void myPublicFunction() { - // Function body - } -}; -``` -### 2. Private -- **Description**: Private members are accessible only within the class. -- **Usage**: -```cpp -class MyClass { -private: - int myPrivateMember; - void myPrivateFunction() { - // Function body - } -}; - -``` -### 3. Protected -- **Description**: Protected members are accessible within the class and its subclasses (derived classes). -- **Usage**: -```cpp -class MyBaseClass { -protected: - int myProtectedMember; -}; -class MyDerivedClass : public MyBaseClass { -public: - void myFunction() { - myProtectedMember = 10; // Accessing protected member of the base class - } -}; -``` - -Access specifiers provide control over data hiding and encapsulation, enabling better design and implementation of classes in C++. \ No newline at end of file diff --git a/docs/day-12/Class and object.md b/docs/day-12/Class and object.md deleted file mode 100644 index c8cb90003..000000000 --- a/docs/day-12/Class and object.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -sidebar_position: 2 -title: "Class and Object in C++" -description: "In this tutorial, we will learn what is class and what is object." -sidebar_label: "Class and Object" -slug: class-and-object-in-cpp ---- - -## What is Class in C++? -A class is a blueprint or template for creating objects. It defines a type by bundling data and methods that work on the data into a single unit.A class encapsulates data for the object and methods to manipulate that data. - -Components of a Class: -1) Data Members: Variables that hold the data for the class. -2) Member Functions: Functions that operate on the data members and define the behavior of the class. - -## Syntax - -```cpp -class ClassName { -public: - // Public data members and member functions - int data; - void function() { - // Implementation - } - -private: - // Private data members and member functions - int privateData; - void privateFunction() { - // Implementation - } -}; -``` -## Example -```cpp -class Car { -public: - string brand; - string model; - int year; - - void displayInfo() { - cout << "Brand: " << brand << ", Model: " << model << ", Year: " << year << endl; - } -}; -``` - -## What is Object in C++? -An object is an instance of a class. When a class is defined, no memory is allocated until an object of that class is created. An object is a concrete entity based on a class and is composed of data members and member functions as defined in the class. - - ## Creating an Object: -Objects are created by declaring a variable of the class type. - -## Syntax -``` -ClassName objectName; -``` -## Example -``` -Car myCar; // Create an object of type Car -myCar.brand = "Toyota"; -myCar.model = "Corolla"; -myCar.year = 2020; -myCar.displayInfo(); // Call the member function -``` - - -IMAGE FILE: -![Class and Object in CPP](../..\static\img\day-12\oop2.png) \ No newline at end of file diff --git a/docs/day-12/Classes and Objects.md b/docs/day-12/Classes and Objects.md deleted file mode 100644 index fcfd5c73b..000000000 --- a/docs/day-12/Classes and Objects.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Classes and Objects in C++ - -## Classes - -In C++, a class is a user-defined data type that represents a blueprint for creating objects. It encapsulates data for the object and functions that operate on that data. - -### Class Definition -```cpp -class MyClass { -private: - int myNumber; - string myString; -public: - void setValues(int num, string str) { - myNumber = num; - myString = str; - } - void display() { - cout << "Number: " << myNumber << endl; - cout << "String: " << myString << endl; - } -}; -``` -- **Access Specifiers**: `private`, `public`, and `protected` control the access level of class members. -- **Private members**: Can only be accessed within the class. -- **Public members**: Can be accessed from outside the class. - -## Objects - -An object is an instance of a class. It represents a real-world entity and can store data and perform actions using member functions. - -### Object Creation -```cpp -MyClass obj1; // Creating an object of MyClass -MyClass obj2; // Another object of MyClass -``` - -### Usage - -```cpp -obj1.setValues(10, "Hello"); -obj2.setValues(20, "World"); - -obj1.display(); // Output: Number: 10 String: Hello -obj2.display(); // Output: Number: 20 String: World -``` - -In this example, `obj1` and `obj2` are instances of the `MyClass` class. The `setValues` function sets the values of `myNumber` and `myString` for each object, and the `display` function prints these values. \ No newline at end of file diff --git a/docs/day-12/Examples.md b/docs/day-12/Examples.md deleted file mode 100644 index 389cd6400..000000000 --- a/docs/day-12/Examples.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -sidebar_position: 3 -title: "Examples of Class and Object in C++" -description: "In this tutorial, we will learn to work with class and objects." -sidebar_label: "Examples" -slug: Examples-in-cpp ---- - -## Example 1 - -```cpp - -#include -using namespace std; - -class Person { -public: - // Data members - string name; - int age; - - // Member function to display person's information - void displayInfo() { - cout << "Name: " << name << ", Age: " << age << endl; - } -}; -int main() { - // Create an object of class Person - Person person1; - person1.name = "Alice"; - person1.age = 30; - - // Call the member function to display person's information - person1.displayInfo(); - - return 0; -} -``` -In this example: - -Person is a class with two data members (name and age) and one member function (displayInfo). -person1 is an object of the Person class, and we assign values to its data members and call its member function. - -## Example 2 - -```cpp - -#include -using namespace std; - -class Dog { -public: - // Data members - string breed; - int age; - - // Member function to display dog's information - void displayInfo() { - cout << "Breed: " << breed << ", Age: " << age << " years" << endl; - } -}; -int main() { - // Create an object of class Dog - Dog dog1; - dog1.breed = "Golden Retriever"; - dog1.age = 3; - - // Call the member function to display dog's information - dog1.displayInfo(); - - return 0; -} -``` -In this example: - -Dog is a class with two data members (breed and age) and one member function (displayInfo). -dog1 is an object of the Dog class, and we assign values to its data members and call its member function. - -IMAGE FILE: -![Class and Object in CPP](../..\static\img\day-12\oop3.png) \ No newline at end of file diff --git a/docs/day-12/_category_.json b/docs/day-12/_category_.json deleted file mode 100644 index e653f80a6..000000000 --- a/docs/day-12/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 12", - "position": 13, - "link": { - "type": "generated-index" - } -} diff --git a/docs/day-12/destructors.md b/docs/day-12/destructors.md deleted file mode 100644 index 345fc367f..000000000 --- a/docs/day-12/destructors.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -sidebar_position: 4 -title: "Destructors" -description: "They're used to clean up when an object goes out of scope or is deleted. " -sidebar_label: "Destructors" -slug: destructors ---- - -### Definition - -Destructor is an instance member function that is invoked automatically whenever an object is going to be destroyed. Meaning, a destructor is the last function that is going to be called before an object is destroyed. - -![destructors](../../static/img/day-12/destructors.jpg) - -### Syntax -The destructor has the same name as the class preceded by a tilde (~) and does not take any arguments. - -```cpp -class Example { -public: - ~Example() { - std::cout << "Destructor Called" << std::endl; - } -}; - -``` -Destructors are essential for releasing resources, such as memory or file handles, that the object may have acquired during its lifetime. \ No newline at end of file diff --git a/docs/day-12/dma-in-cpp.md b/docs/day-12/dma-in-cpp.md deleted file mode 100644 index 8fd9e7189..000000000 --- a/docs/day-12/dma-in-cpp.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -sidebar_position: 2 -title: "Dynamic Memory Allocation in C++" -description: "In this tutorial we will apply the concept of dynamic memory allocation in C++. The purpose of this tutorial is to explore how the new and delete works in C++." -sidebar_label: "Dynamic Memory Allocation in C++" -slug: dma-in-cpp ---- -C++ provides two primary operations for Dynamic memory allocation: -* Allocating the memory using the `new` keyword. -* De-allocating the previously allocated memory using the `delete` keyword. - -## 1. Allocating memory using the `new` keyword - -The new keyword in C++ is used for dynamic memory allocation. It allows you to allocate memory for variables or objects during runtime. -### Memory Allocation -When you use `new`, memory is allocated from the heap. The heap is a region of memory that is managed by the operating system, and it's separate from the stack memory where local variables are typically stored. -The new operator returns a pointer to the memory location where the new object or variable is stored. - -If the memory allocation fails (e.g., due to insufficient memory), new throws a `std::bad_alloc` exception. - -### Syntax for using the `new` keyword -The syntax for the `new` keyword is: -``` -data_type *ptr_name= new data_type; -``` -![dma-in-cpp](../../static/img/day-12/dmaInCpp.png) - -## 2. Deallocating the previously allocated memory using the `delete` keyword - -The `delete` keyword in C++ is used to deallocate memory that was allocated dynamically using the new keyword. - -### Matching Allocation and Deallocation -*When you dynamically allocate memory using `new`, you must deallocate it once it's no longer needed to prevent memory leaks. `delete` is used to perform this deallocation. - -Memory allocated with new persists until explicitly deallocated. Therefore it is necessary to match the `new` keyword with `delete`. - -### Syntax for using the `delete` keyword -To delete an allocated memory we can simply use the `delete` keyword with the pointer pointing to the allocated memory. - -* For deallocating memory for a single object: `delete pointer;` -* For deallocating memory for an array of objects: `delete[] pointer;` - -#### Example -``` -int *ptr = new int; // Allocate memory -delete ptr; // Deallocate memory -``` -Attempting to delete a null pointer (a pointer that doesn't point to any valid memory address) has no effect. It's safe to delete a null pointer. - -Deleting a pointer that was not allocated with `new` leads to undefined behavior. - -Accessing memory through a pointer after it has been deleted results in undefined behavior. It may lead to a crash, or the program may appear to work correctly despite accessing invalid memory. - -## 3. Examples -Example C++ program that takes the number of elements as input from the user and creates an array using Dynamic Memory Allocation (DMA). - -``` -#include -using namespace std; -int main() { - int n; - // Ask the user to enter the number of elements - cout << "Enter the number of elements: "; - cin >> n; - - // Dynamically allocate memory for an array of integers - int *arr = new int[n]; - - // Input values into the array - cout << "Enter " << n << " integers:" << std::endl; - for (int i = 0; i < n; ++i) { - cin >> arr[i]; - } - - // Display the elements of the array - cout << "Elements of the array:" << endl; - for (int i = 0; i < n; i++) { - cout << arr[i] << " "; - } - - // Deallocate memory - delete[] arr; - return 0; -} -``` -### Output: -``` -Enter the number of elements: 5 -Enter 5 integers: -1 -2 -3 -4 -5 -Elements of the array: -1 2 3 4 5 - -=== Code Execution Successful === -``` - - - diff --git a/docs/day-12/dynamic-array_and_smart-pointer.md b/docs/day-12/dynamic-array_and_smart-pointer.md deleted file mode 100644 index 1a0e1ebeb..000000000 --- a/docs/day-12/dynamic-array_and_smart-pointer.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -sidebar_position: 2 -title: "Memory Management - Dynamic Arrays and Smart Pointers" -description: "In this tutorial, we will learn about dynamic arrays and smart pointers in C++ programming with the help of examples. Dynamic arrays allow flexible array sizing, and smart pointers manage memory automatically." -sidebar_label: "Dynamic Arrays and Smart Pointers" -slug: memory-management-dynamic-arrays-smart-pointers ---- - -## Dynamic Arrays - -Dynamic arrays are arrays whose size can be determined at runtime. They are created using the `new` operator and must be deallocated using the `delete` operator to avoid memory leaks. - -- **Creating Dynamic Arrays:** - - Syntax: - ```cpp - type* array = new type[size]; - ``` - - Example: - ```cpp - int size = 5; - int* dynamicArray = new int[size]; - ``` - -- **Accessing and Modifying Elements:** - - Elements are accessed and modified using pointers. - - Example: - ```cpp - dynamicArray[0] = 1; // Assigns value to the first element - int value = dynamicArray[1]; // Retrieves value of the second element - ``` - -- **Deallocating Dynamic Arrays:** - - Syntax: - ```cpp - delete[] array; - ``` - - Example: - ```cpp - delete[] dynamicArray; - ``` - -## Smart Pointers - -Smart pointers are a feature of the C++ Standard Library that help manage dynamic memory by ensuring proper deallocation. They are part of the `` header. - -- **Types of Smart Pointers:** - - **`std::unique_ptr`:** - - Ensures that only one pointer can own a resource at a time. - - Automatically deletes the resource when the `unique_ptr` goes out of scope. - - Syntax: - ```cpp - std::unique_ptr ptr(new int(10)); - ``` - - - **`std::shared_ptr`:** - - Allows multiple pointers to share ownership of a resource. - - The resource is deleted when the last `shared_ptr` pointing to it is destroyed. - - Syntax: - ```cpp - std::shared_ptr ptr1 = std::make_shared(10); - std::shared_ptr ptr2 = ptr1; // Shared ownership - ``` - - - **`std::weak_ptr`:** - - Holds a non-owning reference to a resource managed by `std::shared_ptr`. - - Used to break cyclic dependencies between `shared_ptr`s. - - Syntax: - ```cpp - std::weak_ptr weakPtr = sharedPtr; - ``` - diff --git a/docs/day-12/introduction-to-dma.md b/docs/day-12/introduction-to-dma.md deleted file mode 100644 index bdb3b6efb..000000000 --- a/docs/day-12/introduction-to-dma.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -sidebar_position: 1 -title: "Introduction to Dynamic Memory Allocation" -description: "In this tutorial we will explore what dynamic memory allocation is and What is it used for. We will see how dynamic memory allocation is different from static memory allocation" -sidebar_label: "Introduction to Dynamic Memory Allocation" -slug: introduction-to-dma ---- -## 1. What is Dynamic Memory Allocation? -Dynamic memory allocation is a part of memory management techniques in C++. Dynamic memory allocation allows a user to allocated memory at runtime, during the execution. - -DMA empowers C++ programs to request memory from the operating system as needed during runtime. This is particularly useful when the size of data structures isn't known at compile time or needs to adjust dynamically throughout the program's execution. Unlike static memory allocation on the stack (fixed size), DMA leverages the heap, a more flexible memory region that expands and contracts as required. - -![Introduction-to-DMA](../../static/img/day-12/introduction.png) - -## 2. Need of Dynamic Memory Allocation -The question might arise that why do we need Dynamic Memory allocation and what are the benefits of doing so. - -#### The advantages of Dynamic Memory Allocation are: - -* **Flexibility**: It empowers you to allocate memory for data structures whose exact size is unknown until runtime. This is particularly useful for user input, reading data from files, or creating complex data structures like linked lists and trees that require dynamic memory allocation. - -* **Efficiency**: DMA promotes memory usage efficiency by allocating memory only when it's truly needed. This is beneficial for scenarios where data might not be used throughout the entire program, preventing memory waste. - -* **Scalability**: DMA excels at handling data structures that exhibit dynamic size changes during program execution. This makes it ideal for situations where you need to grow arrays, resize collections, or process data of varying sizes. - -## 3. Problem with Static Memory Allocation - -### **Fixed Sizes at Compile Time** -Once intialized, it is not possible to increase or decrease the size of the data structure we are using. - -**For Example** -``` -#include -using namespace std; - -int main() { - int numbers[5]; - cout << "Enter 10 numbers: "; - for (int i = 0; i < 10; i++) { - cin >> numbers[i]; - } -} -``` -In the code above, we have initialized an integer array 'numbers' of size 5, however at during the runtime we are prompting user to enter 10 elements, this will result in a **buffer overflow error** because we are trying to access an index postion that does not exist in the array. - -### Memory Wastage -In case the programmer does not know about the required size of the structure in advance, static memory allocation often leads to wastage of memory. - -**For Example** -``` -#include -using namespace std; - -int main(){ - int numbers[1000]; - int n; - //taking the number of elements as input from the user - cout << "Enter the number of Elements to be enters in the array" << endl; - cin >> n; - for(auto i=0; i < n; i++) - cin >> numbers[i]; - return 0; -} -``` -In the above example, as the programmer does not know how many elements the user is going to enter at runtime, to be on the safe side one often declares a structure of size much greater than required i.e 1000 in this example. - -Let's say the user enters only 5 elements at the runtime, the space of other 995 elements or memory location then gets wasted as those memory blocks are reserved for the array of size 1000 elements and thus cannot be reused by any other structure. - -This phenomenon is often called **Internal Fragmentation**. Internal fragmentation occurs when a statically allocated data structure (like an array or struct) wastes some space within its allocated block. This wasted space cannot be used by other variables because the entire block is reserved for that specific data structure. - - - - - - - - - - diff --git a/docs/day-12/introduction.md b/docs/day-12/introduction.md deleted file mode 100644 index c4a6d6d3d..000000000 --- a/docs/day-12/introduction.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_position: 1 -title: "Introduction to Constructors" -description: "A constructor is a special member function that is executed whenever an object of the class is created. " -sidebar_label: "Introduction" -slug: introduction ---- - -### Definition - -A constructor is a special member function that is executed whenever an object of the class is created. Constructors are used to initialize objects. - -![introduction](../../static/img/day-12/introduction.png) - -### Syntax -The constructor has the same name as the class and does not have a return type. - -```cpp -class ClassName { -public: - ClassName() { - // Constructor body - } -}; -``` \ No newline at end of file diff --git a/docs/day-12/member-init-list.md b/docs/day-12/member-init-list.md deleted file mode 100644 index c9ba284b4..000000000 --- a/docs/day-12/member-init-list.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -sidebar_position: 3 -title: "Member Initializer List" -description: "Constructors can also initialize class members using an initializer list, which can be more efficient." -sidebar_label: "Member Initializer List" -slug: member-init-list ---- - -### What does it mean? - -Constructors can also initialize class members using an initializer list, which can be more efficient. - -```cpp -class Example { -public: - int value; - - // Using Initializer List - Example(int v) : value(v) { - std::cout << "Constructor with Initializer List Called" << std::endl; - } -}; -``` -Using an initializer list is often more efficient than assigning values in the constructor body, especially for complex data members or base class initialization. - -![member-init-list](../../static/img/day-12/member-init-list.png) diff --git a/docs/day-12/memoryleak.md b/docs/day-12/memoryleak.md deleted file mode 100644 index 7e9a0027c..000000000 --- a/docs/day-12/memoryleak.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -sidebar_position: 3 -title: "Memory Management - Memory Leaks and How to Avoid Them" -description: "In this tutorial, we will learn about memory leaks in C++ programming, how to identify them, and best practices to avoid them. Proper memory management is crucial for efficient and reliable software." -sidebar_label: "Memory Leaks and How to Avoid Them" -slug: memory-management-memory-leaks-avoidance ---- - -## Memory Leaks and How to Avoid Them - -Memory leaks occur when dynamically allocated memory is not deallocated, leading to wasted memory resources. They can cause programs to consume more memory over time, potentially leading to system crashes or slowdowns. - -- **Identifying Memory Leaks:** - - Use memory profiling tools like Valgrind, Dr. Memory, or built-in tools in IDEs to detect leaks. - - Regularly review code to ensure every `new` has a corresponding `delete`. - -- **Avoiding Memory Leaks:** - - **Always Pair `new` with `delete`:** - - Ensure that every allocation using `new` or `new[]` is paired with a corresponding `delete` or `delete[]`. - - **Use RAII (Resource Acquisition Is Initialization):** - - Tie resource management to object lifetimes. For example, use stack-allocated objects whose destructors handle resource cleanup. - - Example: - ```cpp - class Resource { - public: - Resource() { data = new int[100]; } - ~Resource() { delete[] data; } - private: - int* data; - }; - ``` - - **Utilize Smart Pointers:** - - Prefer using smart pointers (`std::unique_ptr`, `std::shared_ptr`) which automatically manage memory. - - Example: - ```cpp - std::unique_ptr ptr(new int(10)); // Memory automatically managed - ``` - -By understanding and properly using these tools and techniques, you can effectively manage memory in your C++ programs, avoid common pitfalls, and ensure efficient use of resources. diff --git a/docs/day-12/new_and_delete.md b/docs/day-12/new_and_delete.md deleted file mode 100644 index 488d177ca..000000000 --- a/docs/day-12/new_and_delete.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -sidebar_position: 1 -title: "Memory Management - new and delete Operators" -description: "In this tutorial, we will learn about `new` and `delete` operators in C++ programming with the help of examples. These operators are used for dynamic memory allocation and deallocation in C++." -sidebar_label: "New and Delete Operators" -slug: memory-management-new-delete-operators ---- - - -## Memory Management in C++ -Memory management is a critical aspect of programming in C++, as it involves allocating and deallocating memory dynamically at runtime. Proper memory management ensures that programs run efficiently and avoid issues such as memory leaks, fragmentation, and corruption. - -#### `new` and `delete` Operators - -The `new` and `delete` operators are fundamental for dynamic memory management in C++. They allow you to allocate and deallocate memory during runtime. - -- **`new` Operator:** - - Allocates memory from the heap. - - Returns a pointer to the allocated memory. - - Syntax: - ```cpp - type* pointer = new type; // For a single element - type* pointer = new type[size]; // For an array - ``` - - Example: - ```cpp - int* p = new int; // Allocates memory for a single integer - int* arr = new int[10]; // Allocates memory for an array of 10 integers - ``` - -- **`delete` Operator:** - - Deallocates memory that was previously allocated using `new`. - - Frees the memory, making it available for future allocations. - - Syntax: - ```cpp - delete pointer; // For a single element - delete[] pointer; // For an array - ``` - - Example: - ```cpp - delete p; // Deallocates memory for the single integer - delete[] arr; // Deallocates memory for the array of integers - ``` diff --git a/docs/day-12/object-oriented-programming.md b/docs/day-12/object-oriented-programming.md deleted file mode 100644 index bb5b2560c..000000000 --- a/docs/day-12/object-oriented-programming.md +++ /dev/null @@ -1,388 +0,0 @@ ---- -sidebar_position: 1 -title: "Pointers in Array in C++" -description: "In this tutorial, we will learn about Pointers in Array in C++ programming with the help of examples. A pointer is a variable that stores the memory address of another variable. Pointers are used to store the address of variables, arrays, and functions in C++." -sidebar_label: "Pointers in Array" -slug: oops-in-cpp ---- - - -## C++ OOPS Basics - -## What is OOP - -- OOP stands for Object-Oriented Programming. An object-oriented programming language uses objects in its programming. Programming with object-oriented concepts aims to emulate real-world concepts such as inheritance, polymorphism, abstraction, etc, in a program. -- C++ language was designed with the main intention of adding object-oriented programming to C language. As the size of the program increases, the readability, maintainability, and bug-free nature of the program decrease. The main aim of OOP is to bind together the data and the functions that operate on them so that no other part of the code can access this data except that function. -- This was the major problem with languages like C which relied upon functions or procedures (hence the name procedural programming language). As a result, the possibility of not addressing the problem adequately was high. Also, data was almost neglected, and data security was easily compromised. Using classes solves this problem by modeling the program as a real-world scenario. - -## Basic Elements of OOPS - -- **Classes** - Basic template for creating objects. This is the building block of object-oriented programming. -- **Objects** – Basic run-time entities and instances of a class. -- **Data Abstraction & Encapsulation** – Wrapping data and functions into a single unit. -- **Inheritance** – Properties of one class can be inherited into others. -- **Polymorphism** – Ability to take more than one form. -- **Dynamic Binding** – Code which will execute is not known until the program runs. -- **Message Passing** – message (Information) call format. - -## Benefits of OOPS - -- Programs involving OOP is faster and easier to execute. -- By using objects and inheritance, it provides a clear structure for programs and improves code reusability. -- It makes the code easier to maintain, modify and debug. -- Principle of data hiding helps build secure systems -- Multiple Objects can co-exist without any interference -- Software complexity can be easily managed so that even the creation of fully reusable software with less code and shorter development time is possible. - -## C++ Classes and Objects - -**Classes** - -Classes and structures are somewhat the same but still, they have some differences. For example, we cannot hide data in structures which means that everything is public and can be accessed easily which is a major drawback of the structure because structures cannot be used where data security is a major concern. Another drawback of structures is that we cannot add functions to them. - -Classes are user-defined data types and are a template or blueprint for creating objects. Classes consist of variables and functions which are also called class members. - -The syntax of a class in C++ is - -```cpp -class class_name -{ - //body of the class -}; -``` - -**Objects** - -Objects are instances of a class. To create an object, we just have to specify the class name and then the object’s name. Objects can access class attributes and methods which are bound to the class definition. It is recommended to put these attributes and methods in access modifiers so that their permissions can be better specified to allow them to be used by objects. - -The syntax for defining an object in C++ is - -```cpp -class class_name -{ - //body of the class -}; - -int main() -{ - class_name object_name; //object -} -``` - -## Class Attributes and Methods - -Class attributes and methods are variables and functions that are defined inside the class. They are also known as class members altogether. - -Consider an example below to understand what class attributes are - -```cpp -#include -using namespace std; - -class Employee -{ - string eID; - string eName; - int ePhone; - public: -}; - - -int main() -{ - Employee E; -} -``` - -A class named Employee is built and three members, eId, eName and ePhone are defined inside the class. These three members are variables and are known as class attributes. Now, an object named E is defined in the main. E can access these attributes using the dot operator. But they are not accessible to E unless they are made public. - -```cpp -#include -using namespace std; - -class Employee -{ -public: - string eID; - string eName; - long long int ePhone; -}; - -int main() -{ - Employee Aman; - E.eID = "123456"; - E.eName = "Aryavir Singh"; - E.ePhone = 24402298893; - cout << "Employee having ID " << E.eID << " is " << E.eName << endl; - cout << "Employee contact number : " << E.ePhone; -} -``` -Class methods are nothing but functions that are defined in a class or belong to a class. Methods belonging to a class are accessed by their objects in the same way that they access attributes. Functions can be defined in two ways so that they belong to a class. - -**Define inside the class** - -An example that demonstrates defining functions inside classes is - -```cpp -class Employee -{ -public: - int eID; - string eName; - - void printName() - { - cout << eName << endl; - } -}; -``` - -**Define outside the class** - -Although, a function can be defined outside the class, it needs to be declared inside. Later, we can use the scope resolution operator (::) to define the function outside. - -An example that demonstrates defining functions outside classes is - -```cpp -class Employee -{ -public: - int eID; - string eName; - - void printName(); -}; - -void Employee::printName() -{ - cout << eName << endl; -} -``` - -## Friend Function - -Friend functions are those functions that have the right to access the private data of members of the class even though they are not defined inside the class. It is necessary to write the prototype of the friend function. -Declaring a friend function inside a class does not make that function a member of the class. - -**Properties of a Friend Function** - -- Not in the scope of the class, means it is not a member of the class. -- Since it is not in the scope of the class, it cannot be called from the object of that class. -- Can be declared anywhere inside the class, be it under the public or private access modifier, it will not make any difference. -- It cannot access the members directly by their names, it needs (object_name.member_name) to access any member. - -The syntax for declaring a friend function inside a class is - -```cpp -class class_name -{ - friend return_type function_name(arguments); -}; - -return_type class_name::function_name(arguments) -{ - //body of the function -} -``` -## Encapsulation - -Encapsulation is the first pillar of Object Oriented Programming. It means wrapping up data attributes and methods together. The goal is to keep sensitive data hidden from users. -Encapsulation is considered a good practice where one should always make attributes private for them to become non-modifiable until needed. The data is ultimately more secure as a result of this. Once members are made private, methods to access them or change them should be declared. - -An example of how encapsulation is achieved is - -```cpp -#include -using namespace std; - -class class_name -{ -private: - int a; - -public: - void setA(int num) - { - a = num; - } - - int getA() - { - return a; - } -}; - -int main() -{ - class_name obj; - obj.setA(5); - cout << obj.getA() << endl; -} -``` -## Inheritance - -**What is inheritance** - -The concept of reusability in C++ is supported using inheritance. We can reuse the properties of an existing class by inheriting it and deriving its properties. The existing class is called the base class and the new class which is inherited from the base class is called the derived class. - -The syntax for inheriting a class is - -```cpp -// Derived Class syntax -class derived_class_name : access_modifier base_class_name -{ - // body of the derived class -} -``` -**Types of Inheritance** - -- **Single Inheritance** - -Single inheritance is a type of inheritance in which a derived class is inherited with only one base class. - -For example, we have two classes ClassA and ClassB. If ClassB is inherited from ClassA, it means that ClassB can now implement the functionalities of ClassA. This is single inheritance - -```cpp -class ClassA -{ - //body of ClassA -}; - -//derived from ClassA -class ClassB : public ClassA -{ - //body of ClassB -}; -``` - -- **MUltiple Inheritance** - -Multiple inheritances is a type of inheritance in which one derived class is inherited from more than one base class. - -For example, we have three classes ClassA, ClassB, and ClassC. If ClassC is inherited from both ClassA & ClassB, it means that ClassC can now implement the functionalities of both ClassA & ClassB. This is multiple inheritances. - -```cpp -class ClassA -{ - //body of ClassA -}; - -class ClassB -{ - //body of ClassB -}; - -//derived from ClassB and Class C -class ClassC : public ClassA, public ClassB -{ - //body of ClassC -}; -``` - -- **Hierarchial Inheritance** - -A hierarchical inheritance is a type of inheritance in which several derived classes are inherited from a single base class. - -For example, we have three classes ClassA, ClassB, and ClassC. If ClassB and Class C are inherited from ClassA, it means that ClassB and ClassC can now implement the functionalities of ClassA. This is hierarchical inheritance. - -```cpp -class ClassA -{ - //body of ClassA -}; - -//derived from ClassA -class ClassB : public ClassA -{ - //body of ClassB -}; - -//derived from ClassA -class ClassC : public ClassA -{ - //body of ClassC -}; -``` - -- **Multilevel Inheritance** - -Multilevel inheritance is a type of inheritance in which one derived class is inherited from another derived class. - -For example, we have three classes ClassA, ClassB, and ClassC. If ClassB is inherited from ClassA and ClassC is inherited from ClassB, it means that ClassB can now implement the functionalities of ClassA and ClassC can now implement the functionalities of ClassB. This is multilevel inheritance. - -```cpp -class ClassA -{ - //body of ClassA -}; - -//derived from ClassA -class ClassB : public ClassA -{ - //body of ClassB -}; - -//derived from ClassB -class ClassC : public ClassB -{ - //body of ClassC -}; -``` - -- **Hybrid Inheritance** - -Hybrid inheritance is a combination of different types of inheritances. - -For example, we have four classes ClassA, ClassB, ClassC, and ClassD. If ClassC is inherited from both ClassA and ClassB and ClassD is inherited from ClassC, it means that ClassC can now implement the functionalities of both ClassA and ClassB and ClassD can now implement the functionalities of ClassC. This is multilevel inheritance where both multilevel and multiple inheritances are present. - -```cpp -class ClassA -{ - //body of ClassA -}; - -class ClassB -{ - //body of ClassB -}; - -//derived from ClassA and ClassA -class ClassC : public ClassA, public ClassB -{ - //body of ClassC -}; - -//derived from ClassC -class ClassD : public ClassC -{ - //body of ClassD -}; -``` -## Polymorphism - -Poly means several and morphism means form. Polymorphism is something that has several forms or we can say it as one name and multiple forms. -There are two types of polymorphism: - -- Compile-time polymorphism -- Run time polymorphism - -**Compile Time Polymorphism** - -In compile-time polymorphism, it is already known which function will run. Compile-time polymorphism is also called early binding, which means that you are already bound to the function call and you know that this function is going to run. - -There are two types of compile-time polymorphism: - -- **Function Overloading** -This is a feature that lets us create more than one function and the functions have the same names but their parameters need to be different. When function overloading is implemented in a program and function calls are made, the compiler knows which functions to execute. - -- **Operator Overloading** -This is a feature that lets us define operators working for some specific tasks. Using the operator +, we can add two strings by concatenating and add two numerical values arithmetically at the same time. This is operator overloading. - -**Run Time Polymorphism** - -With run-time polymorphism, the compiler has no idea what will happen when the code is executed. Run time polymorphism is also called late binding. The run-time polymorphism is considered slow because function calls are decided at run time. Run time polymorphism can be achieved from virtual functions. - -**Virtual Functions in C++** - -A member function in the base class that is declared using a virtual keyword is called a virtual function. They can be redefined in the derived class. A function that is in the parent class but redefined in the child class is called a virtual function. diff --git a/docs/day-12/oops-in-cpp.md b/docs/day-12/oops-in-cpp.md deleted file mode 100644 index b581bc7fb..000000000 --- a/docs/day-12/oops-in-cpp.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Object-Oriented Programming (OOP) in C++ - -## Introduction -Object-Oriented Programming (OOP) is a programming paradigm that revolves around the concept of "objects," which can contain data and code to manipulate that data. C++ is a powerful language that supports OOP principles. This document provides an overview of key OOP concepts in C++ along with examples. - -## Key Concepts - -### 1. Classes and Objects -- **Definition**: A class is a blueprint for creating objects. It defines attributes (data members) and methods (functions) that operate on those attributes. -- **Example**: -```cpp -class Rectangle { -private: - int length; - int width; -public: - void setDimensions(int len, int wid) { - length = len; - width = wid; - } - int area() { - return length * width; - } -}; -``` -- **Usage**: -```cpp -Rectangle rect1, rect2; -rect1.setDimensions(5, 3); -cout << "Area of rect1: " << rect1.area() << endl; - -``` - -### 2. Encapsulation -- **Definition**: Encapsulation is the bundling of data and methods within a single unit (class). Access specifiers control the access to class members. -- **Example**: -```cpp -class Circle { -private: - double radius; -public: - void setRadius(double r) { - if (r > 0) - radius = r; - } - double getArea() { - return 3.14 * radius * radius; - } -}; - -``` -- **Usage**: -```cpp -Circle circle; -circle.setRadius(5.0); -cout << "Area of circle: " << circle.getArea() << endl; -``` - -### 3. Inheritance -- **Definition**: Inheritance allows a class (subclass/derived class) to inherit properties and behavior from another class (superclass/base class). -- **Example**: -```cpp -class Animal { -public: - void eat() { - cout << "Animal is eating" << endl; - } -}; -class Dog : public Animal { -public: - void bark() { - cout << "Dog is barking" << endl; - } -}; - -``` -- **Usage**: -```cpp -Dog dog; -dog.eat(); // inherited from Animal -dog.bark(); -``` - -### 4. Polymorphism -- **Definition**: Polymorphism allows objects of different classes to be treated as objects of a common superclass. It can be achieved through function overloading and function overriding. -- **Example**: -```cpp -// Function overloading -int add(int a, int b) { - return a + b; -} -double add(double a, double b) { - return a + b; -} - -// Function overriding -class Shape { -public: - virtual double area() { - return 0; - } -}; -class Circle : public Shape { -public: - double area() override { - return 3.14 * radius * radius; - } -}; - -``` -- **Usage**: -```cpp -cout << "Sum of 2 and 3: " << add(2, 3) << endl; -Circle circle; -cout << "Area of circle: " << circle.area() << endl; -``` - -### 5. Abstraction -- **Definition**: Abstraction involves hiding the complex implementation details and showing only the essential features of the object. -- **Example**: -```cpp -class Car { -private: - Engine engine; - // Other private members... -public: - void start() { - engine.start(); - } - // Other public methods... -}; - - -``` -- **Usage**: -```cpp -Car car; -car.start(); -``` \ No newline at end of file diff --git a/docs/day-12/oops.md b/docs/day-12/oops.md deleted file mode 100644 index 0aecd6af8..000000000 --- a/docs/day-12/oops.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -sidebar_position: 1 -title: "Object Oriented Programming in C++" -description: "Object-oriented programming – As the name suggests uses objects in programming. Object-oriented programming aims to implement real-world entities like inheritance, hiding, polymorphism, etc. in programming. " -sidebar_label: "Object Oriented Programming" -slug: oops ---- - -## What is Object Oriented Programming in C++? -Object means a real word entity such as pen, chair, table etc. Object-Oriented Programming is a methodology or paradigm to design a program using classes and objects. It simplifies the software development and maintenance by providing some concepts: -1) Object -2) Class -3) Inheritance -4) Polymorphism -5) Abstraction -6) Encapsulation -7) Dynamic Binding -8) Message Passing - -IMAGE FILE: -![OOP in CPP](C:\Users\Shruti\OneDrive\Desktop\30-Days-Of-CPP\static\img\day-12\oop1.png) - -## Basic characteristics of Object Oriented Programming -1) Object- An Object is an identifiable entity with some characteristics and behavior. An Object is an instance of a Class. When a class is defined, no memory is allocated but when it is instantiated (i.e. an object is created) memory is allocated. For example: chair, pen, table, keyboard, bike etc. It can be physical and logical. - -2)Class- Collection of objects is called class. It is a logical entity. A Class in C++ is the foundational element that leads to Object-Oriented programming. A class instance must be created in order to access and use the user-defined data type's data members and member functions. An object's class acts as its blueprint. - -3)Inheritance- When one object acquires all the properties and behaviours of parent object i.e. known as inheritance. It provides code reusability. It is used to achieve runtime polymorphism. - -4)Polymorphism- The word polymorphism means having many forms. In simple words, we can define polymorphism as the ability of a message to be displayed in more than one form. A person at the same time can have different characteristics. A man at the same time is a father, a husband, and an employee. So the same person possesses different behavior in different situations. This is called polymorphism.C++ supports operator overloading and function overloading- - -I)Operator Overloading: The process of making an operator exhibit different behaviors in different instances is known as operator overloading. -II)Function Overloading: Function overloading is using a single function name to perform different types of tasks. Polymorphism is extensively used in implementing inheritance. - -5)Abstraction-Data abstraction is one of the most essential and important features of object-oriented programming in C++. Abstraction means displaying only essential information and hiding the details. Data abstraction refers to providing only essential information about the data to the outside world, hiding the background details or implementation. - -6)Encapsulation-In normal terms, Encapsulation is defined as wrapping up data and information under a single unit. In Object-Oriented Programming, Encapsulation is defined as binding together the data and the functions that manipulate them. - -7)Dynamic Binding- In dynamic binding, the code to be executed in response to the function call is decided at runtime. C++ has virtual functions to support this. Because dynamic binding is flexible, it avoids the drawbacks of static binding, which connected the function call and definition at build time. - -8)Message Passing- Objects communicate with one another by sending and receiving information. A message for an object is a request for the execution of a procedure and therefore will invoke a function in the receiving object that generates the desired results. Message passing involves specifying the name of the object, the name of the function, and the information to be sent. \ No newline at end of file diff --git a/docs/day-12/pointers_to_structures.md b/docs/day-12/pointers_to_structures.md deleted file mode 100644 index 655ddf74d..000000000 --- a/docs/day-12/pointers_to_structures.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -sidebar_position: 3 -title: "Pointers to structures in C++" -description: "In this tutorial, we will learn about pointers in structures in C++ programming with the help of examples. A pointer variable stores the address of the sturcture. " -sidebar_label: "Pointers to Structures" -slug: pointers-to-structures-in-cpp ---- - -TASK: - -1. For what type of data types can pointer variable be created? -2. Give an example of structure stored in a pointer variable? -3. For what is the arrow ( -> ) operator used for? -4. Write a C++ program to access members of a structure . - -Add more... - -IMAGE FILE: -![String in CPP](../../static/img/day-11/reference-in-cpp.png) \ No newline at end of file diff --git a/docs/day-12/problems-in-dma.md b/docs/day-12/problems-in-dma.md deleted file mode 100644 index 5a409bcc6..000000000 --- a/docs/day-12/problems-in-dma.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -sidebar_position: 3 -title: "Problems due to dynamic memory allocation" -description: "In this tutorial we will apply the concept of dynamic memory allocation in C++. The purpose of this tutorial is to explore how the new and delete works in C++." -sidebar_label: "Problems due to dynamic memory allocation in C++" -slug: problems-in-dma ---- - -## 1. Memory Leakage -Memory leakage in C++ occurs when memory that is allocated dynamically is not deallocated properly, leading to a loss of memory that cannot be reused by the program. This can result in inefficient memory usage and can eventually cause the program to run out of memory. Memory leaks can be a significant issue, especially in long-running programs or systems where memory resources are limited. - -### Failure to Deallocate Dynamically Allocated Memory: -When memory is allocated using the keywords like `new` it is the responsibility of the programmer to deallocate the assigned memory after it is no longer needed, failure in doing so might lead to the memory leakage problem. - -``` -int main() { - int *ptr = new int; // Allocate memory - // No deallocation of memory - return 0; -} -``` -### Losing the pointer to Dynamically allocated memory -If the memory is allocated dynamically and pointer which is storing the address of the assigned memory gets overwritten without proper deallocation of the allocated memory it leads to memory leakage. - -``` -int main() { - int *ptr = new int; // Allocate memory - ptr = nullptr; // overwriting and losing the reference of allocated memory - return 0; -} - -``` -![Introduction-to-DMA](../../static/img/day-12/problems.png) - -## 2. Dangling pointers -Dangling pointers are pointers that point to memory that has been deallocated, freed, or otherwise invalidated. Accessing or dereferencing a dangling pointer can lead to undefined behavior, crashes, or unexpected results. - -When memory allocated using new is deallocated using delete, any pointers pointing to that memory become dangling pointers. If these pointers are accessed or dereferenced after deallocation, it leads to undefined behavior. - -``` -int* ptr = new int; // Allocate memory -delete ptr; // Deallocate memory -// ptr becomes a dangling pointer - -``` -After memory is deallocated, it can be reused for other purposes. If a dangling pointer is dereferenced after deallocation, it might accidentally access unrelated data stored in the same memory location, leading to unexpected behavior or program crashes. - -## 3. External Fragmentation -External fragmentation is a memory management issue that occurs when using dynamic memory allocation (DMA) in C++. It arises when there's sufficient free memory available in total to satisfy a memory allocation request, but the free memory is scattered across multiple non-contiguous blocks. These fragmented blocks are unusable because programs typically require contiguous memory to store data structures. - -Even though there's enough total free space to fit a new box (memory allocation request), it might not fit in any of the existing free spaces because they're not contiguous. -This can lead to situations where your program has to request more memory from the operating system even though there's technically "free" memory available. - -### Problems due to external fragmentation -* **Reduced Memory Efficiency**: The program might request more memory from the operating system even though there's technically free memory available. -* **Performance Degradation**: Frequent memory allocation requests can lead to performance overhead. -* **Program Crashes**: In severe cases, external fragmentation can make it impossible to allocate memory even when there's seemingly enough free memory, causing program crashes. - - diff --git a/docs/day-12/structures.md b/docs/day-12/structures.md deleted file mode 100644 index d4a251e43..000000000 --- a/docs/day-12/structures.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -sidebar_position: 1 -title: "Structures in C++" -description: "In this tutorial, we will learn about Structures in C++ programming with the help of examples. A structure is a collection of variables of different data types and member functions under a single name. It is similar to a class as both hold a collection of data of different data types." -sidebar_label: "Structures" -slug: structures-in-cpp ---- - -TASK: - -1. Define a structure in C++? -2. State the syntax of a structure in C++. -3. How is a Structure similar to class in C++? -4. How much memory is allocated to a Structure in C++ when it is declared? -5. Write a C++ program defining a structure of an employee with members: ID, Name, Position, Designation? -6. How to access the members of a structure in C++? - -Add More... - -IMAGE FILE: -![Multidimentional-array](../../static/img/day-11/pointers.png) \ No newline at end of file diff --git a/docs/day-12/structures_and_functions.md b/docs/day-12/structures_and_functions.md deleted file mode 100644 index 944221275..000000000 --- a/docs/day-12/structures_and_functions.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -sidebar_position: 2 -title: "Structures and Functions in C++" -description: "In this tutorial, we will learn ablout method and different ways to pass a structure in a function" -sidebar_label: "Structures and Functions in C++" -slug: functtions-of-structures-in-cpp ---- - -TASK: - -1. What is a Pointer in C++? -2. Explain the Syntax of a Pointer in C++. -3. How to Declare and Define a Pointer in C++? -4. How to Access the Value of a Pointer in C++? -5. How to Access the Address of a Pointer in C++? -6. How to Declare and Define a Pointer to a Pointer in C++? - -Add more... - -IMAGE FILE: -![Function in CPP](../../static/img/day-11/array-with-pointers.png) diff --git a/docs/day-12/types-of-constructors.md b/docs/day-12/types-of-constructors.md deleted file mode 100644 index 45f70ee48..000000000 --- a/docs/day-12/types-of-constructors.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -sidebar_position: 2 -title: "Types of Constructors" -description: "Constructors can be classified based on in which situations they are being used." -sidebar_label: "Types of Constructors" -slug: types-of-constructors ---- - -Constructors can be classified based on in which situations they are being used. Each type of constructor serves a different purpose, from providing default values to copying the state from another object. - -![types-of-constructors](../../static/img/day-12/types-of-constructors.png) - -## 1. Default Constructor -A constructor that takes no arguments. - -```cpp -class Example { -public: - Example() { - std::cout << "Default Constructor Called" << std::endl; - } -}; -``` - -## 2. Parameterized Constructor -A constructor that takes arguments to initialize an object with specific values. - -```cpp -class Example { -public: - int value; - - Example(int v) { - value = v; - std::cout << "Parameterized Constructor Called with value: " << value << std::endl; - } -}; -``` - -## 3. Copy Constructor -A constructor that initializes an object using another object of the same class. - -```cpp -class Example { -public: - int value; - - Example(int v) { - value = v; - } - - Example(const Example &obj) { - value = obj.value; - std::cout << "Copy Constructor Called" << std::endl; - } -}; -``` - -## 4. Move Constructor - Move constructors are special member functions used to transfer resources from one object to another. Unlike copy constructors, which create a new copy of an object, move constructors "move" the resources, leaving the original object in a valid but unspecified state. - -Move constructors are particularly useful when dealing with resource-intensive objects like those managing dynamic memory, file handles, or network connections. - -```cpp -class ClassName { -public: - ClassName(ClassName&& other) { - // Move constructor body - } -}; -``` - - diff --git a/docs/day-13/Function-overloading.md b/docs/day-13/Function-overloading.md deleted file mode 100644 index c1962f873..000000000 --- a/docs/day-13/Function-overloading.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -sidebar_position: 4 -title: "Function Overloading in C++" -description: "In this tutorial, we will learn about function overloading in C++ with the help of examples. Function overloading allows us to create multiple functions with the same name, each performing different tasks based on their parameters." -sidebar_label: "Function Overloading" -slug: function-overloading ---- - -## 1. What is Function Overloading in C++? - -Function overloading in C++ allows us to create multiple functions with the same name but different parameters. This enables us to perform different tasks using the same function name, enhancing code readability and reusability. - -![Function overloading in CPP](../../static/img/day-13/function-overloading.png) - -## 2. Why Use Function Overloading? - -Function overloading is useful when: -- We need to perform similar operations on different data types. -- We want to avoid using different function names for similar tasks, thus making the code more intuitive and easier to maintain. - -## 3. Syntax of Function Overloading - -To overload a function, define multiple functions with the same name but different parameters (different number, type, or order of parameters). - -```cpp -void functionName(int a); -void functionName(double a); -void functionName(int a, double b); -``` - -## 4. Examples of Function Overloading - -### 1. Overloading Functions Based on Parameter Type - -```cpp -#include -using namespace std; - -void print(int i) { - cout << "Printing int: " << i << endl; -} - -void print(double f) { - cout << "Printing float: " << f << endl; -} - -int main() { - print(5); // Calls the first print function - print(3.14); // Calls the second print function - return 0; -} -``` - -### 2. Overloading Functions Based on Number of Parameters - -```cpp -#include -using namespace std; - -void display(int a) { - cout << "Displaying integer: " << a << endl; -} - -void display(int a, double b) { - cout << "Displaying integer and double: " << a << " and " << b << endl; -} - -int main() { - display(5); // Calls the first display function - display(5, 3.14); // Calls the second display function - return 0; -} -``` - -### 3. Overloading Functions Based on Parameter Order - -```cpp -#include -using namespace std; - -void show(int a, char b) { - cout << "Integer: " << a << " and character: " << b << endl; -} - -void show(char b, int a) { - cout << "Character: " << b << " and integer: " << a << endl; -} - -int main() { - show(100, 'A'); // Calls the first show function - show('B', 200); // Calls the second show function - return 0; -} -``` - -## 5. Rules for Function Overloading - -When overloading functions, the compiler must differentiate between the functions based on: -- The number of parameters -- The types of parameters -- The order of parameters - -However, you cannot overload functions by only changing the return type. - -**Example of Incorrect Overloading:** - -```cpp -// This will cause a compile-time error -int multiply(int a, int b); -double multiply(int a, int b); -``` - -## 6. Benefits of Function Overloading - -- **Improves code readability**: Function names are intuitive and consistent. -- **Reduces code complexity**: Similar operations grouped under the same function name. -- **Enhances maintainability**: Easier to manage and understand the code. - -## 7. Conclusion - -Function overloading is a powerful feature in C++ that enhances the flexibility and readability of the code. By allowing multiple functions with the same name but different parameters, it enables us to write cleaner, more maintainable programs. Understanding and utilizing function overloading effectively can significantly improve your programming skills and efficiency. - ---- \ No newline at end of file diff --git a/docs/day-13/_category_.json b/docs/day-13/_category_.json deleted file mode 100644 index 7ce246702..000000000 --- a/docs/day-13/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Day 13", - "position": 14, - "link": { - "type": "generated-index" - } - } - diff --git a/docs/day-13/about_oops.md b/docs/day-13/about_oops.md deleted file mode 100644 index 69fb452e9..000000000 --- a/docs/day-13/about_oops.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -sidebar_position: 1 -title: "Concepts of OOP - Introduction to Object-Oriented Programming" -description: "In this tutorial, we will learn about the fundamentals of Object-Oriented Programming (OOP), including its core principles and benefits." -sidebar_label: "Introduction to OOP" -slug: concepts-of-oop-introduction ---- - -## Introduction to Object-Oriented Programming - -Object-Oriented Programming (OOP) is a programming paradigm based on the concept of "objects", which can contain data and code to manipulate that data. OOP is designed to increase the flexibility and maintainability of programs. - -- ### **Core Principles of OOP:** - 1. **Encapsulation:** - - Encapsulation is the mechanism of hiding the internal details of an object and only exposing a controlled interface. - - Example: - ```cpp - class Person { - private: - string name; - int age; - public: - void setName(string n) { name = n; } - string getName() { return name; } - }; - ``` - - 2. **Abstraction:** - - Abstraction means representing essential features without including background details. - - It allows focusing on what an object does instead of how it does it. - - Example: - ```cpp - class Animal { - public: - virtual void makeSound() = 0; // Pure virtual function - }; - class Dog : public Animal { - public: - void makeSound() override { - cout << "Bark" << endl; - } - }; - ``` - - 3. **Inheritance:** - - Inheritance allows a class to inherit properties and behavior from another class. - - It promotes code reusability. - - Example: - ```cpp - class Vehicle { - public: - string brand = "Ford"; - }; - class Car : public Vehicle { - public: - string model = "Mustang"; - }; - ``` - - 4. **Polymorphism:** - - Polymorphism means "many forms" and allows methods to do different things based on the object it is acting upon. - - Example: - ```cpp - class Shape { - public: - virtual void draw() { - cout << "Drawing Shape" << endl; - } - }; - class Circle : public Shape { - public: - void draw() override { - cout << "Drawing Circle" << endl; - } - }; - ``` - -- **Benefits of OOP:** - - **Modularity:** Code is divided into classes and objects, making it easier to manage and understand. - - **Reusability:** Classes can be reused in other programs. - - **Scalability:** Easy to add new features or objects. - - **Maintainability:** Easier to update and maintain code. \ No newline at end of file diff --git a/docs/day-13/oops_classes.md b/docs/day-13/oops_classes.md deleted file mode 100644 index 27866facb..000000000 --- a/docs/day-13/oops_classes.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -sidebar_position: 2 -title: "Concepts of OOP - Classes" -description: "In this tutorial, we will learn about the concept of classes in Object-Oriented Programming (OOP) with the help of examples. Classes are the blueprint for creating objects." -sidebar_label: "Classes" -slug: concepts-of-oop-classes ---- - -## Classes - -Classes are the fundamental building blocks of Object-Oriented Programming (OOP). A class is a blueprint for creating objects, providing initial values for state (member variables or attributes), and implementations of behavior (member functions or methods). - -- ### **Defining a Class:** - - A class definition starts with the keyword `class` followed by the class name and a pair of curly braces `{}`. - - Member variables and member functions are declared within the class body. - - Syntax: - ```cpp - class ClassName { - public: - // Member variables - // Member functions - }; - ``` - -- **Example:** - - Defining a simple class `Car`: - ```cpp - class Car { - public: - string brand; - string model; - int year; - - void displayInfo() { - cout << "Brand: " << brand << endl; - cout << "Model: " << model << endl; - cout << "Year: " << year << endl; - } - }; - ``` - -In this example, `Car` is a class with three member variables (`brand`, `model`, `year`) and one member function (`displayInfo`). diff --git a/docs/day-13/oops_objects.md b/docs/day-13/oops_objects.md deleted file mode 100644 index 80035ba5c..000000000 --- a/docs/day-13/oops_objects.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -sidebar_position: 3 -title: "Concepts of OOP - Objects" -description: "In this tutorial, we will learn how to create and use objects in Object-Oriented Programming (OOP) with the help of examples. Objects are instances of classes." -sidebar_label: "Objects" -slug: concepts-of-oop-objects ---- - -## Objects - -Objects are instances of classes. They are created using the class definition and can be used to access member variables and functions. - -- **Creating an Object:** - - Syntax: - ```cpp - ClassName objectName; - ``` - - Example: - ```cpp - Car myCar; - ``` - -- **Accessing Members:** - - Member variables and functions are accessed using the dot operator (`.`). - - Example: - ```cpp - myCar.brand = "Toyota"; - myCar.model = "Corolla"; - myCar.year = 2020; - myCar.displayInfo(); - ``` - -- **Example Program:** - - Creating and using an object of the `Car` class: - ```cpp - #include - using namespace std; - - class Car { - public: - string brand; - string model; - int year; - - void displayInfo() { - cout << "Brand: " << brand << endl; - cout << "Model: " << model << endl; - cout << "Year: " << year << endl; - } - }; - - int main() { - Car myCar; - myCar.brand = "Toyota"; - myCar.model = "Corolla"; - myCar.year = 2020; - myCar.displayInfo(); - - return 0; - } - ``` - -In this example, an object `myCar` of the class `Car` is created, and its member variables are accessed and modified. diff --git a/docs/day-14/Create-References.md b/docs/day-14/Create-References.md deleted file mode 100644 index 7c2f3591f..000000000 --- a/docs/day-14/Create-References.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -sidebar_position: 1 -title: "C++ References" -description: "In this tutorial, we will learn about the hoe to create References in C++." -sidebar_label: "Create References" -slug: C++ References ---- - -## Creating References - -A reference variable is a "reference" to an existing variable, and it is created with the & operator: - - - ```cpp - string food = "Pizza"; // food variable -string &meal = food; // reference to food - - ``` - - Now, we can use either the variable name food or the reference name meal to refer to the food variable: - ## Example - - ```cpp - string food = "Pizza"; -string &meal = food; - -cout << food << "\n"; // Outputs Pizza -cout << meal << "\n"; // Outputs Pizza - - ``` - - \ No newline at end of file diff --git a/docs/day-14/Memory-Address.md b/docs/day-14/Memory-Address.md deleted file mode 100644 index f4863e996..000000000 --- a/docs/day-14/Memory-Address.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_position: 2 -title: "C++ Memory Address" -description: "In this tutorial, we will learn about the concept of C++ memory Address ." -sidebar_label: "C++ Memory Address" -slug: memory address in c++ ---- - -## Memory Address - -In the example from the previous page, the & operator was used to create a reference variable. But it can also be used to get the memory address of a variable; which is the location of where the variable is stored on the computer. - -When a variable is created in C++, a memory address is assigned to the variable. And when we assign a value to the variable, it is stored in this memory address. - -To access it, use the & operator, and the result will represent where the variable is stored: - -- ### **Example** - - ```cpp - string food = "Pizza"; - - cout << &food; // Outputs 0x6dfed4 - ``` - -Note: The memory address is in hexadecimal form (0x..). Note that you may not get the same result in your program. diff --git a/docs/day-14/_category_.json b/docs/day-14/_category_.json deleted file mode 100644 index c522106bb..000000000 --- a/docs/day-14/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Day 14", - "position": 15, - "link": { - "type": "generated-index" - } - } - \ No newline at end of file diff --git a/docs/day-14/category_.json b/docs/day-14/category_.json deleted file mode 100644 index 17177565c..000000000 --- a/docs/day-14/category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Day 14", - "position": 15, - "link": { - "type": "generated-index" - } - } - \ No newline at end of file diff --git a/docs/day-14/constructor.md b/docs/day-14/constructor.md deleted file mode 100644 index c22691f4c..000000000 --- a/docs/day-14/constructor.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -sidebar_position: 1 -title: "Constructors in C++ - Introduction and Purpose" -description: "In this tutorial, we will learn about constructors in C++ programming, their purpose, and how they are used to initialize objects." -sidebar_label: "Constructors- Introduction and Purpose" -slug: constructors-in-cpp-introduction ---- - -## Constructors in C++ - Introduction and Purpose - -A constructor is a special member function of a class that is automatically called when an object of that class is created. It is used to initialize the object's state. - -- ### **Purpose of Constructors:** - - **Initialization:** Constructors are primarily used to initialize the object's member variables to their initial values. When an object of a class is created, its member variables might need to be set to specific values to ensure the object's integrity and consistency. Constructors provide a means to achieve this initialization seamlessly. - - **Example:** - ```cpp - class Car { - public: - string brand; - string model; - int year; - - // Constructor for initialization - Car() { - brand = "Unknown"; - model = "Unknown"; - year = 0; - } - }; - ``` - - **Memory Allocation:** Constructors allocate memory for the object if necessary. In some cases, constructors are involved in memory allocation for the object. For instance, if the object requires dynamic memory allocation, such as when creating arrays or allocating memory for internal data structures, constructors can handle this allocation process, ensuring that the object has the necessary memory resources. - - **Example:** - ```cpp - class DynamicArray { - private: - int *arr; - int size; - - public: - // Constructor for memory allocation - DynamicArray(int s) { - size = s; - arr = new int[size]; - } - // Destructor for deallocating memory - ~DynamicArray() { - delete[] arr; - } - }; - ``` - - **Resource Acquisition:** Constructors can also be responsible for acquiring external resources required by the object, such as file handles, network connections, or database connections. By acquiring these resources during object initialization, constructors ensure that the object is fully operational and ready to perform its intended tasks without external dependencies. - - **Example:** - ```cpp - class FileHandler { - private: - FILE *file; - - public: - // Constructor for acquiring file resource - FileHandler(const char *filename) { - file = fopen(filename, "w"); - if (!file) { - cerr << "Error opening file" << endl; - } - } - // Destructor for releasing file resource - ~FileHandler() { - if (file) { - fclose(file); - } - } - }; - ``` - - - **Object Initialization:** Perhaps most importantly, constructors guarantee that the object is in a valid and consistent state when it is created. This aspect is crucial for maintaining the integrity of the object and preventing potential errors or unexpected behavior during its usage. Constructors enforce any necessary constraints or conditions to ensure that the object is properly initialized and ready for use. - - **Example:** - ```cpp - class Person { - private: - string name; - int age; - - public: - // Constructor for object initialization - Person(string n, int a) { - if (a < 0) { - cerr << "Invalid age" << endl; - age = 0; // Set default age - } else { - name = n; - age = a; - } - } - }; - ``` diff --git a/docs/day-14/destructor.md b/docs/day-14/destructor.md deleted file mode 100644 index 68a2bc9fb..000000000 --- a/docs/day-14/destructor.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -sidebar_position: 3 -title: "Destructors in C++ - Introduction and Usage" -description: "In this tutorial, we will learn about destructors in C++ programming, their purpose, and how they are used to clean up resources and release memory when objects are destroyed." -sidebar_label: "Destructors" -slug: destructors-in-cpp-introduction ---- - -## Destructors in C++ - Introduction and Usage - -A destructor is a special member function of a class that is automatically called when an object is destroyed. It is used to release resources and clean up memory allocated by the object. - -- ### **Purpose of Destructors:** - - **Resource Deallocation:** Destructors release resources acquired by the object during its lifetime, such as memory, file handles, database connections, etc. This helps prevent resource leaks and ensures efficient resource management. - - - **Cleanup Operations:** Destructors perform cleanup operations to ensure that the object is properly disposed of before its memory is reclaimed. This may include releasing dynamically allocated memory, closing open files, releasing locks, or any other necessary cleanup tasks. - -- **Example:** - ```cpp - class Car { - public: - string brand; - string model; - int year; - - // Destructor - ~Car() { - // Cleanup code - } - }; - - -### Advanced Usage: - - - **Custom Resource Management:** Destructors enable custom resource management techniques such as RAII (Resource Acquisition Is Initialization), where resource acquisition is tied to object lifetime. This pattern ensures that resources are automatically released when objects go out of scope, leading to more robust and exception-safe code. - - - **Handling Exceptions:** Destructors play a crucial role in exception handling. If an exception occurs during object construction, the destructor is automatically invoked to clean up any resources allocated before the exception was thrown. This helps maintain program integrity by ensuring that resources are properly released, even in the presence of exceptions. - - - **Finalization and Cleanup:** Destructors are used for finalization and cleanup tasks beyond simple resource deallocation. This includes tasks like logging finalization messages, updating persistent storage, or performing additional cleanup operations specific to the object's role within the application. - - - **Scoped Resource Management:** Destructors enable scoped resource management, where resources are acquired and released within a well-defined scope. This ensures that resources are released as soon as they are no longer needed, minimizing resource contention and improving overall system efficiency. \ No newline at end of file diff --git a/docs/day-14/stl-algorithms.md b/docs/day-14/stl-algorithms.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/day-14/stl-containers.md b/docs/day-14/stl-containers.md deleted file mode 100644 index 3f74069ed..000000000 --- a/docs/day-14/stl-containers.md +++ /dev/null @@ -1,122 +0,0 @@ -### 2. stl-containers.md -```markdown ---- -sidebar_position: 2 -title: "STL Containers" -description: "In this tutorial, we will learn about various containers provided by the Standard Template Library (STL) in C++ with the help of examples. Containers are data structures that store objects and data." -sidebar_label: "STL Containers" -slug: stl-containers-in-cpp ---- - -## STL Containers - -### What are Containers in STL? -Containers are objects that store collections of other objects. The STL provides several different types of containers, each optimized for specific kinds of data manipulation. - -### Sequence Containers -1. **Vector**: A dynamic array that can grow in size. - ```cpp - #include - #include - - int main() { - std::vector vec = {1, 2, 3, 4, 5}; - vec.push_back(6); // Add element at the end - - for (int i : vec) { - std::cout << i << " "; - } - return 0; - } -2. **List**: A doubly-linked list. - ```cpp - #include - #include - - int main() { - std::list lst = {1, 2, 3, 4, 5}; - lst.push_back(6); // Add element at the end - - for (int i : lst) { - std::cout << i << " "; - } - return 0; - } -3. **Deque**: A double-ended queue that allows fast insertion and deletion at both ends. - ```cpp - #include - #include - - int main() { - std::deque deq = {1, 2, 3, 4, 5}; - deq.push_front(0); // Add element at the front - - for (int i : deq) { - std::cout << i << " "; - } - return 0; - } -### Associative Containers - -1. **Set**: A collection of unique elements. - ```cpp - #include - #include - - int main() { - std::set mySet = {1, 2, 3, 4, 5}; - mySet.insert(6); // Insert element - - for (int i : mySet) { - std::cout << i << " "; - } - return 0; -} -2. **Map**: A collection of key-value pairs. - ```cpp - #include - #include - - int main() { - std::map myMap = {{1, "one"}, {2, "two"}, {3, "three"}}; - myMap[4] = "four"; // Insert element - - for (const auto& pair : myMap) { - std::cout << pair.first << ": " << pair.second << "\n"; - } - return 0; - } -### Container Containers - -1. **Stack**: A container adaptor that gives the functionality of a stack (LIFO). - ```cpp - #include - #include - - int main() { - std::stack myStack; - myStack.push(1); - myStack.push(2); - - while (!myStack.empty()) { - std::cout << myStack.top() << " "; - myStack.pop(); - } - return 0; - } -2. **Queue**: A container adaptor that gives the functionality of a queue (FIFO). - ```cpp - #include - #include - - int main() { - std::queue myQueue; - myQueue.push(1); - myQueue.push(2); - - while (!myQueue.empty()) { - std::cout << myQueue.front() << " "; - myQueue.pop(); - } - return 0; - } diff --git a/docs/day-14/stl-introduction.md b/docs/day-14/stl-introduction.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/day-14/stl-iterators.md b/docs/day-14/stl-iterators.md deleted file mode 100644 index 06f8ea9f2..000000000 --- a/docs/day-14/stl-iterators.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -sidebar_position: 4 -title: "STL Iterators" -description: "In this tutorial, we will learn about Iterators in the Standard Template Library (STL) in C++ with the help of examples. Iterators are used to point to the elements of containers." -sidebar_label: "STL Iterators" -slug: stl-iterators-in-cpp ---- - -## STL Iterators - -### What are Iterators in STL? -Iterators are objects used to iterate through the elements of a container. They act as pointers and provide a way to access elements in a container sequentially. - -### Types of Iterators -1. **Input Iterator**: Reads elements from a sequence. -2. **Output Iterator**: Writes elements to a sequence. -3. **Forward Iterator**: Reads and writes elements sequentially. -4. **Bidirectional Iterator**: Supports moving forward and backward through a sequence. -5. **Random Access Iterator**: Provides random access to elements, supporting arithmetic operations like addition and subtraction. - -### Example: -```cpp -#include -#include - -int main() { - std::vector vec = {1, 2, 3, 4, 5}; - - // Forward iterator example - std::cout << "Forward traversal using iterators: "; - for (auto it = vec.begin(); it != vec.end(); ++it) { - std::cout << *it << " "; - } - - // Reverse iterator example - std::cout << "\nReverse traversal using reverse iterators: "; - for (auto rit = vec.rbegin(); rit != vec.rend(); ++rit) { - std::cout << *rit << " "; - } - - return 0; -} diff --git a/docs/day-14/typesofconstructor.md b/docs/day-14/typesofconstructor.md deleted file mode 100644 index 8dcf86069..000000000 --- a/docs/day-14/typesofconstructor.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -sidebar_position: 2 -title: "Types of Constructors in C++" -description: "In this tutorial, we will learn about different types of constructors in C++ programming, including default, parameterized, copy, and delegating constructors." -sidebar_label: "Types of Constructors" -slug: types-of-constructors-in-cpp ---- - -## Types of Constructors in C++ - -There are several types of constructors in C++ that serve different purposes and have different ways of initializing objects. - -- ### **Default Constructor:** - - A constructor with no parameters. - - Automatically called when an object is created with no arguments. - - Example: - ```cpp - class Car { - public: - // Default Constructor - Car() { - // Initialization code - } - }; - ``` - -- ### **Parameterized Constructor:** - - A constructor with parameters. - - Used to initialize member variables with values provided during object creation. - - Example: - ```cpp - class Car { - public: - // Parameterized Constructor - Car(string b, string m, int y) { - brand = b; - model = m; - year = y; - } - }; - ``` - -- ### **Copy Constructor:** - - A constructor that creates a new object as a copy of an existing object. - - Automatically called when a new object is initialized with an existing object. - - Example: - ```cpp - class Car { - public: - // Copy Constructor - Car(const Car &other) { - brand = other.brand; - model = other.model; - year = other.year; - } - }; - ``` - -- ### **Delegating Constructor:** - - A constructor that calls another constructor of the same class. - - Used to avoid code duplication by reusing initialization logic. - - Example: - ```cpp - class Car { - public: - // Delegating Constructor - Car() : Car("Unknown", "Unknown", 0) {} - }; - ``` - -Each type of constructor serves a specific purpose and allows for flexible object initialization in C++. - diff --git a/docs/day-15/Abstraction.md b/docs/day-15/Abstraction.md deleted file mode 100644 index c32968a43..000000000 --- a/docs/day-15/Abstraction.md +++ /dev/null @@ -1,138 +0,0 @@ -# Abstraction in C++ - -Data abstraction is one of the most essential and important features of object-oriented programming in C++. Abstraction means displaying only essential information and hiding the details. Data abstraction refers to providing only essential information about the data to the outside world, hiding the background details or implementation. - -Consider a real-life example of a man driving a car. The man only knows that pressing the accelerator will increase the speed of the car or applying brakes will stop the car but he does not know how on pressing the accelerator the speed is actually increasing, he does not know about the inner mechanism of the car or the implementation of the accelerator, brakes, etc in the car. This is what abstraction is. - -## Advantages of Data Abstraction - -- Helps the user to avoid writing the low-level code. -- Avoids code duplication and increases reusability. -- Can change the internal implementation of the class independently without affecting the user. -- Helps to increase the security of an application or program as only important details are provided to the user. -- It reduces the complexity as well as the redundancy of the code, therefore increasing the readability. - -## Types of Abstraction: - -- **Data abstraction** - This type only shows the required information about the data and hides the unnecessary data. -- **Control Abstraction** - This type only shows the required information about the implementation and hides unnecessary information. - -## Abstraction using Classes - -We can implement Abstraction in C++ using classes. The class helps us to group data members and member functions using available access specifiers. A Class can decide which data member will be visible to the outside world and which is not. - -## Abstraction in Header files - -One more type of abstraction in C++ can be header files. For example, consider the pow() method present in math.h header file. Whenever we need to calculate the power of a number, we simply call the function pow() present in the math.h header file and pass the numbers as arguments without knowing the underlying algorithm according to which the function is actually calculating the power of numbers. - -## Abstraction using Access Specifiers - -Access specifiers are the main pillar of implementing abstraction in C++. We can use access specifiers to enforce restrictions on class members. For example: - -- Members declared as **public** in a class can be accessed from anywhere in the program. -- Members declared as **private** in a class, can be accessed only from within the class. They are not allowed to be accessed from any part of the code outside the class. - -We can easily implement abstraction using the above two features provided by access specifiers. Say, the members that define the internal implementation can be marked as private in a class. And the important information needed to be given to the outside world can be marked as public. And these public members can access the private members as they are inside the class. - -## Examples - -```cpp -// C++ Program to Demonstrate the -// working of Abstraction -#include -using namespace std; - -class implementAbstraction { -private: - int a, b; - -public: - // method to set values of - // private members - void set(int x, int y) - { - a = x; - b = y; - } - - void display() - { - cout << "a = " << a << endl; - cout << "b = " << b << endl; - } -}; - -int main() -{ - implementAbstraction obj; - obj.set(10, 20); - obj.display(); - return 0; -} -``` -**Output** -``` -a = 10 -b = 20 -``` - -You can see in the above program we are not allowed to access the variables a and b directly, however, one can call the function set() to set the values in a and b and the function display() to display the values of a and b. - -```cpp -#include -using namespace std; - -class Vehicle -{ - private: - void piston() - { - cout<<"4 piston\n"; - } - - void manWhoMade() - { - cout<<"Markus Librette\n"; - } - public: - void company() - { - cout<<"GFG\n"; - } - void model() - { - cout<<"SIMPLE\n"; - } - void color() - { - cout<<"Red/GREEN/Silver\n"; - } - void cost() - { - cout<<"Rs. 60000 to 900000\n"; - } - void oil() - { - cout<<"PETRO\n"; - } -}; -int main() -{ - - Vehicle obj; - obj.company(); - obj.model(); - obj.color(); - obj.cost(); - obj.oil(); -} -``` - -**Output** -``` -GFG -SIMPLE -Red/GREEN/Silver -Rs. 60000 to 900000 -PETRO -``` \ No newline at end of file diff --git a/docs/day-15/Encapsulation.md b/docs/day-15/Encapsulation.md deleted file mode 100644 index 75affec66..000000000 --- a/docs/day-15/Encapsulation.md +++ /dev/null @@ -1,104 +0,0 @@ -# Encapsulation in C++ - -Encapsulation in C++ is defined as the wrapping up of data and information in a single unit. In Object Oriented Programming, Encapsulation is defined as binding together the data and the functions that manipulate them. - -Consider a real-life example of encapsulation, in a company, there are different sections like the accounts section, finance section, sales section, etc. Now, -- The finance section handles all the financial transactions and keeps records of all the data related to finance. -- Similarly, the sales section handles all the sales-related activities and keeps records of all the sales. - -Now there may arise a situation when for some reason an official from the finance section needs all the data about sales in a particular month. - -In this case, he is not allowed to directly access the data of the sales section. He will first have to contact some other officer in the sales section and then request him to give the particular data. - -This is what **Encapsulation** is. Here the data of the sales section and the employees that can manipulate them are wrapped under a single name “sales section”. - -### Two Important property of Encapsulation - -- **Data Protection:** Encapsulation protects the internal state of an object by keeping its data members private. Access to and modification of these data members is restricted to the class’s public methods, ensuring controlled and secure data manipulation. - -- **Information Hiding:** Encapsulation hides the internal implementation details of a class from external code. Only the public interface of the class is accessible, providing abstraction and simplifying the usage of the class while allowing the internal implementation to be modified without impacting external code. - -## Features of Encapsulation - -Below are the features of encapsulation: -- We can not access any function from the class directly. We need an object to access that function that is using the member variables of that class. -- The function which we are making inside the class must use only member variables, only then it is called encapsulation. -- If we don’t make a function inside the class which is using the member variable of the class then we don’t call it encapsulation. -- Encapsulation improves readability, maintainability, and security by grouping data and methods together. -- It helps to control the modification of our data members. - -## Examples - -For example if we give input , and output should be half of input - -```cpp -#include -using namespace std; -class temp{ - int a; - int b; - public: - int solve(int input){ - a=input; - b=a/2; - return b; - } -}; - -int main() { - int n; - cin>>n; - temp half; - int ans=half.solve(n); - cout< -using namespace std; - -class Encapsulation { -private: - // Data hidden from outside world - int x; - -public: - // Function to set value of - // variable x - void set(int a) { x = a; } - - // Function to return value of - // variable x - int get() { return x; } -}; - -// Driver code -int main() -{ - Encapsulation obj; - obj.set(5); - cout << obj.get(); - return 0; -} -``` -**Output** -``` -5 -``` - -## Role of Access Specifiers in Encapsulation - -Access specifiers facilitate Data Hiding in C++ programs by restricting access to the class member functions and data members. There are three types of access specifiers in C++: - -- **Private:** Private access specifier means that the member function or data member can only be accessed by other member functions of the same class. - -- **Public:** Public access specifier means that the member function or data member can be accessed by any code. -- **Protected:** A protected access specifier means that the member function or data member can be accessed by other member functions of the same class or by derived classes. - -By default, all data members and member functions of a class are made **private** by the compiler. \ No newline at end of file diff --git a/docs/day-15/_category_.json b/docs/day-15/_category_.json deleted file mode 100644 index 6379cb12c..000000000 --- a/docs/day-15/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 15", - "position": 16, - "link": { - "type": "generated-index" - } -} diff --git a/docs/day-16/_category_.json b/docs/day-16/_category_.json deleted file mode 100644 index 322780d96..000000000 --- a/docs/day-16/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 16", - "position": 16, - "link": { - "type": "generated-index" - } - } \ No newline at end of file diff --git a/docs/day-16/function-overloading.md b/docs/day-16/function-overloading.md deleted file mode 100644 index 0389f23a6..000000000 --- a/docs/day-16/function-overloading.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -sidebar_position: 1 -title: "Function Overloading in C++" -description: "Function overloading is a feature of object-oriented programming where two or more functions can have the same name but different parameters." -sidebar_label: "Function Overloading" -slug: function-overloading-in-cpp ---- - -# Function Overloading in C++ - -Function overloading is a feature of object-oriented programming (OOP) where two or more functions can have the same name but different parameters. It allows you to define multiple functions with the same name within the same scope, as long as their parameter lists are different in terms of number, type, or both. - -## Why Use Function Overloading? -1. **Code Readability:** Function overloading can make your code more readable by using the same name for similar operations. For example, you can have multiple calculateArea() functions, each accepting different parameters (e.g., radius, length and width, base and height). - -2. **Convenience:** It provides a convenient way to define functions that perform similar operations on different types or numbers of arguments without having to invent new function names. - -## How Function Overloading Works? -Function overloading works based on the signature of the function, which includes the function name and the parameter list. The compiler distinguishes between overloaded functions by looking at the number, types, and order of the parameters. - -Example of Function Overloading - ```cpp - #include - using namespace std; - - // Function to add two integers - int add(int a, int b) { - return a + b; - } - - // Function to add three integers - int add(int a, int b, int c) { - return a + b + c; - } - - // Function to add two doubles - double add(double a, double b) { - return a + b; - } - - int main() { - cout << "Sum of 2 and 3 is: " << add(2, 3) << endl; - cout << "Sum of 2, 3, and 4 is: " << add(2, 3, 4) << endl; - cout << "Sum of 2.5 and 3.5 is: " << add(2.5, 3.5) << endl; - return 0; - } - ``` - -In this example, the add function is overloaded three times. The compiler determines which version of add to call based on the number and types of arguments provided. - -## Rules for Function Overloading -1. **Function Signature:** Overloaded functions must differ in the number or types of their parameters. Return type alone is not sufficient to differentiate functions. - -2. **Scope:** Function overloading is only applicable within the same scope. You cannot overload functions from different scopes, such as functions in different namespaces. - -3. **Default Arguments:** Default arguments can be used in overloaded functions, but they do not participate in distinguishing between overloaded functions. - -4. **Function Templates:** Function templates can also be overloaded, allowing you to define generic functions that can operate on different types. - -## Functions that cannot be overloaded in C++ -1. Functions with different return types cannot be overloaded. -2. Static member functions with the same name and parameter types cannot be overloaded. -3. Parameters declared as arrays are adjusted to pointers, so functions cannot be overloaded based on array versus pointer types. -4. Functions cannot be overloaded based on whether a parameter is a function type or a pointer to the same function type. -5. Functions cannot be overloaded based on const and/or volatile qualifiers on parameters, as these qualifiers are ignored when determining the function being declared, defined, or called. - -## Conclusion -Function overloading is a powerful feature in C++ that allows you to define multiple functions with the same name, providing flexibility and readability to your code. By carefully designing overloaded functions, you can create more intuitive and expressive interfaces for your classes and functions. \ No newline at end of file diff --git a/docs/day-16/operator-overloading.md b/docs/day-16/operator-overloading.md deleted file mode 100644 index 390fc4903..000000000 --- a/docs/day-16/operator-overloading.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -sidebar_position: 2 -title: "Operator Overloading in C++" -description: "Operator overloading is a compile-time polymorphism. It is an idea of giving special meaning to an existing operator in C++ without changing its original meaning." -sidebar_label: "Operator Overloading" -slug: operator-overloading-in-cpp ---- - -# Operator Overloading in C++ - -Operator overloading is a feature of C++ that allows you to redefine the meaning of operators when they are used with user-defined types (classes or structures). It is a form of compile-time polymorphism, where the same operator can be used to perform different operations depending on the context in which it is used. - -## Why Use Operator Overloading? -1. **Natural Syntax:** Operator overloading allows you to use operators with user-defined types in a way that is natural and intuitive, similar to built-in types. - -2. **Code Readability:** It can make your code more readable and expressive by allowing you to use operators to perform operations that are meaningful for your custom types. - -3. **Consistency:** Operator overloading can help maintain consistency in your code by allowing you to use operators in a uniform way across different types. - -# How Operator Overloading Works? - -Operator overloading works by defining a function that is called when an operator is used with an object of a class or structure. The syntax for overloading an operator is to define a function with the keyword operator followed by the operator you want to overload. - -For example, to overload the + operator for adding two objects of a class: - ```cpp - class Vector { - private: - int x, y; - public: - Vector(int x, int y) : x(x), y(y) {} - Vector operator+(const Vector& other) { - return Vector(x + other.x, y + other.y); - } - }; - - int main() { - Vector v1(1, 2); - Vector v2(3, 4); - Vector v3 = v1 + v2; // Calls the overloaded + operator - return 0; - } - ``` - -## Rules for Operator Overloading - -1. **Precedence and Associativity:** You cannot change the precedence or associativity of operators through overloading. - -2. **Number of Operands:** You cannot change the number of operands an operator takes. For example, you cannot overload the + operator to take three operands. - -3. **Syntax:** The syntax for overloading operators is fixed and cannot be changed. For example, you cannot change the syntax for the + operator to use a different symbol. - -4. **Semantics:** While you can change the meaning of an operator, it is important to maintain consistency with the standard meaning of the operator to avoid confusion. - -## Commonly Overloaded Operators -1. Arithmetic operators: - `+`, `-`, `*`, `/`, `%` -2. Relational operators: - `<`, `<=`, `>`, `>=`, `==`, `!=` -3. Increment and decrement operators: - `++`, `--` -4. Stream insertion and extraction operators: - `<<`, `>>` -5. Assignment operators: - `=`, `+=`, `-=`, `*=`, `/=`, `%=` - -## Conclusion -Operator overloading is a powerful feature in C++ that allows you to redefine the behavior of operators for user-defined types. By carefully designing overloaded operators, you can make your code more expressive and easier to understand, leading to more maintainable and robust software. \ No newline at end of file diff --git a/docs/day-18/Linked-List-in-cpp.md b/docs/day-18/Linked-List-in-cpp.md deleted file mode 100644 index 702cc8a85..000000000 --- a/docs/day-18/Linked-List-in-cpp.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -sidebar_position: 2 -title: "Linked List in C++" -description: "In this tutorial we will learn about Linked List in C++." -sidebar_label: "Linked List in C++" -slug: Linked-List-in-cpp ---- -# Linked List in C++ -Linked list is a **liner data structure** which stores data in **non-contiguous memory** locations.It has nodes which consist of data and pointer. The data contains the value that you want to add and pointer contains the address to the next node. -### Representation of a Node in the Linked List -``` -struct Node{ - int data; - Node* next; -} -``` -`Data` : Values to be stored.\ -`Next` : Pointer to next node. - -As you cannot access the linked list using index, so we have a `head` which stores the address of the start of the linked list. - -## Types of Linked List -There are several types of linked list : -1. **Singly Linked List**.\ -In singly linked list there is only one pointer which points to the next node and the last node points to null. To access or print out the list, you start at the head and move from node to node by following each node’s next pointer. -

-![Singly Linked List](../../static/img/day-18/Sinlgy.png "Sinlgy linked list") -

- -2. **Doubly Linked List**\ -In doubly linked list we have three components inside the node. These are data, next pointer and previous pointer. This is advances version of singly linked list as this structure allows traversal of the list in both directions, making operations like insertion and deletion more efficient near both ends of the list, as you can easily access the previous node.

-![Doubly Linked List](../../static/img/day-18/Doubly.jpeg "Doubly linked list") -

- -3. **Circular Linked List**\ -In this type of linked list, the nodes are connected together in circular form thus there is no node pointing to NULL. Each node points to the next node and the last node points back to the first node, forming a single circle. -

-![Circular Linked List](../../static/img/day-18/Circular.jpeg "Circular linked list") -

- -4. **Circular Doubly Linked List** -This linked list is a combination of Doubly linked list and Circular linked list. In this also we have three components of node. The data contains the value, next contains pointer to next node and prev points to previous node.The last node’s next pointer points to the first node, and the first node’s previous pointer points to the last node, creating a circular doubly linked structure. This allows for traversal in both directions indefinitely.

-![Circular Doubly Linked List](../../static/img/day-18/DoublyCircular.jpeg "Circular Doubly linked list") -

- -## Applications of Linked Lists : -Some of the applictaions of linked list are as follow : -- **Implementation of stacks and queues:** Linked can be used for efficient insertion and deletion. -- **Hash table :** Linked list can prevent collisions in hash tables by chaining. -- **Graphs :** Adjacency lists for graphs are often represented with linked lists. -- **Dynamic Memory Allocation :** Used in the implementation of memory management schemes. -- **Web Browsers :** Linked lists are used in web browsers to keep track of the history of visited web pages. -- **Music and Image Viewers :** For previous and next functionalities. - -## Advantages of Linked List -Linked lists offer several advantages over other data structures like arrays. Here are some key benefits: - -- **Dynamic Size :** Unlike arrays, linked lists are dynamic and can grow or shrink in size. -- **Ease of Insertion/Deletion :** Addition or removal of elements doesn’t require shifting elements, as in arrays. -- **No Memory Wastage :** They allocate memory as needed, so there’s no unused memory. -- **No Size Limitation :** You’re not limited by an initial size declaration, unlike static arrays. -- **Implementation of Advanced Structures :** Useful in implementing stacks, queues, graphs, etc. -## Disadvantages of Linked List -While linked lists have several advantages, they also come with some drawbacks : - -- **Memory Usage :** Each node requires extra memory for a pointer, which can be significant for large lists. -- **Traversal :** Direct access is not possible; you must traverse the list from the beginning to reach a particular element. -- **Reverse Traversing :** In singly linked lists, reverse traversing is not possible without extra space for back pointers. -- **Complexity :** Operations like sorting and searching can be more complex and less efficient than with arrays. - - - - - diff --git a/docs/day-18/Operations-on-linked-list.md b/docs/day-18/Operations-on-linked-list.md deleted file mode 100644 index d84d02282..000000000 --- a/docs/day-18/Operations-on-linked-list.md +++ /dev/null @@ -1,210 +0,0 @@ ---- -sidebar_position: 2 -title: "Operations on Linked List" -description: "In this tutorial we will learn about operations performed on Linked List in C++." -sidebar_label: "Operations on Linked List" -slug: Operations-on-linked-list ---- -# Linked List Operations in C++ -Some basic operations that can be performed on Linked List are as follows: -- **Traversing :** Accessing each node of the list sequentially. -- **Seraching :** Finding a node with a given value. -- **Insertion :** Adding a new node to the list (at the beginning, end, or after/before a specific node). -- **Deletion :** Removing a node from the list (at the beginning, end, or after/before a specific node). - -## Traversal in Linked List -Traversal in a linked list refers to the process of going through each node, starting from the head, and accessing the data it contains. In C++, this is typically done using a loop that follows the next pointers of the nodes until it reaches the end of the list (null pointer). \ -### Code -``` -node* temp = head; - -cout<<"Elements are "<data<next; - -} - -``` -By the above code we can display all the elements present in linked list. -### Output -``` -Elements are -1 -2 -3 -``` - -## Searching in Linked List -Seraching can pe done with tarversal. You can loop until temp reaches the last node and if the values is found jump out of loop and print it. -### Code -``` -Node* temp = head; - - while (temp != NULL) { - - if (temp>data == key) - return true; - - temp = temp->next; - - } - - return false; - ``` - -## Insertion in a Linked List - -Insertion is performed at three different places. -- ### **At the beginning** -When you have to insert a value at the beginning of the linked list. - - Create a new node with the given data. - - Make the new node’s next pointer point to the current head of the list. - - Update the head of the list to be the new node. - -### Code -``` -oid insertAtStart(Node** head, int newData) { - // Step 1: Allocate new node - Node* newNode = new Node(); - newNode->data = newData; - - // Step 2: Make next of new node as head - newNode->next = *head; - - // Step 3: Move the head to point to the new node - *head = newNode; -} - -``` - -- ### **At a particluar position.** - - Find the previous node of the desired position. - - Create a new node with the given data. - - Set the new node’s next pointer to the next pointer of the previous node. - - Update the previous node’s next pointer to point to the new node - -### Code -``` -oid insertAtPosition(Node** head, int position, int newData) { - // Step 1: Allocate new node - Node* newNode = new Node(); - newNode->data = newData; - - // Start from the head - Node* temp = *head; - - // Find previous node of the desired position - for(int i = 1; temp != nullptr && i < position - 1; i++) { - temp = temp->next; - } - - // If position is more than number of nodes - if (temp == nullptr || temp->next == nullptr) { - return; - } -} -``` - -- ### **At the end.** - - Create a new Node - - Check if the linked list is empty. If yes then add new node as head. - - Else traverse till the last node of the linked list. - - Update the next pointer of the last node from NULL to new node. - -### Code -``` -void insertAtEnd(Node** head, int newData) { - // Step 1: Allocate new node - Node* newNode = new Node(); - newNode->data = newData; - newNode->next = nullptr; - - // If the Linked List is empty, then make the new node as head - if (*head == nullptr) { - *head = newNode; - return; - } - - // Else traverse till the last node - Node* last = *head; - while (last->next != nullptr) { - last = last->next; - } - - // Step 2 & 3: Change the next of last node - last->next = newNode; -} -``` -## Deletion in Linked List -Deletion can also be performed in different ways: -- ### **At the beginning** - - Check if the list is not empty. - - Store the head node in a temporary variable. - - Update the head to point to the next node. - - Delete the temporary node. -### Code -``` -void deleteAtStart(Node** head) { - // If linked list is empty - if (*head == nullptr) return; - - // Store head node - Node* temp = *head; - - // Move the head pointer to the next node - *head = temp->next; - - // Delete the old head node - delete temp; -} -``` - -- ### **At a particular position** - - Find the previous node of the node to be deleted. - - Change the next pointer of the previous node. - - Delete the node -### Code -``` -void deleteAtPosition(Node** head, int position) { - if (*head == nullptr) return; - - Node* temp = *head; - - for (int i = 1; temp != nullptr && i < position - 1; i++) - temp = temp->next; - - if (temp == nullptr || temp->next == nullptr) - return; - Node *next = temp->next->next; - delete temp->next; - temp->next = next; -} -``` - -- ### **At the end** - - Check if the list is not empty. - - If there’s only one node, delete it and update the head to null. - - Otherwise, find the second-to-last node. - - Delete the last node and update the second-to-last node’s next pointer to null. -### Code -``` -void deleteAtEnd(Node** head) { - if (*head == nullptr || (*head)->next == nullptr) { - delete *head; - *head = nullptr; - return; - } - Node* temp = *head; - while (temp->next->next != nullptr) - temp = temp->next; - delete temp->next; - - temp->next = nullptr; -} -``` - - - diff --git a/docs/day-18/_category_.json b/docs/day-18/_category_.json deleted file mode 100644 index 75a4c7aec..000000000 --- a/docs/day-18/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 18", - "position": 18, - "link": { - "type": "generated-index" - } - } \ No newline at end of file diff --git a/docs/day-19/_category_.json b/docs/day-19/_category_.json deleted file mode 100644 index afb32dec5..000000000 --- a/docs/day-19/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 19", - "position": 20, - "link": { - "type": "generated-index" - } -} diff --git a/docs/day-19/examples.md b/docs/day-19/examples.md deleted file mode 100644 index bc44ea7ed..000000000 --- a/docs/day-19/examples.md +++ /dev/null @@ -1,146 +0,0 @@ ---- -sidebar_position: 3 -title: "Examples" -description: "In this tutorial, we will see some examples and real world applications related to Polymorphism in c++." -sidebar_label: "Examples" -slug: examples-in-cpp ---- - -Image -[examples](C:\Users\Shruti\OneDrive\Desktop\30-Days-Of-CPP\static\img\day-19\poly3.png) - -## Real-world Applications of Polymorphism - -1. GUI Frameworks -Graphical User Interface (GUI) frameworks extensively use polymorphism. Different types of UI elements (buttons, text boxes, labels) inherit from a common base class and override methods like draw or handleEvent. - -Example Code- - -#include -using namespace std; - -class UIElement { -public: - virtual void draw() = 0; // Pure virtual function -}; - -class Button : public UIElement { -public: - void draw() override { - cout << "Drawing a button" << endl; - } -}; - -class TextBox : public UIElement { -public: - void draw() override { - cout << "Drawing a text box" << endl; - } -}; - -void renderUI(UIElement *element) { - element->draw(); -} - -int main() { - Button btn; - TextBox txtBox; - - renderUI(&btn); // Output: Drawing a button - renderUI(&txtBox); // Output: Drawing a text box - - return 0; -} - -2. File Systems -In file systems, different file types (text files, binary files, image files) can inherit from a base File class and override methods like open, read, write, and close. - -Example Code- -#include -using namespace std; - -class File { -public: - virtual void open() = 0; - virtual void close() = 0; -}; - -class TextFile : public File { -public: - void open() override { - cout << "Opening text file" << endl; - } - - void close() override { - cout << "Closing text file" << endl; - } -}; - -class BinaryFile : public File { -public: - void open() override { - cout << "Opening binary file" << endl; - } - - void close() override { - cout << "Closing binary file" << endl; - } -}; - -void manageFile(File *file) { - file->open(); - // Perform file operations - file->close(); -} - -int main() { - TextFile txt; - BinaryFile bin; - - manageFile(&txt); // Output: Opening text file, Closing text file - manageFile(&bin); // Output: Opening binary file, Closing binary file - - return 0; -} - -3. Game Development -In game development, different game entities (player, enemies, NPCs) inherit from a common Entity base class and override methods like update, render, and interact. - -Example Code- - -#include -using namespace std; - -class Entity { -public: - virtual void update() = 0; -}; - -class Player : public Entity { -public: - void update() override { - cout << "Updating player" << endl; - } -}; - -class Enemy : public Entity { -public: - void update() override { - cout << "Updating enemy" << endl; - } -}; - -void gameLoop(Entity *entity) { - entity->update(); - // Other game loop operations -} - -int main() { - Player player; - Enemy enemy; - - gameLoop(&player); // Output: Updating player - gameLoop(&enemy); // Output: Updating enemy - - return 0; -} diff --git a/docs/day-19/polymorphism.md b/docs/day-19/polymorphism.md deleted file mode 100644 index fd8c7a012..000000000 --- a/docs/day-19/polymorphism.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -sidebar_position: 1 -title: "Polymorphism in C++" -description: "In this tutorial, we will learn about Polymorphism in C++ programming with the help of examples." -sidebar_label: "Polymorphism" -slug: polymorphism-in-cpp ---- - -## What is Polymorphism? -The word “polymorphism” means having many forms. In simple words, we can define polymorphism as the ability of a message to be displayed in more than one form. A real-life example of polymorphism is a person who at the same time can have different characteristics. A man at the same time is a father, a husband, and an employee. So the same person exhibits different behavior in different situations. This is called polymorphism. Polymorphism is considered one of the important features of Object-Oriented Programming. - -Image -[Polymorphism](C:\Users\Shruti\OneDrive\Desktop\30-Days-Of-CPP\static\img\day-19\poly1.png) - -## Types of Polymorphism- -1) Compile-time Polymorphism- This type of polymorphism is achieved by function overloading or operator overloading. -2) Runtime Polymorphism- This type of polymorphism is achieved by Function Overriding. Late binding and dynamic polymorphism are other names for runtime polymorphism. The function call is resolved at runtime in runtime polymorphism. - -## Advantages of Polymorphism -Polymorphism in C++ allows for: - -1) Code reusability: Write code that works with objects of different classes. -2) Method overriding: Redefine base class methods in derived classes. -3) Dynamic binding: Decide at runtime which method to invoke. -4) Abstract interfaces: Define interfaces for different classes to implement. - diff --git a/docs/day-19/types-of-polymorphism.md b/docs/day-19/types-of-polymorphism.md deleted file mode 100644 index c59907fc4..000000000 --- a/docs/day-19/types-of-polymorphism.md +++ /dev/null @@ -1,174 +0,0 @@ ---- -sidebar_position: 2 -title: "Types of Polymorphism in C++" -description: "In this tutorial, we will learn about Types of Polymorphism in C++ programming with the help of examples." -sidebar_label: "Types of Polymorphism" -slug: Types-of-Polymorphism ---- -## Types of Polymorphism -There are two types of polymorphism namely- Compile time Polymorphism and Run Time Polymorphism - -Image -[Types of Polymorphism](C:\Users\Shruti\OneDrive\Desktop\30-Days-Of-CPP\static\img\day-19\poly2.png) - -## Compile Time Polymorphism -Compile-time polymorphism, also known as static polymorphism, occurs when the method or function to be invoked is determined at compile time. This is primarily achieved through method overloading and operator overloading. - -Method Overloading- -Method overloading allows a class to have more than one method with the same name, as long as their parameter lists are different. The difference can be in the number of parameters, the type of parameters, or both. - -Example- -class Calculator { - // Method with 2 integer parameters - public int add(int a, int b) { - return a + b; - } - - // Method with 3 integer parameters - public int add(int a, int b, int c) { - return a + b + c; - } - - // Method with 2 double parameters - public double add(double a, double b) { - return a + b; - } - - // Method with 3 double parameters - public double add(double a, double b, double c) { - return a + b + c; - } -} - -public class Main { - public static void main(String[] args) { - Calculator calc = new Calculator(); - System.out.println(calc.add(5, 10)); // Output: 15 - System.out.println(calc.add(5, 10, 15)); // Output: 30 - System.out.println(calc.add(5.5, 10.5)); // Output: 16.0 - System.out.println(calc.add(5.5, 10.5, 15.5)); // Output: 31.5 - } -} - -Operator Overloading- -Operator overloading allows developers to redefine the behavior of operators for user-defined types. While not commonly supported in many mainstream OOP languages (e.g., Java), languages like C++ allow it. - -Example- -#include -using namespace std; - -class Complex { -private: - float real; - float imag; -public: - Complex() : real(0), imag(0) {} - Complex(float r, float i) : real(r), imag(i) {} - - // Overloading the + operator - Complex operator + (const Complex &c) { - Complex result; - result.real = real + c.real; - result.imag = imag + c.imag; - return result; - } - - void display() { - cout << real << " + " << imag << "i" << endl; - } -}; - -int main() { - Complex c1(3.0, 4.0); - Complex c2(1.0, 2.0); - Complex c3; - - c3 = c1 + c2; // Using the overloaded + operator - - c3.display(); // Output: 4.0 + 6.0i - - return 0; -} - -## Runtime Polymorphism -Runtime polymorphism, also known as dynamic polymorphism, occurs when a call to an overridden method is resolved at runtime rather than compile time. This is primarily achieved through method overriding, where a subclass provides a specific implementation of a method that is already defined in its superclass. Runtime polymorphism allows a method to behave differently based on the object that invokes it, providing flexibility and enabling more dynamic and extensible code. - -Method Overriding- -Method overriding is when a subclass provides a specific implementation for a method that is already defined in its superclass. The overridden method in the subclass should have the same name, return type, and parameter list as the method in the superclass. - -Example- -class Animal { - void sound() { - System.out.println("Animal makes a sound"); - } -} - -class Dog extends Animal { - // Overriding the sound method - @Override - void sound() { - System.out.println("Dog barks"); - } -} - -class Cat extends Animal { - // Overriding the sound method - @Override - void sound() { - System.out.println("Cat meows"); - } -} - -public class Main { - public static void main(String[] args) { - Animal myAnimal; - - myAnimal = new Dog(); - myAnimal.sound(); // Output: Dog barks - - myAnimal = new Cat(); - myAnimal.sound(); // Output: Cat meows - } -} - -Dynamic Method Dispatch- -Dynamic method dispatch is the mechanism by which a call to an overridden method is resolved at runtime. This process allows a superclass reference variable to refer to a subclass object and call the overridden method of the subclass. - -Example -class Vehicle { - void run() { - System.out.println("Vehicle is running"); - } -} - -class Car extends Vehicle { - @Override - void run() { - System.out.println("Car is running"); - } -} - -class Bike extends Vehicle { - @Override - void run() { - System.out.println("Bike is running"); - } -} - -public class Main { - public static void main(String[] args) { - Vehicle myVehicle; - - myVehicle = new Car(); - myVehicle.run(); // Output: Car is running - - myVehicle = new Bike(); - myVehicle.run(); // Output: Bike is running - } -} - -## Advantages of Runtime Polymorphism - -1) Flexibility and Extensibility: Allows new classes to be added with minimal changes to existing code. -2) Code Reusability: Enables code to be written more generically, which can handle new objects as they are added. -3) Dynamic Behavior: Provides the ability to write code that can behave differently based on the object that invokes it, allowing for more dynamic and flexible applications. \ No newline at end of file diff --git a/docs/day-20/Big_Five_In_OOP.md b/docs/day-20/Big_Five_In_OOP.md deleted file mode 100644 index 14899b231..000000000 --- a/docs/day-20/Big_Five_In_OOP.md +++ /dev/null @@ -1,231 +0,0 @@ ---- -sidebar_position: 2 -title: "The Big Five in C++" -description: "Understand the Big Five in C++ OOP: default constructor, destructor, copy constructor, copy assignment operator, and move constructor." -sidebar_label: "The Big Five" -slug: the-big-five-in-cpp ---- - -# The Big Five in C++ - -The Big Five in C++ are essential to managing resources and object lifetimes in Object-Oriented Programming (OOP). These include the default constructor, destructor, copy constructor, copy assignment operator, and move constructor. Understanding these concepts is crucial for writing efficient and robust C++ code. - -## Introduction to the Big Five -In C++, the Big Five are special member functions that control the creation, copying, and destruction of objects. They play a critical role in resource management, especially when dealing with dynamic memory allocation, file handles, and other resources that need explicit handling. -C++ deep copying and shallow copying - -## Default Constructor -### Definition -The default constructor initializes objects when no arguments are provided. If no constructor is defined, the compiler provides a default constructor. - -### Example and Explanation -```cpp -#include -using namespace std; - -class Example { -public: - int value; - - // Default constructor - Example() : value(0) { - cout << "Default constructor called." << endl; - } -}; - -int main() { - Example obj; // Default constructor is called - cout << "Value: " << obj.value << endl; - - return 0; -} -``` -In this example, the default constructor initializes `value` to `0`. - -## Destructor -### Definition -The destructor cleans up resources when an object goes out of scope or is explicitly deleted. The compiler automatically provides a destructor if none is defined. - -### Example and Explanation -```cpp -#include -using namespace std; - -class Example { -public: - int* data; - - Example(int value) { - data = new int(value); - } - - // Destructor - ~Example() { - delete data; - cout << "Destructor called, memory freed." << endl; - } -}; - -int main() { - Example obj(42); // Constructor allocates memory - cout << "Value: " << *obj.data << endl; - - return 0; // Destructor is called here -} -``` -In this example, the destructor ensures that dynamically allocated memory is freed. - -## Copy Constructor -### Definition -The copy constructor creates a new object as a copy of an existing object. It is invoked when an object is passed by value, returned by value, or explicitly copied. - -### Example and Explanation -```cpp -#include -using namespace std; - -class Example { -public: - int* data; - - Example(int value) { - data = new int(value); - } - - // Copy constructor - Example(const Example& source) { - data = new int(*source.data); - cout << "Copy constructor called." << endl; - } - - ~Example() { - delete data; - cout << "Destructor called, memory freed." << endl; - } -}; - -int main() { - Example obj1(42); - Example obj2 = obj1; // Copy constructor is called - - cout << "Value in obj1: " << *obj1.data << endl; - cout << "Value in obj2: " << *obj2.data << endl; - - return 0; -} -``` -In this example, the copy constructor creates a deep copy of the data. - -## Copy Assignment Operator -### Definition -The copy assignment operator assigns the values from one object to another existing object. It is invoked when an object is assigned to another using the `=` operator. - -### Example and Explanation -```cpp -#include -using namespace std; - -class Example { -public: - int* data; - - Example(int value) { - data = new int(value); - } - - // Copy assignment operator - Example& operator=(const Example& source) { - if (this == &source) { - return *this; // Self-assignment check - } - - delete data; // Free existing resource - data = new int(*source.data); // Allocate new resource - cout << "Copy assignment operator called." << endl; - - return *this; - } - - ~Example() { - delete data; - cout << "Destructor called, memory freed." << endl; - } -}; - -int main() { - Example obj1(42); - Example obj2(0); - obj2 = obj1; // Copy assignment operator is called - - cout << "Value in obj1: " << *obj1.data << endl; - cout << "Value in obj2: " << *obj2.data << endl; - - return 0; -} -``` -In this example, the copy assignment operator ensures proper resource management by freeing existing resources and allocating new ones. - -## Move Constructor and Move Assignment Operator -### Definition -The move constructor and move assignment operator transfer resources from a temporary object (rvalue) to a new object, improving performance by avoiding unnecessary deep copies. - -### Example and Explanation -```cpp -#include -using namespace std; - -class Example { -public: - int* data; - - Example(int value) { - data = new int(value); - } - - // Move constructor - Example(Example&& source) noexcept : data(source.data) { - source.data = nullptr; - cout << "Move constructor called." << endl; - } - - // Move assignment operator - Example& operator=(Example&& source) noexcept { - if (this == &source) { - return *this; // Self-assignment check - } - - delete data; // Free existing resource - data = source.data; // Steal resource - source.data = nullptr; - cout << "Move assignment operator called." << endl; - - return *this; - } - - ~Example() { - delete data; - cout << "Destructor called, memory freed." << endl; - } -}; - -int main() { - Example obj1(42); - Example obj2 = move(obj1); // Move constructor is called - - cout << "Value in obj2: " << *obj2.data << endl; - - return 0; -} -``` -In this example, the move constructor transfers ownership of `data` to `obj2`, leaving `obj1` in a valid but unspecified state. - -## Rules of Three, Five, and Zero -### Explanation and Best Practices -- **Rule of Three:** If a class requires a user-defined destructor, copy constructor, or copy assignment operator, it likely requires all three. -- **Rule of Five:** If a class requires a user-defined destructor, copy constructor, copy assignment operator, move constructor, or move assignment operator, it likely requires all five. -- **Rule of Zero:** Strive to design classes that do not require user-defined copy/move operations by utilizing smart pointers and other RAII (Resource Acquisition Is Initialization) techniques. - -## Conclusion -The Big Five in C++ are fundamental for managing object lifetimes and resources effectively. By understanding and properly implementing these special member functions, you can write more robust and efficient C++ code. - -Understanding these concepts helps in writing robust and efficient C++ code, especially when dealing with dynamic memory and other resources. diff --git a/docs/day-20/Deep_Copying_vs_Shallow_Copying.md b/docs/day-20/Deep_Copying_vs_Shallow_Copying.md deleted file mode 100644 index 171742ded..000000000 --- a/docs/day-20/Deep_Copying_vs_Shallow_Copying.md +++ /dev/null @@ -1,163 +0,0 @@ ---- -sidebar_position: 1 -title: "Deep Copying and Shallow Copying in C++" -description: "Understand the concepts of deep copying and shallow copying in C++, and learn how to implement them effectively." -sidebar_label: "Deep and Shallow Copying" -slug: deep-and-shallow-copying-in-cpp ---- - -# Deep Copying and Shallow Copying in C++ - -Deep copying and shallow copying are important concepts in C++ that deal with the duplication of objects. Understanding these concepts is crucial for managing resources, especially when dealing with dynamic memory allocation. - -## Introduction to Copying Objects -Copying objects in C++ involves creating a new instance of a class with the same values as an existing instance. There are two primary types of copying: -- **Shallow Copying:** Copies all member field values. If the field is a pointer, only the pointer is copied, not the data it points to. -- **Deep Copying:** Copies all fields and duplicates dynamically allocated memory pointed to by the fields, creating independent copies of the data. -C++ deep copying and shallow copying -## Shallow Copying -### Definition -Shallow copying duplicates an object's member fields, including pointers, but it does not copy the data pointed to by those pointers. This can lead to issues when dealing with dynamic memory allocation. - -### Example and Explanation -```cpp -#include -using namespace std; - -class Shallow { -public: - int* data; - - Shallow(int value) { - data = new int(value); - } - - // Shallow copy constructor - Shallow(const Shallow& source) : data(source.data) { - cout << "Shallow copy constructor - shallow copy created." << endl; - } - - void displayData() { - cout << "Data: " << *data << endl; - } - - ~Shallow() { - delete data; - cout << "Destructor freeing data." << endl; - } -}; - -int main() { - Shallow obj1(42); - Shallow obj2 = obj1; // Shallow copy - - obj1.displayData(); - obj2.displayData(); - - return 0; -} -``` -In this example, both `obj1` and `obj2` point to the same memory location. When `obj2` is destructed, it will free the memory allocated to `data`, leading to a double-free error when `obj1` is destructed. - -### Issues with Shallow Copying -- **Double-Free Error:** Multiple objects trying to free the same memory. -- **Dangling Pointer:** One object may delete memory, leaving the other object with a pointer to non-existent memory. - -## Deep Copying -### Definition -Deep copying involves creating a new copy of the dynamically allocated memory pointed to by the object's fields. Each object has its own copy of the data, preventing the issues associated with shallow copying. - -### Example and Explanation -```cpp -#include -using namespace std; - -class Deep { -public: - int* data; - - Deep(int value) { - data = new int(value); - } - - // Deep copy constructor - Deep(const Deep& source) { - data = new int(*source.data); - cout << "Deep copy constructor - deep copy created." << endl; - } - - void displayData() { - cout << "Data: " << *data << endl; - } - - ~Deep() { - delete data; - cout << "Destructor freeing data." << endl; - } -}; - -int main() { - Deep obj1(42); - Deep obj2 = obj1; // Deep copy - - obj1.displayData(); - obj2.displayData(); - - return 0; -} -``` -In this example, `obj1` and `obj2` have their own separate copies of `data`. Each object manages its own memory, preventing the issues of double-free and dangling pointers. - -## Implementing Deep Copy and Shallow Copy in C++ -### Shallow Copy Implementation -Shallow copies use the default copy constructor provided by the compiler. This constructor copies the member field values directly. - -### Deep Copy Implementation -To implement a deep copy, you need to define a custom copy constructor and assignment operator. -```cpp -class Deep { -public: - int* data; - - Deep(int value) { - data = new int(value); - } - - // Deep copy constructor - Deep(const Deep& source) { - data = new int(*source.data); - } - - // Deep copy assignment operator - Deep& operator=(const Deep& source) { - if (this == &source) { - return *this; // self-assignment check - } - delete data; // free existing resource - data = new int(*source.data); // allocate new resource - return *this; - } - - ~Deep() { - delete data; - } -}; -``` - -## Use Cases and Best Practices -### Shallow Copying -- Suitable for objects with no pointers or dynamic memory. -- Useful when performance is critical and data sharing is acceptable. - -### Deep Copying -- Necessary for objects with pointers to dynamically allocated memory. -- Prevents resource management issues like double-free and dangling pointers. - -### Best Practices -- Use shallow copying for simple objects and deep copying for complex objects. -- Always provide custom copy constructors and assignment operators for deep copying. -- Use smart pointers (e.g., `std::shared_ptr`, `std::unique_ptr`) to manage dynamic memory safely. - -## Conclusion -Deep copying and shallow copying are fundamental concepts in C++ for managing object duplication and memory allocation. Understanding these concepts helps in writing robust and efficient C++ code, especially when dealing with dynamic memory. - diff --git a/docs/day-20/_category_.json b/docs/day-20/_category_.json deleted file mode 100644 index 4245345ca..000000000 --- a/docs/day-20/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 20", - "position": 21, - "link": { - "type": "generated-index" - } - } \ No newline at end of file diff --git a/docs/day-20/image.png b/docs/day-20/image.png deleted file mode 100644 index c2a9f5e123a1793c4b0cf5d4b848368ddf0d83e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380021 zcmV()K;OTKP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D|D{PpK~#8N)ct#V zEJ<>wi3ReC%Q;ouoaXL4x^ZUz87^0=k-i~6tXAS9lFhEFa{%NG(EI+(Jt8uZz(F-< z=aCGE3=hAUnVXxNn|pXf-2CT%_^+?Pa5D_UE62@^p@P@Md=AXJyjcvdr^WE{dK#9i z<*>S04=*n-!FhjwKWravhllO`aC|wXjCp?j*I$O$GJ`686mG^a649k<(hhe!` z4X-caKMjlZVpzN`p>c%K6&N@V{XFrVn!w8dFE`+XGjbR=3=6U@NFo6|r{RT*7tW9z zZca;ns0lp3a82pqL|tB`xx6t6o+wB9>+8+%vV`9*BI1Jw8sw}f4r@B*3CIU@Jm-+g zkDxF~^L0UOCv$h% zTf(#X4GZ%+UWUzgXy>WS4fsyzW2*B)_y#$L8T1m}85Ukx-g6HZZu{MG32*j45S%XC z2zWi2XH5v5G(Y-k|9BV36KF#9YOZZilck_O&>m!1 zU<+cKk_3ZC(rJUVE4D0lZO#k-;k99s2YUF(w-CO_Q(%fVz=DP?AdN9Y1Jg}IX8bMb z=i0fZl$GT}FpqgZ%1^wy-O|IR^&4yR-v)w7PfxFO?ui(D;0 zUi)KjiU1d09*IBgkHhZpL|)qrYed4!%j>WKr#5O~Uh;WXYIk?{Nf-A5zQohP@F`;y z)&^YK31e?wkHe91$?n(lGvqPumad8W6bg^Wm^ZzFZ?RvX;hhX+3gfR??AF;vK(kpz}h9eZ7GmvZ0k?HyoE8 zw{AS-f%uzcB7^7UC=PY~mGXtJI)_v}z@s2E4hn(1uUsq3k3de%;gM#P&x5>&KtaZo z?qhfy$h#btZ5&F!ZEaSPyWlG=Jg21pfRDpK9$iYDV1BQ~q~3~I+h2NieXO*M<9o@j zUtdD!N)cTq_cX!eF&_|4U@ygz5n8mHS`&T3W+$Dv$Xe&*$kF;t2aBqY8T%<)kF14;34^LPKt|9X|W4Z7m5 z8urIvKDrzNR6rORE4K2Q1|{zP>z84BdpB(Fw`Q-8yyNVP$Lb~Ku5Ae(Q}96@pX83*itSm%zy$447yfb&f*9Iv}5wGNI4MDfa}02 ztXCaAWTVrlNX3><<@ePUB~S%j
    ;RE*S}YgNgRNr;-)d8g5N)DiNoT#_G4-`9`8AqM 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%0Ajp}XVfb1(yQw`A=sh86$ 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�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 z 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

    ~gsa!)# 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

    4_+I;%AgV+;7~`O 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

    dlxs@}L|-m0Zb(O15|*9`cEg>QIJhnW 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 l*E$d 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 a9{vY*M+vd$79W}b0000 return_type { body } -``` - -- **Capture**: Specifies which variables are captured from the surrounding scope. -- **Parameters**: The parameters passed to the lambda, similar to a regular function. -- **Return type**: (Optional) The return type of the lambda. It can often be inferred by the compiler. -- **Body**: The code that gets executed when the lambda is called. - -Example: -```cpp -auto add = [](int a, int b) -> int { - return a + b; -}; -std::cout << "Sum: " << add(2, 3) << std::endl; // Output: Sum: 5 -``` - -#### 3. Capturing Variables: - -Lambda expressions can capture variables from their enclosing scope. There are several ways to capture variables: -- **Capture by value**: `[x, y]` captures `x` and `y` by value. -- **Capture by reference**: `[&x, &y]` captures `x` and `y` by reference. -- **Capture all by value**: `[=]` captures all variables by value. -- **Capture all by reference**: `[&]` captures all variables by reference. -- **Mixed capture**: `[=, &x]` captures all variables by value except `x`, which is captured by reference. - -Example: -```cpp -int x = 10; -int y = 20; - -auto printSum = [x, y]() { - std::cout << "Sum: " << x + y << std::endl; -}; - -printSum(); // Output: Sum: 30 -``` - -#### 4. Using Lambdas with Standard Algorithms: - -Lambdas are particularly useful with the Standard Template Library (STL) algorithms. Here’s an example using `std::for_each`: - -```cpp -#include -#include -#include - -int main() { - std::vector numbers = {1, 2, 3, 4, 5}; - std::for_each(numbers.begin(), numbers.end(), [](int n) { - std::cout << n << " "; - }); - // Output: 1 2 3 4 5 - return 0; -} -``` - -#### 5. Lambdas as Callbacks: - -Lambdas can be used as callbacks for event handling or asynchronous operations. Here’s an example with a simple callback mechanism: - -```cpp -#include -#include - -void performOperation(const std::function& callback) { - int result = 42; // Imagine this is the result of some operation - callback(result); -} - -int main() { - performOperation([](int result) { - std::cout << "Operation result: " << result << std::endl; - }); - // Output: Operation result: 42 - return 0; -} -``` - -#### 6. Practical Examples and Exercises: - -**Example 1: Sorting a Vector with a Lambda** - -```cpp -#include -#include -#include - -int main() { - std::vector numbers = {5, 2, 9, 1, 5, 6}; - - std::sort(numbers.begin(), numbers.end(), [](int a, int b) { - return a < b; - }); - - for (int n : numbers) { - std::cout << n << " "; - } - // Output: 1 2 5 5 6 9 - return 0; -} -``` - -**Example 2: Filtering Elements with `std::copy_if` and a Lambda** - -```cpp -#include -#include -#include - -int main() { - std::vector numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; - std::vector evenNumbers; - - std::copy_if(numbers.begin(), numbers.end(), std::back_inserter(evenNumbers), [](int n) { - return n % 2 == 0; - }); - - for (int n : evenNumbers) { - std::cout << n << " "; - } - // Output: 2 4 6 8 10 - return 0; -} -``` - -**Exercises:** - -1. Write a lambda function to calculate the factorial of a number. -2. Use a lambda to transform a vector of integers by squaring each element. -3. Create a lambda that captures a local variable by reference and modifies it within the lambda. - - diff --git a/docs/day-21/Macros.md b/docs/day-21/Macros.md deleted file mode 100644 index 5b5dbc8c4..000000000 --- a/docs/day-21/Macros.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -sidebar_position: 2 -title: "Macros in C++" -description: "Learn about macros in C++, their usage, and best practices with practical examples. Macros are powerful preprocessor directives that enable code substitution before compilation." -sidebar_label: "Macros in C++" -slug: macros-in-cpp ---- - -## Introduction: - -Macros in C++ are preprocessor directives that allow for code substitution before compilation. They are used to define constants, create inline functions, and conditionally include code segments. - -![macros-in-cpp-introduction](../../static/img/day-21/Macros%20in%20cpp.jpg) - -#### 1. Defining Constants with `#define`: - -Macros are commonly used to define constants that are substituted directly into the code. - -```cpp -#define PI 3.14159 - -#include - -int main() { - std::cout << "Value of PI: " << PI << std::endl; - return 0; -} -``` - -#### 2. Function-like Macros: - -You can create macros that act like functions, allowing for parameterized code substitution. - -```cpp -#define SQUARE(x) ((x) * (x)) - -#include - -int main() { - int num = 5; - std::cout << "Square of " << num << " is: " << SQUARE(num) << std::endl; - return 0; -} -``` - -#### 3. Conditional Compilation: - -Macros enable conditional compilation, where certain code segments are included or excluded based on defined conditions. - -```cpp -#define DEBUG_MODE - -#include - -int main() { -#ifdef DEBUG_MODE - std::cout << "Debug mode is on" << std::endl; -#endif - std::cout << "Program running" << std::endl; - return 0; -} -``` - -#### 4. Include Guards: - -Include guards prevent multiple inclusions of the same header file, ensuring the contents are only included once per translation unit. - -```cpp -#ifndef MY_HEADER_H -#define MY_HEADER_H - -// Header file content - -#endif // MY_HEADER_H -``` - -#### 5. Best Practices and Considerations: - -- **Use sparingly**: Overuse of macros can lead to code maintenance issues. -- **Prefer `const` or `constexpr`**: Use `const` variables or `constexpr` for constants instead of macros where possible. -- **Parenthesize**: Always parenthesize macro arguments and the entire expression to avoid unintended side effects. - -#### 6. Practical Examples and Exercises: - -**Example 1: Sorting with a Macro** - -```cpp -#include -#include -#include - -#define SORT_DESCENDING(vec) std::sort(vec.begin(), vec.end(), [](int a, int b) { return a > b; }) - -int main() { - std::vector numbers = {5, 2, 9, 1, 5, 6}; - - SORT_DESCENDING(numbers); - - for (int n : numbers) { - std::cout << n << " "; - } - // Output: 9 6 5 5 2 1 - return 0; -} -``` - -**Example 2: Conditional Compilation** - -```cpp -#include - -#define DEBUG_MODE - -int main() { -#ifdef DEBUG_MODE - std::cout << "Debug mode is on" << std::endl; -#else - std::cout << "Debug mode is off" << std::endl; -#endif - - std::cout << "Program running" << std::endl; - return 0; -} -``` - -**Exercises:** - -1. Define a macro to calculate the factorial of a number. -2. Implement a macro for checking if a number is even. -3. Create a macro that swaps two variables. - - diff --git a/docs/day-21/_category_.json b/docs/day-21/_category_.json deleted file mode 100644 index 5c0a67f80..000000000 --- a/docs/day-21/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 21", - "position": 21, - "link": { - "type": "generated-index" - } - } \ No newline at end of file diff --git a/docs/day-23/type_of_trees.md b/docs/day-23/type_of_trees.md deleted file mode 100644 index 7d9f9320c..000000000 --- a/docs/day-23/type_of_trees.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -slug: types-of-trees -title: Types of Trees in C++ -authors: [chaitanya] -tags: ["30daysofcpp", "trees", "data-structures", "cpp", "tutorial"] ---- - -## Types of Trees in C++ - -### Introduction - -Trees are versatile data structures that can be used to represent various hierarchical relationships. There are several types of trees, each with its own properties and use cases. Understanding the different types of trees is essential for choosing the right structure for a specific problem. - -### Types of Trees - -1. **Binary Tree** -2. **Binary Search Tree (BST)** -3. **AVL Tree** -4. **Red-Black Tree** -5. **B-Tree** -6. **Trie** -7. **Segment Tree** -8. **Suffix Tree** - -### Binary Tree - -A binary tree is a tree data structure where each node has at most two children, referred to as the left child and the right child. - -Binary Tree - -#### Properties: -- Each node has at most two children. -- The left and right children are distinct. - -### Binary Search Tree (BST) - -A binary search tree is a binary tree with the additional property that the left child of a node contains a value less than the node's value, and the right child contains a value greater than the node's value. - -Binary Search Tree - -#### Properties: -- The left subtree of a node contains only nodes with values less than the node's value. -- The right subtree of a node contains only nodes with values greater than the node's value. -- Both the left and right subtrees must also be binary search trees. - -### AVL Tree - -An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one. - -AVL Tree - -#### Properties: -- It is a binary search tree. -- The height difference between the left and right subtrees of any node is at most one. - -### Red-Black Tree - -A red-black tree is a kind of self-balancing binary search tree where each node has an extra bit for denoting the color of the node, either red or black. This helps ensure the tree remains balanced during insertions and deletions. - -Red-Black Tree - -#### Properties: -- Each node is either red or black. -- The root is always black. -- All leaves (NIL nodes) are black. -- If a red node has children, then the children are always black. -- Every path from a node to its descendant NIL nodes has the same number of black nodes. - -### B-Tree - -A B-tree is a self-balancing tree data structure that maintains sorted data and allows searches, sequential access, insertions, and deletions in logarithmic time. B-trees are generalizations of binary search trees in that a node can have more than two children. - -B-Tree - -#### Properties: -- All leaves are at the same level. -- A B-tree of order m can have a maximum of m-1 keys and m children. -- Internal nodes can have a variable number of child nodes within some pre-defined range. - -### Trie - -A trie, also called a prefix tree, is a kind of search tree used to store a dynamic set or associative array where the keys are usually strings. - -Trie - -#### Properties: -- Used to store strings. -- Each node represents a common prefix of some strings. - -### Segment Tree - -A segment tree is a tree data structure used for storing intervals or segments. It allows querying which of the stored segments contain a given point. - -Segment Tree - -#### Properties: -- Used for storing intervals or segments. -- Each node represents an interval. - -### Suffix Tree - -A suffix tree is a compressed trie containing all the suffixes of the given text as their keys and positions in the text as their values. - -Suffix Tree - -#### Properties: -- Used to store all suffixes of a given string. -- Efficient for pattern matching. - -### Conclusion - -Understanding the different types of trees and their properties is crucial for selecting the right tree structure for your specific needs. Each type of tree has its own advantages and is suited for different kinds of applications. - ---- diff --git a/docs/day-25/_category_.json b/docs/day-25/_category_.json deleted file mode 100644 index 8bd518523..000000000 --- a/docs/day-25/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Day 25", - "position": 25, - "link": { - "type": "generated-index" - } - } \ No newline at end of file diff --git a/docs/day-25/medium-level-questions.md b/docs/day-25/medium-level-questions.md deleted file mode 100644 index 2fa07f8de..000000000 --- a/docs/day-25/medium-level-questions.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -sidebar_position: 1 -title: "Medium Level Questions in C++" -description: "In this tutorial, we will practise medium level practise problems in C++ with the help of examples." -sidebar_label: "medium Practise questions" -slug: medium-practise-question-cpp ---- - - -## Here are 20 medium level C++ questions along with their solutions: - -1. Write a program to find the factorial of a number. - - **Input:** 5 - - **Output:** The factorial of 5 is 120. - -2. Implement a binary search algorithm. - - **Input:** Sorted array: [1, 3, 5, 7, 9], Target element: 7 - - **Output:** Element 7 found at index 3. - -3. Create a class to represent a bank account with deposit and withdrawal methods. - - **Input:** Account balance: $100, Deposit amount: $50 - - **Output:** Account balance after deposit: $150 - -4. Write a program to reverse a string. - - **Input:** "Hello, World!" - - **Output:** "!dlroW ,olleH" - -5. Implement a stack using a linked list. - - **Input:** Push elements: 10, 20, 30 - - **Output:** Stack: 30 -> 20 -> 10 - -6. Create a class to represent a rectangle with methods to calculate area and perimeter. - - **Input:** Length: 5, Width: 3 - - **Output:** Area: 15, Perimeter: 16 - -7. Write a program to check if a number is prime. - - **Input:** 7 - - **Output:** 7 is a prime number. - -8. Implement a queue using an array. - - **Input:** Enqueue elements: 10, 20, 30 - - **Output:** Queue: 10 -> 20 -> 30 - -9. Create a class to represent a student with methods to calculate average marks. - - **Input:** Marks: [80, 90, 70, 85] - - **Output:** Average marks: 81.25 - -10. Write a program to find the largest element in an array. - - **Input:** Array: [5, 10, 3, 8, 2] - - **Output:** The largest element is 10. - -11. Implement a binary tree data structure. - - **Input:** Insert elements: 10, 5, 15, 3, 7, 12, 20 - - **Output:** Tree: - 10 - / \ - 5 15 - / \ / \ - 3 7 12 20 - -12. Create a class to represent a car with methods to start and stop the engine. - - **Input:** None - - **Output:** Car engine started. Car engine stopped. - -13. Write a program to check if a string is a palindrome. - - **Input:** "racecar" - - **Output:** "racecar" is a palindrome. - -14. Implement a hash table data structure. - - **Input:** Insert key-value pairs: ("John", 25), ("Alice", 30), ("Bob", 35) - - **Output:** Hash table: - Index 0: ("John", 25) - Index 1: ("Alice", 30) - Index 2: ("Bob", 35) - -15. Create a class to represent a circle with methods to calculate area and circumference. - - **Input:** Radius: 5 - - **Output:** Area: 78.54, Circumference: 31.42 - -16. Write a program to sort an array using bubble sort. - - **Input:** Array: [5, 2, 8, 1, 9] - - **Output:** Sorted array: [1, 2, 5, 8, 9] - -17. Implement a linked list data structure. - - **Input:** Insert elements: 10, 20, 30 - - **Output:** Linked list: 10 -> 20 -> 30 - -18. Create a class to represent a book with methods to get and set the author and title. - - **Input:** Author: "John Doe", Title: "The Book" - - **Output:** Book details: Author: "John Doe", Title: "The Book" - -19. Write a program to find the sum of all elements in an array. - - **Input:** Array: [1, 2, 3, 4, 5] - - **Output:** The sum of all elements is 15. - -20. Implement a merge sort algorithm. - - **Input:** Array: [5, 2, 8, 1, 9] - - **Output:** Sorted array: [1, 2, 5, 8, 9] - - - -## **[check solution here](./solution.md "check solution")** - diff --git a/docs/day-25/solution.md b/docs/day-25/solution.md deleted file mode 100644 index bcfff983d..000000000 --- a/docs/day-25/solution.md +++ /dev/null @@ -1,790 +0,0 @@ -1. Write a program to find the factorial of a number. - -```cpp -#include - -int factorial(int n) { - if (n == 0 || n == 1) { - return 1; - } - return n * factorial(n - 1); -} - -int main() { - int num; - std::cout << "Enter a number: "; - std::cin >> num; - int result = factorial(num); - std::cout << "The factorial of " << num << " is " << result << std::endl; - return 0; -} -``` - -2. Implement a binary search algorithm. - -```cpp -#include -#include - -int binarySearch(const std::vector& arr, int target) { - int left = 0; - int right = arr.size() - 1; - while (left <= right) { - int mid = left + (right - left) / 2; - if (arr[mid] == target) { - return mid; - } else if (arr[mid] < target) { - left = mid + 1; - } else { - right = mid - 1; - } - } - return -1; -} - -int main() { - std::vector arr = {1, 3, 5, 7, 9}; - int target = 7; - int index = binarySearch(arr, target); - if (index != -1) { - std::cout << "Element " << target << " found at index " << index << std::endl; - } else { - std::cout << "Element not found" << std::endl; - } - return 0; -} -``` - -3. Create a class to represent a bank account with deposit and withdrawal methods. - -```cpp -#include - -class BankAccount { -private: - double balance; - -public: - BankAccount(double initialBalance) { - balance = initialBalance; - } - - void deposit(double amount) { - balance += amount; - } - - void withdraw(double amount) { - if (amount <= balance) { - balance -= amount; - } else { - std::cout << "Insufficient balance" << std::endl; - } - } - - double getBalance() { - return balance; - } -}; - -int main() { - BankAccount account(100); - account.deposit(50); - std::cout << "Account balance after deposit: $" << account.getBalance() << std::endl; - account.withdraw(30); - std::cout << "Account balance after withdrawal: $" << account.getBalance() << std::endl; - return 0; -} -``` - -4. Write a program to reverse a string. - -```cpp -#include -#include - -std::string reverseString(const std::string& str) { - std::string reversedStr; - for (int i = str.length() - 1; i >= 0; i--) { - reversedStr += str[i]; - } - return reversedStr; -} - -int main() { - std::string str = "Hello, World!"; - std::string reversedStr = reverseString(str); - std::cout << "Reversed string: " << reversedStr << std::endl; - return 0; -} -``` - -5. Implement a stack using a linked list. - -```cpp -#include - -class Node { -public: - int data; - Node* next; - - Node(int value) { - data = value; - next = nullptr; - } -}; - -class Stack { -private: - Node* top; - -public: - Stack() { - top = nullptr; - } - - void push(int value) { - Node* newNode = new Node(value); - if (top == nullptr) { - top = newNode; - } else { - newNode->next = top; - top = newNode; - } - } - - void pop() { - if (top == nullptr) { - std::cout << "Stack is empty" << std::endl; - } else { - Node* temp = top; - top = top->next; - delete temp; - } - } - - int peek() { - if (top == nullptr) { - std::cout << "Stack is empty" << std::endl; - return -1; - } else { - return top->data; - } - } - - bool isEmpty() { - return top == nullptr; - } -}; - -int main() { - Stack stack; - stack.push(10); - stack.push(20); - stack.push(30); - std::cout << "Stack: "; - while (!stack.isEmpty()) { - std::cout << stack.peek() << " -> "; - stack.pop(); - } - std::cout << "NULL" << std::endl; - return 0; -} -``` - -6. Create a class to represent a rectangle with methods to calculate area and perimeter. - -```cpp -#include - -class Rectangle { -private: - double length; - double width; - -public: - Rectangle(double l, double w) { - length = l; - width = w; - } - - double calculateArea() { - return length * width; - } - - double calculatePerimeter() { - return 2 * (length + width); - } -}; - -int main() { - double length = 5; - double width = 3; - Rectangle rectangle(length, width); - double area = rectangle.calculateArea(); - double perimeter = rectangle.calculatePerimeter(); - std::cout << "Area: " << area << ", Perimeter: " << perimeter << std::endl; - return 0; -} -``` - -7. Write a program to check if a number is prime. - -```cpp -#include - -bool isPrime(int num) { - if (num <= 1) { - return false; - } - for (int i = 2; i * i <= num; i++) { - if (num % i == 0) { - return false; - } - } - return true; -} - -int main() { - int num; - std::cout << "Enter a number: "; - std::cin >> num; - if (isPrime(num)) { - std::cout << num << " is a prime number." << std::endl; - } else { - std::cout << num << " is not a prime number." << std::endl; - } - return 0; -} -``` - -8. Implement a queue using an array. - -```cpp -#include - -class Queue { -private: - int* arr; - int front; - int rear; - int capacity; - int size; - -public: - Queue(int cap) { - capacity = cap; - arr = new int[capacity]; - front = 0; - rear = -1; - size = 0; - } - - void enqueue(int value) { - if (size == capacity) { - std::cout << "Queue is full" << std::endl; - } else { - rear = (rear + 1) % capacity; - arr[rear] = value; - size++; - } - } - - void dequeue() { - if (size == 0) { - std::cout << "Queue is empty" << std::endl; - } else { - front = (front + 1) % capacity; - size--; - } - } - - int peek() { - if (size == 0) { - std::cout << "Queue is empty" << std::endl; - return -1; - } else { - return arr[front]; - } - } - - bool isEmpty() { - return size == 0; - } -}; - -int main() { - Queue queue(3); - queue.enqueue(10); - queue.enqueue(20); - queue.enqueue(30); - std::cout << "Queue: "; - while (!queue.isEmpty()) { - std::cout << queue.peek() << " -> "; - queue.dequeue(); - } - std::cout << "NULL" << std::endl; - return 0; -} -``` - -9. Create a class to represent a student with methods to calculate average marks. - -```cpp -#include -#include - -class Student { -private: - std::vector marks; - -public: - void addMark(int mark) { - marks.push_back(mark); - } - - double calculateAverage() { - if (marks.empty()) { - return 0; - } - int sum = 0; - for (int mark : marks) { - sum += mark; - } - return static_cast(sum) / marks.size(); - } -}; - -int main() { - Student student; - student.addMark(80); - student.addMark(90); - student.addMark(70); - student.addMark(85); - double average = student.calculateAverage(); - std::cout << "Average marks: " << average << std::endl; - return 0; -} -``` - -10. Write a program to find the largest element in an array. - -```cpp -#include -#include - -int findLargestElement(const std::vector& arr) { - int largest = arr[0]; - for (int i = 1; i < arr.size(); i++) { - if (arr[i] > largest) { - largest = arr[i]; - } - } - return largest; -} - -int main() { - std::vector arr = {5, 10, 3, 8, 2}; - int largest = findLargestElement(arr); - std::cout << "The largest element is " << largest << std::endl; - return 0; -} -``` - -11. Implement a binary tree data structure. - -```cpp -#include - -class Node { -public: - int data; - Node* left; - Node* right; - - Node(int value) { - data = value; - left = nullptr; - right = nullptr; - } -}; - -class BinaryTree { -private: - Node* root; - -public: - BinaryTree() { - root = nullptr; - } - - void insert(int value) { - Node* newNode = new Node(value); - if (root == nullptr) { - root = newNode; - } else { - Node* current = root; - while (true) { - if (value < current->data) { - if (current->left == nullptr) { - current->left = newNode; - break; - } else { - current = current->left; - } - } else { - if (current->right == nullptr) { - current->right = newNode; - break; - } else { - current = current->right; - } - } - } - } - } - - void printTree(Node* node) { - if (node != nullptr) { - printTree(node->left); - std::cout << node->data << " "; - printTree(node->right); - } - } - - void printTreeInOrder() { - printTree(root); - } -}; - -int main() { - BinaryTree tree; - tree.insert(10); - tree.insert(5); - tree.insert(15); - tree.insert(3); - tree.insert(7); - tree.insert(12); - tree.insert(20); - std::cout << "Tree: "; - tree.printTreeInOrder(); - std::cout << std::endl; - return 0; -} -``` - -12. Create a class to represent a car with methods to start and stop the engine. - -```cpp -#include - -class Car { -public: - void startEngine() { - std::cout << "Car engine started." << std::endl; - } - - void stopEngine() { - std::cout << "Car engine stopped." << std::endl; - } -}; - -int main() { - Car car; - car.startEngine(); - car.stopEngine(); - return 0; -} -``` - -13. Write a program to check if a string is a palindrome. - -```cpp -#include -#include - -bool isPalindrome(const std::string& str) { - int left = 0; - int right = str.length() - 1; - while (left < right) { - if (str[left] != str[right]) { - return false; - } - left++; - right--; - } - return true; -} - -int main() { - std::string str = "racecar"; - if (isPalindrome(str)) { - std::cout << "\"" << str << "\" is a palindrome." << std::endl; - } else { - std::cout << "\"" << str << "\" is not a palindrome." << std::endl; - } - return 0; -} -``` - -14. Implement a hash table data structure. - -```cpp -#include -#include -#include -#include - -class HashTable { -private: - std::vector>> table; - int capacity; - -public: - HashTable(int cap) { - capacity = cap; - table.resize(capacity); - } - - int hashFunction(const std::string& key) { - int sum = 0; - for (char c : key) { - sum += c; - } - return sum % capacity; - } - - void insert(const std::string& key, int value) { - int index = hashFunction(key); - table[index].push_back(std::make_pair(key, value)); - } - - void printTable() { - for (int i = 0; i < capacity; i++) { - std::cout << "Index " << i << ": "; - for (const auto& pair : table[i]) { - std::cout << "(" << pair.first << ", " << pair.second << ") "; - } - std::cout << std::endl; - } - } -}; - -int main() { - HashTable hashTable(3); - hashTable.insert("John", 25); - hashTable.insert("Alice", 30); - hashTable.insert("Bob", 35); - std::cout << "Hash table:" << std::endl; - hashTable.printTable(); - return 0; -} -``` - -15. Create a class to represent a circle with methods to calculate area and circumference. - -```cpp -#include -#include - -class Circle { -private: - double radius; - -public: - Circle(double r) { - radius = r; - } - - double calculateArea() { - return M_PI * radius * radius; - } - - double calculateCircumference() { - return 2 * M_PI * radius; - } -}; - -int main() { - double radius = 5; - Circle circle(radius); - double area = circle.calculateArea(); - double circumference = circle.calculateCircumference(); - std::cout << "Area: " << area << ", Circumference: " << circumference << std::endl; - return 0; -} -``` - -16. Write a program to sort an array using bubble sort. - -```cpp -#include -#include - -void bubbleSort(std::vector& arr) { - int n = arr.size(); - for (int i = 0; i < n - 1; i++) { - for (int j = 0; j < n - i - 1; j++) { - if (arr[j] > arr[j + 1]) { - std::swap(arr[j], arr[j + 1]); - } - } - } -} - -int main() { - std::vector arr = {5, 2, 8, 1, 9}; - bubbleSort(arr); - std::cout << "Sorted array: "; - for (int num : arr) { - std::cout << num << " "; - } - std::cout << std::endl; - return 0; -} -``` - -17. Implement a linked list data structure. - -```cpp -#include - -class Node { -public: - int data; - Node* next; - - Node(int value) { - data = value; - next = nullptr; - } -}; - -class LinkedList { -private: - Node* head; - -public: - LinkedList() { - head = nullptr; - } - - void insert(int value) { - Node* newNode = new Node(value); - if (head == nullptr) { - head = newNode; - } else { - Node* current = head; - while (current->next != nullptr) { - current = current->next; - } - current->next = newNode; - } - } - - void printList() { - Node* current = head; - while (current != nullptr) { - std::cout << current->data << " -> "; - current = current->next; - } - std::cout << "NULL" << std::endl; - } -}; - -int main() { - LinkedList linkedList; - linkedList.insert(10); - linkedList.insert(20); - linkedList.insert(30); - std::cout << "Linked list: "; - linkedList.printList(); - return 0; -} -``` - -18. Create a class to represent a book with methods to get and set the author and title. - -```cpp -#include -#include - -class Book { -private: - std::string author; - std::string title; - -public: - void setAuthor(const std::string& a) { - author = a; - } - - void setTitle(const std::string& t) { - title = t; - } - - std::string getAuthor() { - return author; - } - - std::string getTitle() { - return title; - } -}; - -int main() { - Book book; - book.setAuthor("John Doe"); - book.setTitle("The Book"); - std::cout << "Book details: Author: \"" << book.getAuthor() << "\", Title: \"" << book.getTitle() << "\"" << std::endl; - return 0; -} -``` - -19. Write a program to find the sum of all elements in an array. - -```cpp -#include -#include - -int findSum(const std::vector& arr) { - int sum = 0; - for (int num : arr) { - sum += num; - } - return sum; -} - -int main() { - std::vector arr = {1, 2, 3, 4, 5}; - int sum = findSum(arr); - std::cout << "The sum of all elements is " << sum << std::endl; - return 0; -} -``` - -20. Implement a merge sort algorithm. - -```cpp -#include -#include - -void merge(std::vector& arr, int left, int mid, int right) { - int n1 = mid - left + 1; - int n2 = right - mid; - std::vector leftArr(n1); - std::vector rightArr(n2); - for (int i = 0; i < n1; i++) { - leftArr[i] = arr[left + i]; - } - for (int j = 0; j < n2; j++) { - rightArr[j] = arr[mid + 1 + j]; - } - int i = 0; - int j = 0; - int k = left; - while (i < n1 && j < n2) { - if (leftArr[i] <= rightArr[j]) { - arr[k] = leftArr[i]; - i++; - } else { diff --git a/docusaurus.config.js b/docusaurus.config.js index da549228f..cee13dd1b 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -1,15 +1,6 @@ -stylesheets: [ - { - href: "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css", - type: "text/css", - }, -], - -import { themes as prismThemes } from "prism-react-renderer"; -require("dotenv").config(); +import {themes as prismThemes} from 'prism-react-renderer'; /** @type {import('@docusaurus/types').Config} */ - const config = { title: "30 Days of CPP", tagline: @@ -32,7 +23,7 @@ const config = { presets: [ [ - "classic", + 'classic', /** @type {import('@docusaurus/preset-classic').Options} */ ({ docs: { @@ -47,131 +38,88 @@ const config = { "https://github.com/subhadipbhowmik/30-Days-Of-CPP/tree/main/", }, theme: { - customCss: require.resolve("./src/css/custom.css"), - }, - pages: { - path: "./src/pages", + customCss: require.resolve('./src/css/custom.css'), }, }), ], ], - stylesheets: [ - { - href: "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css", - type: "text/css", - }, - ], - themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ + // Replace with your project's social card algolia: { appId: "SKRAQTXG41", apiKey: "4eadbd9906c2db99f8c4d53bb7202144", indexName: "subhadipbhowmik", contextualSearch: false, }, - image: "img/30-days-cpp-banner.png", + image: 'img/docusaurus-social-card.jpg', navbar: { - title: "30 Days of CPP", + title: '30 Days of CPP', logo: { - alt: "30 Days of CPP Programming Logo", - src: "img/logo.svg", + alt: 'My Site Logo', + src: 'img/logo.svg', }, items: [ { - type: "docSidebar", - sidebarId: "tutorialSidebar", - position: "left", - label: "Tutorial", + type: 'docSidebar', + sidebarId: 'tutorialSidebar', + position: 'left', + label: 'Tutorial', }, - { to: "/blog", label: "Blog", position: "left" }, + {to: '/blog', label: 'Blog', position: 'left'}, { - to: "/login", - label: "Login", - position: "right", - }, - { - to: "/signup", - label: "Sign Up", - position: "right", - }, - { - href: "https://github.com/subhadipbhowmik/30-Days-Of-CPP/", - label: "GitHub", - position: "right", - className: "header-github-link", - 'aria-label': "GitHub repository", + href: 'https://github.com/subhadipbhowmik/30-Days-Of-CPP', + label: 'GitHub', + position: 'right', }, ], }, footer: { - style: "dark", + style: 'dark', links: [ { - title: "Learn", + title: 'Learn', items: [ { - label: "Tutorial", - to: "/docs/intro", + label: 'Tutorial', + to: '/docs/intro', + }, + { + label: 'Blog', + to: '/blog', }, ], }, { - title: "Connect with us", + title: 'Community', items: [ { - label: "Facebook", - href: "https://www.facebook.com/", - className: "footer-facebook-link", - }, - { - label: "X", - href: "https://x.com/", - className: "footer-x-link", - }, - { - label: "Discord", - href: "https://discord.com/", - className: "footer-discord-link", - }, - { - label: "LinkedIn", - href: "https://www.linkedin.com/", - className: "footer-linkedin-link", - }, - { - label: "GitHub", - href: "https://github.com/", - className: "footer-github-link", + label: 'Contributors', + href: 'https://github.com/subhadipbhowmik/30-Days-Of-CPP/graphs/contributors', }, ], }, { - title: "More", + title: 'More', items: [ { - label: "Blog", - to: "/blog", + label: 'Fork 🍴', + to: 'https://github.com/subhadipbhowmik/30-Days-Of-CPP/fork', }, { - label: "GitHub", - href: "https://github.com/subhadipbhowmik/30-Days-Of-CPP/", + label: 'GitHub', + href: 'https://github.com/subhadipbhowmik/30-Days-Of-CPP', }, - { - label: "Contact", - to: "/#contact", - } ], }, ], - copyright: `Built with Open Source 🥑 | 30-Days-Of-CPP `, + copyright: `Copyright © ${new Date().getFullYear()} Built with Open Source 🥑.`, }, prism: { theme: prismThemes.github, darkTheme: prismThemes.dracula, - additionalLanguages: ["cpp"], }, }), }; diff --git a/package-lock.json b/package-lock.json index 786363e86..e1daeeb00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,32 +1,25 @@ { - "name": "30-days-cpp", - "version": "1.0.0", + "name": "new", + "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "30-days-cpp", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "^3.3.2", - "@docusaurus/preset-classic": "^3.3.2", - "@docusaurus/theme-search-algolia": "^3.3.2", - "@fortawesome/fontawesome-free": "^6.5.2", - "@fortawesome/fontawesome-svg-core": "^6.5.2", - "@fortawesome/free-brands-svg-icons": "^6.5.2", - "@fortawesome/react-fontawesome": "^0.2.2", + "name": "new", + "version": "0.0.0", + "dependencies": { + "@docusaurus/core": "3.4.0", + "@docusaurus/preset-classic": "3.4.0", + "@docusaurus/theme-search-algolia": "^3.4.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", - "dotenv": "^16.4.5", "prism-react-renderer": "^2.3.0", "react": "^18.0.0", - "react-dom": "^18.0.0", - "react-helmet": "^6.1.0" + "react-dom": "^18.0.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.3.2", - "@docusaurus/types": "3.0.1" + "@docusaurus/module-type-aliases": "3.4.0", + "@docusaurus/types": "3.4.0" }, "engines": { "node": ">=18.0" @@ -224,11 +217,11 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", - "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dependencies": { - "@babel/highlight": "^7.24.6", + "@babel/highlight": "^7.24.7", "picocolors": "^1.0.0" }, "engines": { @@ -236,28 +229,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz", - "integrity": "sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.6.tgz", - "integrity": "sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.6", - "@babel/generator": "^7.24.6", - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helpers": "^7.24.6", - "@babel/parser": "^7.24.6", - "@babel/template": "^7.24.6", - "@babel/traverse": "^7.24.6", - "@babel/types": "^7.24.6", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -281,11 +274,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.6.tgz", - "integrity": "sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", "dependencies": { - "@babel/types": "^7.24.6", + "@babel/types": "^7.24.7", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -295,34 +288,35 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.6.tgz", - "integrity": "sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dependencies": { - "@babel/types": "^7.24.6" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.6.tgz", - "integrity": "sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", "dependencies": { - "@babel/types": "^7.24.6" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz", - "integrity": "sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", "dependencies": { - "@babel/compat-data": "^7.24.6", - "@babel/helper-validator-option": "^7.24.6", + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -340,18 +334,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.6.tgz", - "integrity": "sha512-djsosdPJVZE6Vsw3kk7IPRWethP94WHGOhQTc67SNXE0ZzMhHgALw8iGmYS0TD1bbMM0VDROy43od7/hN6WYcA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-function-name": "^7.24.6", - "@babel/helper-member-expression-to-functions": "^7.24.6", - "@babel/helper-optimise-call-expression": "^7.24.6", - "@babel/helper-replace-supers": "^7.24.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6", - "@babel/helper-split-export-declaration": "^7.24.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz", + "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", "semver": "^6.3.1" }, "engines": { @@ -370,11 +364,11 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.6.tgz", - "integrity": "sha512-C875lFBIWWwyv6MHZUG9HmRrlTDgOsLWZfYR0nW69gaKJNe0/Mpxx5r0EID2ZdHQkdUmQo2t0uNckTL08/1BgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz", + "integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-annotate-as-pure": "^7.24.7", "regexpu-core": "^5.3.1", "semver": "^6.3.1" }, @@ -409,68 +403,73 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz", - "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dependencies": { + "@babel/types": "^7.24.7" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz", - "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "dependencies": { - "@babel/template": "^7.24.6", - "@babel/types": "^7.24.6" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz", - "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", "dependencies": { - "@babel/types": "^7.24.6" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.6.tgz", - "integrity": "sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz", + "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==", "dependencies": { - "@babel/types": "^7.24.6" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz", - "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dependencies": { - "@babel/types": "^7.24.6" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz", - "integrity": "sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-module-imports": "^7.24.6", - "@babel/helper-simple-access": "^7.24.6", - "@babel/helper-split-export-declaration": "^7.24.6", - "@babel/helper-validator-identifier": "^7.24.6" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -480,32 +479,32 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.6.tgz", - "integrity": "sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", "dependencies": { - "@babel/types": "^7.24.6" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz", - "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.6.tgz", - "integrity": "sha512-1Qursq9ArRZPAMOZf/nuzVW8HgJLkTB9y9LfP4lW2MVp4e9WkLJDovfKBxoDcCk6VuzIxyqWHyBoaCtSRP10yg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz", + "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-wrap-function": "^7.24.6" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-wrap-function": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -515,13 +514,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.6.tgz", - "integrity": "sha512-mRhfPwDqDpba8o1F8ESxsEkJMQkUF8ZIWrAc0FtWhxnjfextxMWxr22RtFizxxSYLjVHDeMgVsRq8BBZR2ikJQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", + "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-member-expression-to-functions": "^7.24.6", - "@babel/helper-optimise-call-expression": "^7.24.6" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -531,93 +530,96 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz", - "integrity": "sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dependencies": { - "@babel/types": "^7.24.6" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.6.tgz", - "integrity": "sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", "dependencies": { - "@babel/types": "^7.24.6" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz", - "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dependencies": { - "@babel/types": "^7.24.6" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz", - "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", - "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz", - "integrity": "sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.6.tgz", - "integrity": "sha512-f1JLrlw/jbiNfxvdrfBgio/gRBk3yTAEJWirpAkiJG2Hb22E7cEYKHWo0dFPTv/niPovzIdPdEDetrv6tC6gPQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz", + "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==", "dependencies": { - "@babel/helper-function-name": "^7.24.6", - "@babel/template": "^7.24.6", - "@babel/types": "^7.24.6" + "@babel/helper-function-name": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.6.tgz", - "integrity": "sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", "dependencies": { - "@babel/template": "^7.24.6", - "@babel/types": "^7.24.6" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz", - "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -691,9 +693,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", - "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -702,12 +704,12 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.6.tgz", - "integrity": "sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz", + "integrity": "sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -717,11 +719,11 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.6.tgz", - "integrity": "sha512-iVuhb6poq5ikqRq2XWU6OQ+R5o9wF+r/or9CeUyovgptz0UlnK4/seOQ1Istu/XybYjAhQv1FRSSfHHufIku5Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz", + "integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -731,13 +733,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.6.tgz", - "integrity": "sha512-c8TER5xMDYzzFcGqOEp9l4hvB7dcbhcGjcLVwxWfe4P5DOafdwjsBJZKsmv+o3aXh7NhopvayQIovHrh2zSRUQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6", - "@babel/plugin-transform-optional-chaining": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -747,12 +749,12 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.6.tgz", - "integrity": "sha512-z8zEjYmwBUHN/pCF3NuWBhHQjJCrd33qAi8MgANfMrAvn72k2cImT8VjK9LJFu4ysOLJqhfkYYb3MvwANRUNZQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz", + "integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -831,11 +833,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.6.tgz", - "integrity": "sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -845,11 +847,11 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.6.tgz", - "integrity": "sha512-D+CfsVZousPXIdudSII7RGy52+dYRtbyKAZcvtQKq/NpsivyMVduepzcLqG5pMBugtMdedxdC8Ramdpcne9ZWQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -881,11 +883,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.6.tgz", - "integrity": "sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -989,11 +991,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.6.tgz", - "integrity": "sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1018,11 +1020,11 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.6.tgz", - "integrity": "sha512-jSSSDt4ZidNMggcLx8SaKsbGNEfIl0PHx/4mFEulorE7bpYLbN0d3pDW3eJ7Y5Z3yPhy3L3NaPCYyTUY7TuugQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1032,13 +1034,13 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.6.tgz", - "integrity": "sha512-VEP2o4iR2DqQU6KPgizTW2mnMx6BG5b5O9iQdrW9HesLkv8GIA8x2daXBQxw1MrsIkFQGA/iJ204CKoQ8UcnAA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", + "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-remap-async-to-generator": "^7.24.6", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -1049,13 +1051,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.6.tgz", - "integrity": "sha512-NTBA2SioI3OsHeIn6sQmhvXleSl9T70YY/hostQLveWs0ic+qvbA3fa0kwAwQ0OA/XGaAerNZRQGJyRfhbJK4g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", "dependencies": { - "@babel/helper-module-imports": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-remap-async-to-generator": "^7.24.6" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1065,11 +1067,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.6.tgz", - "integrity": "sha512-XNW7jolYHW9CwORrZgA/97tL/k05qe/HL0z/qqJq1mdWhwwCM6D4BJBV7wAz9HgFziN5dTOG31znkVIzwxv+vw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1079,11 +1081,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.6.tgz", - "integrity": "sha512-S/t1Xh4ehW7sGA7c1j/hiOBLnEYCp/c2sEG4ZkL8kI1xX9tW2pqJTCHKtdhe/jHKt8nG0pFCrDHUXd4DvjHS9w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", + "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1093,12 +1095,12 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.6.tgz", - "integrity": "sha512-j6dZ0Z2Z2slWLR3kt9aOmSIrBvnntWjMDN/TVcMPxhXMLmJVqX605CBRlcGI4b32GMbfifTEsdEjGjiE+j/c3A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1108,12 +1110,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.6.tgz", - "integrity": "sha512-1QSRfoPI9RoLRa8Mnakc6v3e0gJxiZQTYrMfLn+mD0sz5+ndSzwymp2hDcYJTyT0MOn0yuWzj8phlIvO72gTHA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1124,17 +1126,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.6.tgz", - "integrity": "sha512-+fN+NO2gh8JtRmDSOB6gaCVo36ha8kfCW1nMq2Gc0DABln0VcHN4PrALDvF5/diLzIRKptC7z/d7Lp64zk92Fg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-function-name": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-replace-supers": "^7.24.6", - "@babel/helper-split-export-declaration": "^7.24.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz", + "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", "globals": "^11.1.0" }, "engines": { @@ -1145,12 +1147,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.6.tgz", - "integrity": "sha512-cRzPobcfRP0ZtuIEkA8QzghoUpSB3X3qSH5W2+FzG+VjWbJXExtx0nbRqwumdBN1x/ot2SlTNQLfBCnPdzp6kg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/template": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1160,11 +1162,11 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.6.tgz", - "integrity": "sha512-YLW6AE5LQpk5npNXL7i/O+U9CE4XsBCuRPgyjl1EICZYKmcitV+ayuuUGMJm2lC1WWjXYszeTnIxF/dq/GhIZQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz", + "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1174,12 +1176,12 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.6.tgz", - "integrity": "sha512-rCXPnSEKvkm/EjzOtLoGvKseK+dS4kZwx1HexO3BtRtgL0fQ34awHn34aeSHuXtZY2F8a1X8xqBBPRtOxDVmcA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1189,11 +1191,11 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.6.tgz", - "integrity": "sha512-/8Odwp/aVkZwPFJMllSbawhDAO3UJi65foB00HYnK/uXvvCPm0TAXSByjz1mpRmp0q6oX2SIxpkUOpPFHk7FLA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1203,11 +1205,11 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.6.tgz", - "integrity": "sha512-vpq8SSLRTBLOHUZHSnBqVo0AKX3PBaoPs2vVzYVWslXDTDIpwAcCDtfhUcHSQQoYoUvcFPTdC8TZYXu9ZnLT/w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1218,12 +1220,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.6.tgz", - "integrity": "sha512-EemYpHtmz0lHE7hxxxYEuTYOOBZ43WkDgZ4arQ4r+VX9QHuNZC+WH3wUWmRNvR8ECpTRne29aZV6XO22qpOtdA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1233,11 +1235,11 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.6.tgz", - "integrity": "sha512-inXaTM1SVrIxCkIJ5gqWiozHfFMStuGbGJAxZFBoHcRRdDP0ySLb3jH6JOwmfiinPwyMZqMBX+7NBDCO4z0NSA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1248,12 +1250,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.6.tgz", - "integrity": "sha512-n3Sf72TnqK4nw/jziSqEl1qaWPbCRw2CziHH+jdRYvw4J6yeCzsj4jdw8hIntOEeDGTmHVe2w4MVL44PN0GMzg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1263,13 +1265,13 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.6.tgz", - "integrity": "sha512-sOajCu6V0P1KPljWHKiDq6ymgqB+vfo3isUS4McqW1DZtvSVU2v/wuMhmRmkg3sFoq6GMaUUf8W4WtoSLkOV/Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", + "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-function-name": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1279,11 +1281,11 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.6.tgz", - "integrity": "sha512-Uvgd9p2gUnzYJxVdBLcU0KurF8aVhkmVyMKW4MIY1/BByvs3EBpv45q01o7pRTVmTvtQq5zDlytP3dcUgm7v9w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1294,11 +1296,11 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.6.tgz", - "integrity": "sha512-f2wHfR2HF6yMj+y+/y07+SLqnOSwRp8KYLpQKOzS58XLVlULhXbiYcygfXQxJlMbhII9+yXDwOUFLf60/TL5tw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz", + "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1308,11 +1310,11 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.6.tgz", - "integrity": "sha512-EKaWvnezBCMkRIHxMJSIIylzhqK09YpiJtDbr2wsXTwnO0TxyjMUkaw4RlFIZMIS0iDj0KyIg7H7XCguHu/YDA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1323,11 +1325,11 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.6.tgz", - "integrity": "sha512-9g8iV146szUo5GWgXpRbq/GALTnY+WnNuRTuRHWWFfWGbP9ukRL0aO/jpu9dmOPikclkxnNsjY8/gsWl6bmZJQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1337,12 +1339,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.6.tgz", - "integrity": "sha512-eAGogjZgcwqAxhyFgqghvoHRr+EYRQPFjUXrTYKBRb5qPnAVxOOglaxc4/byHqjvq/bqO2F3/CGwTHsgKJYHhQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", "dependencies": { - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1352,13 +1354,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.6.tgz", - "integrity": "sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz", + "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-simple-access": "^7.24.6" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1368,14 +1370,14 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.6.tgz", - "integrity": "sha512-xg1Z0J5JVYxtpX954XqaaAT6NpAY6LtZXvYFCJmGFJWwtlz2EmJoR8LycFRGNE8dBKizGWkGQZGegtkV8y8s+w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz", + "integrity": "sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==", "dependencies": { - "@babel/helper-hoist-variables": "^7.24.6", - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-validator-identifier": "^7.24.6" + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1385,12 +1387,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.6.tgz", - "integrity": "sha512-esRCC/KsSEUvrSjv5rFYnjZI6qv4R1e/iHQrqwbZIoRJqk7xCvEUiN7L1XrmW5QSmQe3n1XD88wbgDTWLbVSyg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", "dependencies": { - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1400,12 +1402,12 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.6.tgz", - "integrity": "sha512-6DneiCiu91wm3YiNIGDWZsl6GfTTbspuj/toTEqLh9d4cx50UIzSdg+T96p8DuT7aJOBRhFyaE9ZvTHkXrXr6Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1415,11 +1417,11 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.6.tgz", - "integrity": "sha512-f8liz9JG2Va8A4J5ZBuaSdwfPqN6axfWRK+y66fjKYbwf9VBLuq4WxtinhJhvp1w6lamKUwLG0slK2RxqFgvHA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1429,11 +1431,11 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.6.tgz", - "integrity": "sha512-+QlAiZBMsBK5NqrBWFXCYeXyiU1y7BQ/OYaiPAcQJMomn5Tyg+r5WuVtyEuvTbpV7L25ZSLfE+2E9ywj4FD48A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1444,11 +1446,11 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.6.tgz", - "integrity": "sha512-6voawq8T25Jvvnc4/rXcWZQKKxUNZcKMS8ZNrjxQqoRFernJJKjE3s18Qo6VFaatG5aiX5JV1oPD7DbJhn0a4Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1459,14 +1461,14 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.6.tgz", - "integrity": "sha512-OKmi5wiMoRW5Smttne7BwHM8s/fb5JFs+bVGNSeHWzwZkWXWValR1M30jyXo1s/RaqgwwhEC62u4rFH/FBcBPg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.6" + "@babel/plugin-transform-parameters": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1476,12 +1478,12 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.6.tgz", - "integrity": "sha512-N/C76ihFKlZgKfdkEYKtaRUtXZAgK7sOY4h2qrbVbVTXPrKGIi8aww5WGe/+Wmg8onn8sr2ut6FXlsbu/j6JHg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-replace-supers": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1491,11 +1493,11 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.6.tgz", - "integrity": "sha512-L5pZ+b3O1mSzJ71HmxSCmTVd03VOT2GXOigug6vDYJzE5awLI7P1g0wFcdmGuwSDSrQ0L2rDOe/hHws8J1rv3w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1506,12 +1508,12 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.6.tgz", - "integrity": "sha512-cHbqF6l1QP11OkYTYQ+hhVx1E017O5ZcSPXk9oODpqhcAD1htsWG2NpHrrhthEO2qZomLK0FXS+u7NfrkF5aOQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz", + "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -1522,11 +1524,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.6.tgz", - "integrity": "sha512-ST7guE8vLV+vI70wmAxuZpIKzVjvFX9Qs8bl5w6tN/6gOypPWUmMQL2p7LJz5E63vEGrDhAiYetniJFyBH1RkA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1536,12 +1538,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.6.tgz", - "integrity": "sha512-T9LtDI0BgwXOzyXrvgLTT8DFjCC/XgWLjflczTLXyvxbnSR/gpv0hbmzlHE/kmh9nOvlygbamLKRo6Op4yB6aw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1551,13 +1553,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.6.tgz", - "integrity": "sha512-Qu/ypFxCY5NkAnEhCF86Mvg3NSabKsh/TPpBVswEdkGl7+FbsYHy1ziRqJpwGH4thBdQHh8zx+z7vMYmcJ7iaQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-create-class-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1568,11 +1570,11 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.6.tgz", - "integrity": "sha512-oARaglxhRsN18OYsnPTpb8TcKQWDYNsPNmTnx5++WOAsUJ0cSC/FZVlIJCKvPbU4yn/UXsS0551CFKJhN0CaMw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1582,11 +1584,11 @@ } }, "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.6.tgz", - "integrity": "sha512-vQfyXRtG/kNIcTYRd/49uJnwvMig9X3R4XsTVXRml2RFupZFY+2RDuK+/ymb+MfX2WuIHAgUZc2xEvQrnI7QCg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.7.tgz", + "integrity": "sha512-7LidzZfUXyfZ8/buRW6qIIHBY8wAZ1OrY9c/wTr8YhZ6vMPo+Uc/CVFLYY1spZrEQlD4w5u8wjqk5NQ3OVqQKA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1596,11 +1598,11 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.6.tgz", - "integrity": "sha512-/3iiEEHDsJuj9QU09gbyWGSUxDboFcD7Nj6dnHIlboWSodxXAoaY/zlNMHeYAC0WsERMqgO9a7UaM77CsYgWcg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", + "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1610,15 +1612,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.6.tgz", - "integrity": "sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz", + "integrity": "sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-module-imports": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/plugin-syntax-jsx": "^7.24.6", - "@babel/types": "^7.24.6" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1628,11 +1630,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.6.tgz", - "integrity": "sha512-F7EsNp5StNDouSSdYyDSxh4J+xvj/JqG+Cb6s2fA+jCyHOzigG5vTwgH8tU2U8Voyiu5zCG9bAK49wTr/wPH0w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", + "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.24.6" + "@babel/plugin-transform-react-jsx": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1642,12 +1644,12 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.6.tgz", - "integrity": "sha512-0HoDQlFJJkXRyV2N+xOpUETbKHcouSwijRQbKWVtxsPoq5bbB30qZag9/pSc5xcWVYjTHlLsBsY+hZDnzQTPNw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", + "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1657,11 +1659,11 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.6.tgz", - "integrity": "sha512-SMDxO95I8WXRtXhTAc8t/NFQUT7VYbIWwJCJgEli9ml4MhqUMh4S6hxgH6SmAC3eAQNWCDJFxcFeEt9w2sDdXg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1672,11 +1674,11 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.6.tgz", - "integrity": "sha512-DcrgFXRRlK64dGE0ZFBPD5egM2uM8mgfrvTMOSB2yKzOtjpGegVYkzh3s1zZg1bBck3nkXiaOamJUqK3Syk+4A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1686,12 +1688,12 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.6.tgz", - "integrity": "sha512-W3gQydMb0SY99y/2lV0Okx2xg/8KzmZLQsLaiCmwNRl1kKomz14VurEm+2TossUb+sRvBCnGe+wx8KtIgDtBbQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", "dependencies": { - "@babel/helper-module-imports": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.1", "babel-plugin-polyfill-regenerator": "^0.6.1", @@ -1713,11 +1715,11 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.6.tgz", - "integrity": "sha512-xnEUvHSMr9eOWS5Al2YPfc32ten7CXdH7Zwyyk7IqITg4nX61oHj+GxpNvl+y5JHjfN3KXE2IV55wAWowBYMVw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1727,12 +1729,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.6.tgz", - "integrity": "sha512-h/2j7oIUDjS+ULsIrNZ6/TKG97FgmEk1PXryk/HQq6op4XUUUwif2f69fJrzK0wza2zjCS1xhXmouACaWV5uPA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1742,11 +1744,11 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.6.tgz", - "integrity": "sha512-fN8OcTLfGmYv7FnDrsjodYBo1DhPL3Pze/9mIIE2MGCT1KgADYIOD7rEglpLHZj8PZlC/JFX5WcD+85FLAQusw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1756,11 +1758,11 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.6.tgz", - "integrity": "sha512-BJbEqJIcKwrqUP+KfUIkxz3q8VzXe2R8Wv8TaNgO1cx+nNavxn/2+H8kp9tgFSOL6wYPPEgFvU6IKS4qoGqhmg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1770,11 +1772,11 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.6.tgz", - "integrity": "sha512-IshCXQ+G9JIFJI7bUpxTE/oA2lgVLAIK8q1KdJNoPXOpvRaNjMySGuvLfBw/Xi2/1lLo953uE8hyYSDW3TSYig==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz", + "integrity": "sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1784,14 +1786,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.6.tgz", - "integrity": "sha512-H0i+hDLmaYYSt6KU9cZE0gb3Cbssa/oxWis7PX4ofQzbvsfix9Lbh8SRk7LCPDlLWJHUiFeHU0qRRpF/4Zv7mQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz", + "integrity": "sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-create-class-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/plugin-syntax-typescript": "^7.24.6" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-typescript": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1801,11 +1803,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.6.tgz", - "integrity": "sha512-bKl3xxcPbkQQo5eX9LjjDpU2xYHeEeNQbOhj0iPvetSzA+Tu9q/o5lujF4Sek60CM6MgYvOS/DJuwGbiEYAnLw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1815,12 +1817,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.6.tgz", - "integrity": "sha512-8EIgImzVUxy15cZiPii9GvLZwsy7Vxc+8meSlR3cXFmBIl5W5Tn9LGBf7CDKkHj4uVfNXCJB8RsVfnmY61iedA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1830,12 +1832,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.6.tgz", - "integrity": "sha512-pssN6ExsvxaKU638qcWb81RrvvgZom3jDgU/r5xFZ7TONkZGFf4MhI2ltMb8OcQWhHyxgIavEU+hgqtbKOmsPA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1845,12 +1847,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.6.tgz", - "integrity": "sha512-quiMsb28oXWIDK0gXLALOJRXLgICLiulqdZGOaPPd0vRT7fQp74NtdADAVu+D8s00C+0Xs0MxVP0VKF/sZEUgw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1860,26 +1862,26 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.6.tgz", - "integrity": "sha512-CrxEAvN7VxfjOG8JNF2Y/eMqMJbZPZ185amwGUBp8D9USK90xQmv7dLdFSa+VbD7fdIqcy/Mfv7WtzG8+/qxKg==", - "dependencies": { - "@babel/compat-data": "^7.24.6", - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-validator-option": "^7.24.6", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.6", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz", + "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==", + "dependencies": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.6", - "@babel/plugin-syntax-import-attributes": "^7.24.6", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1891,54 +1893,54 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.6", - "@babel/plugin-transform-async-generator-functions": "^7.24.6", - "@babel/plugin-transform-async-to-generator": "^7.24.6", - "@babel/plugin-transform-block-scoped-functions": "^7.24.6", - "@babel/plugin-transform-block-scoping": "^7.24.6", - "@babel/plugin-transform-class-properties": "^7.24.6", - "@babel/plugin-transform-class-static-block": "^7.24.6", - "@babel/plugin-transform-classes": "^7.24.6", - "@babel/plugin-transform-computed-properties": "^7.24.6", - "@babel/plugin-transform-destructuring": "^7.24.6", - "@babel/plugin-transform-dotall-regex": "^7.24.6", - "@babel/plugin-transform-duplicate-keys": "^7.24.6", - "@babel/plugin-transform-dynamic-import": "^7.24.6", - "@babel/plugin-transform-exponentiation-operator": "^7.24.6", - "@babel/plugin-transform-export-namespace-from": "^7.24.6", - "@babel/plugin-transform-for-of": "^7.24.6", - "@babel/plugin-transform-function-name": "^7.24.6", - "@babel/plugin-transform-json-strings": "^7.24.6", - "@babel/plugin-transform-literals": "^7.24.6", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.6", - "@babel/plugin-transform-member-expression-literals": "^7.24.6", - "@babel/plugin-transform-modules-amd": "^7.24.6", - "@babel/plugin-transform-modules-commonjs": "^7.24.6", - "@babel/plugin-transform-modules-systemjs": "^7.24.6", - "@babel/plugin-transform-modules-umd": "^7.24.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.6", - "@babel/plugin-transform-new-target": "^7.24.6", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.6", - "@babel/plugin-transform-numeric-separator": "^7.24.6", - "@babel/plugin-transform-object-rest-spread": "^7.24.6", - "@babel/plugin-transform-object-super": "^7.24.6", - "@babel/plugin-transform-optional-catch-binding": "^7.24.6", - "@babel/plugin-transform-optional-chaining": "^7.24.6", - "@babel/plugin-transform-parameters": "^7.24.6", - "@babel/plugin-transform-private-methods": "^7.24.6", - "@babel/plugin-transform-private-property-in-object": "^7.24.6", - "@babel/plugin-transform-property-literals": "^7.24.6", - "@babel/plugin-transform-regenerator": "^7.24.6", - "@babel/plugin-transform-reserved-words": "^7.24.6", - "@babel/plugin-transform-shorthand-properties": "^7.24.6", - "@babel/plugin-transform-spread": "^7.24.6", - "@babel/plugin-transform-sticky-regex": "^7.24.6", - "@babel/plugin-transform-template-literals": "^7.24.6", - "@babel/plugin-transform-typeof-symbol": "^7.24.6", - "@babel/plugin-transform-unicode-escapes": "^7.24.6", - "@babel/plugin-transform-unicode-property-regex": "^7.24.6", - "@babel/plugin-transform-unicode-regex": "^7.24.6", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.6", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.24.7", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.24.7", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.7", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.24.7", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.24.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-modules-systemjs": "^7.24.7", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.7", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.4", @@ -1975,16 +1977,16 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.6.tgz", - "integrity": "sha512-8mpzh1bWvmINmwM3xpz6ahu57mNaWavMm+wBNjQ4AFu1nghKBiIRET7l/Wmj4drXany/BBGjJZngICcD98F1iw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", + "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-validator-option": "^7.24.6", - "@babel/plugin-transform-react-display-name": "^7.24.6", - "@babel/plugin-transform-react-jsx": "^7.24.6", - "@babel/plugin-transform-react-jsx-development": "^7.24.6", - "@babel/plugin-transform-react-pure-annotations": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-transform-react-display-name": "^7.24.7", + "@babel/plugin-transform-react-jsx": "^7.24.7", + "@babel/plugin-transform-react-jsx-development": "^7.24.7", + "@babel/plugin-transform-react-pure-annotations": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1994,15 +1996,15 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.6.tgz", - "integrity": "sha512-U10aHPDnokCFRXgyT/MaIRTivUu2K/mu0vJlwRS9LxJmJet+PFQNKpggPyFCUtC6zWSBPjvxjnpNkAn3Uw2m5w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", + "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-validator-option": "^7.24.6", - "@babel/plugin-syntax-jsx": "^7.24.6", - "@babel/plugin-transform-modules-commonjs": "^7.24.6", - "@babel/plugin-transform-typescript": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-typescript": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2017,9 +2019,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", - "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2028,9 +2030,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.6.tgz", - "integrity": "sha512-tbC3o8uHK9xMgMsvUm9qGqxVpbv6yborMBLbDteHIc7JDNHsTV0vDMQ5j1O1NXvO+BDELtL9KgoWYaUVIVGt8w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.7.tgz", + "integrity": "sha512-eytSX6JLBY6PVAeQa2bFlDx/7Mmln/gaEpsit5a3WEvjGfiIytEsgAwuIXCPM0xvw0v0cJn3ilq0/TvXrW0kgA==", "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" @@ -2040,31 +2042,31 @@ } }, "node_modules/@babel/template": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz", - "integrity": "sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", "dependencies": { - "@babel/code-frame": "^7.24.6", - "@babel/parser": "^7.24.6", - "@babel/types": "^7.24.6" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.6.tgz", - "integrity": "sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==", - "dependencies": { - "@babel/code-frame": "^7.24.6", - "@babel/generator": "^7.24.6", - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-function-name": "^7.24.6", - "@babel/helper-hoist-variables": "^7.24.6", - "@babel/helper-split-export-declaration": "^7.24.6", - "@babel/parser": "^7.24.6", - "@babel/types": "^7.24.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2073,12 +2075,12 @@ } }, "node_modules/@babel/types": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", - "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", "dependencies": { - "@babel/helper-string-parser": "^7.24.6", - "@babel/helper-validator-identifier": "^7.24.6", + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2139,9 +2141,9 @@ } }, "node_modules/@docusaurus/core": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.3.2.tgz", - "integrity": "sha512-PzKMydKI3IU1LmeZQDi+ut5RSuilbXnA8QdowGeJEgU8EJjmx3rBHNT1LxQxOVqNEwpWi/csLwd9bn7rUjggPA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.4.0.tgz", + "integrity": "sha512-g+0wwmN2UJsBqy2fQRQ6fhXruoEa62JDeEa5d8IdTJlMoaDaEDfHh7WjwGRn4opuTQWpjAwP/fbcgyHKlE+64w==", "dependencies": { "@babel/core": "^7.23.3", "@babel/generator": "^7.23.3", @@ -2153,12 +2155,12 @@ "@babel/runtime": "^7.22.6", "@babel/runtime-corejs3": "^7.22.6", "@babel/traverse": "^7.22.8", - "@docusaurus/cssnano-preset": "3.3.2", - "@docusaurus/logger": "3.3.2", - "@docusaurus/mdx-loader": "3.3.2", - "@docusaurus/utils": "3.3.2", - "@docusaurus/utils-common": "3.3.2", - "@docusaurus/utils-validation": "3.3.2", + "@docusaurus/cssnano-preset": "3.4.0", + "@docusaurus/logger": "3.4.0", + "@docusaurus/mdx-loader": "3.4.0", + "@docusaurus/utils": "3.4.0", + "@docusaurus/utils-common": "3.4.0", + "@docusaurus/utils-validation": "3.4.0", "autoprefixer": "^10.4.14", "babel-loader": "^9.1.3", "babel-plugin-dynamic-import-node": "^2.3.3", @@ -2224,9 +2226,9 @@ } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.3.2.tgz", - "integrity": "sha512-+5+epLk/Rp4vFML4zmyTATNc3Is+buMAL6dNjrMWahdJCJlMWMPd/8YfU+2PA57t8mlSbhLJ7vAZVy54cd1vRQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.4.0.tgz", + "integrity": "sha512-qwLFSz6v/pZHy/UP32IrprmH5ORce86BGtN0eBtG75PpzQJAzp9gefspox+s8IEOr0oZKuQ/nhzZ3xwyc3jYJQ==", "dependencies": { "cssnano-preset-advanced": "^6.1.2", "postcss": "^8.4.38", @@ -2238,9 +2240,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.3.2.tgz", - "integrity": "sha512-Ldu38GJ4P8g4guN7d7pyCOJ7qQugG7RVyaxrK8OnxuTlaImvQw33aDRwaX2eNmX8YK6v+//Z502F4sOZbHHCHQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.4.0.tgz", + "integrity": "sha512-bZwkX+9SJ8lB9kVRkXw+xvHYSMGG4bpYHKGXeXFvyVc79NMeeBSGgzd4TQLHH+DYeOJoCdl8flrFJVxlZ0wo/Q==", "dependencies": { "chalk": "^4.1.2", "tslib": "^2.6.0" @@ -2250,13 +2252,13 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.3.2.tgz", - "integrity": "sha512-AFRxj/aOk3/mfYDPxE3wTbrjeayVRvNSZP7mgMuUlrb2UlPRbSVAFX1k2RbgAJrnTSwMgb92m2BhJgYRfptN3g==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.4.0.tgz", + "integrity": "sha512-kSSbrrk4nTjf4d+wtBA9H+FGauf2gCax89kV8SUSJu3qaTdSIKdWERlngsiHaCFgZ7laTJ8a67UFf+xlFPtuTw==", "dependencies": { - "@docusaurus/logger": "3.3.2", - "@docusaurus/utils": "3.3.2", - "@docusaurus/utils-validation": "3.3.2", + "@docusaurus/logger": "3.4.0", + "@docusaurus/utils": "3.4.0", + "@docusaurus/utils-validation": "3.4.0", "@mdx-js/mdx": "^3.0.0", "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", @@ -2288,11 +2290,11 @@ } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.3.2.tgz", - "integrity": "sha512-b/XB0TBJah5yKb4LYuJT4buFvL0MGAb0+vJDrJtlYMguRtsEBkf2nWl5xP7h4Dlw6ol0hsHrCYzJ50kNIOEclw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.4.0.tgz", + "integrity": "sha512-A1AyS8WF5Bkjnb8s+guTDuYmUiwJzNrtchebBHpc0gz0PyHJNMaybUlSrmJjHVcGrya0LKI4YcR3lBDQfXRYLw==", "dependencies": { - "@docusaurus/types": "3.3.2", + "@docusaurus/types": "3.4.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2305,38 +2307,18 @@ "react-dom": "*" } }, - "node_modules/@docusaurus/module-type-aliases/node_modules/@docusaurus/types": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.3.2.tgz", - "integrity": "sha512-5p201S7AZhliRxTU7uMKtSsoC8mgPA9bs9b5NQg1IRdRxJfflursXNVsgc3PcMqiUTul/v1s3k3rXXFlRE890w==", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.3.2.tgz", - "integrity": "sha512-fJU+dmqp231LnwDJv+BHVWft8pcUS2xVPZdeYH6/ibH1s2wQ/sLcmUrGWyIv/Gq9Ptj8XWjRPMghlxghuPPoxg==", - "dependencies": { - "@docusaurus/core": "3.3.2", - "@docusaurus/logger": "3.3.2", - "@docusaurus/mdx-loader": "3.3.2", - "@docusaurus/types": "3.3.2", - "@docusaurus/utils": "3.3.2", - "@docusaurus/utils-common": "3.3.2", - "@docusaurus/utils-validation": "3.3.2", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.4.0.tgz", + "integrity": "sha512-vv6ZAj78ibR5Jh7XBUT4ndIjmlAxkijM3Sx5MAAzC1gyv0vupDQNhzuFg1USQmQVj3P5I6bquk12etPV3LJ+Xw==", + "dependencies": { + "@docusaurus/core": "3.4.0", + "@docusaurus/logger": "3.4.0", + "@docusaurus/mdx-loader": "3.4.0", + "@docusaurus/types": "3.4.0", + "@docusaurus/utils": "3.4.0", + "@docusaurus/utils-common": "3.4.0", + "@docusaurus/utils-validation": "3.4.0", "cheerio": "^1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^11.1.1", @@ -2356,39 +2338,19 @@ "react-dom": "^18.0.0" } }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/@docusaurus/types": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.3.2.tgz", - "integrity": "sha512-5p201S7AZhliRxTU7uMKtSsoC8mgPA9bs9b5NQg1IRdRxJfflursXNVsgc3PcMqiUTul/v1s3k3rXXFlRE890w==", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.3.2.tgz", - "integrity": "sha512-Dm1ri2VlGATTN3VGk1ZRqdRXWa1UlFubjaEL6JaxaK7IIFqN/Esjpl+Xw10R33loHcRww/H76VdEeYayaL76eg==", - "dependencies": { - "@docusaurus/core": "3.3.2", - "@docusaurus/logger": "3.3.2", - "@docusaurus/mdx-loader": "3.3.2", - "@docusaurus/module-type-aliases": "3.3.2", - "@docusaurus/types": "3.3.2", - "@docusaurus/utils": "3.3.2", - "@docusaurus/utils-common": "3.3.2", - "@docusaurus/utils-validation": "3.3.2", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.4.0.tgz", + "integrity": "sha512-HkUCZffhBo7ocYheD9oZvMcDloRnGhBMOZRyVcAQRFmZPmNqSyISlXA1tQCIxW+r478fty97XXAGjNYzBjpCsg==", + "dependencies": { + "@docusaurus/core": "3.4.0", + "@docusaurus/logger": "3.4.0", + "@docusaurus/mdx-loader": "3.4.0", + "@docusaurus/module-type-aliases": "3.4.0", + "@docusaurus/types": "3.4.0", + "@docusaurus/utils": "3.4.0", + "@docusaurus/utils-common": "3.4.0", + "@docusaurus/utils-validation": "3.4.0", "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", "fs-extra": "^11.1.1", @@ -2406,36 +2368,16 @@ "react-dom": "^18.0.0" } }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/@docusaurus/types": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.3.2.tgz", - "integrity": "sha512-5p201S7AZhliRxTU7uMKtSsoC8mgPA9bs9b5NQg1IRdRxJfflursXNVsgc3PcMqiUTul/v1s3k3rXXFlRE890w==", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.3.2.tgz", - "integrity": "sha512-EKc9fQn5H2+OcGER8x1aR+7URtAGWySUgULfqE/M14+rIisdrBstuEZ4lUPDRrSIexOVClML82h2fDS+GSb8Ew==", - "dependencies": { - "@docusaurus/core": "3.3.2", - "@docusaurus/mdx-loader": "3.3.2", - "@docusaurus/types": "3.3.2", - "@docusaurus/utils": "3.3.2", - "@docusaurus/utils-validation": "3.3.2", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.4.0.tgz", + "integrity": "sha512-h2+VN/0JjpR8fIkDEAoadNjfR3oLzB+v1qSXbIAKjQ46JAHx3X22n9nqS+BWSQnTnp1AjkjSvZyJMekmcwxzxg==", + "dependencies": { + "@docusaurus/core": "3.4.0", + "@docusaurus/mdx-loader": "3.4.0", + "@docusaurus/types": "3.4.0", + "@docusaurus/utils": "3.4.0", + "@docusaurus/utils-validation": "3.4.0", "fs-extra": "^11.1.1", "tslib": "^2.6.0", "webpack": "^5.88.1" @@ -2448,34 +2390,14 @@ "react-dom": "^18.0.0" } }, - "node_modules/@docusaurus/plugin-content-pages/node_modules/@docusaurus/types": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.3.2.tgz", - "integrity": "sha512-5p201S7AZhliRxTU7uMKtSsoC8mgPA9bs9b5NQg1IRdRxJfflursXNVsgc3PcMqiUTul/v1s3k3rXXFlRE890w==", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, "node_modules/@docusaurus/plugin-debug": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.3.2.tgz", - "integrity": "sha512-oBIBmwtaB+YS0XlmZ3gCO+cMbsGvIYuAKkAopoCh0arVjtlyPbejzPrHuCoRHB9G7abjNZw7zoONOR8+8LM5+Q==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.4.0.tgz", + "integrity": "sha512-uV7FDUNXGyDSD3PwUaf5YijX91T5/H9SX4ErEcshzwgzWwBtK37nUWPU3ZLJfeTavX3fycTOqk9TglpOLaWkCg==", "dependencies": { - "@docusaurus/core": "3.3.2", - "@docusaurus/types": "3.3.2", - "@docusaurus/utils": "3.3.2", + "@docusaurus/core": "3.4.0", + "@docusaurus/types": "3.4.0", + "@docusaurus/utils": "3.4.0", "fs-extra": "^11.1.1", "react-json-view-lite": "^1.2.0", "tslib": "^2.6.0" @@ -2488,34 +2410,14 @@ "react-dom": "^18.0.0" } }, - "node_modules/@docusaurus/plugin-debug/node_modules/@docusaurus/types": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.3.2.tgz", - "integrity": "sha512-5p201S7AZhliRxTU7uMKtSsoC8mgPA9bs9b5NQg1IRdRxJfflursXNVsgc3PcMqiUTul/v1s3k3rXXFlRE890w==", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.3.2.tgz", - "integrity": "sha512-jXhrEIhYPSClMBK6/IA8qf1/FBoxqGXZvg7EuBax9HaK9+kL3L0TJIlatd8jQJOMtds8mKw806TOCc3rtEad1A==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.4.0.tgz", + "integrity": "sha512-mCArluxEGi3cmYHqsgpGGt3IyLCrFBxPsxNZ56Mpur0xSlInnIHoeLDH7FvVVcPJRPSQ9/MfRqLsainRw+BojA==", "dependencies": { - "@docusaurus/core": "3.3.2", - "@docusaurus/types": "3.3.2", - "@docusaurus/utils-validation": "3.3.2", + "@docusaurus/core": "3.4.0", + "@docusaurus/types": "3.4.0", + "@docusaurus/utils-validation": "3.4.0", "tslib": "^2.6.0" }, "engines": { @@ -2526,34 +2428,14 @@ "react-dom": "^18.0.0" } }, - "node_modules/@docusaurus/plugin-google-analytics/node_modules/@docusaurus/types": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.3.2.tgz", - "integrity": "sha512-5p201S7AZhliRxTU7uMKtSsoC8mgPA9bs9b5NQg1IRdRxJfflursXNVsgc3PcMqiUTul/v1s3k3rXXFlRE890w==", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.3.2.tgz", - "integrity": "sha512-vcrKOHGbIDjVnNMrfbNpRQR1x6Jvcrb48kVzpBAOsKbj9rXZm/idjVAXRaewwobHdOrJkfWS/UJoxzK8wyLRBQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.4.0.tgz", + "integrity": "sha512-Dsgg6PLAqzZw5wZ4QjUYc8Z2KqJqXxHxq3vIoyoBWiLEEfigIs7wHR+oiWUQy3Zk9MIk6JTYj7tMoQU0Jm3nqA==", "dependencies": { - "@docusaurus/core": "3.3.2", - "@docusaurus/types": "3.3.2", - "@docusaurus/utils-validation": "3.3.2", + "@docusaurus/core": "3.4.0", + "@docusaurus/types": "3.4.0", + "@docusaurus/utils-validation": "3.4.0", "@types/gtag.js": "^0.0.12", "tslib": "^2.6.0" }, @@ -2565,34 +2447,14 @@ "react-dom": "^18.0.0" } }, - "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/types": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.3.2.tgz", - "integrity": "sha512-5p201S7AZhliRxTU7uMKtSsoC8mgPA9bs9b5NQg1IRdRxJfflursXNVsgc3PcMqiUTul/v1s3k3rXXFlRE890w==", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.3.2.tgz", - "integrity": "sha512-ldkR58Fdeks0vC+HQ+L+bGFSJsotQsipXD+iKXQFvkOfmPIV6QbHRd7IIcm5b6UtwOiK33PylNS++gjyLUmaGw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.4.0.tgz", + "integrity": "sha512-O9tX1BTwxIhgXpOLpFDueYA9DWk69WCbDRrjYoMQtFHSkTyE7RhNgyjSPREUWJb9i+YUg3OrsvrBYRl64FCPCQ==", "dependencies": { - "@docusaurus/core": "3.3.2", - "@docusaurus/types": "3.3.2", - "@docusaurus/utils-validation": "3.3.2", + "@docusaurus/core": "3.4.0", + "@docusaurus/types": "3.4.0", + "@docusaurus/utils-validation": "3.4.0", "tslib": "^2.6.0" }, "engines": { @@ -2603,37 +2465,17 @@ "react-dom": "^18.0.0" } }, - "node_modules/@docusaurus/plugin-google-tag-manager/node_modules/@docusaurus/types": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.3.2.tgz", - "integrity": "sha512-5p201S7AZhliRxTU7uMKtSsoC8mgPA9bs9b5NQg1IRdRxJfflursXNVsgc3PcMqiUTul/v1s3k3rXXFlRE890w==", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.3.2.tgz", - "integrity": "sha512-/ZI1+bwZBhAgC30inBsHe3qY9LOZS+79fRGkNdTcGHRMcdAp6Vw2pCd1gzlxd/xU+HXsNP6cLmTOrggmRp3Ujg==", - "dependencies": { - "@docusaurus/core": "3.3.2", - "@docusaurus/logger": "3.3.2", - "@docusaurus/types": "3.3.2", - "@docusaurus/utils": "3.3.2", - "@docusaurus/utils-common": "3.3.2", - "@docusaurus/utils-validation": "3.3.2", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.4.0.tgz", + "integrity": "sha512-+0VDvx9SmNrFNgwPoeoCha+tRoAjopwT0+pYO1xAbyLcewXSemq+eLxEa46Q1/aoOaJQ0qqHELuQM7iS2gp33Q==", + "dependencies": { + "@docusaurus/core": "3.4.0", + "@docusaurus/logger": "3.4.0", + "@docusaurus/types": "3.4.0", + "@docusaurus/utils": "3.4.0", + "@docusaurus/utils-common": "3.4.0", + "@docusaurus/utils-validation": "3.4.0", "fs-extra": "^11.1.1", "sitemap": "^7.1.1", "tslib": "^2.6.0" @@ -2646,44 +2488,24 @@ "react-dom": "^18.0.0" } }, - "node_modules/@docusaurus/plugin-sitemap/node_modules/@docusaurus/types": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.3.2.tgz", - "integrity": "sha512-5p201S7AZhliRxTU7uMKtSsoC8mgPA9bs9b5NQg1IRdRxJfflursXNVsgc3PcMqiUTul/v1s3k3rXXFlRE890w==", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, "node_modules/@docusaurus/preset-classic": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.3.2.tgz", - "integrity": "sha512-1SDS7YIUN1Pg3BmD6TOTjhB7RSBHJRpgIRKx9TpxqyDrJ92sqtZhomDc6UYoMMLQNF2wHFZZVGFjxJhw2VpL+Q==", - "dependencies": { - "@docusaurus/core": "3.3.2", - "@docusaurus/plugin-content-blog": "3.3.2", - "@docusaurus/plugin-content-docs": "3.3.2", - "@docusaurus/plugin-content-pages": "3.3.2", - "@docusaurus/plugin-debug": "3.3.2", - "@docusaurus/plugin-google-analytics": "3.3.2", - "@docusaurus/plugin-google-gtag": "3.3.2", - "@docusaurus/plugin-google-tag-manager": "3.3.2", - "@docusaurus/plugin-sitemap": "3.3.2", - "@docusaurus/theme-classic": "3.3.2", - "@docusaurus/theme-common": "3.3.2", - "@docusaurus/theme-search-algolia": "3.3.2", - "@docusaurus/types": "3.3.2" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.4.0.tgz", + "integrity": "sha512-Ohj6KB7siKqZaQhNJVMBBUzT3Nnp6eTKqO+FXO3qu/n1hJl3YLwVKTWBg28LF7MWrKu46UuYavwMRxud0VyqHg==", + "dependencies": { + "@docusaurus/core": "3.4.0", + "@docusaurus/plugin-content-blog": "3.4.0", + "@docusaurus/plugin-content-docs": "3.4.0", + "@docusaurus/plugin-content-pages": "3.4.0", + "@docusaurus/plugin-debug": "3.4.0", + "@docusaurus/plugin-google-analytics": "3.4.0", + "@docusaurus/plugin-google-gtag": "3.4.0", + "@docusaurus/plugin-google-tag-manager": "3.4.0", + "@docusaurus/plugin-sitemap": "3.4.0", + "@docusaurus/theme-classic": "3.4.0", + "@docusaurus/theme-common": "3.4.0", + "@docusaurus/theme-search-algolia": "3.4.0", + "@docusaurus/types": "3.4.0" }, "engines": { "node": ">=18.0" @@ -2693,43 +2515,23 @@ "react-dom": "^18.0.0" } }, - "node_modules/@docusaurus/preset-classic/node_modules/@docusaurus/types": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.3.2.tgz", - "integrity": "sha512-5p201S7AZhliRxTU7uMKtSsoC8mgPA9bs9b5NQg1IRdRxJfflursXNVsgc3PcMqiUTul/v1s3k3rXXFlRE890w==", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, "node_modules/@docusaurus/theme-classic": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.3.2.tgz", - "integrity": "sha512-gepHFcsluIkPb4Im9ukkiO4lXrai671wzS3cKQkY9BXQgdVwsdPf/KS0Vs4Xlb0F10fTz+T3gNjkxNEgSN9M0A==", - "dependencies": { - "@docusaurus/core": "3.3.2", - "@docusaurus/mdx-loader": "3.3.2", - "@docusaurus/module-type-aliases": "3.3.2", - "@docusaurus/plugin-content-blog": "3.3.2", - "@docusaurus/plugin-content-docs": "3.3.2", - "@docusaurus/plugin-content-pages": "3.3.2", - "@docusaurus/theme-common": "3.3.2", - "@docusaurus/theme-translations": "3.3.2", - "@docusaurus/types": "3.3.2", - "@docusaurus/utils": "3.3.2", - "@docusaurus/utils-common": "3.3.2", - "@docusaurus/utils-validation": "3.3.2", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.4.0.tgz", + "integrity": "sha512-0IPtmxsBYv2adr1GnZRdMkEQt1YW6tpzrUPj02YxNpvJ5+ju4E13J5tB4nfdaen/tfR1hmpSPlTFPvTf4kwy8Q==", + "dependencies": { + "@docusaurus/core": "3.4.0", + "@docusaurus/mdx-loader": "3.4.0", + "@docusaurus/module-type-aliases": "3.4.0", + "@docusaurus/plugin-content-blog": "3.4.0", + "@docusaurus/plugin-content-docs": "3.4.0", + "@docusaurus/plugin-content-pages": "3.4.0", + "@docusaurus/theme-common": "3.4.0", + "@docusaurus/theme-translations": "3.4.0", + "@docusaurus/types": "3.4.0", + "@docusaurus/utils": "3.4.0", + "@docusaurus/utils-common": "3.4.0", + "@docusaurus/utils-validation": "3.4.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "copy-text-to-clipboard": "^3.2.0", @@ -2752,38 +2554,18 @@ "react-dom": "^18.0.0" } }, - "node_modules/@docusaurus/theme-classic/node_modules/@docusaurus/types": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.3.2.tgz", - "integrity": "sha512-5p201S7AZhliRxTU7uMKtSsoC8mgPA9bs9b5NQg1IRdRxJfflursXNVsgc3PcMqiUTul/v1s3k3rXXFlRE890w==", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, "node_modules/@docusaurus/theme-common": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.3.2.tgz", - "integrity": "sha512-kXqSaL/sQqo4uAMQ4fHnvRZrH45Xz2OdJ3ABXDS7YVGPSDTBC8cLebFrRR4YF9EowUHto1UC/EIklJZQMG/usA==", - "dependencies": { - "@docusaurus/mdx-loader": "3.3.2", - "@docusaurus/module-type-aliases": "3.3.2", - "@docusaurus/plugin-content-blog": "3.3.2", - "@docusaurus/plugin-content-docs": "3.3.2", - "@docusaurus/plugin-content-pages": "3.3.2", - "@docusaurus/utils": "3.3.2", - "@docusaurus/utils-common": "3.3.2", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.4.0.tgz", + "integrity": "sha512-0A27alXuv7ZdCg28oPE8nH/Iz73/IUejVaCazqu9elS4ypjiLhK3KfzdSQBnL/g7YfHSlymZKdiOHEo8fJ0qMA==", + "dependencies": { + "@docusaurus/mdx-loader": "3.4.0", + "@docusaurus/module-type-aliases": "3.4.0", + "@docusaurus/plugin-content-blog": "3.4.0", + "@docusaurus/plugin-content-docs": "3.4.0", + "@docusaurus/plugin-content-pages": "3.4.0", + "@docusaurus/utils": "3.4.0", + "@docusaurus/utils-common": "3.4.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2802,18 +2584,18 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.3.2.tgz", - "integrity": "sha512-qLkfCl29VNBnF1MWiL9IyOQaHxUvicZp69hISyq/xMsNvFKHFOaOfk9xezYod2Q9xx3xxUh9t/QPigIei2tX4w==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.4.0.tgz", + "integrity": "sha512-aiHFx7OCw4Wck1z6IoShVdUWIjntC8FHCw9c5dR8r3q4Ynh+zkS8y2eFFunN/DL6RXPzpnvKCg3vhLQYJDmT9Q==", "dependencies": { "@docsearch/react": "^3.5.2", - "@docusaurus/core": "3.3.2", - "@docusaurus/logger": "3.3.2", - "@docusaurus/plugin-content-docs": "3.3.2", - "@docusaurus/theme-common": "3.3.2", - "@docusaurus/theme-translations": "3.3.2", - "@docusaurus/utils": "3.3.2", - "@docusaurus/utils-validation": "3.3.2", + "@docusaurus/core": "3.4.0", + "@docusaurus/logger": "3.4.0", + "@docusaurus/plugin-content-docs": "3.4.0", + "@docusaurus/theme-common": "3.4.0", + "@docusaurus/theme-translations": "3.4.0", + "@docusaurus/utils": "3.4.0", + "@docusaurus/utils-validation": "3.4.0", "algoliasearch": "^4.18.0", "algoliasearch-helper": "^3.13.3", "clsx": "^2.0.0", @@ -2832,9 +2614,9 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.3.2.tgz", - "integrity": "sha512-bPuiUG7Z8sNpGuTdGnmKl/oIPeTwKr0AXLGu9KaP6+UFfRZiyWbWE87ti97RrevB2ffojEdvchNujparR3jEZQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.4.0.tgz", + "integrity": "sha512-zSxCSpmQCCdQU5Q4CnX/ID8CSUUI3fvmq4hU/GNP/XoAWtXo9SAVnM3TzpU8Gb//H3WCsT8mJcTfyOk3d9ftNg==", "dependencies": { "fs-extra": "^11.1.1", "tslib": "^2.6.0" @@ -2844,11 +2626,11 @@ } }, "node_modules/@docusaurus/types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.0.1.tgz", - "integrity": "sha512-plyX2iU1tcUsF46uQ01pAd4JhexR7n0iiQ5MSnBFX6M6NSJgDYdru/i1/YNPKOnQHBoXGLHv0dNT6OAlDWNjrg==", - "devOptional": true, + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz", + "integrity": "sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==", "dependencies": { + "@mdx-js/mdx": "^3.0.0", "@types/history": "^4.7.11", "@types/react": "*", "commander": "^5.1.0", @@ -2864,12 +2646,12 @@ } }, "node_modules/@docusaurus/utils": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.3.2.tgz", - "integrity": "sha512-f4YMnBVymtkSxONv4Y8js3Gez9IgHX+Lcg6YRMOjVbq8sgCcdYK1lf6SObAuz5qB/mxiSK7tW0M9aaiIaUSUJg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.4.0.tgz", + "integrity": "sha512-fRwnu3L3nnWaXOgs88BVBmG1yGjcQqZNHG+vInhEa2Sz2oQB+ZjbEMO5Rh9ePFpZ0YDiDUhpaVjwmS+AU2F14g==", "dependencies": { - "@docusaurus/logger": "3.3.2", - "@docusaurus/utils-common": "3.3.2", + "@docusaurus/logger": "3.4.0", + "@docusaurus/utils-common": "3.4.0", "@svgr/webpack": "^8.1.0", "escape-string-regexp": "^4.0.0", "file-loader": "^6.2.0", @@ -2886,6 +2668,7 @@ "shelljs": "^0.8.5", "tslib": "^2.6.0", "url-loader": "^4.1.1", + "utility-types": "^3.10.0", "webpack": "^5.88.1" }, "engines": { @@ -2901,9 +2684,9 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.3.2.tgz", - "integrity": "sha512-QWFTLEkPYsejJsLStgtmetMFIA3pM8EPexcZ4WZ7b++gO5jGVH7zsipREnCHzk6+eDgeaXfkR6UPaTt86bp8Og==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.4.0.tgz", + "integrity": "sha512-NVx54Wr4rCEKsjOH5QEVvxIqVvm+9kh7q8aYTU5WzUU9/Hctd6aTrcZ3G0Id4zYJ+AeaG5K5qHA4CY5Kcm2iyQ==", "dependencies": { "tslib": "^2.6.0" }, @@ -2920,80 +2703,23 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.3.2.tgz", - "integrity": "sha512-itDgFs5+cbW9REuC7NdXals4V6++KifgVMzoGOOOSIifBQw+8ULhy86u5e1lnptVL0sv8oAjq2alO7I40GR7pA==", - "dependencies": { - "@docusaurus/logger": "3.3.2", - "@docusaurus/utils": "3.3.2", - "@docusaurus/utils-common": "3.3.2", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.4.0.tgz", + "integrity": "sha512-hYQ9fM+AXYVTWxJOT1EuNaRnrR2WGpRdLDQG07O8UOpsvCPWUVOeo26Rbm0JWY2sGLfzAb+tvJ62yF+8F+TV0g==", + "dependencies": { + "@docusaurus/logger": "3.4.0", + "@docusaurus/utils": "3.4.0", + "@docusaurus/utils-common": "3.4.0", + "fs-extra": "^11.2.0", "joi": "^17.9.2", "js-yaml": "^4.1.0", + "lodash": "^4.17.21", "tslib": "^2.6.0" }, "engines": { "node": ">=18.0" } }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.2.tgz", - "integrity": "sha512-gBxPg3aVO6J0kpfHNILc+NMhXnqHumFxOmjYCFfOiLZfwhnnfhtsdA2hfJlDnj+8PjAs6kKQPenOTKj3Rf7zHw==", - "hasInstallScript": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/fontawesome-free": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.2.tgz", - "integrity": "sha512-hRILoInAx8GNT5IMkrtIt9blOdrqHOnPBH+k70aWUAqPZPgopb9G5EQJFpaBx/S8zp2fC+mPW349Bziuk1o28Q==", - "hasInstallScript": true, - "license": "(CC-BY-4.0 AND OFL-1.1 AND MIT)", - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.2.tgz", - "integrity": "sha512-5CdaCBGl8Rh9ohNdxeeTMxIj8oc3KNBgIeLMvJosBMdslK/UnEB8rzyDRrbKdL1kDweqBPo4GT9wvnakHWucZw==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.5.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-brands-svg-icons": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.5.2.tgz", - "integrity": "sha512-zi5FNYdmKLnEc0jc0uuHH17kz/hfYTg4Uei0wMGzcoCL/4d3WM3u1VMc0iGGa31HuhV5i7ZK8ZlTCQrHqRHSGQ==", - "hasInstallScript": true, - "license": "(CC-BY-4.0 AND MIT)", - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.5.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/react-fontawesome": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.2.tgz", - "integrity": "sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g==", - "license": "MIT", - "dependencies": { - "prop-types": "^15.8.1" - }, - "peerDependencies": { - "@fortawesome/fontawesome-svg-core": "~1 || ~6", - "react": ">=16.3" - } - }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -3614,9 +3340,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.1.tgz", - "integrity": "sha512-ej0phymbFLoCB26dbbq5PGScsf2JAJ4IJHjG10LalgUV36XKTmA4GdA+PVllKvRk0sEKt64X8975qFnkSi0hqA==", + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -3715,9 +3441,9 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "20.12.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", - "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", + "version": "20.14.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.8.tgz", + "integrity": "sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==", "dependencies": { "undici-types": "~5.26.4" } @@ -4045,9 +3771,9 @@ } }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", "bin": { "acorn": "bin/acorn" }, @@ -4055,10 +3781,10 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "peerDependencies": { "acorn": "^8" } @@ -4072,9 +3798,12 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } @@ -4100,9 +3829,9 @@ } }, "node_modules/ajv": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz", - "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", @@ -4164,9 +3893,9 @@ } }, "node_modules/algoliasearch-helper": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.20.0.tgz", - "integrity": "sha512-6EVhAmVug0+hdRHWbubF7hLHHhLoQ8NjLk6iS6d4k5chWawpS5EDexrF6Jx/hPZvUKIeNrzsbTpjAkcvrjNLHg==", + "version": "3.22.1", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.22.1.tgz", + "integrity": "sha512-fSxJ4YreH4kOME9CnKazbAn2tK/rvBoV37ETd6nTt4j7QfkcnW+c+F22WfuE9Q/sRpvOMnUwU/BXAVEiwW7p/w==", "dependencies": { "@algolia/events": "^4.0.1" }, @@ -4526,9 +4255,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "funding": [ { "type": "opencollective", @@ -4544,10 +4273,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.0.16" }, "bin": { "browserslist": "cli.js" @@ -4652,9 +4381,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001621", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz", - "integrity": "sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==", + "version": "1.0.30001636", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", + "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", "funding": [ { "type": "opencollective", @@ -4798,9 +4527,9 @@ } }, "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "engines": { "node": ">=6.0" } @@ -5553,9 +5282,9 @@ "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dependencies": { "ms": "2.1.2" }, @@ -5900,17 +5629,6 @@ "node": ">=8" } }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -5927,9 +5645,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.783", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.783.tgz", - "integrity": "sha512-bT0jEz/Xz1fahQpbZ1D7LgmPYZ3iHVY39NcWWro1+hA2IvjiPeaXtfSqrQ+nXjApMvQRE2ASt1itSLRrebHMRQ==" + "version": "1.4.811", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.811.tgz", + "integrity": "sha512-CDyzcJ5XW78SHzsIOdn27z8J4ist8eaFLhdto2hSMSJQgsiwvbv2fbizcKUICryw1Wii1TI/FEkvzvJsR3awrA==" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -5967,9 +5685,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", - "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -6017,9 +5735,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", - "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==" + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" }, "node_modules/escalade": { "version": "3.1.2", @@ -6158,12 +5876,11 @@ } }, "node_modules/estree-util-value-to-estree": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.1.1.tgz", - "integrity": "sha512-5mvUrF2suuv5f5cGDnDphIy4/gW86z82kl5qG6mM9z04SEQI4FB5Apmaw/TGEf3l55nLtMs5s51dmhUzvAHQCA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.1.2.tgz", + "integrity": "sha512-S0gW2+XZkmsx00tU2uJ4L9hUT7IFabbml9pHh2WQqFmAbxit++YGZne0sKJbNwkj9Wvg9E4uqWl4nCIFQMmfag==", "dependencies": { - "@types/estree": "^1.0.0", - "is-plain-obj": "^4.0.0" + "@types/estree": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/remcohaszing" @@ -7177,9 +6894,9 @@ } }, "node_modules/hast-util-raw": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.3.tgz", - "integrity": "sha512-ICWvVOF2fq4+7CMmtCPD5CM4QKjPbHpPotE6+8tDooV0ZuyJVUzHsrNX+O5NaRbieTf0F7FfeBOMAwi6Td0+yQ==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.4.tgz", + "integrity": "sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==", "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", @@ -7825,11 +7542,14 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8104,17 +7824,17 @@ } }, "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", "bin": { "jiti": "bin/jiti.js" } }, "node_modules/joi": { - "version": "17.13.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.1.tgz", - "integrity": "sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==", + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", @@ -8226,9 +7946,9 @@ } }, "node_modules/launch-editor": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", - "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz", + "integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==", "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" @@ -8243,9 +7963,9 @@ } }, "node_modules/lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "engines": { "node": ">=14" }, @@ -8426,9 +8146,9 @@ } }, "node_modules/mdast-util-from-markdown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", - "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -8708,9 +8428,9 @@ } }, "node_modules/mdast-util-to-hast": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz", - "integrity": "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", @@ -10737,9 +10457,12 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12047,9 +11770,9 @@ } }, "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", "engines": { "node": ">= 12.13.0" } @@ -12137,20 +11860,6 @@ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" }, - "node_modules/react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", - "dependencies": { - "object-assign": "^4.1.1", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.1.1", - "react-side-effect": "^2.1.0" - }, - "peerDependencies": { - "react": ">=16.3.0" - } - }, "node_modules/react-helmet-async": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", @@ -12258,14 +11967,6 @@ "react": ">=15" } }, - "node_modules/react-side-effect": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", - "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==", - "peerDependencies": { - "react": "^16.3.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -12811,9 +12512,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" }, "node_modules/scheduler": { "version": "0.23.2", @@ -12845,7 +12546,6 @@ "version": "2.14.0", "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.14.0.tgz", "integrity": "sha512-OLN6MsPMCghDOqlCtsIsYgtsC0pnwVTyT9Mu6A3ewOj1DxvzZF6COrn2g86E/c05xbktB0XN04m/t1Z+n+fTGw==", - "license": "MIT", "peer": true }, "node_modules/section-matter": { @@ -13555,9 +13255,9 @@ } }, "node_modules/terser": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", - "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", + "version": "5.31.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", + "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -13755,9 +13455,9 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/type-fest": { "version": "2.19.0", @@ -13810,10 +13510,9 @@ } }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "license": "Apache-2.0", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", "peer": true, "bin": { "tsc": "bin/tsc", @@ -13873,9 +13572,9 @@ } }, "node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", @@ -14330,9 +14029,9 @@ } }, "node_modules/webpack": { - "version": "5.91.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", - "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", + "version": "5.92.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", + "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", @@ -14340,10 +14039,10 @@ "@webassemblyjs/wasm-edit": "^1.12.1", "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", + "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.16.0", + "enhanced-resolve": "^5.17.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -14516,9 +14215,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", - "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "engines": { "node": ">=10.0.0" }, @@ -14760,9 +14459,9 @@ } }, "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "engines": { "node": ">=8.3.0" }, diff --git a/package.json b/package.json index a8ca59544..78f149762 100644 --- a/package.json +++ b/package.json @@ -39,24 +39,29 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { - "@docusaurus/core": "^3.3.2", - "@docusaurus/preset-classic": "^3.3.2", - "@docusaurus/theme-search-algolia": "^3.3.2", - "@fortawesome/fontawesome-free": "^6.5.2", - "@fortawesome/fontawesome-svg-core": "^6.5.2", - "@fortawesome/free-brands-svg-icons": "^6.5.2", - "@fortawesome/react-fontawesome": "^0.2.2", + "@docusaurus/core": "3.4.0", + "@docusaurus/preset-classic": "3.4.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", - "dotenv": "^16.4.5", "prism-react-renderer": "^2.3.0", "react": "^18.0.0", - "react-dom": "^18.0.0", - "react-helmet": "^6.1.0" + "react-dom": "^18.0.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.3.2", - "@docusaurus/types": "3.0.1" + "@docusaurus/module-type-aliases": "3.4.0", + "@docusaurus/types": "3.4.0" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 3 chrome version", + "last 3 firefox version", + "last 5 safari version" + ] }, "engines": { "node": ">=18.0" diff --git a/sidebars.js b/sidebars.js index ea404e817..332758032 100644 --- a/sidebars.js +++ b/sidebars.js @@ -28,7 +28,6 @@ const sidebars = { }, ], */ - }; export default sidebars; diff --git a/siteConfig.js b/siteConfig.js index 05a6be5b6..0c02293ae 100644 --- a/siteConfig.js +++ b/siteConfig.js @@ -1,109 +1,110 @@ new Crawler({ - rateLimit: 8, - maxDepth: 10, - maxUrls: 5000, - startUrls: [ - "https://subhadipbhowmik.github.io/30-Days-Of-CPP/", - "https://subhadipbhowmik.github.io/30-Days-Of-CPP/docs/", - "https://subhadipbhowmik.github.io/30-Days-Of-CPP/signup", - "https://subhadipbhowmik.github.io/30-Days-Of-CPP/login", - ], - renderJavaScript: false, - sitemaps: ["https://subhadipbhowmik.github.io/30-Days-Of-CPP/sitemap.xml"], - ignoreCanonicalTo: false, - discoveryPatterns: [ - "https://subhadipbhowmik.github.io/30-Days-Of-CPP/docs/**", - "https://subhadipbhowmik.github.io/30-Days-Of-CPP/signup", - "https://subhadipbhowmik.github.io/30-Days-Of-CPP/login", - ], - schedule: "at 19:12 on Tuesday", - actions: [ - { - indexName: "subhadipbhowmik", - pathsToMatch: [ - "https://subhadipbhowmik.github.io/30-Days-Of-CPP/**", - "https://subhadipbhowmik.github.io/30-Days-Of-CPP/docs/**", - "https://subhadipbhowmik.github.io/30-Days-Of-CPP/blog/**", - ], - recordExtractor: ({ helpers }) => { - return helpers.docsearch({ - recordProps: { - lvl1: ["header h1", "article h1", "main h1", "h1", "head > title"], - content: ["article p, article li", "main p, main li", "p, li"], - lvl0: { - selectors: "", - defaultValue: "Documentation", + rateLimit: 8, + maxDepth: 10, + maxUrls: 5000, + startUrls: [ + "https://subhadipbhowmik.github.io/30-Days-Of-CPP/", + "https://subhadipbhowmik.github.io/30-Days-Of-CPP/docs/", + "https://subhadipbhowmik.github.io/30-Days-Of-CPP/signup", + "https://subhadipbhowmik.github.io/30-Days-Of-CPP/login", + ], + renderJavaScript: false, + sitemaps: ["https://subhadipbhowmik.github.io/30-Days-Of-CPP/sitemap.xml"], + ignoreCanonicalTo: false, + discoveryPatterns: [ + "https://subhadipbhowmik.github.io/30-Days-Of-CPP/docs/**", + "https://subhadipbhowmik.github.io/30-Days-Of-CPP/signup", + "https://subhadipbhowmik.github.io/30-Days-Of-CPP/login", + ], + schedule: "at 19:12 on Tuesday", + actions: [ + { + indexName: "subhadipbhowmik", + pathsToMatch: [ + "https://subhadipbhowmik.github.io/30-Days-Of-CPP/**", + "https://subhadipbhowmik.github.io/30-Days-Of-CPP/docs/**", + "https://subhadipbhowmik.github.io/30-Days-Of-CPP/blog/**", + ], + recordExtractor: ({ helpers }) => { + return helpers.docsearch({ + recordProps: { + lvl1: ["header h1", "article h1", "main h1", "h1", "head > title"], + content: ["article p, article li", "main p, main li", "p, li"], + lvl0: { + selectors: "", + defaultValue: "Documentation", + }, + lvl2: ["article h2", "main h2", "h2"], + lvl3: ["article h3", "main h3", "h3"], + lvl4: ["article h4", "main h4", "h4"], + lvl5: ["article h5", "main h5", "h5"], + lvl6: ["article h6", "main h6", "h6"], }, - lvl2: ["article h2", "main h2", "h2"], - lvl3: ["article h3", "main h3", "h3"], - lvl4: ["article h4", "main h4", "h4"], - lvl5: ["article h5", "main h5", "h5"], - lvl6: ["article h6", "main h6", "h6"], - }, - aggregateContent: true, - recordVersion: "v3", - }); + aggregateContent: true, + recordVersion: "v3", + }); + }, + }, + ], + safetyChecks: { beforeIndexPublishing: { maxLostRecordsPercentage: 30 } }, + initialIndexSettings: { + subhadipbhowmik: { + attributesForFaceting: ["type", "lang"], + attributesToRetrieve: [ + "hierarchy", + "content", + "anchor", + "url", + "url_without_anchor", + "type", + ], + attributesToHighlight: ["hierarchy", "content"], + attributesToSnippet: ["content:10"], + camelCaseAttributes: ["hierarchy", "content"], + searchableAttributes: [ + "unordered(hierarchy.lvl0)", + "unordered(hierarchy.lvl1)", + "unordered(hierarchy.lvl2)", + "unordered(hierarchy.lvl3)", + "unordered(hierarchy.lvl4)", + "unordered(hierarchy.lvl5)", + "unordered(hierarchy.lvl6)", + "content", + ], + distinct: true, + attributeForDistinct: "url", + customRanking: [ + "desc(weight.pageRank)", + "desc(weight.level)", + "asc(weight.position)", + ], + ranking: [ + "words", + "filters", + "typo", + "attribute", + "proximity", + "exact", + "custom", + ], + highlightPreTag: '', + highlightPostTag: "", + minWordSizefor1Typo: 3, + minWordSizefor2Typos: 7, + allowTyposOnNumericTokens: false, + minProximity: 1, + ignorePlurals: true, + advancedSyntax: true, + attributeCriteriaComputedByMinProximity: true, + removeWordsIfNoResults: "allOptional", }, }, - ], - safetyChecks: { beforeIndexPublishing: { maxLostRecordsPercentage: 30 } }, - initialIndexSettings: { - subhadipbhowmik: { - attributesForFaceting: ["type", "lang"], - attributesToRetrieve: [ - "hierarchy", - "content", - "anchor", - "url", - "url_without_anchor", - "type", - ], - attributesToHighlight: ["hierarchy", "content"], - attributesToSnippet: ["content:10"], - camelCaseAttributes: ["hierarchy", "content"], - searchableAttributes: [ - "unordered(hierarchy.lvl0)", - "unordered(hierarchy.lvl1)", - "unordered(hierarchy.lvl2)", - "unordered(hierarchy.lvl3)", - "unordered(hierarchy.lvl4)", - "unordered(hierarchy.lvl5)", - "unordered(hierarchy.lvl6)", - "content", - ], - distinct: true, - attributeForDistinct: "url", - customRanking: [ - "desc(weight.pageRank)", - "desc(weight.level)", - "asc(weight.position)", - ], - ranking: [ - "words", - "filters", - "typo", - "attribute", - "proximity", - "exact", - "custom", - ], - highlightPreTag: '', - highlightPostTag: "", - minWordSizefor1Typo: 3, - minWordSizefor2Typos: 7, - allowTyposOnNumericTokens: false, - minProximity: 1, - ignorePlurals: true, - advancedSyntax: true, - attributeCriteriaComputedByMinProximity: true, - removeWordsIfNoResults: "allOptional", - }, - }, - appId: "SKRAQTXG41", - apiKey: "4eadbd9906c2db99f8c4d53bb7202144", - indexName: "subhadipbhowmik", - extraUrls: [ - "https://subhadipbhowmik.github.io/30-Days-Of-CPP/docs/intro", - "https://subhadipbhowmik.github.io/30-Days-Of-CPP/blog", - ], -}); + appId: "SKRAQTXG41", + apiKey: "4eadbd9906c2db99f8c4d53bb7202144", + indexName: "subhadipbhowmik", + extraUrls: [ + "https://subhadipbhowmik.github.io/30-Days-Of-CPP/docs/intro", + "https://subhadipbhowmik.github.io/30-Days-Of-CPP/blog", + ], + }); + \ No newline at end of file diff --git a/src/components/Callout/Callout.js b/src/components/Callout/Callout.js deleted file mode 100644 index 6324e29ee..000000000 --- a/src/components/Callout/Callout.js +++ /dev/null @@ -1,18 +0,0 @@ -// Callout.js -import React from "react"; - -const Callout = ({ type, children }) => { - const styles = { - border: "2px solid", - padding: "10px", - borderRadius: "5px", - backgroundColor: - type === "info" ? "#e2f0ff" : type === "warning" ? "#ffe5b3" : "#d9f7be", - borderColor: - type === "info" ? "#1890ff" : type === "warning" ? "#faad14" : "#52c41a", - }; - - return

    {children}
    ; -}; - -export default Callout; diff --git a/src/components/Chatbot/chatbot.js b/src/components/Chatbot/chatbot.js deleted file mode 100644 index 717386ce7..000000000 --- a/src/components/Chatbot/chatbot.js +++ /dev/null @@ -1,32 +0,0 @@ -import React, { useEffect } from 'react'; -import { Helmet } from 'react-helmet'; -import './style.css'; - -const Chatbot = () => { - useEffect(() => { - const script1 = document.createElement('script'); - script1.src = "https://cdn.botpress.cloud/webchat/v1/inject.js"; - script1.async = true; - document.body.appendChild(script1); - - const script2 = document.createElement('script'); - script2.src = "https://mediafiles.botpress.cloud/4e10f671-b66c-4211-a966-8d2a4b404513/webchat/config.js"; - script2.defer = true; - document.body.appendChild(script2); - - return () => { - document.body.removeChild(script1); - document.body.removeChild(script2); - }; - }, []); - - return ( -
    - - - -
    - ); -}; - -export default Chatbot; diff --git a/src/components/Chatbot/style.css b/src/components/Chatbot/style.css deleted file mode 100644 index a4e79db33..000000000 --- a/src/components/Chatbot/style.css +++ /dev/null @@ -1,247 +0,0 @@ - -body{ - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -} - /* These CSS rules sets the text direction of the paragraph (RTL or LTR) */ - /* p, */ - .bpw-from-bot > div, - #input-message { - direction: ltr; - } - - /* This rule changes the color of the text in the input message */ - #input-message { - color: #000000; - } - - /* Changes the color of the new message indicator */ - .bpw-new-messages-indicator { - background-color: #f5f5f5; - color: #ffffff; - } - - /* Styling for the chat header container */ - .bpw-header-container { - margin: 10px; - background: #00bfa6; - border-radius: 10px; - position: relative; - overflow: hidden; - border: 1px; - border-radius: 10px; - color: #ffffff; - } - - .bpw-header-name{ - color: #ffffff; - } - - /* Styling for the typing bubble */ - .bpw-typing-bubble { - background: #000000; - } - - /* Styling for the chat bubble content */ - .bpw-chat-bubble-content { - background-color: #f5f5f5; - border-radius: 3px; - border: 1px transparent; - } - - /* Styling for the date container, header name, and header subtitle */ - .bpw-date-container, - .bpw-header-name, - .bpw-header-subtitle { - color: #ffffff; - } - - /* Styling for the layout of the chat bubble. Width, height, border, position and radius of the chat bubble */ - .bpw-layout { - width: 400px !important; - height: 70vh; - border-radius: 10px; - right: 10px; - bottom: 5px; - border: 1px; - } - /* Responsive design rules for devices with width less than or equal to 450px */ - @media(max-width:450px) { - .bpw-layout { - width: 100% !important; - height: 100%; - right: 0; - bottom: 0; - border-radius: 0; - } - } - - /* Changes the fill color of the header icons to white */ - .bpw-header-icon, - .bpw-header-icon svg, - .bpw-header-icon svg path { - fill: #ffffff !important; - } - - /* Changes the color of the placeholder text in the input message */ - #input-message::placeholder { - color: rgba(0,0,0,.30); - } - - .bpw-composer textarea{ - outline: none !important; - border: 1px solid black; - } - .bpw-composer textarea:focus{ - outline: none !important; - border: 1px solid black; - } - - /* Styling for the keyboard single choice option */ - .bpw-keyboard-single-choice { - background-color: #ffffff; - border: none; - } - - /* Styling for the buttons in the chat interface */ - .bpw-button, - .bpw-button-alt { - background-color: #00bfa6; - color: #000000; - border-radius: 10px; - border: none; - } - - - /* Styling for hover effect on the buttons in the chat interface */ - .bpw-button:hover, - .bpw-button-alt:hover { - background-color: #f5f5f5; - } - - /* Styling for the chat container, including color, scrollbar width and color, and border */ - .bpw-chat-container { - background-color: #ffffff; - scrollbar-width: thin; - scrollbar-color: #f5f5f5 #ffffff; - border: none; - } - - /* Styling for the chat bubble content when it's from the bot */ - .bpw-from-bot .bpw-chat-bubble .bpw-chat-bubble-content { - background-color: #f5f5f5; - color: #000000; - } - - /* Styling for the chat bubble content when it's from the user */ - .bpw-from-user .bpw-chat-bubble .bpw-chat-bubble-content { - background-color: #00bfa6; - color: #ffffff; - } - - /* Styling for the composer section of the chat interface */ - .bpw-composer { - background-color: #ffffff; - border-top: none; - } - - - /* Styling for the scrollbar in the chat container */ - .bpw-chat-container::-webkit-scrollbar, - .bpw-chat-container::-moz-scrollbar { - width: 10px; - background-color: #ffffff; - border: none; - } - - /* Styling for the avatar of the bot */ - .bpw-bot-avatar img, - .bpw-bot-avatar svg { - background: #000000; - border: 3px solid #ffffff; - } - - /* Styling for the general scrollbar in the web page */ - ::-webkit-scrollbar { - width: 0.5rem; - } - - /* Styling for the track of the general scrollbar and the chat container scrollbar */ - ::-webkit-scrollbar-track, - .bpw-chat-container::-webkit-scrollbar-track, - .bpw-chat-container::-moz-scrollbar-track { - background-color: transparent; - } - - /* Styling for the thumb of the general scrollbar and the chat container scrollbar */ - ::-webkit-scrollbar-thumb, - .bpw-chat-container::-webkit-scrollbar-thumb, - .bpw-chat-container::-moz-scrollbar-thumb { - background-color: #ffffff; - border-radius: 1rem; - border: 0.5rem solid transparent; - } - - /* Styling for the floating button icon in the chat interface */ - .bpw-floating-button i svg path { - fill: #00bfa6; - } - - - - /* Styling for the 'powered by' section of the chat interface */ - .bpw-powered { - text-align: center; - padding: 10px; - color: #000000; - background: #ffffff; - font-size: 14px; - border-bottom-right-radius: 10px; - border-bottom-left-radius: 10px; - } - - /* Styling for the hyperlinks in the 'powered by' section of the chat interface */ - .bpw-powered a { - color: #000000; - text-decoration: underline; - } - - /* Styling for hover effect on the hyperlinks in the 'powered by' section of the chat interface */ - .bpw-powered a:hover { - text-decoration: underline; - } - - .bpw-send-button{ - background: #00bfa6; - } - .bpw-send-button:hover{ - background-color: #000; - } - - /* Change Bot Widget Icon */ - - .bpw-widget-btn{ - border-radius: 50%; - background:#00bfa6; - } - - .bpw-floating-button::before { - background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='white' class='w-6 h-6'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M8.625 12a.375.375 0 11-.75 0 .375.375 0 01.75 0zm0 0H8.25m4.125 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm0 0H12m4.125 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm0 0h-.375M21 12c0 4.556-4.03 8.25-9 8.25a9.764 9.764 0 01-2.555-.337A5.972 5.972 0 015.41 20.97a5.969 5.969 0 01-.474-.065 4.48 4.48 0 00.978-2.025c.09-.457-.133-.901-.467-1.226C3.93 16.178 3 14.189 3 12c0-4.556 4.03-8.25 9-8.25s9 3.694 9 8.25z' /%3E%3C/svg%3E"); - background-repeat: no-repeat; - background-position: center; - background-size: contain; - height:undefinedpx !important; - width:undefinedpx !important; - } - - .bpw-floating-button { - box-shadow: none !important; - } - - .bpw-floating-button:hover { - background-color: #00bfa6; - box-shadow: none !important; - } diff --git a/src/components/Contact/Contact.css b/src/components/Contact/Contact.css deleted file mode 100644 index c17c09cbc..000000000 --- a/src/components/Contact/Contact.css +++ /dev/null @@ -1,106 +0,0 @@ -/* Base styling */ -body { - font-family: 'Arial', sans-serif; - background-color: #f0f7f4; /* Light green background */ - margin: 0; - padding: 0; - } - - .contact { - text-align: center; - padding: 20px; - } - - h1 { - font-size: 2.5em; - margin-bottom: 20px; - color: #2c6e49; /* Dark green */ - } - - .contact-form { - display: inline-block; - text-align: left; - max-width: 600px; - width: 100%; - background-color: white; - padding: 30px; - border-radius: 8px; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); - transition: transform 0.3s ease, box-shadow 0.3s ease; - } - - .contact-form:hover { - transform: translateY(-5px); - box-shadow: 0 0 20px rgba(0, 0, 0, 0.2); - } - - .form-group { - margin-bottom: 20px; - } - - .form-group label { - display: block; - margin-bottom: 5px; - font-weight: bold; - color: #00bfa6; /* Light green */ - } - - .form-group input, - .form-group textarea { - width: 100%; - padding: 10px; - border: 1px solid #ddd; - border-radius: 4px; - box-sizing: border-box; - font-size: 1em; - color: #2c6e49; /* Dark green for input text */ - transition: border-color 0.3s ease; - } - - .form-group input:focus, - .form-group textarea:focus { - border-color: #00bfa6; /* Light green */ - } - - .form-group textarea { - resize: vertical; - height: 150px; - } - - button { - display: inline-block; - padding: 10px 20px; - background-color: #00bfa6; /* Light green */ - color: white; - border: none; - border-radius: 4px; - cursor: pointer; - font-size: 1em; - transition: background-color 0.3s ease, transform 0.3s ease; - } - - button:hover { - background-color: #009e8a; /* Slightly darker light green */ - transform: translateY(-2px); - } - - /* Responsive design */ - @media (max-width: 600px) { - .contact-form { - padding: 20px; - } - - h1 { - font-size: 2em; - } - - .form-group input, - .form-group textarea { - font-size: 0.9em; - } - - button { - font-size: 0.9em; - } - } - \ No newline at end of file diff --git a/src/components/Contact/Contact.js b/src/components/Contact/Contact.js deleted file mode 100644 index cbfe465f3..000000000 --- a/src/components/Contact/Contact.js +++ /dev/null @@ -1,99 +0,0 @@ -import React, { useState } from 'react'; -import './Contact.css'; - -const Contact = () => { - const [formData, setFormData] = useState({ - name: '', - email: '', - phone: '', - subject: '', - message: '' - }); - - const handleChange = (e) => { - const { name, value } = e.target; - setFormData({ - ...formData, - [name]: value - }); - }; - - const handleSubmit = (e) => { - e.preventDefault(); - // Handle form submission logic here - console.log('Form Data Submitted:', formData); - // Optionally reset the form - setFormData({ - name: '', - email: '', - phone: '', - subject: '', - message: '' - }); - }; - - return ( -
    -

    Contact Us

    -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - -