From e93bcacfb8d75cff5dfb531fad6569d2b5457998 Mon Sep 17 00:00:00 2001 From: majvax Date: Wed, 1 Jan 2025 18:31:39 +0100 Subject: [PATCH 01/15] [C++] added snippet --- .../cpp/array-manipulation/filter-vector.md | 18 +++++++ .../array-manipulation/transform-vector.md | 19 +++++++ snippets/cpp/basics/hello-world.md | 8 +-- .../cpp/file-handling/find-files-recursive.md | 53 +++++++++++++++++++ snippets/cpp/file-handling/find-files.md | 53 +++++++++++++++++++ .../cpp/file-handling/list-directories.md | 32 +++++++++++ 6 files changed, 179 insertions(+), 4 deletions(-) create mode 100644 snippets/cpp/array-manipulation/filter-vector.md create mode 100644 snippets/cpp/array-manipulation/transform-vector.md create mode 100644 snippets/cpp/file-handling/find-files-recursive.md create mode 100644 snippets/cpp/file-handling/find-files.md create mode 100644 snippets/cpp/file-handling/list-directories.md diff --git a/snippets/cpp/array-manipulation/filter-vector.md b/snippets/cpp/array-manipulation/filter-vector.md new file mode 100644 index 00000000..3b2b6297 --- /dev/null +++ b/snippets/cpp/array-manipulation/filter-vector.md @@ -0,0 +1,18 @@ +--- +Title: Filter Vector +Description: Filters a vector using a predicate function. +Author: majvax +Tags: cpp,array,filter,utility +--- + +```cpp +#include +#include + +template +auto filter(const std::vector& vec, P&& predicate) { + return vec + | std::views::filter(std::forward

(predicate)) + | std::ranges::to>(); +} +``` diff --git a/snippets/cpp/array-manipulation/transform-vector.md b/snippets/cpp/array-manipulation/transform-vector.md new file mode 100644 index 00000000..996593ca --- /dev/null +++ b/snippets/cpp/array-manipulation/transform-vector.md @@ -0,0 +1,19 @@ +--- +Title: Transform Vector +Description: Transforms a vector using a function. +Author: majvax +Tags: cpp,array,transform,utility +--- + +```cpp +#include +#include + +template +auto transform(const std::vector& vec, F&& transformer) { + using U = std::invoke_result_t; + return vec + | std::views::transform(std::forward(transformer)) + | std::ranges::to>(); +} +``` diff --git a/snippets/cpp/basics/hello-world.md b/snippets/cpp/basics/hello-world.md index eadaa386..77397123 100644 --- a/snippets/cpp/basics/hello-world.md +++ b/snippets/cpp/basics/hello-world.md @@ -1,8 +1,8 @@ --- -title: Hello, World! -description: Prints Hello, World! to the terminal. -author: James-Beans -tags: cpp,printing,hello-world,utility +Title: Hello, World! +Description: Prints Hello, World! to the terminal. +Author: James-Beans +Tags: cpp,hello-world --- ```cpp diff --git a/snippets/cpp/file-handling/find-files-recursive.md b/snippets/cpp/file-handling/find-files-recursive.md new file mode 100644 index 00000000..4bc00ded --- /dev/null +++ b/snippets/cpp/file-handling/find-files-recursive.md @@ -0,0 +1,53 @@ +--- +Title: Find files +Description: Find all the files in a directory and subdirectories using a predicate function. +Author: majvax +Tags: cpp,array,filesystem,file_search,recursive_search +--- + +```cpp +#include +#include +#include + +template +std::vector find_files_recursive(const std::string& path, P&& predicate) { + std::vector files; + std::error_code ec; + + if (!std::filesystem::exists(path, ec) || ec) + return files; + if (!std::filesystem::is_directory(path, ec) || ec) + return files; + + auto it = std::filesystem::recursive_directory_iterator(path, ec); + if (ec) + return files; + + for (const auto& entry : it) + if (!std::filesystem::is_directory(entry) && predicate(entry.path())) + files.push_back(entry.path()); + + return files; +} + + +// usage: +// Find all files with size greater than 10MB +auto files = find_files_recursive("Path", [](const auto& p) { + return std::filesystem::file_size(p) > 10 * 1024 * 1024; +}); + +// Find all files with ".pdf" as extension +auto files = find_files_recursive("Path", [](const auto& p) { + return p.extension() == ".pdf"; +}); + +// Find all files writed after The New Year +auto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys( + std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}} +); +auto files = find_files_recursive("Path", [jan_1_2025](const auto& p) { + return std::filesystem::last_write_time(p) > jan_1_2025; +}), +``` diff --git a/snippets/cpp/file-handling/find-files.md b/snippets/cpp/file-handling/find-files.md new file mode 100644 index 00000000..7d26e920 --- /dev/null +++ b/snippets/cpp/file-handling/find-files.md @@ -0,0 +1,53 @@ +--- +Title: Find files +Description: Find all the files in a directory using a predicate function. +Author: majvax +Tags: cpp,array,filesystem,file_search +--- + +```cpp +#include +#include +#include + +template +std::vector find_files(const std::string& path, P&& predicate) { + std::vector files; + std::error_code ec; + + if (!std::filesystem::exists(path, ec) || ec) + return files; + if (!std::filesystem::is_directory(path, ec) || ec) + return files; + + auto it = std::filesystem::directory_iterator(path, ec); + if (ec) + return files; + + for (const auto& entry : it) + if (!std::filesystem::is_directory(entry) && predicate(entry.path())) + files.push_back(entry.path()); + + return files; +} + + +// usage: +// Find all files with size greater than 10MB +auto files = find_files("Path", [](const auto& p) { + return std::filesystem::file_size(p) > 10 * 1024 * 1024; +}); + +// Find all files with ".pdf" as extension +auto files = find_files("Path", [](const auto& p) { + return p.extension() == ".pdf"; +}); + +// Find all files writed after The New Year +auto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys( + std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}} +); +auto files = find_files("Path", [jan_1_2025](const auto& p) { + return std::filesystem::last_write_time(p) > jan_1_2025; +}), +``` diff --git a/snippets/cpp/file-handling/list-directories.md b/snippets/cpp/file-handling/list-directories.md new file mode 100644 index 00000000..0897a464 --- /dev/null +++ b/snippets/cpp/file-handling/list-directories.md @@ -0,0 +1,32 @@ +--- +Title: List Directories +Description: Lists all the directories in a path. +Author: majvax +Tags: cpp,array,filesystem,directories +--- + +```cpp +#include +#include +#include + +std::vector list_directories(const std::string& path) { + std::vector files; + std::error_code ec; + + if (!std::filesystem::exists(path, ec) || ec) + return files; + if (!std::filesystem::is_directory(path, ec) || ec) + return files; + + auto it = std::filesystem::directory_iterator(path, ec); + if (ec) + return files; + + for (const auto& entry : it) + if (std::filesystem::is_directory(entry)) + files.push_back(entry.path()); + + return files; +} +``` From aad3f798991587209b9f0aee506ef5d1d5e499a0 Mon Sep 17 00:00:00 2001 From: majvax Date: Wed, 1 Jan 2025 23:10:18 +0100 Subject: [PATCH 02/15] [C++] added 3 snippets for string. --- snippets/cpp/string-manipulation/filter.md | 18 ++++++++++++++++ .../cpp/string-manipulation/palindrome.md | 21 +++++++++++++++++++ snippets/cpp/string-manipulation/transform.md | 18 ++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 snippets/cpp/string-manipulation/filter.md create mode 100644 snippets/cpp/string-manipulation/palindrome.md create mode 100644 snippets/cpp/string-manipulation/transform.md diff --git a/snippets/cpp/string-manipulation/filter.md b/snippets/cpp/string-manipulation/filter.md new file mode 100644 index 00000000..12e3bf0c --- /dev/null +++ b/snippets/cpp/string-manipulation/filter.md @@ -0,0 +1,18 @@ +--- +title: Filter +description: Filter a string with a predicate function +author: majvax +tags: cpp,string,utility,filtering +--- + +```cpp +#include +#include + +template +std::string filter(const std::string& str, P&& predicate) { + return str + | std::ranges::views::filter(std::forward

(predicate)) + | std::ranges::to(); +} +``` diff --git a/snippets/cpp/string-manipulation/palindrome.md b/snippets/cpp/string-manipulation/palindrome.md new file mode 100644 index 00000000..f57e4764 --- /dev/null +++ b/snippets/cpp/string-manipulation/palindrome.md @@ -0,0 +1,21 @@ +--- +title: Palindrome +description: Check if a string is a palindrome or not. +author: majvax +tags: cpp,string,utility +--- + +```cpp +#include +#include +#include + +bool is_palindrome(const std::string& str) { + std::string sanitized_string = str + | std::ranges::views::filter([](char c){ return std::isalnum(c); }) + | std::ranges::views::transform([](char c){ return std::tolower(c); }) + | std::ranges::to(); + + return std::ranges::equal(sanitized_string, sanitized_string | std::views::reverse); +} +``` diff --git a/snippets/cpp/string-manipulation/transform.md b/snippets/cpp/string-manipulation/transform.md new file mode 100644 index 00000000..c64da2c7 --- /dev/null +++ b/snippets/cpp/string-manipulation/transform.md @@ -0,0 +1,18 @@ +--- +title: Transform +description: Transform a string with a function +author: majvax +tags: cpp,string,utility,transform +--- + +```cpp +#include +#include + +template +std::string transform(const std::string& str, F&& transformer) { + return str + | std::ranges::views::transform(std::forward(transformer)) + | std::ranges::to(); +} +``` From f472a2968440d7be3d2bcd09acddedaf92b5ff6e Mon Sep 17 00:00:00 2001 From: majvax Date: Thu, 2 Jan 2025 15:20:25 +0100 Subject: [PATCH 03/15] Added missing chrono header --- snippets/cpp/file-handling/find-files-recursive.md | 1 + snippets/cpp/file-handling/find-files.md | 1 + 2 files changed, 2 insertions(+) diff --git a/snippets/cpp/file-handling/find-files-recursive.md b/snippets/cpp/file-handling/find-files-recursive.md index 4bc00ded..1a8d574e 100644 --- a/snippets/cpp/file-handling/find-files-recursive.md +++ b/snippets/cpp/file-handling/find-files-recursive.md @@ -44,6 +44,7 @@ auto files = find_files_recursive("Path", [](const auto& p) { }); // Find all files writed after The New Year +#include auto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys( std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}} ); diff --git a/snippets/cpp/file-handling/find-files.md b/snippets/cpp/file-handling/find-files.md index 7d26e920..ee2b1ab8 100644 --- a/snippets/cpp/file-handling/find-files.md +++ b/snippets/cpp/file-handling/find-files.md @@ -44,6 +44,7 @@ auto files = find_files("Path", [](const auto& p) { }); // Find all files writed after The New Year +#include auto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys( std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}} ); From 31b43b520a67b910485802845f025df1b7bf1a57 Mon Sep 17 00:00:00 2001 From: majvax Date: Thu, 2 Jan 2025 21:32:25 +0100 Subject: [PATCH 04/15] fixed tags --- snippets/cpp/array-manipulation/filter-vector.md | 2 +- snippets/cpp/array-manipulation/transform-vector.md | 2 +- snippets/cpp/file-handling/find-files-recursive.md | 2 +- snippets/cpp/file-handling/find-files.md | 2 +- snippets/cpp/file-handling/list-directories.md | 2 +- snippets/cpp/string-manipulation/filter.md | 2 +- snippets/cpp/string-manipulation/palindrome.md | 2 +- snippets/cpp/string-manipulation/transform.md | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/snippets/cpp/array-manipulation/filter-vector.md b/snippets/cpp/array-manipulation/filter-vector.md index 3b2b6297..43ee886d 100644 --- a/snippets/cpp/array-manipulation/filter-vector.md +++ b/snippets/cpp/array-manipulation/filter-vector.md @@ -2,7 +2,7 @@ Title: Filter Vector Description: Filters a vector using a predicate function. Author: majvax -Tags: cpp,array,filter,utility +Tags: cpp,array,filter,utility,c++23 --- ```cpp diff --git a/snippets/cpp/array-manipulation/transform-vector.md b/snippets/cpp/array-manipulation/transform-vector.md index 996593ca..52962027 100644 --- a/snippets/cpp/array-manipulation/transform-vector.md +++ b/snippets/cpp/array-manipulation/transform-vector.md @@ -2,7 +2,7 @@ Title: Transform Vector Description: Transforms a vector using a function. Author: majvax -Tags: cpp,array,transform,utility +Tags: cpp,array,transform,utility,,c++23 --- ```cpp diff --git a/snippets/cpp/file-handling/find-files-recursive.md b/snippets/cpp/file-handling/find-files-recursive.md index 4bc00ded..f4f5a24d 100644 --- a/snippets/cpp/file-handling/find-files-recursive.md +++ b/snippets/cpp/file-handling/find-files-recursive.md @@ -2,7 +2,7 @@ Title: Find files Description: Find all the files in a directory and subdirectories using a predicate function. Author: majvax -Tags: cpp,array,filesystem,file_search,recursive_search +Tags: cpp,filesystem,file_search,c++17 --- ```cpp diff --git a/snippets/cpp/file-handling/find-files.md b/snippets/cpp/file-handling/find-files.md index 7d26e920..6fd0529c 100644 --- a/snippets/cpp/file-handling/find-files.md +++ b/snippets/cpp/file-handling/find-files.md @@ -2,7 +2,7 @@ Title: Find files Description: Find all the files in a directory using a predicate function. Author: majvax -Tags: cpp,array,filesystem,file_search +Tags: cpp,filesystem,file_search --- ```cpp diff --git a/snippets/cpp/file-handling/list-directories.md b/snippets/cpp/file-handling/list-directories.md index 0897a464..58cd992b 100644 --- a/snippets/cpp/file-handling/list-directories.md +++ b/snippets/cpp/file-handling/list-directories.md @@ -2,7 +2,7 @@ Title: List Directories Description: Lists all the directories in a path. Author: majvax -Tags: cpp,array,filesystem,directories +Tags: cpp,filesystem,directories,c++17 --- ```cpp diff --git a/snippets/cpp/string-manipulation/filter.md b/snippets/cpp/string-manipulation/filter.md index 12e3bf0c..fa857ae9 100644 --- a/snippets/cpp/string-manipulation/filter.md +++ b/snippets/cpp/string-manipulation/filter.md @@ -2,7 +2,7 @@ title: Filter description: Filter a string with a predicate function author: majvax -tags: cpp,string,utility,filtering +tags: cpp,string,utility,filtering,c++23 --- ```cpp diff --git a/snippets/cpp/string-manipulation/palindrome.md b/snippets/cpp/string-manipulation/palindrome.md index f57e4764..356ba62b 100644 --- a/snippets/cpp/string-manipulation/palindrome.md +++ b/snippets/cpp/string-manipulation/palindrome.md @@ -2,7 +2,7 @@ title: Palindrome description: Check if a string is a palindrome or not. author: majvax -tags: cpp,string,utility +tags: cpp,string,utility,c++23 --- ```cpp diff --git a/snippets/cpp/string-manipulation/transform.md b/snippets/cpp/string-manipulation/transform.md index c64da2c7..a3739ede 100644 --- a/snippets/cpp/string-manipulation/transform.md +++ b/snippets/cpp/string-manipulation/transform.md @@ -2,7 +2,7 @@ title: Transform description: Transform a string with a function author: majvax -tags: cpp,string,utility,transform +tags: cpp,string,utility,transform,c++23 --- ```cpp From 4638879f3ec9facbb33e4e825374aa9725b5152b Mon Sep 17 00:00:00 2001 From: majvax Date: Thu, 2 Jan 2025 21:38:48 +0100 Subject: [PATCH 05/15] fixed exemple needing std=c++20 --- snippets/cpp/file-handling/find-files-recursive.md | 1 + snippets/cpp/file-handling/find-files.md | 1 + 2 files changed, 2 insertions(+) diff --git a/snippets/cpp/file-handling/find-files-recursive.md b/snippets/cpp/file-handling/find-files-recursive.md index bb9ba194..7b1630a6 100644 --- a/snippets/cpp/file-handling/find-files-recursive.md +++ b/snippets/cpp/file-handling/find-files-recursive.md @@ -45,6 +45,7 @@ auto files = find_files_recursive("Path", [](const auto& p) { // Find all files writed after The New Year #include +// need std=c++20 auto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys( std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}} ); diff --git a/snippets/cpp/file-handling/find-files.md b/snippets/cpp/file-handling/find-files.md index bd0bbe9b..b00064d3 100644 --- a/snippets/cpp/file-handling/find-files.md +++ b/snippets/cpp/file-handling/find-files.md @@ -45,6 +45,7 @@ auto files = find_files("Path", [](const auto& p) { // Find all files writed after The New Year #include +// need std=c++20 auto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys( std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}} ); From 98ddffcf61f721ca493235729361d50e3b4cb59b Mon Sep 17 00:00:00 2001 From: majvax Date: Thu, 2 Jan 2025 22:17:54 +0100 Subject: [PATCH 06/15] Fixed Usage to accommodate to new guidelines --- snippets/cpp/array-manipulation/filter-vector.md | 7 +++++++ snippets/cpp/array-manipulation/transform-vector.md | 7 +++++++ snippets/cpp/file-handling/find-files-recursive.md | 4 +++- snippets/cpp/file-handling/find-files.md | 4 +++- snippets/cpp/file-handling/list-directories.md | 5 +++++ snippets/cpp/string-manipulation/filter.md | 7 +++++++ snippets/cpp/string-manipulation/palindrome.md | 5 +++++ snippets/cpp/string-manipulation/transform.md | 7 +++++++ 8 files changed, 44 insertions(+), 2 deletions(-) diff --git a/snippets/cpp/array-manipulation/filter-vector.md b/snippets/cpp/array-manipulation/filter-vector.md index 43ee886d..d6d05527 100644 --- a/snippets/cpp/array-manipulation/filter-vector.md +++ b/snippets/cpp/array-manipulation/filter-vector.md @@ -15,4 +15,11 @@ auto filter(const std::vector& vec, P&& predicate) { | std::views::filter(std::forward

(predicate)) | std::ranges::to>(); } + + + +// Usage: +std::vector vec = {1, 2, 3, 4, 5}; +std::vector filtered = filter(vec, [](int i){ return i % 2 == 0; }); +// filtered contains 2 and 4 ``` diff --git a/snippets/cpp/array-manipulation/transform-vector.md b/snippets/cpp/array-manipulation/transform-vector.md index 52962027..90575099 100644 --- a/snippets/cpp/array-manipulation/transform-vector.md +++ b/snippets/cpp/array-manipulation/transform-vector.md @@ -16,4 +16,11 @@ auto transform(const std::vector& vec, F&& transformer) { | std::views::transform(std::forward(transformer)) | std::ranges::to>(); } + + + +// Usage: +std::vector vec = {1, 2, 3, 4, 5}; +std::vector transformed = transform(vec, [](int i){ return i * 2; }); +// transformed containes 2, 4, 6, 8, 10 ``` diff --git a/snippets/cpp/file-handling/find-files-recursive.md b/snippets/cpp/file-handling/find-files-recursive.md index 7b1630a6..9c5fd6cb 100644 --- a/snippets/cpp/file-handling/find-files-recursive.md +++ b/snippets/cpp/file-handling/find-files-recursive.md @@ -32,7 +32,9 @@ std::vector find_files_recursive(const std::string& path, } -// usage: + +// Usage: + // Find all files with size greater than 10MB auto files = find_files_recursive("Path", [](const auto& p) { return std::filesystem::file_size(p) > 10 * 1024 * 1024; diff --git a/snippets/cpp/file-handling/find-files.md b/snippets/cpp/file-handling/find-files.md index b00064d3..bb09d2d7 100644 --- a/snippets/cpp/file-handling/find-files.md +++ b/snippets/cpp/file-handling/find-files.md @@ -32,7 +32,9 @@ std::vector find_files(const std::string& path, P&& predi } -// usage: + +// Usage: + // Find all files with size greater than 10MB auto files = find_files("Path", [](const auto& p) { return std::filesystem::file_size(p) > 10 * 1024 * 1024; diff --git a/snippets/cpp/file-handling/list-directories.md b/snippets/cpp/file-handling/list-directories.md index 58cd992b..36dad78b 100644 --- a/snippets/cpp/file-handling/list-directories.md +++ b/snippets/cpp/file-handling/list-directories.md @@ -29,4 +29,9 @@ std::vector list_directories(const std::string& path) { return files; } + + + +// Usage: +auto directories = list_directories("Path"); ``` diff --git a/snippets/cpp/string-manipulation/filter.md b/snippets/cpp/string-manipulation/filter.md index fa857ae9..4c90b7ce 100644 --- a/snippets/cpp/string-manipulation/filter.md +++ b/snippets/cpp/string-manipulation/filter.md @@ -15,4 +15,11 @@ std::string filter(const std::string& str, P&& predicate) { | std::ranges::views::filter(std::forward

(predicate)) | std::ranges::to(); } + + + +// Usage: +std::string str = "Hello, World!"; +std::string filtered = filter(str, [](char c){ return std::isalpha(c); }); +std::cout << filtered << std::endl; // HelloWorld ``` diff --git a/snippets/cpp/string-manipulation/palindrome.md b/snippets/cpp/string-manipulation/palindrome.md index 356ba62b..90a5f487 100644 --- a/snippets/cpp/string-manipulation/palindrome.md +++ b/snippets/cpp/string-manipulation/palindrome.md @@ -18,4 +18,9 @@ bool is_palindrome(const std::string& str) { return std::ranges::equal(sanitized_string, sanitized_string | std::views::reverse); } + + + +// Usage: +bool pal = is_palindrome("A man, a plan, a canal, Panama"); // true ``` diff --git a/snippets/cpp/string-manipulation/transform.md b/snippets/cpp/string-manipulation/transform.md index a3739ede..d167c0ef 100644 --- a/snippets/cpp/string-manipulation/transform.md +++ b/snippets/cpp/string-manipulation/transform.md @@ -15,4 +15,11 @@ std::string transform(const std::string& str, F&& transformer) { | std::ranges::views::transform(std::forward(transformer)) | std::ranges::to(); } + + + +// Usage: +std::string str = "Hello, World!"; +std::string transformed = transform(str, [](char c){ return std::toupper(c); }); +std::cout << transformed << std::endl; // HELLO, WORLD! ``` From aebefdeb709bcf2cb4efea5062b266548d9fd0b1 Mon Sep 17 00:00:00 2001 From: majvax Date: Fri, 3 Jan 2025 10:29:13 +0100 Subject: [PATCH 07/15] Fixed all tags + type --- snippets/cpp/array-manipulation/filter-vector.md | 2 +- snippets/cpp/array-manipulation/transform-vector.md | 4 ++-- snippets/cpp/file-handling/find-files-recursive.md | 2 +- snippets/cpp/file-handling/find-files.md | 2 +- snippets/cpp/file-handling/list-directories.md | 2 +- snippets/cpp/string-manipulation/filter.md | 2 +- snippets/cpp/string-manipulation/palindrome.md | 2 +- snippets/cpp/string-manipulation/reverse-string.md | 2 +- snippets/cpp/string-manipulation/split-string.md | 2 +- snippets/cpp/string-manipulation/transform.md | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/snippets/cpp/array-manipulation/filter-vector.md b/snippets/cpp/array-manipulation/filter-vector.md index d6d05527..083f7899 100644 --- a/snippets/cpp/array-manipulation/filter-vector.md +++ b/snippets/cpp/array-manipulation/filter-vector.md @@ -2,7 +2,7 @@ Title: Filter Vector Description: Filters a vector using a predicate function. Author: majvax -Tags: cpp,array,filter,utility,c++23 +Tags: array,filter,c++23 --- ```cpp diff --git a/snippets/cpp/array-manipulation/transform-vector.md b/snippets/cpp/array-manipulation/transform-vector.md index 90575099..e01cbabe 100644 --- a/snippets/cpp/array-manipulation/transform-vector.md +++ b/snippets/cpp/array-manipulation/transform-vector.md @@ -2,7 +2,7 @@ Title: Transform Vector Description: Transforms a vector using a function. Author: majvax -Tags: cpp,array,transform,utility,,c++23 +Tags: array,transform,c++23 --- ```cpp @@ -22,5 +22,5 @@ auto transform(const std::vector& vec, F&& transformer) { // Usage: std::vector vec = {1, 2, 3, 4, 5}; std::vector transformed = transform(vec, [](int i){ return i * 2; }); -// transformed containes 2, 4, 6, 8, 10 +// transformed contains 2, 4, 6, 8, 10 ``` diff --git a/snippets/cpp/file-handling/find-files-recursive.md b/snippets/cpp/file-handling/find-files-recursive.md index 9c5fd6cb..0161faf5 100644 --- a/snippets/cpp/file-handling/find-files-recursive.md +++ b/snippets/cpp/file-handling/find-files-recursive.md @@ -2,7 +2,7 @@ Title: Find files Description: Find all the files in a directory and subdirectories using a predicate function. Author: majvax -Tags: cpp,filesystem,file_search,c++17 +Tags: filesystem,file_search,c++17 --- ```cpp diff --git a/snippets/cpp/file-handling/find-files.md b/snippets/cpp/file-handling/find-files.md index bb09d2d7..c0ff9331 100644 --- a/snippets/cpp/file-handling/find-files.md +++ b/snippets/cpp/file-handling/find-files.md @@ -2,7 +2,7 @@ Title: Find files Description: Find all the files in a directory using a predicate function. Author: majvax -Tags: cpp,filesystem,file_search +Tags: filesystem,file_search,c++17 --- ```cpp diff --git a/snippets/cpp/file-handling/list-directories.md b/snippets/cpp/file-handling/list-directories.md index 36dad78b..028bc095 100644 --- a/snippets/cpp/file-handling/list-directories.md +++ b/snippets/cpp/file-handling/list-directories.md @@ -2,7 +2,7 @@ Title: List Directories Description: Lists all the directories in a path. Author: majvax -Tags: cpp,filesystem,directories,c++17 +Tags: filesystem,directories,c++17 --- ```cpp diff --git a/snippets/cpp/string-manipulation/filter.md b/snippets/cpp/string-manipulation/filter.md index 4c90b7ce..b09b50f5 100644 --- a/snippets/cpp/string-manipulation/filter.md +++ b/snippets/cpp/string-manipulation/filter.md @@ -2,7 +2,7 @@ title: Filter description: Filter a string with a predicate function author: majvax -tags: cpp,string,utility,filtering,c++23 +tags: string,filtering,c++23 --- ```cpp diff --git a/snippets/cpp/string-manipulation/palindrome.md b/snippets/cpp/string-manipulation/palindrome.md index 90a5f487..b563e22c 100644 --- a/snippets/cpp/string-manipulation/palindrome.md +++ b/snippets/cpp/string-manipulation/palindrome.md @@ -2,7 +2,7 @@ title: Palindrome description: Check if a string is a palindrome or not. author: majvax -tags: cpp,string,utility,c++23 +tags: string,c++23 --- ```cpp diff --git a/snippets/cpp/string-manipulation/reverse-string.md b/snippets/cpp/string-manipulation/reverse-string.md index de209c88..5350da18 100644 --- a/snippets/cpp/string-manipulation/reverse-string.md +++ b/snippets/cpp/string-manipulation/reverse-string.md @@ -2,7 +2,7 @@ title: Reverse String description: Reverses the characters in a string. author: Vaibhav-kesarwani -tags: cpp,array,reverse,utility +tags: array,reverse,c++20 --- ```cpp diff --git a/snippets/cpp/string-manipulation/split-string.md b/snippets/cpp/string-manipulation/split-string.md index f903a2b2..339fcecd 100644 --- a/snippets/cpp/string-manipulation/split-string.md +++ b/snippets/cpp/string-manipulation/split-string.md @@ -2,7 +2,7 @@ title: Split String description: Splits a string by a delimiter author: saminjay -tags: cpp,string,split,utility +tags: string,split,c++23 --- ```cpp diff --git a/snippets/cpp/string-manipulation/transform.md b/snippets/cpp/string-manipulation/transform.md index d167c0ef..3d0ee01d 100644 --- a/snippets/cpp/string-manipulation/transform.md +++ b/snippets/cpp/string-manipulation/transform.md @@ -2,7 +2,7 @@ title: Transform description: Transform a string with a function author: majvax -tags: cpp,string,utility,transform,c++23 +tags: string,transform,c++23 --- ```cpp From d76dbfd630f7fae37573b683a1106007ddc01fcd Mon Sep 17 00:00:00 2001 From: majvax Date: Fri, 3 Jan 2025 10:34:55 +0100 Subject: [PATCH 08/15] Revert "Fixed all tags + type" This reverts commit aebefdeb709bcf2cb4efea5062b266548d9fd0b1. --- snippets/cpp/array-manipulation/filter-vector.md | 2 +- snippets/cpp/array-manipulation/transform-vector.md | 4 ++-- snippets/cpp/file-handling/find-files-recursive.md | 2 +- snippets/cpp/file-handling/find-files.md | 2 +- snippets/cpp/file-handling/list-directories.md | 2 +- snippets/cpp/string-manipulation/filter.md | 2 +- snippets/cpp/string-manipulation/palindrome.md | 2 +- snippets/cpp/string-manipulation/reverse-string.md | 2 +- snippets/cpp/string-manipulation/split-string.md | 2 +- snippets/cpp/string-manipulation/transform.md | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/snippets/cpp/array-manipulation/filter-vector.md b/snippets/cpp/array-manipulation/filter-vector.md index 083f7899..d6d05527 100644 --- a/snippets/cpp/array-manipulation/filter-vector.md +++ b/snippets/cpp/array-manipulation/filter-vector.md @@ -2,7 +2,7 @@ Title: Filter Vector Description: Filters a vector using a predicate function. Author: majvax -Tags: array,filter,c++23 +Tags: cpp,array,filter,utility,c++23 --- ```cpp diff --git a/snippets/cpp/array-manipulation/transform-vector.md b/snippets/cpp/array-manipulation/transform-vector.md index e01cbabe..90575099 100644 --- a/snippets/cpp/array-manipulation/transform-vector.md +++ b/snippets/cpp/array-manipulation/transform-vector.md @@ -2,7 +2,7 @@ Title: Transform Vector Description: Transforms a vector using a function. Author: majvax -Tags: array,transform,c++23 +Tags: cpp,array,transform,utility,,c++23 --- ```cpp @@ -22,5 +22,5 @@ auto transform(const std::vector& vec, F&& transformer) { // Usage: std::vector vec = {1, 2, 3, 4, 5}; std::vector transformed = transform(vec, [](int i){ return i * 2; }); -// transformed contains 2, 4, 6, 8, 10 +// transformed containes 2, 4, 6, 8, 10 ``` diff --git a/snippets/cpp/file-handling/find-files-recursive.md b/snippets/cpp/file-handling/find-files-recursive.md index 0161faf5..9c5fd6cb 100644 --- a/snippets/cpp/file-handling/find-files-recursive.md +++ b/snippets/cpp/file-handling/find-files-recursive.md @@ -2,7 +2,7 @@ Title: Find files Description: Find all the files in a directory and subdirectories using a predicate function. Author: majvax -Tags: filesystem,file_search,c++17 +Tags: cpp,filesystem,file_search,c++17 --- ```cpp diff --git a/snippets/cpp/file-handling/find-files.md b/snippets/cpp/file-handling/find-files.md index c0ff9331..bb09d2d7 100644 --- a/snippets/cpp/file-handling/find-files.md +++ b/snippets/cpp/file-handling/find-files.md @@ -2,7 +2,7 @@ Title: Find files Description: Find all the files in a directory using a predicate function. Author: majvax -Tags: filesystem,file_search,c++17 +Tags: cpp,filesystem,file_search --- ```cpp diff --git a/snippets/cpp/file-handling/list-directories.md b/snippets/cpp/file-handling/list-directories.md index 028bc095..36dad78b 100644 --- a/snippets/cpp/file-handling/list-directories.md +++ b/snippets/cpp/file-handling/list-directories.md @@ -2,7 +2,7 @@ Title: List Directories Description: Lists all the directories in a path. Author: majvax -Tags: filesystem,directories,c++17 +Tags: cpp,filesystem,directories,c++17 --- ```cpp diff --git a/snippets/cpp/string-manipulation/filter.md b/snippets/cpp/string-manipulation/filter.md index b09b50f5..4c90b7ce 100644 --- a/snippets/cpp/string-manipulation/filter.md +++ b/snippets/cpp/string-manipulation/filter.md @@ -2,7 +2,7 @@ title: Filter description: Filter a string with a predicate function author: majvax -tags: string,filtering,c++23 +tags: cpp,string,utility,filtering,c++23 --- ```cpp diff --git a/snippets/cpp/string-manipulation/palindrome.md b/snippets/cpp/string-manipulation/palindrome.md index b563e22c..90a5f487 100644 --- a/snippets/cpp/string-manipulation/palindrome.md +++ b/snippets/cpp/string-manipulation/palindrome.md @@ -2,7 +2,7 @@ title: Palindrome description: Check if a string is a palindrome or not. author: majvax -tags: string,c++23 +tags: cpp,string,utility,c++23 --- ```cpp diff --git a/snippets/cpp/string-manipulation/reverse-string.md b/snippets/cpp/string-manipulation/reverse-string.md index 5350da18..de209c88 100644 --- a/snippets/cpp/string-manipulation/reverse-string.md +++ b/snippets/cpp/string-manipulation/reverse-string.md @@ -2,7 +2,7 @@ title: Reverse String description: Reverses the characters in a string. author: Vaibhav-kesarwani -tags: array,reverse,c++20 +tags: cpp,array,reverse,utility --- ```cpp diff --git a/snippets/cpp/string-manipulation/split-string.md b/snippets/cpp/string-manipulation/split-string.md index 339fcecd..f903a2b2 100644 --- a/snippets/cpp/string-manipulation/split-string.md +++ b/snippets/cpp/string-manipulation/split-string.md @@ -2,7 +2,7 @@ title: Split String description: Splits a string by a delimiter author: saminjay -tags: string,split,c++23 +tags: cpp,string,split,utility --- ```cpp diff --git a/snippets/cpp/string-manipulation/transform.md b/snippets/cpp/string-manipulation/transform.md index 3d0ee01d..d167c0ef 100644 --- a/snippets/cpp/string-manipulation/transform.md +++ b/snippets/cpp/string-manipulation/transform.md @@ -2,7 +2,7 @@ title: Transform description: Transform a string with a function author: majvax -tags: string,transform,c++23 +tags: cpp,string,utility,transform,c++23 --- ```cpp From 9364abb82a12872bb4ad01d12bd1dc79dae0e7f7 Mon Sep 17 00:00:00 2001 From: majvax Date: Fri, 3 Jan 2025 10:39:25 +0100 Subject: [PATCH 09/15] Fixed type and all tags --- snippets/cpp/array-manipulation/filter-vector.md | 2 +- snippets/cpp/array-manipulation/transform-vector.md | 4 ++-- snippets/cpp/file-handling/find-files-recursive.md | 2 +- snippets/cpp/file-handling/find-files.md | 2 +- snippets/cpp/file-handling/list-directories.md | 2 +- snippets/cpp/string-manipulation/filter.md | 2 +- snippets/cpp/string-manipulation/palindrome.md | 2 +- snippets/cpp/string-manipulation/reverse-string.md | 2 +- snippets/cpp/string-manipulation/transform.md | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/snippets/cpp/array-manipulation/filter-vector.md b/snippets/cpp/array-manipulation/filter-vector.md index d6d05527..083f7899 100644 --- a/snippets/cpp/array-manipulation/filter-vector.md +++ b/snippets/cpp/array-manipulation/filter-vector.md @@ -2,7 +2,7 @@ Title: Filter Vector Description: Filters a vector using a predicate function. Author: majvax -Tags: cpp,array,filter,utility,c++23 +Tags: array,filter,c++23 --- ```cpp diff --git a/snippets/cpp/array-manipulation/transform-vector.md b/snippets/cpp/array-manipulation/transform-vector.md index 90575099..e01cbabe 100644 --- a/snippets/cpp/array-manipulation/transform-vector.md +++ b/snippets/cpp/array-manipulation/transform-vector.md @@ -2,7 +2,7 @@ Title: Transform Vector Description: Transforms a vector using a function. Author: majvax -Tags: cpp,array,transform,utility,,c++23 +Tags: array,transform,c++23 --- ```cpp @@ -22,5 +22,5 @@ auto transform(const std::vector& vec, F&& transformer) { // Usage: std::vector vec = {1, 2, 3, 4, 5}; std::vector transformed = transform(vec, [](int i){ return i * 2; }); -// transformed containes 2, 4, 6, 8, 10 +// transformed contains 2, 4, 6, 8, 10 ``` diff --git a/snippets/cpp/file-handling/find-files-recursive.md b/snippets/cpp/file-handling/find-files-recursive.md index 9c5fd6cb..0161faf5 100644 --- a/snippets/cpp/file-handling/find-files-recursive.md +++ b/snippets/cpp/file-handling/find-files-recursive.md @@ -2,7 +2,7 @@ Title: Find files Description: Find all the files in a directory and subdirectories using a predicate function. Author: majvax -Tags: cpp,filesystem,file_search,c++17 +Tags: filesystem,file_search,c++17 --- ```cpp diff --git a/snippets/cpp/file-handling/find-files.md b/snippets/cpp/file-handling/find-files.md index bb09d2d7..c0ff9331 100644 --- a/snippets/cpp/file-handling/find-files.md +++ b/snippets/cpp/file-handling/find-files.md @@ -2,7 +2,7 @@ Title: Find files Description: Find all the files in a directory using a predicate function. Author: majvax -Tags: cpp,filesystem,file_search +Tags: filesystem,file_search,c++17 --- ```cpp diff --git a/snippets/cpp/file-handling/list-directories.md b/snippets/cpp/file-handling/list-directories.md index 36dad78b..028bc095 100644 --- a/snippets/cpp/file-handling/list-directories.md +++ b/snippets/cpp/file-handling/list-directories.md @@ -2,7 +2,7 @@ Title: List Directories Description: Lists all the directories in a path. Author: majvax -Tags: cpp,filesystem,directories,c++17 +Tags: filesystem,directories,c++17 --- ```cpp diff --git a/snippets/cpp/string-manipulation/filter.md b/snippets/cpp/string-manipulation/filter.md index 4c90b7ce..b09b50f5 100644 --- a/snippets/cpp/string-manipulation/filter.md +++ b/snippets/cpp/string-manipulation/filter.md @@ -2,7 +2,7 @@ title: Filter description: Filter a string with a predicate function author: majvax -tags: cpp,string,utility,filtering,c++23 +tags: string,filtering,c++23 --- ```cpp diff --git a/snippets/cpp/string-manipulation/palindrome.md b/snippets/cpp/string-manipulation/palindrome.md index 90a5f487..b563e22c 100644 --- a/snippets/cpp/string-manipulation/palindrome.md +++ b/snippets/cpp/string-manipulation/palindrome.md @@ -2,7 +2,7 @@ title: Palindrome description: Check if a string is a palindrome or not. author: majvax -tags: cpp,string,utility,c++23 +tags: string,c++23 --- ```cpp diff --git a/snippets/cpp/string-manipulation/reverse-string.md b/snippets/cpp/string-manipulation/reverse-string.md index 615189b1..ed3c3995 100644 --- a/snippets/cpp/string-manipulation/reverse-string.md +++ b/snippets/cpp/string-manipulation/reverse-string.md @@ -2,7 +2,7 @@ title: Reverse String description: Reverses the characters in a string. author: Vaibhav-kesarwani -tags: array,reverse +tags: array,reverse,c++23 --- ```cpp diff --git a/snippets/cpp/string-manipulation/transform.md b/snippets/cpp/string-manipulation/transform.md index d167c0ef..3d0ee01d 100644 --- a/snippets/cpp/string-manipulation/transform.md +++ b/snippets/cpp/string-manipulation/transform.md @@ -2,7 +2,7 @@ title: Transform description: Transform a string with a function author: majvax -tags: cpp,string,utility,transform,c++23 +tags: string,transform,c++23 --- ```cpp From 3a9917664ac9fda4a7375a30539554ec7280c6db Mon Sep 17 00:00:00 2001 From: majvax Date: Fri, 3 Jan 2025 10:41:03 +0100 Subject: [PATCH 10/15] fixed gh check failing --- .../{find-files-recursive.md => find-files-recursively.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename snippets/cpp/file-handling/{find-files-recursive.md => find-files-recursively.md} (98%) diff --git a/snippets/cpp/file-handling/find-files-recursive.md b/snippets/cpp/file-handling/find-files-recursively.md similarity index 98% rename from snippets/cpp/file-handling/find-files-recursive.md rename to snippets/cpp/file-handling/find-files-recursively.md index 0161faf5..83d974e4 100644 --- a/snippets/cpp/file-handling/find-files-recursive.md +++ b/snippets/cpp/file-handling/find-files-recursively.md @@ -1,5 +1,5 @@ --- -Title: Find files +Title: Find files recursively Description: Find all the files in a directory and subdirectories using a predicate function. Author: majvax Tags: filesystem,file_search,c++17 From c0d6f0436ea7d8ce9954606ca4ac2f659a05e500 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 3 Jan 2025 09:40:23 +0000 Subject: [PATCH 11/15] Update consolidated snippets --- public/consolidated/cpp.json | 108 ++++++++++++++++++++++++++++++++++- 1 file changed, 107 insertions(+), 1 deletion(-) diff --git a/public/consolidated/cpp.json b/public/consolidated/cpp.json index e560e82d..088f9ef3 100644 --- a/public/consolidated/cpp.json +++ b/public/consolidated/cpp.json @@ -1,4 +1,33 @@ [ + { + "categoryName": "Array Manipulation", + "snippets": [ + { + "title": "Filter Vector", + "description": "Filters a vector using a predicate function.", + "author": "majvax", + "tags": [ + "array", + "filter", + "c++23" + ], + "contributors": [], + "code": "#include \n#include \n\ntemplate \nauto filter(const std::vector& vec, P&& predicate) {\n return vec\n | std::views::filter(std::forward

(predicate))\n | std::ranges::to>();\n}\n\n\n\n// Usage:\nstd::vector vec = {1, 2, 3, 4, 5};\nstd::vector filtered = filter(vec, [](int i){ return i % 2 == 0; });\n// filtered contains 2 and 4\n" + }, + { + "title": "Transform Vector", + "description": "Transforms a vector using a function.", + "author": "majvax", + "tags": [ + "array", + "transform", + "c++23" + ], + "contributors": [], + "code": "#include \n#include \n\ntemplate \nauto transform(const std::vector& vec, F&& transformer) {\n using U = std::invoke_result_t;\n return vec\n | std::views::transform(std::forward(transformer))\n | std::ranges::to>();\n}\n\n\n\n// Usage:\nstd::vector vec = {1, 2, 3, 4, 5};\nstd::vector transformed = transform(vec, [](int i){ return i * 2; });\n// transformed contains 2, 4, 6, 8, 10\n" + } + ] + }, { "categoryName": "Basics", "snippets": [ @@ -32,6 +61,47 @@ } ] }, + { + "categoryName": "File Handling", + "snippets": [ + { + "title": "Find files recursively", + "description": "Find all the files in a directory and subdirectories using a predicate function.", + "author": "majvax", + "tags": [ + "filesystem", + "file_search", + "c++17" + ], + "contributors": [], + "code": "#include \n#include \n#include \n\ntemplate \nstd::vector find_files_recursive(const std::string& path, P&& predicate) {\n std::vector files;\n std::error_code ec;\n\n if (!std::filesystem::exists(path, ec) || ec)\n return files;\n if (!std::filesystem::is_directory(path, ec) || ec)\n return files;\n\n auto it = std::filesystem::recursive_directory_iterator(path, ec);\n if (ec)\n return files;\n\n for (const auto& entry : it)\n if (!std::filesystem::is_directory(entry) && predicate(entry.path()))\n files.push_back(entry.path());\n\n return files;\n}\n\n\n\n// Usage:\n\n// Find all files with size greater than 10MB\nauto files = find_files_recursive(\"Path\", [](const auto& p) {\n return std::filesystem::file_size(p) > 10 * 1024 * 1024;\n});\n\n// Find all files with \".pdf\" as extension\nauto files = find_files_recursive(\"Path\", [](const auto& p) {\n return p.extension() == \".pdf\";\n});\n\n// Find all files writed after The New Year\n#include \n// need std=c++20\nauto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys(\n std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}}\n);\nauto files = find_files_recursive(\"Path\", [jan_1_2025](const auto& p) {\n return std::filesystem::last_write_time(p) > jan_1_2025;\n}),\n" + }, + { + "title": "Find files", + "description": "Find all the files in a directory using a predicate function.", + "author": "majvax", + "tags": [ + "filesystem", + "file_search", + "c++17" + ], + "contributors": [], + "code": "#include \n#include \n#include \n\ntemplate \nstd::vector find_files(const std::string& path, P&& predicate) {\n std::vector files;\n std::error_code ec;\n\n if (!std::filesystem::exists(path, ec) || ec)\n return files;\n if (!std::filesystem::is_directory(path, ec) || ec)\n return files;\n\n auto it = std::filesystem::directory_iterator(path, ec);\n if (ec)\n return files;\n\n for (const auto& entry : it)\n if (!std::filesystem::is_directory(entry) && predicate(entry.path()))\n files.push_back(entry.path());\n\n return files;\n}\n\n\n\n// Usage:\n\n// Find all files with size greater than 10MB\nauto files = find_files(\"Path\", [](const auto& p) {\n return std::filesystem::file_size(p) > 10 * 1024 * 1024;\n});\n\n// Find all files with \".pdf\" as extension\nauto files = find_files(\"Path\", [](const auto& p) {\n return p.extension() == \".pdf\";\n});\n\n// Find all files writed after The New Year\n#include \n// need std=c++20\nauto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys(\n std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}}\n);\nauto files = find_files(\"Path\", [jan_1_2025](const auto& p) {\n return std::filesystem::last_write_time(p) > jan_1_2025;\n}),\n" + }, + { + "title": "List Directories", + "description": "Lists all the directories in a path.", + "author": "majvax", + "tags": [ + "filesystem", + "directories", + "c++17" + ], + "contributors": [], + "code": "#include \n#include \n#include \n\nstd::vector list_directories(const std::string& path) {\n std::vector files;\n std::error_code ec;\n\n if (!std::filesystem::exists(path, ec) || ec)\n return files;\n if (!std::filesystem::is_directory(path, ec) || ec)\n return files;\n\n auto it = std::filesystem::directory_iterator(path, ec);\n if (ec)\n return files;\n\n for (const auto& entry : it)\n if (std::filesystem::is_directory(entry))\n files.push_back(entry.path());\n\n return files;\n}\n\n\n\n// Usage:\nauto directories = list_directories(\"Path\");\n" + } + ] + }, { "categoryName": "Math And Numbers", "snippets": [ @@ -51,13 +121,37 @@ { "categoryName": "String Manipulation", "snippets": [ + { + "title": "Filter", + "description": "Filter a string with a predicate function", + "author": "majvax", + "tags": [ + "string", + "filtering", + "c++23" + ], + "contributors": [], + "code": "#include \n#include \n\ntemplate \nstd::string filter(const std::string& str, P&& predicate) {\n return str\n | std::ranges::views::filter(std::forward

(predicate))\n | std::ranges::to();\n}\n\n\n\n// Usage:\nstd::string str = \"Hello, World!\";\nstd::string filtered = filter(str, [](char c){ return std::isalpha(c); });\nstd::cout << filtered << std::endl; // HelloWorld\n" + }, + { + "title": "Palindrome", + "description": "Check if a string is a palindrome or not.", + "author": "majvax", + "tags": [ + "string", + "c++23" + ], + "contributors": [], + "code": "#include \n#include \n#include \n\nbool is_palindrome(const std::string& str) {\n std::string sanitized_string = str\n | std::ranges::views::filter([](char c){ return std::isalnum(c); })\n | std::ranges::views::transform([](char c){ return std::tolower(c); })\n | std::ranges::to();\n \n return std::ranges::equal(sanitized_string, sanitized_string | std::views::reverse);\n}\n\n\n\n// Usage:\nbool pal = is_palindrome(\"A man, a plan, a canal, Panama\"); // true\n" + }, { "title": "Reverse String", "description": "Reverses the characters in a string.", "author": "Vaibhav-kesarwani", "tags": [ "array", - "reverse" + "reverse", + "c++23" ], "contributors": [], "code": "#include \n#include \n\nstd::string reverseString(const std::string& input) {\n std::string reversed = input;\n std::reverse(reversed.begin(), reversed.end());\n return reversed;\n}\n\nreverseString(\"quicksnip\"); // Returns: \"pinskciuq\"\n" @@ -72,6 +166,18 @@ ], "contributors": [], "code": "#include \n#include \n\nstd::vector split_string(std::string str, std::string delim) {\n std::vector splits;\n int i = 0, j;\n int inc = delim.length();\n while (j != std::string::npos) {\n j = str.find(delim, i);\n splits.push_back(str.substr(i, j - i));\n i = j + inc;\n }\n return splits;\n}\n\n// Usage:\nsplit_string(\"quick_-snip\", \"_-\"); // Returns: std::vector { \"quick\", \"snip\" }\n" + }, + { + "title": "Transform", + "description": "Transform a string with a function", + "author": "majvax", + "tags": [ + "string", + "transform", + "c++23" + ], + "contributors": [], + "code": "#include \n#include \n\ntemplate \nstd::string transform(const std::string& str, F&& transformer) {\n return str\n | std::ranges::views::transform(std::forward(transformer))\n | std::ranges::to();\n}\n\n\n\n// Usage:\nstd::string str = \"Hello, World!\";\nstd::string transformed = transform(str, [](char c){ return std::toupper(c); });\nstd::cout << transformed << std::endl; // HELLO, WORLD!\n" } ] } From fce087f8422febc4af16e33d39bb014e43b8b29d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 3 Jan 2025 20:31:52 +0000 Subject: [PATCH 12/15] Update consolidated snippets --- public/consolidated/cpp.json | 17 +++++++++++++++++ public/consolidated/javascript.json | 18 ++++++------------ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/public/consolidated/cpp.json b/public/consolidated/cpp.json index e560e82d..6427f04f 100644 --- a/public/consolidated/cpp.json +++ b/public/consolidated/cpp.json @@ -32,6 +32,23 @@ } ] }, + { + "categoryName": "Debuging", + "snippets": [ + { + "title": "Vector Print", + "description": "Overloads the << operator to print the contents of a vector just like in python.", + "author": "Mohamed-faaris", + "tags": [ + "printing", + "debuging", + "vector" + ], + "contributors": [], + "code": "#include \n#include \n\ntemplate \nstd::ostream& operator<<(std::ostream& os, const std::vector& vec) {\n os << \"[\"; \n for (size_t i = 0; i < vec.size(); ++i) {\n os << vec[i]; // Print each vector element\n if (i != vec.size() - 1) {\n os << \", \"; // Add separator\n }\n }\n os << \"]\"; \n return os; // Return the stream\n}\n\n// Usage:\nstd::vector numbers = {1, 2, 3, 4, 5};\nstd::cout << numbers << std::endl; // Outputs: [1, 2, 3, 4, 5]\n\n" + } + ] + }, { "categoryName": "Math And Numbers", "snippets": [ diff --git a/public/consolidated/javascript.json b/public/consolidated/javascript.json index 99588330..c7b78ff8 100644 --- a/public/consolidated/javascript.json +++ b/public/consolidated/javascript.json @@ -85,10 +85,8 @@ "description": "Converts RGB color values to hexadecimal color code.", "author": "jjcantu", "tags": [ - "javascript", "color", - "conversion", - "utility" + "conversion" ], "contributors": [], "code": "function rgbToHex(r, g, b) {\n const toHex = (n) => {\n const hex = n.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n \n return '#' + toHex(r) + toHex(g) + toHex(b);\n}\n\n// Usage:\nconsole.log(rgbToHex(255, 128, 0)); // Output: \"#ff8000\"\nconsole.log(rgbToHex(0, 255, 0)); // Output: \"#00ff00\"\n" @@ -407,10 +405,8 @@ "description": "Converts bytes into human-readable file size format.", "author": "jjcantu", "tags": [ - "javascript", "format", - "size", - "utility" + "size" ], "contributors": [], "code": "function formatFileSize(bytes) {\n if (bytes === 0) return '0 Bytes';\n \n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n \n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\n// Usage:\nconsole.log(formatFileSize(1234)); // Output: \"1.21 KB\"\nconsole.log(formatFileSize(1234567)); // Output: \"1.18 MB\"\n" @@ -506,13 +502,11 @@ "description": "Creates a deep copy of an object or array without reference.", "author": "jjcantu", "tags": [ - "javascript", "object", - "clone", - "utility" + "clone" ], "contributors": [], - "code": "function deepClone(obj) {\n if (obj === null || typeof obj !== 'object') return obj;\n \n const clone = Array.isArray(obj) ? [] : {};\n \n for (let key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n clone[key] = deepClone(obj[key]);\n }\n }\n \n return clone;\n}\n\n// Usage:\nconst original = { a: 1, b: { c: 2 }, d: [1, 2, 3] };\nconst cloned = deepClone(original);\nconsole.log(cloned); // Output: { a: 1, b: { c: 2 }, d: [1, 2, 3] }\n" + "code": "function deepClone(obj) {\n if (obj === null || typeof obj !== 'object') return obj;\n \n const clone = Array.isArray(obj) ? [] : {};\n \n for (let key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n clone[key] = deepClone(obj[key]);\n }\n }\n \n return clone;\n}\n\n// Usage:\nconst original = { a: 1, b: { c: 2 }, d: [1, 2, 3] };\nconst cloned = deepClone(original);\nconsole.log(cloned); // Output: 'original' but cloned\n" }, { "title": "Filter Object", @@ -758,9 +752,9 @@ "description": "Generates a UUID (v4) string.", "author": "jjcantu", "tags": [ - "javascript", "uuid", - "utility" + "generate", + "string" ], "contributors": [], "code": "function generateUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\n// Usage:\nconsole.log(generateUUID()); // Output: \"a1b2c3d4-e5f6-4g7h-8i9j-k0l1m2n3o4p5\"\n" From a959e9503bef55728a97282c68aefb0fa0f3681b Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 3 Jan 2025 20:32:02 +0000 Subject: [PATCH 13/15] Update consolidated snippets --- public/consolidated/cpp.json | 17 +++++++++++++++++ public/consolidated/javascript.json | 18 ++++++------------ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/public/consolidated/cpp.json b/public/consolidated/cpp.json index 088f9ef3..ae19d751 100644 --- a/public/consolidated/cpp.json +++ b/public/consolidated/cpp.json @@ -61,6 +61,23 @@ } ] }, + { + "categoryName": "Debuging", + "snippets": [ + { + "title": "Vector Print", + "description": "Overloads the << operator to print the contents of a vector just like in python.", + "author": "Mohamed-faaris", + "tags": [ + "printing", + "debuging", + "vector" + ], + "contributors": [], + "code": "#include \n#include \n\ntemplate \nstd::ostream& operator<<(std::ostream& os, const std::vector& vec) {\n os << \"[\"; \n for (size_t i = 0; i < vec.size(); ++i) {\n os << vec[i]; // Print each vector element\n if (i != vec.size() - 1) {\n os << \", \"; // Add separator\n }\n }\n os << \"]\"; \n return os; // Return the stream\n}\n\n// Usage:\nstd::vector numbers = {1, 2, 3, 4, 5};\nstd::cout << numbers << std::endl; // Outputs: [1, 2, 3, 4, 5]\n\n" + } + ] + }, { "categoryName": "File Handling", "snippets": [ diff --git a/public/consolidated/javascript.json b/public/consolidated/javascript.json index 99588330..c7b78ff8 100644 --- a/public/consolidated/javascript.json +++ b/public/consolidated/javascript.json @@ -85,10 +85,8 @@ "description": "Converts RGB color values to hexadecimal color code.", "author": "jjcantu", "tags": [ - "javascript", "color", - "conversion", - "utility" + "conversion" ], "contributors": [], "code": "function rgbToHex(r, g, b) {\n const toHex = (n) => {\n const hex = n.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n \n return '#' + toHex(r) + toHex(g) + toHex(b);\n}\n\n// Usage:\nconsole.log(rgbToHex(255, 128, 0)); // Output: \"#ff8000\"\nconsole.log(rgbToHex(0, 255, 0)); // Output: \"#00ff00\"\n" @@ -407,10 +405,8 @@ "description": "Converts bytes into human-readable file size format.", "author": "jjcantu", "tags": [ - "javascript", "format", - "size", - "utility" + "size" ], "contributors": [], "code": "function formatFileSize(bytes) {\n if (bytes === 0) return '0 Bytes';\n \n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n \n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\n// Usage:\nconsole.log(formatFileSize(1234)); // Output: \"1.21 KB\"\nconsole.log(formatFileSize(1234567)); // Output: \"1.18 MB\"\n" @@ -506,13 +502,11 @@ "description": "Creates a deep copy of an object or array without reference.", "author": "jjcantu", "tags": [ - "javascript", "object", - "clone", - "utility" + "clone" ], "contributors": [], - "code": "function deepClone(obj) {\n if (obj === null || typeof obj !== 'object') return obj;\n \n const clone = Array.isArray(obj) ? [] : {};\n \n for (let key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n clone[key] = deepClone(obj[key]);\n }\n }\n \n return clone;\n}\n\n// Usage:\nconst original = { a: 1, b: { c: 2 }, d: [1, 2, 3] };\nconst cloned = deepClone(original);\nconsole.log(cloned); // Output: { a: 1, b: { c: 2 }, d: [1, 2, 3] }\n" + "code": "function deepClone(obj) {\n if (obj === null || typeof obj !== 'object') return obj;\n \n const clone = Array.isArray(obj) ? [] : {};\n \n for (let key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n clone[key] = deepClone(obj[key]);\n }\n }\n \n return clone;\n}\n\n// Usage:\nconst original = { a: 1, b: { c: 2 }, d: [1, 2, 3] };\nconst cloned = deepClone(original);\nconsole.log(cloned); // Output: 'original' but cloned\n" }, { "title": "Filter Object", @@ -758,9 +752,9 @@ "description": "Generates a UUID (v4) string.", "author": "jjcantu", "tags": [ - "javascript", "uuid", - "utility" + "generate", + "string" ], "contributors": [], "code": "function generateUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\n// Usage:\nconsole.log(generateUUID()); // Output: \"a1b2c3d4-e5f6-4g7h-8i9j-k0l1m2n3o4p5\"\n" From 112302e456d8b7d871d619d6b6ca5dd124675b0c Mon Sep 17 00:00:00 2001 From: majvax Date: Mon, 6 Jan 2025 22:11:55 +0100 Subject: [PATCH 14/15] Revert "Merge remote-tracking branch 'origin/main' into snippets-c++" This reverts commit 4708bd931837bef88af62d7d7414ed304a4317ab, reversing changes made to a959e9503bef55728a97282c68aefb0fa0f3681b. --- public/consolidated/cpp.json | 41 ++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/public/consolidated/cpp.json b/public/consolidated/cpp.json index f293d347..ae19d751 100644 --- a/public/consolidated/cpp.json +++ b/public/consolidated/cpp.json @@ -78,6 +78,47 @@ } ] }, + { + "categoryName": "File Handling", + "snippets": [ + { + "title": "Find files recursively", + "description": "Find all the files in a directory and subdirectories using a predicate function.", + "author": "majvax", + "tags": [ + "filesystem", + "file_search", + "c++17" + ], + "contributors": [], + "code": "#include \n#include \n#include \n\ntemplate \nstd::vector find_files_recursive(const std::string& path, P&& predicate) {\n std::vector files;\n std::error_code ec;\n\n if (!std::filesystem::exists(path, ec) || ec)\n return files;\n if (!std::filesystem::is_directory(path, ec) || ec)\n return files;\n\n auto it = std::filesystem::recursive_directory_iterator(path, ec);\n if (ec)\n return files;\n\n for (const auto& entry : it)\n if (!std::filesystem::is_directory(entry) && predicate(entry.path()))\n files.push_back(entry.path());\n\n return files;\n}\n\n\n\n// Usage:\n\n// Find all files with size greater than 10MB\nauto files = find_files_recursive(\"Path\", [](const auto& p) {\n return std::filesystem::file_size(p) > 10 * 1024 * 1024;\n});\n\n// Find all files with \".pdf\" as extension\nauto files = find_files_recursive(\"Path\", [](const auto& p) {\n return p.extension() == \".pdf\";\n});\n\n// Find all files writed after The New Year\n#include \n// need std=c++20\nauto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys(\n std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}}\n);\nauto files = find_files_recursive(\"Path\", [jan_1_2025](const auto& p) {\n return std::filesystem::last_write_time(p) > jan_1_2025;\n}),\n" + }, + { + "title": "Find files", + "description": "Find all the files in a directory using a predicate function.", + "author": "majvax", + "tags": [ + "filesystem", + "file_search", + "c++17" + ], + "contributors": [], + "code": "#include \n#include \n#include \n\ntemplate \nstd::vector find_files(const std::string& path, P&& predicate) {\n std::vector files;\n std::error_code ec;\n\n if (!std::filesystem::exists(path, ec) || ec)\n return files;\n if (!std::filesystem::is_directory(path, ec) || ec)\n return files;\n\n auto it = std::filesystem::directory_iterator(path, ec);\n if (ec)\n return files;\n\n for (const auto& entry : it)\n if (!std::filesystem::is_directory(entry) && predicate(entry.path()))\n files.push_back(entry.path());\n\n return files;\n}\n\n\n\n// Usage:\n\n// Find all files with size greater than 10MB\nauto files = find_files(\"Path\", [](const auto& p) {\n return std::filesystem::file_size(p) > 10 * 1024 * 1024;\n});\n\n// Find all files with \".pdf\" as extension\nauto files = find_files(\"Path\", [](const auto& p) {\n return p.extension() == \".pdf\";\n});\n\n// Find all files writed after The New Year\n#include \n// need std=c++20\nauto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys(\n std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}}\n);\nauto files = find_files(\"Path\", [jan_1_2025](const auto& p) {\n return std::filesystem::last_write_time(p) > jan_1_2025;\n}),\n" + }, + { + "title": "List Directories", + "description": "Lists all the directories in a path.", + "author": "majvax", + "tags": [ + "filesystem", + "directories", + "c++17" + ], + "contributors": [], + "code": "#include \n#include \n#include \n\nstd::vector list_directories(const std::string& path) {\n std::vector files;\n std::error_code ec;\n\n if (!std::filesystem::exists(path, ec) || ec)\n return files;\n if (!std::filesystem::is_directory(path, ec) || ec)\n return files;\n\n auto it = std::filesystem::directory_iterator(path, ec);\n if (ec)\n return files;\n\n for (const auto& entry : it)\n if (std::filesystem::is_directory(entry))\n files.push_back(entry.path());\n\n return files;\n}\n\n\n\n// Usage:\nauto directories = list_directories(\"Path\");\n" + } + ] + }, { "categoryName": "Math And Numbers", "snippets": [ From 812842f169fb230a52cdd5ebec0b1536d80858f0 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 6 Jan 2025 21:54:44 +0000 Subject: [PATCH 15/15] Update consolidated snippets --- public/consolidated/cpp.json | 70 +++++++++++++++++++++++++++++ public/consolidated/javascript.json | 2 +- 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/public/consolidated/cpp.json b/public/consolidated/cpp.json index fd5e1b09..a2ac2902 100644 --- a/public/consolidated/cpp.json +++ b/public/consolidated/cpp.json @@ -1,4 +1,33 @@ [ + { + "name": "Array Manipulation", + "snippets": [ + { + "title": "Filter Vector", + "description": "Filters a vector using a predicate function.", + "author": "majvax", + "tags": [ + "array", + "filter", + "c++23" + ], + "contributors": [], + "code": "#include \n#include \n\ntemplate \nauto filter(const std::vector& vec, P&& predicate) {\n return vec\n | std::views::filter(std::forward

(predicate))\n | std::ranges::to>();\n}\n\n\n\n// Usage:\nstd::vector vec = {1, 2, 3, 4, 5};\nstd::vector filtered = filter(vec, [](int i){ return i % 2 == 0; });\n// filtered contains 2 and 4\n" + }, + { + "title": "Transform Vector", + "description": "Transforms a vector using a function.", + "author": "majvax", + "tags": [ + "array", + "transform", + "c++23" + ], + "contributors": [], + "code": "#include \n#include \n\ntemplate \nauto transform(const std::vector& vec, F&& transformer) {\n using U = std::invoke_result_t;\n return vec\n | std::views::transform(std::forward(transformer))\n | std::ranges::to>();\n}\n\n\n\n// Usage:\nstd::vector vec = {1, 2, 3, 4, 5};\nstd::vector transformed = transform(vec, [](int i){ return i * 2; });\n// transformed contains 2, 4, 6, 8, 10\n" + } + ] + }, { "name": "Basics", "snippets": [ @@ -66,6 +95,47 @@ } ] }, + { + "name": "File Handling", + "snippets": [ + { + "title": "Find files recursively", + "description": "Find all the files in a directory and subdirectories using a predicate function.", + "author": "majvax", + "tags": [ + "filesystem", + "file_search", + "c++17" + ], + "contributors": [], + "code": "#include \n#include \n#include \n\ntemplate \nstd::vector find_files_recursive(const std::string& path, P&& predicate) {\n std::vector files;\n std::error_code ec;\n\n if (!std::filesystem::exists(path, ec) || ec)\n return files;\n if (!std::filesystem::is_directory(path, ec) || ec)\n return files;\n\n auto it = std::filesystem::recursive_directory_iterator(path, ec);\n if (ec)\n return files;\n\n for (const auto& entry : it)\n if (!std::filesystem::is_directory(entry) && predicate(entry.path()))\n files.push_back(entry.path());\n\n return files;\n}\n\n\n\n// Usage:\n\n// Find all files with size greater than 10MB\nauto files = find_files_recursive(\"Path\", [](const auto& p) {\n return std::filesystem::file_size(p) > 10 * 1024 * 1024;\n});\n\n// Find all files with \".pdf\" as extension\nauto files = find_files_recursive(\"Path\", [](const auto& p) {\n return p.extension() == \".pdf\";\n});\n\n// Find all files writed after The New Year\n#include \n// need std=c++20\nauto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys(\n std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}}\n);\nauto files = find_files_recursive(\"Path\", [jan_1_2025](const auto& p) {\n return std::filesystem::last_write_time(p) > jan_1_2025;\n}),\n" + }, + { + "title": "Find files", + "description": "Find all the files in a directory using a predicate function.", + "author": "majvax", + "tags": [ + "filesystem", + "file_search", + "c++17" + ], + "contributors": [], + "code": "#include \n#include \n#include \n\ntemplate \nstd::vector find_files(const std::string& path, P&& predicate) {\n std::vector files;\n std::error_code ec;\n\n if (!std::filesystem::exists(path, ec) || ec)\n return files;\n if (!std::filesystem::is_directory(path, ec) || ec)\n return files;\n\n auto it = std::filesystem::directory_iterator(path, ec);\n if (ec)\n return files;\n\n for (const auto& entry : it)\n if (!std::filesystem::is_directory(entry) && predicate(entry.path()))\n files.push_back(entry.path());\n\n return files;\n}\n\n\n\n// Usage:\n\n// Find all files with size greater than 10MB\nauto files = find_files(\"Path\", [](const auto& p) {\n return std::filesystem::file_size(p) > 10 * 1024 * 1024;\n});\n\n// Find all files with \".pdf\" as extension\nauto files = find_files(\"Path\", [](const auto& p) {\n return p.extension() == \".pdf\";\n});\n\n// Find all files writed after The New Year\n#include \n// need std=c++20\nauto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys(\n std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}}\n);\nauto files = find_files(\"Path\", [jan_1_2025](const auto& p) {\n return std::filesystem::last_write_time(p) > jan_1_2025;\n}),\n" + }, + { + "title": "List Directories", + "description": "Lists all the directories in a path.", + "author": "majvax", + "tags": [ + "filesystem", + "directories", + "c++17" + ], + "contributors": [], + "code": "#include \n#include \n#include \n\nstd::vector list_directories(const std::string& path) {\n std::vector files;\n std::error_code ec;\n\n if (!std::filesystem::exists(path, ec) || ec)\n return files;\n if (!std::filesystem::is_directory(path, ec) || ec)\n return files;\n\n auto it = std::filesystem::directory_iterator(path, ec);\n if (ec)\n return files;\n\n for (const auto& entry : it)\n if (std::filesystem::is_directory(entry))\n files.push_back(entry.path());\n\n return files;\n}\n\n\n\n// Usage:\nauto directories = list_directories(\"Path\");\n" + } + ] + }, { "name": "Math And Numbers", "snippets": [ diff --git a/public/consolidated/javascript.json b/public/consolidated/javascript.json index 7087e0ec..fbaf9ffd 100644 --- a/public/consolidated/javascript.json +++ b/public/consolidated/javascript.json @@ -410,7 +410,7 @@ "algebra" ], "contributors": [], - "code": "function combinations(n, r) {\n function factorial(x) {\n if (x === 0 || x === 1) return 1;\n let result = 1;\n for (let i = 2; i <= x; i++) {\n result *= i;\n }\n return result;\n }\n return factorial(n) / (factorial(r) * factorial(n - r));\n}\n\n// Usage:\ncombinations(12,24); // Returns: 7.720248753351544e-16\ncombinations(1,22); // Returns: 8.896791392450574e-22\n" + "code": "function combinations(n, r) {\n if (n < 0 || r < 0 || n < r) {\n throw new Error('Invalid input: n and r must be non-negative and n must be greater than or equal to r.');\n }\n\n function factorial(x) {\n if (x === 0 || x === 1) return 1;\n let result = 1;\n for (let i = 2; i <= x; i++) {\n result *= i;\n }\n return result;\n }\n\n const numerator = factorial(n);\n const denominator = factorial(r) * factorial(n - r);\n return numerator / denominator;\n}\n\n// Usage:\ncombinations(24,22); // Returns: 276\ncombinations(5,3); // Returns: 10\n" }, { "title": "Cross Product",