From 21b57e6a79f96ced29f711a6fe5c660a0077207b Mon Sep 17 00:00:00 2001
From: Shiva Bhusal
Date: Wed, 26 Nov 2025 20:50:00 +0545
Subject: [PATCH 1/5] docs: Update README to enhance project description and
add features section
---
README.md | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 82466da..7c06ce8 100644
--- a/README.md
+++ b/README.md
@@ -2,10 +2,22 @@
-- big o time/space complexities
-- code templates
-- data structure implementations
-- sorting algorithms
+## LeetCode Cheatsheet
+A comprehensive cheatsheet for LeetCode enthusiasts, featuring essential algorithms, data structures, and problem-solving techniques.
+
+## Features
+- Big O time and space complexities for common algorithms
+- Code templates for frequently used algorithms
+- Implementations of various data structures
+- Sorting algorithms with explanations
+
+## Building the Project
+To build the LeetCode Cheatsheet project, follow these steps:
+
+```bash
+$ npm run build
+```
## License
+
This project is released under the GNU GPL License - see the [LICENSE](LICENSE) file for details
From db8612bf49b8a27d3530f776d80f035d9efd6e9c Mon Sep 17 00:00:00 2001
From: Shiva Bhusal
Date: Wed, 26 Nov 2025 20:51:29 +0545
Subject: [PATCH 2/5] chore: update vite version to ^7.2.4
---
package-lock.json | 956 ++++++++++++++++++++++++++++++++--------------
package.json | 2 +-
2 files changed, 666 insertions(+), 292 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 935e229..ff01f61 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "leetcode-cheatsheet",
- "version": "0.0.0",
+ "version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "leetcode-cheatsheet",
- "version": "0.0.0",
+ "version": "1.0.0",
"dependencies": {
"highlight.js": "^11.9.0",
"react": "^18.2.0",
@@ -25,7 +25,7 @@
"eslint-plugin-react-refresh": "^0.4.5",
"sass": "^1.70.0",
"typescript": "^5.3.3",
- "vite": "^5.0.8"
+ "vite": "^7.2.4"
}
},
"node_modules/@aashutoshrathi/word-wrap": {
@@ -38,371 +38,445 @@
}
},
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
- "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
"cpu": [
"ppc64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"aix"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz",
- "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
"cpu": [
"arm"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz",
- "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz",
- "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz",
- "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz",
- "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz",
- "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz",
- "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz",
- "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
"cpu": [
"arm"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz",
- "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz",
- "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
"cpu": [
"ia32"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz",
- "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
"cpu": [
"loong64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz",
- "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
"cpu": [
"mips64el"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz",
- "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
"cpu": [
"ppc64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz",
- "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
"cpu": [
"riscv64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz",
- "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
"cpu": [
"s390x"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz",
- "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz",
- "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"netbsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz",
- "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"openbsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz",
- "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"sunos"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz",
- "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz",
- "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
"cpu": [
"ia32"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz",
- "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@eslint-community/eslint-utils": {
@@ -529,184 +603,331 @@
"node": ">= 8"
}
},
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz",
+ "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz",
- "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz",
+ "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==",
"cpu": [
"arm"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz",
- "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz",
+ "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz",
- "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz",
+ "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz",
- "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz",
+ "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz",
+ "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz",
+ "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz",
- "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz",
+ "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz",
+ "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==",
"cpu": [
"arm"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz",
- "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz",
+ "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz",
- "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz",
+ "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz",
+ "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz",
+ "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz",
- "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz",
+ "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz",
+ "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==",
"cpu": [
"riscv64"
],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz",
+ "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz",
- "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz",
+ "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz",
- "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz",
+ "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz",
+ "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz",
- "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz",
+ "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz",
- "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz",
+ "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==",
"cpu": [
"ia32"
],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz",
+ "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz",
- "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz",
+ "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@swc/core": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.2.tgz",
- "integrity": "sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg==",
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.3.tgz",
+ "integrity": "sha512-Qd8eBPkUFL4eAONgGjycZXj1jFCBW8Fd+xF0PzdTlBCWQIV1xnUT7B93wUANtW3KGjl3TRcOyxwSx/u/jyKw/Q==",
"dev": true,
"hasInstallScript": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@swc/counter": "^0.1.2",
- "@swc/types": "^0.1.5"
+ "@swc/counter": "^0.1.3",
+ "@swc/types": "^0.1.25"
},
"engines": {
"node": ">=10"
@@ -716,19 +937,19 @@
"url": "https://opencollective.com/swc"
},
"optionalDependencies": {
- "@swc/core-darwin-arm64": "1.4.2",
- "@swc/core-darwin-x64": "1.4.2",
- "@swc/core-linux-arm-gnueabihf": "1.4.2",
- "@swc/core-linux-arm64-gnu": "1.4.2",
- "@swc/core-linux-arm64-musl": "1.4.2",
- "@swc/core-linux-x64-gnu": "1.4.2",
- "@swc/core-linux-x64-musl": "1.4.2",
- "@swc/core-win32-arm64-msvc": "1.4.2",
- "@swc/core-win32-ia32-msvc": "1.4.2",
- "@swc/core-win32-x64-msvc": "1.4.2"
+ "@swc/core-darwin-arm64": "1.15.3",
+ "@swc/core-darwin-x64": "1.15.3",
+ "@swc/core-linux-arm-gnueabihf": "1.15.3",
+ "@swc/core-linux-arm64-gnu": "1.15.3",
+ "@swc/core-linux-arm64-musl": "1.15.3",
+ "@swc/core-linux-x64-gnu": "1.15.3",
+ "@swc/core-linux-x64-musl": "1.15.3",
+ "@swc/core-win32-arm64-msvc": "1.15.3",
+ "@swc/core-win32-ia32-msvc": "1.15.3",
+ "@swc/core-win32-x64-msvc": "1.15.3"
},
"peerDependencies": {
- "@swc/helpers": "^0.5.0"
+ "@swc/helpers": ">=0.5.17"
},
"peerDependenciesMeta": {
"@swc/helpers": {
@@ -737,13 +958,14 @@
}
},
"node_modules/@swc/core-darwin-arm64": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.2.tgz",
- "integrity": "sha512-1uSdAn1MRK5C1m/TvLZ2RDvr0zLvochgrZ2xL+lRzugLlCTlSA+Q4TWtrZaOz+vnnFVliCpw7c7qu0JouhgQIw==",
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.3.tgz",
+ "integrity": "sha512-AXfeQn0CvcQ4cndlIshETx6jrAM45oeUrK8YeEY6oUZU/qzz0Id0CyvlEywxkWVC81Ajpd8TQQ1fW5yx6zQWkQ==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"darwin"
@@ -753,13 +975,14 @@
}
},
"node_modules/@swc/core-darwin-x64": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.2.tgz",
- "integrity": "sha512-TYD28+dCQKeuxxcy7gLJUCFLqrwDZnHtC2z7cdeGfZpbI2mbfppfTf2wUPzqZk3gEC96zHd4Yr37V3Tvzar+lQ==",
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.3.tgz",
+ "integrity": "sha512-p68OeCz1ui+MZYG4wmfJGvcsAcFYb6Sl25H9TxWl+GkBgmNimIiRdnypK9nBGlqMZAcxngNPtnG3kEMNnvoJ2A==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"darwin"
@@ -769,13 +992,14 @@
}
},
"node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.2.tgz",
- "integrity": "sha512-Eyqipf7ZPGj0vplKHo8JUOoU1un2sg5PjJMpEesX0k+6HKE2T8pdyeyXODN0YTFqzndSa/J43EEPXm+rHAsLFQ==",
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.3.tgz",
+ "integrity": "sha512-Nuj5iF4JteFgwrai97mUX+xUOl+rQRHqTvnvHMATL/l9xE6/TJfPBpd3hk/PVpClMXG3Uvk1MxUFOEzM1JrMYg==",
"cpu": [
"arm"
],
"dev": true,
+ "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
@@ -785,13 +1009,14 @@
}
},
"node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.2.tgz",
- "integrity": "sha512-wZn02DH8VYPv3FC0ub4my52Rttsus/rFw+UUfzdb3tHMHXB66LqN+rR0ssIOZrH6K+VLN6qpTw9VizjyoH0BxA==",
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.3.tgz",
+ "integrity": "sha512-2Nc/s8jE6mW2EjXWxO/lyQuLKShcmTrym2LRf5Ayp3ICEMX6HwFqB1EzDhwoMa2DcUgmnZIalesq2lG3krrUNw==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
@@ -801,13 +1026,14 @@
}
},
"node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.2.tgz",
- "integrity": "sha512-3G0D5z9hUj9bXNcwmA1eGiFTwe5rWkuL3DsoviTj73TKLpk7u64ND0XjEfO0huVv4vVu9H1jodrKb7nvln/dlw==",
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.3.tgz",
+ "integrity": "sha512-j4SJniZ/qaZ5g8op+p1G9K1z22s/EYGg1UXIb3+Cg4nsxEpF5uSIGEE4mHUfA70L0BR9wKT2QF/zv3vkhfpX4g==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
@@ -817,13 +1043,14 @@
}
},
"node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.2.tgz",
- "integrity": "sha512-LFxn9U8cjmYHw3jrdPNqPAkBGglKE3tCZ8rA7hYyp0BFxuo7L2ZcEnPm4RFpmSCCsExFH+LEJWuMGgWERoktvg==",
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.3.tgz",
+ "integrity": "sha512-aKttAZnz8YB1VJwPQZtyU8Uk0BfMP63iDMkvjhJzRZVgySmqt/apWSdnoIcZlUoGheBrcqbMC17GGUmur7OT5A==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
@@ -833,13 +1060,14 @@
}
},
"node_modules/@swc/core-linux-x64-musl": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.2.tgz",
- "integrity": "sha512-dp0fAmreeVVYTUcb4u9njTPrYzKnbIH0EhH2qvC9GOYNNREUu2GezSIDgonjOXkHiTCvopG4xU7y56XtXj4VrQ==",
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.3.tgz",
+ "integrity": "sha512-oe8FctPu1gnUsdtGJRO2rvOUIkkIIaHqsO9xxN0bTR7dFTlPTGi2Fhk1tnvXeyAvCPxLIcwD8phzKg6wLv9yug==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
@@ -849,13 +1077,14 @@
}
},
"node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.2.tgz",
- "integrity": "sha512-HlVIiLMQkzthAdqMslQhDkoXJ5+AOLUSTV6fm6shFKZKqc/9cJvr4S8UveNERL9zUficA36yM3bbfo36McwnvQ==",
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.3.tgz",
+ "integrity": "sha512-L9AjzP2ZQ/Xh58e0lTRMLvEDrcJpR7GwZqAtIeNLcTK7JVE+QineSyHp0kLkO1rttCHyCy0U74kDTj0dRz6raA==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"win32"
@@ -865,13 +1094,14 @@
}
},
"node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.2.tgz",
- "integrity": "sha512-WCF8faPGjCl4oIgugkp+kL9nl3nUATlzKXCEGFowMEmVVCFM0GsqlmGdPp1pjZoWc9tpYanoXQDnp5IvlDSLhA==",
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.3.tgz",
+ "integrity": "sha512-B8UtogMzErUPDWUoKONSVBdsgKYd58rRyv2sHJWKOIMCHfZ22FVXICR4O/VwIYtlnZ7ahERcjayBHDlBZpR0aw==",
"cpu": [
"ia32"
],
"dev": true,
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"win32"
@@ -881,13 +1111,14 @@
}
},
"node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.2.tgz",
- "integrity": "sha512-oV71rwiSpA5xre2C5570BhCsg1HF97SNLsZ/12xv7zayGzqr3yvFALFJN8tHKpqUdCB4FGPjoP3JFdV3i+1wUw==",
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.3.tgz",
+ "integrity": "sha512-SpZKMR9QBTecHeqpzJdYEfgw30Oo8b/Xl6rjSzBt1g0ZsXyy60KLXrp6IagQyfTYqNYE/caDvwtF2FPn7pomog==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"win32"
@@ -900,27 +1131,35 @@
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
"integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
- "dev": true
+ "dev": true,
+ "license": "Apache-2.0"
},
"node_modules/@swc/types": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz",
- "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==",
- "dev": true
+ "version": "0.1.25",
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz",
+ "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@swc/counter": "^0.1.3"
+ }
},
"node_modules/@types/estree": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
- "dev": true
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/node": {
- "version": "20.11.20",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz",
- "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==",
+ "version": "20.19.25",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.25.tgz",
+ "integrity": "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "undici-types": "~5.26.4"
+ "undici-types": "~6.21.0"
}
},
"node_modules/@types/prop-types": {
@@ -962,15 +1201,17 @@
"dev": true
},
"node_modules/@vitejs/plugin-react-swc": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz",
- "integrity": "sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g==",
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.11.0.tgz",
+ "integrity": "sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@swc/core": "^1.3.107"
+ "@rolldown/pluginutils": "1.0.0-beta.27",
+ "@swc/core": "^1.12.11"
},
"peerDependencies": {
- "vite": "^4 || ^5"
+ "vite": "^4 || ^5 || ^6 || ^7"
}
},
"node_modules/acorn": {
@@ -978,6 +1219,7 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
"dev": true,
+ "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -1199,22 +1441,24 @@
}
},
"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==",
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
@@ -1325,10 +1569,11 @@
"dev": true
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -1561,41 +1806,45 @@
}
},
"node_modules/esbuild": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz",
- "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
"dev": true,
"hasInstallScript": true,
+ "license": "MIT",
"bin": {
"esbuild": "bin/esbuild"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.19.12",
- "@esbuild/android-arm": "0.19.12",
- "@esbuild/android-arm64": "0.19.12",
- "@esbuild/android-x64": "0.19.12",
- "@esbuild/darwin-arm64": "0.19.12",
- "@esbuild/darwin-x64": "0.19.12",
- "@esbuild/freebsd-arm64": "0.19.12",
- "@esbuild/freebsd-x64": "0.19.12",
- "@esbuild/linux-arm": "0.19.12",
- "@esbuild/linux-arm64": "0.19.12",
- "@esbuild/linux-ia32": "0.19.12",
- "@esbuild/linux-loong64": "0.19.12",
- "@esbuild/linux-mips64el": "0.19.12",
- "@esbuild/linux-ppc64": "0.19.12",
- "@esbuild/linux-riscv64": "0.19.12",
- "@esbuild/linux-s390x": "0.19.12",
- "@esbuild/linux-x64": "0.19.12",
- "@esbuild/netbsd-x64": "0.19.12",
- "@esbuild/openbsd-x64": "0.19.12",
- "@esbuild/sunos-x64": "0.19.12",
- "@esbuild/win32-arm64": "0.19.12",
- "@esbuild/win32-ia32": "0.19.12",
- "@esbuild/win32-x64": "0.19.12"
+ "@esbuild/aix-ppc64": "0.25.12",
+ "@esbuild/android-arm": "0.25.12",
+ "@esbuild/android-arm64": "0.25.12",
+ "@esbuild/android-x64": "0.25.12",
+ "@esbuild/darwin-arm64": "0.25.12",
+ "@esbuild/darwin-x64": "0.25.12",
+ "@esbuild/freebsd-arm64": "0.25.12",
+ "@esbuild/freebsd-x64": "0.25.12",
+ "@esbuild/linux-arm": "0.25.12",
+ "@esbuild/linux-arm64": "0.25.12",
+ "@esbuild/linux-ia32": "0.25.12",
+ "@esbuild/linux-loong64": "0.25.12",
+ "@esbuild/linux-mips64el": "0.25.12",
+ "@esbuild/linux-ppc64": "0.25.12",
+ "@esbuild/linux-riscv64": "0.25.12",
+ "@esbuild/linux-s390x": "0.25.12",
+ "@esbuild/linux-x64": "0.25.12",
+ "@esbuild/netbsd-arm64": "0.25.12",
+ "@esbuild/netbsd-x64": "0.25.12",
+ "@esbuild/openbsd-arm64": "0.25.12",
+ "@esbuild/openbsd-x64": "0.25.12",
+ "@esbuild/openharmony-arm64": "0.25.12",
+ "@esbuild/sunos-x64": "0.25.12",
+ "@esbuild/win32-arm64": "0.25.12",
+ "@esbuild/win32-ia32": "0.25.12",
+ "@esbuild/win32-x64": "0.25.12"
}
},
"node_modules/escape-string-regexp": {
@@ -1615,6 +1864,7 @@
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
"integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
@@ -1872,10 +2122,11 @@
}
},
"node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -2448,6 +2699,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
@@ -2626,10 +2878,11 @@
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
@@ -2751,9 +3004,9 @@
"dev": true
},
"node_modules/nanoid": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"dev": true,
"funding": [
{
@@ -2761,6 +3014,7 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -2990,10 +3244,11 @@
"dev": true
},
"node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
@@ -3017,9 +3272,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
- "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"dev": true,
"funding": [
{
@@ -3035,10 +3290,11 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "nanoid": "^3.3.7",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -3096,6 +3352,7 @@
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
"integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "peer": true,
"dependencies": {
"loose-envify": "^1.1.0"
},
@@ -3119,6 +3376,7 @@
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
"integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.0"
@@ -3235,12 +3493,13 @@
}
},
"node_modules/rollup": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz",
- "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==",
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz",
+ "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/estree": "1.0.5"
+ "@types/estree": "1.0.8"
},
"bin": {
"rollup": "dist/bin/rollup"
@@ -3250,19 +3509,28 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.12.0",
- "@rollup/rollup-android-arm64": "4.12.0",
- "@rollup/rollup-darwin-arm64": "4.12.0",
- "@rollup/rollup-darwin-x64": "4.12.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.12.0",
- "@rollup/rollup-linux-arm64-gnu": "4.12.0",
- "@rollup/rollup-linux-arm64-musl": "4.12.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.12.0",
- "@rollup/rollup-linux-x64-gnu": "4.12.0",
- "@rollup/rollup-linux-x64-musl": "4.12.0",
- "@rollup/rollup-win32-arm64-msvc": "4.12.0",
- "@rollup/rollup-win32-ia32-msvc": "4.12.0",
- "@rollup/rollup-win32-x64-msvc": "4.12.0",
+ "@rollup/rollup-android-arm-eabi": "4.53.3",
+ "@rollup/rollup-android-arm64": "4.53.3",
+ "@rollup/rollup-darwin-arm64": "4.53.3",
+ "@rollup/rollup-darwin-x64": "4.53.3",
+ "@rollup/rollup-freebsd-arm64": "4.53.3",
+ "@rollup/rollup-freebsd-x64": "4.53.3",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.53.3",
+ "@rollup/rollup-linux-arm-musleabihf": "4.53.3",
+ "@rollup/rollup-linux-arm64-gnu": "4.53.3",
+ "@rollup/rollup-linux-arm64-musl": "4.53.3",
+ "@rollup/rollup-linux-loong64-gnu": "4.53.3",
+ "@rollup/rollup-linux-ppc64-gnu": "4.53.3",
+ "@rollup/rollup-linux-riscv64-gnu": "4.53.3",
+ "@rollup/rollup-linux-riscv64-musl": "4.53.3",
+ "@rollup/rollup-linux-s390x-gnu": "4.53.3",
+ "@rollup/rollup-linux-x64-gnu": "4.53.3",
+ "@rollup/rollup-linux-x64-musl": "4.53.3",
+ "@rollup/rollup-openharmony-arm64": "4.53.3",
+ "@rollup/rollup-win32-arm64-msvc": "4.53.3",
+ "@rollup/rollup-win32-ia32-msvc": "4.53.3",
+ "@rollup/rollup-win32-x64-gnu": "4.53.3",
+ "@rollup/rollup-win32-x64-msvc": "4.53.3",
"fsevents": "~2.3.2"
}
},
@@ -3329,6 +3597,7 @@
"resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz",
"integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==",
"dev": true,
+ "peer": true,
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
@@ -3435,10 +3704,11 @@
}
},
"node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
@@ -3562,11 +3832,61 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"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==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -3700,10 +4020,11 @@
}
},
"node_modules/undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
- "dev": true
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/uri-js": {
"version": "4.4.1",
@@ -3715,20 +4036,25 @@
}
},
"node_modules/vite": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz",
- "integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==",
+ "version": "7.2.4",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz",
+ "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "esbuild": "^0.19.3",
- "postcss": "^8.4.35",
- "rollup": "^4.2.0"
+ "esbuild": "^0.25.0",
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.43.0",
+ "tinyglobby": "^0.2.15"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
- "node": "^18.0.0 || >=20.0.0"
+ "node": "^20.19.0 || >=22.12.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
@@ -3737,18 +4063,25 @@
"fsevents": "~2.3.3"
},
"peerDependencies": {
- "@types/node": "^18.0.0 || >=20.0.0",
- "less": "*",
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
"lightningcss": "^1.21.0",
- "sass": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.4.0"
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
},
+ "jiti": {
+ "optional": true
+ },
"less": {
"optional": true
},
@@ -3758,6 +4091,9 @@
"sass": {
"optional": true
},
+ "sass-embedded": {
+ "optional": true
+ },
"stylus": {
"optional": true
},
@@ -3766,9 +4102,47 @@
},
"terser": {
"optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
}
}
},
+ "node_modules/vite/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
diff --git a/package.json b/package.json
index 0a3c8d4..765d214 100644
--- a/package.json
+++ b/package.json
@@ -27,6 +27,6 @@
"eslint-plugin-react-refresh": "^0.4.5",
"sass": "^1.70.0",
"typescript": "^5.3.3",
- "vite": "^5.0.8"
+ "vite": "^7.2.4"
}
}
From 08a332453e4e913629967b7f5c0fdb2497523e53 Mon Sep 17 00:00:00 2001
From: Shiva Bhusal
Date: Thu, 27 Nov 2025 13:12:54 +0545
Subject: [PATCH 3/5] Adds various algorithm implementations including prefix
sum, sliding window, and sorting algorithms
---
src/code/ruby/array/prefix_sum.rb | 13 +++
src/code/ruby/array/sliding_window.rb | 19 +++++
src/code/ruby/array/string_building.rb | 15 ++++
src/code/ruby/array/two_pointers_one_input.rb | 16 ++++
.../ruby/array/two_pointers_two_inputs.rb | 25 ++++++
src/code/ruby/backtracking/backtracking.rb | 16 ++++
src/code/ruby/binary_search/binary_search.rb | 19 +++++
.../duplicate_elements_left_insertion.rb | 16 ++++
.../duplicate_elements_right_insertion.rb | 16 ++++
src/code/ruby/binary_search/greedy_maximum.rb | 21 +++++
src/code/ruby/binary_search/greedy_minimum.rb | 20 +++++
src/code/ruby/binary_tree/bfs.rb | 19 +++++
src/code/ruby/binary_tree/dfs_iterative.rb | 14 ++++
src/code/ruby/binary_tree/dfs_recursive.rb | 11 +++
.../bit_manipulation/check_power_of_two.rb | 3 +
.../ruby/bit_manipulation/clear_kth_bit.rb | 3 +
.../ruby/bit_manipulation/count_set_bits.rb | 3 +
.../bit_manipulation/divide_power_of_two.rb | 3 +
.../bit_manipulation/get_rightmost_bit.rb | 3 +
.../bit_manipulation/multiply_power_of_two.rb | 3 +
src/code/ruby/bit_manipulation/set_kth_bit.rb | 3 +
.../ruby/bit_manipulation/swap_variables.rb | 9 ++
.../ruby/bit_manipulation/test_kth_bit.rb | 3 +
.../ruby/bit_manipulation/toggle_kth_bit.rb | 3 +
src/code/ruby/data_structures/array.rb | 23 +++++
.../data_structures/binary_search_tree.rb | 58 +++++++++++++
src/code/ruby/data_structures/binary_tree.rb | 56 +++++++++++++
.../data_structures/doubly_linked_list.rb | 84 +++++++++++++++++++
src/code/ruby/data_structures/graph.rb | 30 +++++++
src/code/ruby/data_structures/hash_map.rb | 22 +++++
src/code/ruby/data_structures/linked_list.rb | 79 +++++++++++++++++
src/code/ruby/data_structures/trie.rb | 80 ++++++++++++++++++
src/code/ruby/data_structures/union_find.rb | 33 ++++++++
.../data_structures/union_find_optimized.rb | 46 ++++++++++
.../ruby/dynamic_programming/bottom_up.rb | 17 ++++
src/code/ruby/dynamic_programming/kadane.rb | 11 +++
src/code/ruby/dynamic_programming/top_down.rb | 12 +++
src/code/ruby/graph/bellman_ford.rb | 20 +++++
src/code/ruby/graph/bfs.rb | 20 +++++
src/code/ruby/graph/dfs_iterative.rb | 20 +++++
src/code/ruby/graph/dfs_recursive.rb | 19 +++++
src/code/ruby/graph/dijkstra.rb | 26 ++++++
src/code/ruby/graph/kahn.rb | 24 ++++++
src/code/ruby/graph/kruskal.rb | 12 +++
src/code/ruby/graph/prim.rb | 12 +++
.../ruby/hash_map/find_number_of_subarrays.rb | 14 ++++
src/code/ruby/hash_map/sliding_window.rb | 20 +++++
src/code/ruby/heap/find_top_k_elements.rb | 15 ++++
.../ruby/linked_list/fast_and_slow_pointer.rb | 13 +++
.../ruby/linked_list/reverse_linked_list.rb | 13 +++
src/code/ruby/matrix/create_copy.rb | 7 ++
src/code/ruby/matrix/diagonals.rb | 7 ++
src/code/ruby/matrix/rotate_transpose.rb | 8 ++
src/code/ruby/sorting_algorithms/bogo_sort.rb | 7 ++
.../ruby/sorting_algorithms/bubble_sort.rb | 16 ++++
.../ruby/sorting_algorithms/bucket_sort.rb | 14 ++++
.../ruby/sorting_algorithms/counting_sort.rb | 23 +++++
src/code/ruby/sorting_algorithms/cube_sort.rb | 28 +++++++
src/code/ruby/sorting_algorithms/heap_sort.rb | 28 +++++++
.../ruby/sorting_algorithms/insertion_sort.rb | 15 ++++
.../ruby/sorting_algorithms/merge_sort.rb | 24 ++++++
.../ruby/sorting_algorithms/pancake_sort.rb | 32 +++++++
.../ruby/sorting_algorithms/quick_sort.rb | 10 +++
.../ruby/sorting_algorithms/radix_sort.rb | 34 ++++++++
.../ruby/sorting_algorithms/selection_sort.rb | 13 +++
.../ruby/sorting_algorithms/shell_sort.rb | 18 ++++
.../ruby/sorting_algorithms/sleep_sort.rb | 14 ++++
src/code/ruby/sorting_algorithms/tim_sort.rb | 58 +++++++++++++
src/code/ruby/stack/monotonic_decreasing.rb | 14 ++++
src/code/ruby/stack/monotonic_increasing.rb | 14 ++++
70 files changed, 1439 insertions(+)
create mode 100644 src/code/ruby/array/prefix_sum.rb
create mode 100644 src/code/ruby/array/sliding_window.rb
create mode 100644 src/code/ruby/array/string_building.rb
create mode 100644 src/code/ruby/array/two_pointers_one_input.rb
create mode 100644 src/code/ruby/array/two_pointers_two_inputs.rb
create mode 100644 src/code/ruby/backtracking/backtracking.rb
create mode 100644 src/code/ruby/binary_search/binary_search.rb
create mode 100644 src/code/ruby/binary_search/duplicate_elements_left_insertion.rb
create mode 100644 src/code/ruby/binary_search/duplicate_elements_right_insertion.rb
create mode 100644 src/code/ruby/binary_search/greedy_maximum.rb
create mode 100644 src/code/ruby/binary_search/greedy_minimum.rb
create mode 100644 src/code/ruby/binary_tree/bfs.rb
create mode 100644 src/code/ruby/binary_tree/dfs_iterative.rb
create mode 100644 src/code/ruby/binary_tree/dfs_recursive.rb
create mode 100644 src/code/ruby/bit_manipulation/check_power_of_two.rb
create mode 100644 src/code/ruby/bit_manipulation/clear_kth_bit.rb
create mode 100644 src/code/ruby/bit_manipulation/count_set_bits.rb
create mode 100644 src/code/ruby/bit_manipulation/divide_power_of_two.rb
create mode 100644 src/code/ruby/bit_manipulation/get_rightmost_bit.rb
create mode 100644 src/code/ruby/bit_manipulation/multiply_power_of_two.rb
create mode 100644 src/code/ruby/bit_manipulation/set_kth_bit.rb
create mode 100644 src/code/ruby/bit_manipulation/swap_variables.rb
create mode 100644 src/code/ruby/bit_manipulation/test_kth_bit.rb
create mode 100644 src/code/ruby/bit_manipulation/toggle_kth_bit.rb
create mode 100644 src/code/ruby/data_structures/array.rb
create mode 100644 src/code/ruby/data_structures/binary_search_tree.rb
create mode 100644 src/code/ruby/data_structures/binary_tree.rb
create mode 100644 src/code/ruby/data_structures/doubly_linked_list.rb
create mode 100644 src/code/ruby/data_structures/graph.rb
create mode 100644 src/code/ruby/data_structures/hash_map.rb
create mode 100644 src/code/ruby/data_structures/linked_list.rb
create mode 100644 src/code/ruby/data_structures/trie.rb
create mode 100644 src/code/ruby/data_structures/union_find.rb
create mode 100644 src/code/ruby/data_structures/union_find_optimized.rb
create mode 100644 src/code/ruby/dynamic_programming/bottom_up.rb
create mode 100644 src/code/ruby/dynamic_programming/kadane.rb
create mode 100644 src/code/ruby/dynamic_programming/top_down.rb
create mode 100644 src/code/ruby/graph/bellman_ford.rb
create mode 100644 src/code/ruby/graph/bfs.rb
create mode 100644 src/code/ruby/graph/dfs_iterative.rb
create mode 100644 src/code/ruby/graph/dfs_recursive.rb
create mode 100644 src/code/ruby/graph/dijkstra.rb
create mode 100644 src/code/ruby/graph/kahn.rb
create mode 100644 src/code/ruby/graph/kruskal.rb
create mode 100644 src/code/ruby/graph/prim.rb
create mode 100644 src/code/ruby/hash_map/find_number_of_subarrays.rb
create mode 100644 src/code/ruby/hash_map/sliding_window.rb
create mode 100644 src/code/ruby/heap/find_top_k_elements.rb
create mode 100644 src/code/ruby/linked_list/fast_and_slow_pointer.rb
create mode 100644 src/code/ruby/linked_list/reverse_linked_list.rb
create mode 100644 src/code/ruby/matrix/create_copy.rb
create mode 100644 src/code/ruby/matrix/diagonals.rb
create mode 100644 src/code/ruby/matrix/rotate_transpose.rb
create mode 100644 src/code/ruby/sorting_algorithms/bogo_sort.rb
create mode 100644 src/code/ruby/sorting_algorithms/bubble_sort.rb
create mode 100644 src/code/ruby/sorting_algorithms/bucket_sort.rb
create mode 100644 src/code/ruby/sorting_algorithms/counting_sort.rb
create mode 100644 src/code/ruby/sorting_algorithms/cube_sort.rb
create mode 100644 src/code/ruby/sorting_algorithms/heap_sort.rb
create mode 100644 src/code/ruby/sorting_algorithms/insertion_sort.rb
create mode 100644 src/code/ruby/sorting_algorithms/merge_sort.rb
create mode 100644 src/code/ruby/sorting_algorithms/pancake_sort.rb
create mode 100644 src/code/ruby/sorting_algorithms/quick_sort.rb
create mode 100644 src/code/ruby/sorting_algorithms/radix_sort.rb
create mode 100644 src/code/ruby/sorting_algorithms/selection_sort.rb
create mode 100644 src/code/ruby/sorting_algorithms/shell_sort.rb
create mode 100644 src/code/ruby/sorting_algorithms/sleep_sort.rb
create mode 100644 src/code/ruby/sorting_algorithms/tim_sort.rb
create mode 100644 src/code/ruby/stack/monotonic_decreasing.rb
create mode 100644 src/code/ruby/stack/monotonic_increasing.rb
diff --git a/src/code/ruby/array/prefix_sum.rb b/src/code/ruby/array/prefix_sum.rb
new file mode 100644
index 0000000..ba3bf80
--- /dev/null
+++ b/src/code/ruby/array/prefix_sum.rb
@@ -0,0 +1,13 @@
+# This method computes the prefix sum of an array.
+# It returns a new array where each element at index i is the sum of elements from index 0 to i-1 in the original array.
+# # For example, given the array [1, 2, 3], the prefix sum array will be [1, 3, 6].
+def prefix_sum(arr)
+ n = arr.length
+ prefix = [arr[0]]
+
+ (1...n).each do |i|
+ prefix << (prefix.last + arr[i])
+ end
+
+ prefix
+end
diff --git a/src/code/ruby/array/sliding_window.rb b/src/code/ruby/array/sliding_window.rb
new file mode 100644
index 0000000..a82669d
--- /dev/null
+++ b/src/code/ruby/array/sliding_window.rb
@@ -0,0 +1,19 @@
+def fn(arr)
+ n = arr.length
+ window = 0
+ left = 0
+ result = 0
+
+ (0...n).each do |right|
+ # TODO: add arr[right] to window
+
+ while WINDOW_CONDITION_BROKEN
+ # TODO: remove arr[left] from window
+ left += 1
+ end
+
+ # TODO: update result
+ end
+
+ result
+end
diff --git a/src/code/ruby/array/string_building.rb b/src/code/ruby/array/string_building.rb
new file mode 100644
index 0000000..18ad76f
--- /dev/null
+++ b/src/code/ruby/array/string_building.rb
@@ -0,0 +1,15 @@
+def fn(strs)
+ # array of strings/chrs
+ ans = []
+
+ strs.each do |char|
+ ans << char
+ end
+
+ ans.join('')
+end
+
+# simple
+def fn2(strs)
+ strs.join
+end
diff --git a/src/code/ruby/array/two_pointers_one_input.rb b/src/code/ruby/array/two_pointers_one_input.rb
new file mode 100644
index 0000000..58f9567
--- /dev/null
+++ b/src/code/ruby/array/two_pointers_one_input.rb
@@ -0,0 +1,16 @@
+def fn(arr)
+ ans = 0
+ left = 0
+ right = arr.length - 1
+
+ while left < right
+ # TODO: logic with left and right
+ if CONDITION
+ left += 1
+ else
+ right -= 1
+ end
+ end
+
+ ans
+end
\ No newline at end of file
diff --git a/src/code/ruby/array/two_pointers_two_inputs.rb b/src/code/ruby/array/two_pointers_two_inputs.rb
new file mode 100644
index 0000000..2506625
--- /dev/null
+++ b/src/code/ruby/array/two_pointers_two_inputs.rb
@@ -0,0 +1,25 @@
+def fn(arr1, arr2)
+ i, j = 0, 0
+ ans = 0
+
+ while i < arr1.length && j < arr2.length
+ # TODO: Logic
+ if CONDITION
+ i += 1
+ else
+ j += 1
+ end
+ end
+
+ while i < arr1.length
+ # TODO: Logic
+ i += 1
+ end
+
+ while j < arr2.length
+ # TODO: Logic
+ j += 1
+ end
+
+ ans
+end
diff --git a/src/code/ruby/backtracking/backtracking.rb b/src/code/ruby/backtracking/backtracking.rb
new file mode 100644
index 0000000..364bba5
--- /dev/null
+++ b/src/code/ruby/backtracking/backtracking.rb
@@ -0,0 +1,16 @@
+def backtrack(curr, OTHER_ARGUMENTS...)
+ if(BASE_CASE)
+ # TODO: modify answer
+ return
+ end
+
+ ans = 0
+
+ INPUTS.each do |i|
+ # TODO: modify current state
+ ans += backtrack(curr, OTHER_ARGUMENTS...)
+ # TODO: undo modification of current state
+ end
+
+ ans
+end
diff --git a/src/code/ruby/binary_search/binary_search.rb b/src/code/ruby/binary_search/binary_search.rb
new file mode 100644
index 0000000..46e887e
--- /dev/null
+++ b/src/code/ruby/binary_search/binary_search.rb
@@ -0,0 +1,19 @@
+def fn(arr, target)
+ left = 0
+ right = arr.length - 1
+
+ while left <= right
+ mid = (left + right) / 2
+
+ if arr[mid] == target
+ # TODO: logic
+ return
+ elsif arr[mid] > target
+ right = mid - 1
+ else
+ left = mid + 1
+ end
+ end
+
+ left
+end
diff --git a/src/code/ruby/binary_search/duplicate_elements_left_insertion.rb b/src/code/ruby/binary_search/duplicate_elements_left_insertion.rb
new file mode 100644
index 0000000..f99ccaa
--- /dev/null
+++ b/src/code/ruby/binary_search/duplicate_elements_left_insertion.rb
@@ -0,0 +1,16 @@
+def fn(arr, target)
+ left = 0
+ right = len(arr)
+
+ while left < right
+ mid = (left + right) / 2
+
+ if arr[mid] >= target
+ right = mid
+ else
+ left = mid + 1
+ end
+ end
+
+ left
+end
diff --git a/src/code/ruby/binary_search/duplicate_elements_right_insertion.rb b/src/code/ruby/binary_search/duplicate_elements_right_insertion.rb
new file mode 100644
index 0000000..f6852f1
--- /dev/null
+++ b/src/code/ruby/binary_search/duplicate_elements_right_insertion.rb
@@ -0,0 +1,16 @@
+def fn(arr, target)
+ left = 0
+ right = len(arr)
+
+ while left < right
+ mid = (left + right) / 2
+
+ if arr[mid] > target
+ right = mid
+ else
+ left = mid + 1
+ end
+ end
+
+ left
+end
diff --git a/src/code/ruby/binary_search/greedy_maximum.rb b/src/code/ruby/binary_search/greedy_maximum.rb
new file mode 100644
index 0000000..323e029
--- /dev/null
+++ b/src/code/ruby/binary_search/greedy_maximum.rb
@@ -0,0 +1,21 @@
+def fn(arr)
+ left = MINIMUM_POSSIBLE_ANSWER
+ right = MAXIMUM_POSSIBLE_ANSWER
+
+ while left <= right
+ mid = (left + right) / 2 # integer division
+
+ if check(mid)
+ left = mid + 1
+ else
+ right = mid - 1
+ end
+
+ end
+
+ right
+end
+
+def check(x)
+ BOOLEAN
+end
diff --git a/src/code/ruby/binary_search/greedy_minimum.rb b/src/code/ruby/binary_search/greedy_minimum.rb
new file mode 100644
index 0000000..a1f6d3b
--- /dev/null
+++ b/src/code/ruby/binary_search/greedy_minimum.rb
@@ -0,0 +1,20 @@
+def fn(arr)
+ left = MINIMUM_POSSIBLE_ANSWER
+ right = MAXIMUM_POSSIBLE_ANSWER
+
+ while left <= right
+ mid = (left + right) / 2 # int div
+
+ if check(mid)
+ right = mid - 1
+ else
+ left = mid + 1
+ end
+ end
+
+ left
+end
+
+def check(x)
+ BOOLEAN
+end
\ No newline at end of file
diff --git a/src/code/ruby/binary_tree/bfs.rb b/src/code/ruby/binary_tree/bfs.rb
new file mode 100644
index 0000000..094bfe1
--- /dev/null
+++ b/src/code/ruby/binary_tree/bfs.rb
@@ -0,0 +1,19 @@
+def fn(root)
+ queue = [root]
+ ans = 0
+
+ until queue.empty?
+ current_length = queue.length
+ # TODO: logic for current level
+
+ current_length.times do
+ node = queue.shift
+ # TODO: logic
+
+ queue << node.left if node.left
+ queue << node.right if node.right
+ end
+ end
+
+ ans
+end
diff --git a/src/code/ruby/binary_tree/dfs_iterative.rb b/src/code/ruby/binary_tree/dfs_iterative.rb
new file mode 100644
index 0000000..2305ca9
--- /dev/null
+++ b/src/code/ruby/binary_tree/dfs_iterative.rb
@@ -0,0 +1,14 @@
+def dfs(root)
+ stack = [root]
+ ans = 0
+
+ until stack.empty?
+ node = stack.pop
+ # TODO: logic
+
+ stack << node.left if node.left
+ stack << node.right if node.right
+ end
+
+ ans
+end
diff --git a/src/code/ruby/binary_tree/dfs_recursive.rb b/src/code/ruby/binary_tree/dfs_recursive.rb
new file mode 100644
index 0000000..16a7f1d
--- /dev/null
+++ b/src/code/ruby/binary_tree/dfs_recursive.rb
@@ -0,0 +1,11 @@
+def dfs(root)
+ return unless root
+
+ ans = 0
+
+ # TODO: logic
+ dfs(root.left)
+ dfs(root.right)
+
+ ans
+end
diff --git a/src/code/ruby/bit_manipulation/check_power_of_two.rb b/src/code/ruby/bit_manipulation/check_power_of_two.rb
new file mode 100644
index 0000000..c5de3cf
--- /dev/null
+++ b/src/code/ruby/bit_manipulation/check_power_of_two.rb
@@ -0,0 +1,3 @@
+def is_power_of_two(num)
+ (num & (num - 1)) == 0
+end
diff --git a/src/code/ruby/bit_manipulation/clear_kth_bit.rb b/src/code/ruby/bit_manipulation/clear_kth_bit.rb
new file mode 100644
index 0000000..1341bd0
--- /dev/null
+++ b/src/code/ruby/bit_manipulation/clear_kth_bit.rb
@@ -0,0 +1,3 @@
+def clear_kth_bit(num, k)
+ num & ~(1 << k)
+end
diff --git a/src/code/ruby/bit_manipulation/count_set_bits.rb b/src/code/ruby/bit_manipulation/count_set_bits.rb
new file mode 100644
index 0000000..763fe41
--- /dev/null
+++ b/src/code/ruby/bit_manipulation/count_set_bits.rb
@@ -0,0 +1,3 @@
+def count_set_bits(num)
+ num.to_s(2).count('1')
+end
diff --git a/src/code/ruby/bit_manipulation/divide_power_of_two.rb b/src/code/ruby/bit_manipulation/divide_power_of_two.rb
new file mode 100644
index 0000000..6865f1a
--- /dev/null
+++ b/src/code/ruby/bit_manipulation/divide_power_of_two.rb
@@ -0,0 +1,3 @@
+def divide_by_power_of_two(num, k)
+ num >> k
+end
diff --git a/src/code/ruby/bit_manipulation/get_rightmost_bit.rb b/src/code/ruby/bit_manipulation/get_rightmost_bit.rb
new file mode 100644
index 0000000..55b71eb
--- /dev/null
+++ b/src/code/ruby/bit_manipulation/get_rightmost_bit.rb
@@ -0,0 +1,3 @@
+def get_rightmost_set_bit(num)
+ num & -num
+end
diff --git a/src/code/ruby/bit_manipulation/multiply_power_of_two.rb b/src/code/ruby/bit_manipulation/multiply_power_of_two.rb
new file mode 100644
index 0000000..1f0dd6d
--- /dev/null
+++ b/src/code/ruby/bit_manipulation/multiply_power_of_two.rb
@@ -0,0 +1,3 @@
+def multiply_by_power_of_two(num, k)
+ num << k
+end
diff --git a/src/code/ruby/bit_manipulation/set_kth_bit.rb b/src/code/ruby/bit_manipulation/set_kth_bit.rb
new file mode 100644
index 0000000..a92e3a7
--- /dev/null
+++ b/src/code/ruby/bit_manipulation/set_kth_bit.rb
@@ -0,0 +1,3 @@
+def set_kth_bit(num, k)
+ num | (1 << k)
+end
diff --git a/src/code/ruby/bit_manipulation/swap_variables.rb b/src/code/ruby/bit_manipulation/swap_variables.rb
new file mode 100644
index 0000000..56e3fb6
--- /dev/null
+++ b/src/code/ruby/bit_manipulation/swap_variables.rb
@@ -0,0 +1,9 @@
+# in-memory swaps
+# unnecessary for modern languages
+def swap_variables(num1, num2)
+ num1 ^= num2
+ num2 ^= num1
+ num1 ^= num2
+
+ return num1, num2
+end
diff --git a/src/code/ruby/bit_manipulation/test_kth_bit.rb b/src/code/ruby/bit_manipulation/test_kth_bit.rb
new file mode 100644
index 0000000..552984b
--- /dev/null
+++ b/src/code/ruby/bit_manipulation/test_kth_bit.rb
@@ -0,0 +1,3 @@
+def test_kth_bit(num, k)
+ num & (1 << k) != 0
+end
diff --git a/src/code/ruby/bit_manipulation/toggle_kth_bit.rb b/src/code/ruby/bit_manipulation/toggle_kth_bit.rb
new file mode 100644
index 0000000..1337e0b
--- /dev/null
+++ b/src/code/ruby/bit_manipulation/toggle_kth_bit.rb
@@ -0,0 +1,3 @@
+def toggle_kth_bit(num, k)
+ num ^ (1 << k)
+end
diff --git a/src/code/ruby/data_structures/array.rb b/src/code/ruby/data_structures/array.rb
new file mode 100644
index 0000000..9859a78
--- /dev/null
+++ b/src/code/ruby/data_structures/array.rb
@@ -0,0 +1,23 @@
+
+class Array
+ def initialize(size)
+ @size = size
+ @data = Array.new(size)
+ end
+
+ def [](index)
+ @data[index]
+ end
+
+ def []=(index, value)
+ @data[index] = value
+ end
+
+ def length
+ @data.length
+ end
+
+ def to_s
+ @data.to_s
+ end
+end
diff --git a/src/code/ruby/data_structures/binary_search_tree.rb b/src/code/ruby/data_structures/binary_search_tree.rb
new file mode 100644
index 0000000..2f96460
--- /dev/null
+++ b/src/code/ruby/data_structures/binary_search_tree.rb
@@ -0,0 +1,58 @@
+class TreeNode
+ attr_accessor :data, :left, :right
+
+ def initialize(data)
+ @data = data
+ @left = nil
+ @right = nil
+ end
+end
+
+class BinarySearchTree
+ attr_accessor :root
+
+ def initialize
+ @root = nil
+ end
+
+ def insert(data)
+ if @root.nil?
+ @root = TreeNode.new(data)
+ else
+ insert_node(@root, data)
+ end
+ end
+
+ def insert_node(node, data)
+ if data < node.data
+ if node.left.nil?
+ node.left = TreeNode.new(data)
+ else
+ insert_node(node.left, data)
+ end
+ else
+ if node.right.nil?
+ node.right = TreeNode.new(data)
+ else
+ insert_node(node.right, data)
+ end
+ end
+ end
+
+ def to_s
+ @root.nil? ? 'Empty tree' : print_tree(@root, '', true)
+ end
+
+ private
+
+ def print_tree(node, prefix, is_left)
+ return '' if node.nil?
+
+ result = ''
+ result += print_tree(node.right, prefix + (is_left ? '│ ' : ' '), false)
+ result += prefix + (is_left ? '└── ' : '┌── ') + node.data.to_s + "\n"
+ result += print_tree(node.left, prefix + (is_left ? ' ' : '│ '), true)
+
+ result
+ end
+end
diff --git a/src/code/ruby/data_structures/binary_tree.rb b/src/code/ruby/data_structures/binary_tree.rb
new file mode 100644
index 0000000..0b921cd
--- /dev/null
+++ b/src/code/ruby/data_structures/binary_tree.rb
@@ -0,0 +1,56 @@
+class TreeNode
+ attr_accessor :data, :left, :right
+
+ def initialize(data)
+ @data = data
+ @left = nil
+ @right = nil
+ end
+end
+
+class BinaryTree
+ attr_accessor :root
+
+ def initialize
+ @root = nil
+ end
+
+ def insert(data)
+ if @root.nil?
+ @root = TreeNode.new(data)
+ else
+ insert_node(@root, data)
+ end
+ end
+
+ def insert_node(node, data)
+ return TreeNode.new(data) if node.nil?
+
+ if node.left.nil?
+ node.left = TreeNode.new(data)
+ elsif node.right.nil?
+ node.right = TreeNode.new(data)
+ else
+ node.left = insert_node(node.left, data)
+ end
+
+ node
+ end
+
+ def to_s
+ @root.nil? ? 'Empty tree' : print_tree(@root, '', true)
+ end
+
+ private
+
+ def print_tree(node, prefix, is_left)
+ return '' if node.nil?
+
+ result = ''
+ result += print_tree(node.right, prefix + (is_left ? '│ ' : ' '), false)
+ result += prefix + (is_left ? '└── ' : '┌── ') + node.data.to_s + "\n"
+ result += print_tree(node.left, prefix + (is_left ? ' ' : '│ '), true)
+
+ result
+ end
+end
diff --git a/src/code/ruby/data_structures/doubly_linked_list.rb b/src/code/ruby/data_structures/doubly_linked_list.rb
new file mode 100644
index 0000000..94b2377
--- /dev/null
+++ b/src/code/ruby/data_structures/doubly_linked_list.rb
@@ -0,0 +1,84 @@
+class ListNode
+ attr_accessor :data, :prev, :next
+
+ def initialize(data)
+ @data = data
+ @prev = nil
+ @next = nil
+ end
+
+ def to_s
+ "[#{@data}]"
+ end
+end
+
+class DoublyLinkedList
+ attr_accessor :head
+
+ def initialize
+ @head = nil
+ end
+
+ def append(data)
+ if @head.nil?
+ @head = ListNode.new(data)
+ return
+ end
+
+ curr = @head
+ curr = curr.next while curr.next
+
+ new_node = ListNode.new(data)
+ curr.next = new_node
+ new_node.prev = curr
+ end
+
+ def delete(data)
+ return if @head.nil?
+
+ if @head.data == data
+ @head = @head.next
+ @head.prev = nil if @head
+ return
+ end
+
+ curr = @head
+ while curr
+ if curr.data == data
+ prev_node = curr.prev
+ prev_node.next = curr.next
+ curr.next.prev = prev_node if curr.next
+ return
+ end
+ curr = curr.next
+ end
+ end
+
+ def reverse
+ curr = @head
+ prev = nil
+
+ while curr
+ nxt = curr.next
+ curr.next = prev
+ curr.prev = nxt
+ prev = curr
+ curr = nxt
+ end
+
+ @head = prev
+ end
+
+ def to_s
+ return 'None' if @head.nil?
+
+ nodes = []
+ curr = @head
+ while curr
+ nodes << curr.to_s
+ curr = curr.next
+ end
+
+ nodes.join(' <-> ') + ' <-> None'
+ end
+end
diff --git a/src/code/ruby/data_structures/graph.rb b/src/code/ruby/data_structures/graph.rb
new file mode 100644
index 0000000..086702c
--- /dev/null
+++ b/src/code/ruby/data_structures/graph.rb
@@ -0,0 +1,30 @@
+class Graph
+ attr_accessor :graph
+
+ def initialize
+ @graph = {}
+ end
+
+ def add_vertex(vertex)
+ @graph[vertex] ||= []
+ end
+
+ def add_edge(a, b)
+ add_vertex(a)
+ add_vertex(b)
+ @graph[a] << b
+ @graph[b] << a
+ end
+
+ def get_neighbors(vertex)
+ @graph.fetch(vertex, [])
+ end
+
+ def to_s
+ output = ''
+ @graph.each do |vertex, neighbors|
+ output += "#{vertex} - #{neighbors.join(' - ')}\n"
+ end
+ output
+ end
+end
diff --git a/src/code/ruby/data_structures/hash_map.rb b/src/code/ruby/data_structures/hash_map.rb
new file mode 100644
index 0000000..db45f06
--- /dev/null
+++ b/src/code/ruby/data_structures/hash_map.rb
@@ -0,0 +1,22 @@
+class HashMap
+ def initialize
+ @size = 100_000
+ @bucket = Array.new(@size)
+ end
+
+ def hash_key(key)
+ key.hash % @size
+ end
+
+ def []=(key, value)
+ @bucket[hash_key(key)] = value
+ end
+
+ def [](key)
+ @bucket[hash_key(key)]
+ end
+
+ def delete(key)
+ @bucket[hash_key(key)] = nil
+ end
+end
diff --git a/src/code/ruby/data_structures/linked_list.rb b/src/code/ruby/data_structures/linked_list.rb
new file mode 100644
index 0000000..6ec857d
--- /dev/null
+++ b/src/code/ruby/data_structures/linked_list.rb
@@ -0,0 +1,79 @@
+class ListNode
+ attr_accessor :data, :next
+
+ def initialize(data)
+ @data = data
+ @next = nil
+ end
+
+ def to_s
+ "[#{@data}]"
+ end
+end
+
+class LinkedList
+ attr_accessor :head
+
+ def initialize
+ @head = nil
+ end
+
+ def append(data)
+ if @head.nil?
+ @head = ListNode.new(data)
+ return
+ end
+
+ curr = @head
+ curr = curr.next while curr.next
+ curr.next = ListNode.new(data)
+ end
+
+ def delete(data)
+ return if @head.nil?
+
+ if @head.data == data
+ @head = @head.next
+ return
+ end
+
+ prev = nil
+ curr = @head
+
+ while curr
+ if curr.data == data
+ prev.next = curr.next
+ return
+ end
+ prev = curr
+ curr = curr.next
+ end
+ end
+
+ def reverse
+ prev = nil
+ curr = @head
+
+ while curr
+ nxt = curr.next
+ curr.next = prev
+ prev = curr
+ curr = nxt
+ end
+
+ @head = prev
+ end
+
+ def to_s
+ return 'nil' if @head.nil?
+
+ nodes = []
+ curr = @head
+ while curr
+ nodes << curr.to_s
+ curr = curr.next
+ end
+
+ nodes.join(' -> ') + ' -> nil'
+ end
+end
diff --git a/src/code/ruby/data_structures/trie.rb b/src/code/ruby/data_structures/trie.rb
new file mode 100644
index 0000000..d232127
--- /dev/null
+++ b/src/code/ruby/data_structures/trie.rb
@@ -0,0 +1,80 @@
+class TrieNode
+ attr_accessor :children, :is_word
+
+ def initialize
+ @children = {}
+ @is_word = false
+ end
+end
+
+class Trie
+ attr_accessor :root
+
+ def initialize
+ @root = TrieNode.new
+ end
+
+ def build(words)
+ words.each { |word| insert(word) }
+ end
+
+ def insert(word)
+ node = @root
+ word.each_char do |char|
+ node.children[char] ||= TrieNode.new
+ node = node.children[char]
+ end
+ node.is_word = true
+ end
+
+ def search(word)
+ node = @root
+ word.each_char do |char|
+ return false unless node.children.key?(char)
+ node = node.children[char]
+ end
+ node.is_word
+ end
+
+ def starts_with(prefix)
+ node = @root
+ prefix.each_char do |char|
+ return false unless node.children.key?(char)
+ node = node.children[char]
+ end
+ true
+ end
+
+ def collect_words(node = @root, prefix = '')
+ words = []
+ words << prefix if node.is_word
+ node.children.each do |char, child_node|
+ words.concat(collect_words(child_node, prefix + char))
+ end
+ words
+ end
+
+ def to_s
+ "Trie:\n" + print_trie(@root)
+ end
+
+ private
+
+ def print_trie(node, level = 0, prefix = '')
+ return '' unless node
+
+ output = ''
+ prefix_str = ' ' * level + prefix
+ output += prefix_str + ' ├─ (*)' + "\n" if node.is_word
+
+ node.children.each_with_index do |(char, child_node), i|
+ is_last = i == node.children.size - 1
+ marker = is_last ? '└─ ' : '├─ '
+ output += prefix_str + marker + char + "\n"
+ new_prefix = is_last ? ' ' : ' │'
+ output += print_trie(child_node, level + 1, new_prefix)
+ end
+
+ output
+ end
+end
diff --git a/src/code/ruby/data_structures/union_find.rb b/src/code/ruby/data_structures/union_find.rb
new file mode 100644
index 0000000..0b355b4
--- /dev/null
+++ b/src/code/ruby/data_structures/union_find.rb
@@ -0,0 +1,33 @@
+class UnionFind
+ attr_accessor :root
+
+ def initialize(n)
+ @root = Array.new(n) { |i| i }
+ end
+
+ def find(a)
+ return a if a == @root[a]
+
+ @root[a] = find(@root[a])
+ end
+
+ def union(a, b)
+ @root[find(a)] = find(b)
+ end
+
+ def connected(a, b)
+ find(a) == find(b)
+ end
+
+ def to_s
+ n = @root.size
+ components = Hash.new { |h, k| h[k] = [] }
+
+ (0...n).each do |i|
+ root_i = find(i)
+ components[root_i] << i
+ end
+
+ components.values.map { |comp| comp.map { |node| "(#{node})" }.join(' - ') }.join("\n")
+ end
+end
diff --git a/src/code/ruby/data_structures/union_find_optimized.rb b/src/code/ruby/data_structures/union_find_optimized.rb
new file mode 100644
index 0000000..50bcf15
--- /dev/null
+++ b/src/code/ruby/data_structures/union_find_optimized.rb
@@ -0,0 +1,46 @@
+class UnionFind
+ attr_accessor :root, :rank
+
+ def initialize(n)
+ @root = Array.new(n) { |i| i }
+ @rank = Array.new(n, 1)
+ end
+
+ def find(a)
+ return a if a == @root[a]
+
+ @root[a] = find(@root[a])
+ end
+
+ def union(a, b)
+ root_a = find(a)
+ root_b = find(b)
+
+ return if root_a == root_b
+
+ if @rank[root_a] < @rank[root_b]
+ @root[root_a] = root_b
+ elsif @rank[root_a] > @rank[root_b]
+ @root[root_b] = root_a
+ else
+ @root[root_b] = root_a
+ @rank[root_a] += 1
+ end
+ end
+
+ def connected(a, b)
+ find(a) == find(b)
+ end
+
+ def to_s
+ n = @root.size
+ components = Hash.new { |h, k| h[k] = [] }
+
+ (0...n).each do |i|
+ root_i = find(i)
+ components[root_i] << i
+ end
+
+ components.values.map { |comp| comp.map { |node| "(#{node})" }.join(' - ') }.join("\n")
+ end
+end
diff --git a/src/code/ruby/dynamic_programming/bottom_up.rb b/src/code/ruby/dynamic_programming/bottom_up.rb
new file mode 100644
index 0000000..4433940
--- /dev/null
+++ b/src/code/ruby/dynamic_programming/bottom_up.rb
@@ -0,0 +1,17 @@
+def fn(arr)
+ if BASE_CASE
+ return 0
+ end
+
+ dp = Array.new(STATE_FOR_WHOLE_INPUT + 1, BASE_CASE)
+
+ (SMALLEST_SUBPROBLEM..STATE_FOR_WHOLE_INPUT).each do |state|
+ if BASE_CASE
+ dp[state] = BASE_CASE
+ else
+ dp[state] = RECURRENCE_RELATION(state)
+ end
+ end
+
+ dp[STATE_FOR_WHOLE_INPUT]
+end
diff --git a/src/code/ruby/dynamic_programming/kadane.rb b/src/code/ruby/dynamic_programming/kadane.rb
new file mode 100644
index 0000000..081e5f7
--- /dev/null
+++ b/src/code/ruby/dynamic_programming/kadane.rb
@@ -0,0 +1,11 @@
+def kadane(arr)
+ curr_sub = arr[0]
+ max_sub = arr[0]
+
+ arr[1..-1].each do |num|
+ curr_sub = [curr_sub + num, num].max
+ max_sub = [max_sub, curr_sub].max
+ end
+
+ max_sub
+end
diff --git a/src/code/ruby/dynamic_programming/top_down.rb b/src/code/ruby/dynamic_programming/top_down.rb
new file mode 100644
index 0000000..788c719
--- /dev/null
+++ b/src/code/ruby/dynamic_programming/top_down.rb
@@ -0,0 +1,12 @@
+def fn(arr)
+ cache = {}
+
+ dp = lambda do |state|
+ return 0 if BASE_CASE
+ return cache[state] if cache.key?(state)
+
+ cache[state] = RECURRENCE_RELATION(state)
+ end
+
+ dp.call(STATE_FOR_WHOLE_INPUT)
+end
diff --git a/src/code/ruby/graph/bellman_ford.rb b/src/code/ruby/graph/bellman_ford.rb
new file mode 100644
index 0000000..1047e10
--- /dev/null
+++ b/src/code/ruby/graph/bellman_ford.rb
@@ -0,0 +1,20 @@
+def bellman_ford(n, edges, source)
+ distances = Array.new(n, Float::INFINITY)
+ distances[source] = 0
+
+ (n - 1).times do
+ edges.each do |u, v, w|
+ if distances[u] != Float::INFINITY && distances[u] + w < distances[v]
+ distances[v] = distances[u] + w
+ end
+ end
+ end
+
+ edges.each do |u, v, w|
+ if distances[u] != Float::INFINITY && distances[u] + w < distances[v]
+ return []
+ end
+ end
+
+ distances
+end
diff --git a/src/code/ruby/graph/bfs.rb b/src/code/ruby/graph/bfs.rb
new file mode 100644
index 0000000..53b29eb
--- /dev/null
+++ b/src/code/ruby/graph/bfs.rb
@@ -0,0 +1,20 @@
+require 'set'
+
+def fn(graph)
+ queue = [START_NODE]
+ seen = Set.new([START_NODE])
+ ans = 0
+
+ until queue.empty?
+ node = queue.shift
+ # TODO: logic
+ graph[node].each do |neighbor|
+ unless seen.include?(neighbor)
+ seen.add(neighbor)
+ queue << neighbor
+ end
+ end
+ end
+
+ ans
+end
diff --git a/src/code/ruby/graph/dfs_iterative.rb b/src/code/ruby/graph/dfs_iterative.rb
new file mode 100644
index 0000000..245b1b8
--- /dev/null
+++ b/src/code/ruby/graph/dfs_iterative.rb
@@ -0,0 +1,20 @@
+require 'set'
+
+def fn(graph)
+ stack = [START_NODE]
+ seen = Set.new([START_NODE])
+ ans = 0
+
+ until stack.empty?
+ node = stack.pop
+ # TODO: logic
+ graph[node].each do |neighbor|
+ unless seen.include?(neighbor)
+ seen.add(neighbor)
+ stack << neighbor
+ end
+ end
+ end
+
+ ans
+end
diff --git a/src/code/ruby/graph/dfs_recursive.rb b/src/code/ruby/graph/dfs_recursive.rb
new file mode 100644
index 0000000..e87921b
--- /dev/null
+++ b/src/code/ruby/graph/dfs_recursive.rb
@@ -0,0 +1,19 @@
+require 'set'
+
+def fn(graph)
+ seen = Set.new([START_NODE])
+
+ dfs = lambda do |node|
+ ans = 0
+ # TODO: logic
+ graph[node].each do |neighbor|
+ unless seen.include?(neighbor)
+ seen.add(neighbor)
+ ans += dfs.call(neighbor)
+ end
+ end
+ ans
+ end
+
+ dfs.call(START_NODE)
+end
diff --git a/src/code/ruby/graph/dijkstra.rb b/src/code/ruby/graph/dijkstra.rb
new file mode 100644
index 0000000..96a2283
--- /dev/null
+++ b/src/code/ruby/graph/dijkstra.rb
@@ -0,0 +1,26 @@
+require 'priority_queue'
+
+def dijkstras(graph, source)
+ n = graph.size
+ distances = Array.new(n, Float::INFINITY)
+
+ distances[source] = 0
+
+ heap = PriorityQueue.new
+ heap[source] = 0
+
+ until heap.empty?
+ node, curr_dist = heap.delete_min
+ next if curr_dist > distances[node]
+
+ graph[node].each do |neighbor, weight|
+ dist = curr_dist + weight
+ if dist < distances[neighbor]
+ distances[neighbor] = dist
+ heap[neighbor] = dist
+ end
+ end
+ end
+
+ distances
+end
diff --git a/src/code/ruby/graph/kahn.rb b/src/code/ruby/graph/kahn.rb
new file mode 100644
index 0000000..c82f1af
--- /dev/null
+++ b/src/code/ruby/graph/kahn.rb
@@ -0,0 +1,24 @@
+def kahn_topological_sort(graph)
+ result = []
+ indegree = Hash.new(0)
+
+ graph.each_value do |vertices|
+ vertices.each do |v|
+ indegree[v] += 1
+ end
+ end
+
+ queue = graph.keys.select { |node| indegree[node] == 0 }
+
+ until queue.empty?
+ node = queue.shift
+ result << node
+
+ graph[node].each do |neighbor|
+ indegree[neighbor] -= 1
+ queue << neighbor if indegree[neighbor] == 0
+ end
+ end
+
+ result.size == graph.size ? result : []
+end
diff --git a/src/code/ruby/graph/kruskal.rb b/src/code/ruby/graph/kruskal.rb
new file mode 100644
index 0000000..3075fc7
--- /dev/null
+++ b/src/code/ruby/graph/kruskal.rb
@@ -0,0 +1,12 @@
+def kruskal_mst(n, edges)
+ mst = []
+ uf = UnionFind.new(n)
+ edges.sort.each do |w, u, v|
+ unless uf.connected(u, v)
+ uf.union(u, v)
+ mst << [w, u, v]
+ end
+ end
+
+ mst
+end
diff --git a/src/code/ruby/graph/prim.rb b/src/code/ruby/graph/prim.rb
new file mode 100644
index 0000000..805b91a
--- /dev/null
+++ b/src/code/ruby/graph/prim.rb
@@ -0,0 +1,12 @@
+def prim_mst(n, edges)
+ mst = []
+ uf = UnionFind.new(n)
+ edges.sort.each do |w, u, v|
+ unless uf.connected(u, v)
+ uf.union(u, v)
+ mst << [w, u, v]
+ end
+ end
+
+ mst
+end
diff --git a/src/code/ruby/hash_map/find_number_of_subarrays.rb b/src/code/ruby/hash_map/find_number_of_subarrays.rb
new file mode 100644
index 0000000..744ece8
--- /dev/null
+++ b/src/code/ruby/hash_map/find_number_of_subarrays.rb
@@ -0,0 +1,14 @@
+def fn(arr, k)
+ counts = Hash.new(0)
+ counts[0] = 1
+ ans = 0
+ curr = 0
+
+ arr.each do |num|
+ # TODO: logic to change curr
+ ans += counts[curr - k]
+ counts[curr] += 1
+ end
+
+ ans
+end
diff --git a/src/code/ruby/hash_map/sliding_window.rb b/src/code/ruby/hash_map/sliding_window.rb
new file mode 100644
index 0000000..e089bde
--- /dev/null
+++ b/src/code/ruby/hash_map/sliding_window.rb
@@ -0,0 +1,20 @@
+require 'set'
+
+def fn(arr)
+ window = Set.new
+ ans = 0
+ left = 0
+
+ arr.each_with_index do |ELEMENT, right|
+ # TODO: add arr[right] to window
+
+ while WINDOW_CONDITION_BROKEN
+ # TODO: remove arr[left] from window
+ left += 1
+ end
+
+ # TODO: update ans
+ end
+
+ ans
+end
diff --git a/src/code/ruby/heap/find_top_k_elements.rb b/src/code/ruby/heap/find_top_k_elements.rb
new file mode 100644
index 0000000..fa80456
--- /dev/null
+++ b/src/code/ruby/heap/find_top_k_elements.rb
@@ -0,0 +1,15 @@
+def fn(arr, k)
+ heap = []
+
+ arr.each do |num|
+ # TODO: logic to push onto heap according to problem's criteria
+ heap.push([CRITERIA, num])
+
+ if heap.size > k
+ # TODO: pop the top element from heap
+ heap.pop
+ end
+ end
+
+ heap.map { |item| item[1] }
+end
diff --git a/src/code/ruby/linked_list/fast_and_slow_pointer.rb b/src/code/ruby/linked_list/fast_and_slow_pointer.rb
new file mode 100644
index 0000000..1cbf5f4
--- /dev/null
+++ b/src/code/ruby/linked_list/fast_and_slow_pointer.rb
@@ -0,0 +1,13 @@
+def fn(head)
+ slow = head
+ fast = head
+ ans = 0
+
+ until fast.nil? || fast.next.nil?
+ # TODO: logic
+ slow = slow.next
+ fast = fast.next.next
+ end
+
+ ans
+end
diff --git a/src/code/ruby/linked_list/reverse_linked_list.rb b/src/code/ruby/linked_list/reverse_linked_list.rb
new file mode 100644
index 0000000..67ae6bf
--- /dev/null
+++ b/src/code/ruby/linked_list/reverse_linked_list.rb
@@ -0,0 +1,13 @@
+def fn(head)
+ prev = nil
+ curr = head
+
+ until curr.nil?
+ nxt = curr.next
+ curr.next = prev
+ prev = curr
+ curr = nxt
+ end
+
+ prev
+end
diff --git a/src/code/ruby/matrix/create_copy.rb b/src/code/ruby/matrix/create_copy.rb
new file mode 100644
index 0000000..5824061
--- /dev/null
+++ b/src/code/ruby/matrix/create_copy.rb
@@ -0,0 +1,7 @@
+def fn(matrix)
+ r = matrix.size
+ c = matrix[0].size
+
+ create_matrix = Array.new(r) { Array.new(c, 0) }
+ copy_matrix = matrix.map(&:dup)
+end
diff --git a/src/code/ruby/matrix/diagonals.rb b/src/code/ruby/matrix/diagonals.rb
new file mode 100644
index 0000000..6a5a56e
--- /dev/null
+++ b/src/code/ruby/matrix/diagonals.rb
@@ -0,0 +1,7 @@
+def fn(matrix)
+ r = matrix.size
+ c = matrix[0].size
+
+ main_diagonal = (0...[r, c].min).map { |i| matrix[i][i] }
+ anti_diagonal = (0...[r, c].min).map { |i| matrix[i][-i - 1] }
+end
diff --git a/src/code/ruby/matrix/rotate_transpose.rb b/src/code/ruby/matrix/rotate_transpose.rb
new file mode 100644
index 0000000..013e2d6
--- /dev/null
+++ b/src/code/ruby/matrix/rotate_transpose.rb
@@ -0,0 +1,8 @@
+def fn(matrix)
+ r = matrix.size
+ c = matrix[0].size
+
+ transpose = matrix[0].zip(*matrix[1..-1])
+ rotate_left = transpose.reverse
+ rotate_right = transpose.map(&:reverse)
+end
diff --git a/src/code/ruby/sorting_algorithms/bogo_sort.rb b/src/code/ruby/sorting_algorithms/bogo_sort.rb
new file mode 100644
index 0000000..94da314
--- /dev/null
+++ b/src/code/ruby/sorting_algorithms/bogo_sort.rb
@@ -0,0 +1,7 @@
+def bogo_sort(arr)
+ target = arr.sort
+
+ until arr == target
+ arr.shuffle!
+ end
+end
diff --git a/src/code/ruby/sorting_algorithms/bubble_sort.rb b/src/code/ruby/sorting_algorithms/bubble_sort.rb
new file mode 100644
index 0000000..6da8697
--- /dev/null
+++ b/src/code/ruby/sorting_algorithms/bubble_sort.rb
@@ -0,0 +1,16 @@
+def bubble_sort(arr)
+ n = arr.size
+
+ n.times do |i|
+ swapped = false
+
+ (0...(n - i - 1)).each do |j|
+ if arr[j] > arr[j + 1]
+ arr[j], arr[j + 1] = arr[j + 1], arr[j]
+ swapped = true
+ end
+ end
+
+ break unless swapped
+ end
+end
diff --git a/src/code/ruby/sorting_algorithms/bucket_sort.rb b/src/code/ruby/sorting_algorithms/bucket_sort.rb
new file mode 100644
index 0000000..bfa1256
--- /dev/null
+++ b/src/code/ruby/sorting_algorithms/bucket_sort.rb
@@ -0,0 +1,14 @@
+def bucket_sort(arr)
+ num_buckets = 10
+ min_num = arr.min
+ max_num = arr.max
+ bucket_size = (max_num - min_num).to_f / num_buckets
+ buckets = Array.new(num_buckets) { [] }
+
+ arr.each do |num|
+ index = [( (num - min_num) / bucket_size ).to_i, num_buckets - 1].min
+ buckets[index] << num
+ end
+
+ buckets.map { |bucket| bucket.sort }.flatten
+end
diff --git a/src/code/ruby/sorting_algorithms/counting_sort.rb b/src/code/ruby/sorting_algorithms/counting_sort.rb
new file mode 100644
index 0000000..3b93f45
--- /dev/null
+++ b/src/code/ruby/sorting_algorithms/counting_sort.rb
@@ -0,0 +1,23 @@
+
+def counting_sort(arr)
+ max_num = arr.max
+ min_num = arr.min
+ count_range = max_num - min_num + 1
+ count = Array.new(count_range, 0)
+ output = Array.new(arr.size, 0)
+
+ arr.each do |num|
+ count[num - min_num] += 1
+ end
+
+ (1...count_range).each do |i|
+ count[i] += count[i - 1]
+ end
+
+ arr.reverse_each do |num|
+ output[count[num - min_num] - 1] = num
+ count[num - min_num] -= 1
+ end
+
+ output
+end
diff --git a/src/code/ruby/sorting_algorithms/cube_sort.rb b/src/code/ruby/sorting_algorithms/cube_sort.rb
new file mode 100644
index 0000000..04185f5
--- /dev/null
+++ b/src/code/ruby/sorting_algorithms/cube_sort.rb
@@ -0,0 +1,28 @@
+def cube_sort(arr, processors)
+ n = arr.size
+ subarrays = []
+ subarray_size = n / processors
+
+ (0...processors).each do |i|
+ subarray = arr[i * subarray_size, subarray_size]
+ subarrays << subarray
+ end
+
+ subarrays.each(&:sort!)
+
+ (0...(processors.bit_length - 1)).each do |dimension|
+ (0...processors).each do |i|
+ partner = i ^ (1 << dimension)
+ if i < partner
+ merged = subarrays[i] + subarrays[partner]
+ else
+ merged = subarrays[partner] + subarrays[i]
+ end
+ merged.sort!
+ subarrays[i] = merged[0...subarray_size]
+ subarrays[partner] = merged[subarray_size, subarray_size]
+ end
+ end
+
+ arr.replace(subarrays.flatten)
+end
diff --git a/src/code/ruby/sorting_algorithms/heap_sort.rb b/src/code/ruby/sorting_algorithms/heap_sort.rb
new file mode 100644
index 0000000..7cc85bd
--- /dev/null
+++ b/src/code/ruby/sorting_algorithms/heap_sort.rb
@@ -0,0 +1,28 @@
+def heap_sort(arr)
+ n = arr.size
+
+ (n / 2 - 1).downto(0) do |i|
+ heapify(arr, n, i)
+ end
+
+ (n - 1).downto(1) do |i|
+ arr[i], arr[0] = arr[0], arr[i]
+ heapify(arr, i, 0)
+ end
+
+ arr
+end
+
+def heapify(arr, n, i)
+ largest = i
+ left = 2 * i + 1
+ right = 2 * i + 2
+
+ largest = left if left < n && arr[left] > arr[largest]
+ largest = right if right < n && arr[right] > arr[largest]
+
+ if largest != i
+ arr[i], arr[largest] = arr[largest], arr[i]
+ heapify(arr, n, largest)
+ end
+end
diff --git a/src/code/ruby/sorting_algorithms/insertion_sort.rb b/src/code/ruby/sorting_algorithms/insertion_sort.rb
new file mode 100644
index 0000000..442342b
--- /dev/null
+++ b/src/code/ruby/sorting_algorithms/insertion_sort.rb
@@ -0,0 +1,15 @@
+def insertion_sort(arr)
+ n = arr.size
+
+ (1...n).each do |i|
+ key = arr[i]
+ j = i - 1
+
+ while j >= 0 && key < arr[j]
+ arr[j + 1] = arr[j]
+ j -= 1
+ end
+
+ arr[j + 1] = key
+ end
+end
diff --git a/src/code/ruby/sorting_algorithms/merge_sort.rb b/src/code/ruby/sorting_algorithms/merge_sort.rb
new file mode 100644
index 0000000..4f7cc41
--- /dev/null
+++ b/src/code/ruby/sorting_algorithms/merge_sort.rb
@@ -0,0 +1,24 @@
+def merge_sort(arr)
+ n = arr.size
+ return arr if n <= 1
+
+ mid = n / 2
+ left = merge_sort(arr[0...mid])
+ right = merge_sort(arr[mid..-1])
+
+ merge(left, right)
+end
+
+def merge(left, right)
+ output = []
+
+ until left.empty? || right.empty?
+ if left.first <= right.first
+ output << left.shift
+ else
+ output << right.shift
+ end
+ end
+
+ output + left + right
+end
diff --git a/src/code/ruby/sorting_algorithms/pancake_sort.rb b/src/code/ruby/sorting_algorithms/pancake_sort.rb
new file mode 100644
index 0000000..bd50db4
--- /dev/null
+++ b/src/code/ruby/sorting_algorithms/pancake_sort.rb
@@ -0,0 +1,32 @@
+def pancake_sort(arr)
+ n = arr.size
+
+ (2..n).to_a.reverse.each do |size|
+ max_idx = find_max_index(arr, size)
+
+ if max_idx != size - 1
+ flip(arr, max_idx)
+ flip(arr, size - 1)
+ end
+ end
+end
+
+def flip(arr, i)
+ left = 0
+
+ while left < i
+ arr[left], arr[i] = arr[i], arr[left]
+ left += 1
+ i -= 1
+ end
+end
+
+def find_max_index(arr, n)
+ max_idx = 0
+
+ n.times do |i|
+ max_idx = i if arr[i] > arr[max_idx]
+ end
+
+ max_idx
+end
diff --git a/src/code/ruby/sorting_algorithms/quick_sort.rb b/src/code/ruby/sorting_algorithms/quick_sort.rb
new file mode 100644
index 0000000..cb6ea0b
--- /dev/null
+++ b/src/code/ruby/sorting_algorithms/quick_sort.rb
@@ -0,0 +1,10 @@
+def quick_sort(arr)
+ n = arr.size
+ return arr if n <= 1
+
+ pivot = arr[n / 2]
+ left = arr.select { |x| x < pivot }
+ right = arr.select { |x| x > pivot }
+
+ quick_sort(left) + [pivot] + quick_sort(right)
+end
diff --git a/src/code/ruby/sorting_algorithms/radix_sort.rb b/src/code/ruby/sorting_algorithms/radix_sort.rb
new file mode 100644
index 0000000..c6362ec
--- /dev/null
+++ b/src/code/ruby/sorting_algorithms/radix_sort.rb
@@ -0,0 +1,34 @@
+def radix_sort(arr)
+ max_val = arr.max
+ exp = 1
+
+ while max_val / exp > 0
+ counting_sort(arr, exp)
+ exp *= 10
+ end
+end
+
+def counting_sort(arr, exp)
+ n = arr.size
+ output = Array.new(n, 0)
+ count = Array.new(10, 0)
+
+ n.times do |i|
+ idx = arr[i] / exp
+ count[idx % 10] += 1
+ end
+
+ (1...10).each do |i|
+ count[i] += count[i - 1]
+ end
+
+ (n - 1).downto(0) do |i|
+ idx = arr[i] / exp
+ output[count[idx % 10] - 1] = arr[i]
+ count[idx % 10] -= 1
+ end
+
+ n.times do |i|
+ arr[i] = output[i]
+ end
+end
diff --git a/src/code/ruby/sorting_algorithms/selection_sort.rb b/src/code/ruby/sorting_algorithms/selection_sort.rb
new file mode 100644
index 0000000..bc8e058
--- /dev/null
+++ b/src/code/ruby/sorting_algorithms/selection_sort.rb
@@ -0,0 +1,13 @@
+def selection_sort(arr)
+ n = arr.size
+
+ n.times do |i|
+ min_i = i
+
+ ((i + 1)...n).each do |j|
+ min_i = j if arr[j] < arr[min_i]
+ end
+
+ arr[i], arr[min_i] = arr[min_i], arr[i] if min_i != i
+ end
+end
diff --git a/src/code/ruby/sorting_algorithms/shell_sort.rb b/src/code/ruby/sorting_algorithms/shell_sort.rb
new file mode 100644
index 0000000..2a750a4
--- /dev/null
+++ b/src/code/ruby/sorting_algorithms/shell_sort.rb
@@ -0,0 +1,18 @@
+def shell_sort(arr)
+ n = arr.size
+ gaps = [701, 301, 132, 57, 23, 10, 4, 1]
+
+ gaps.each do |gap|
+ (gap...n).each do |i|
+ tmp = arr[i]
+ j = i
+
+ while j >= gap && arr[j - gap] > tmp
+ arr[j] = arr[j - gap]
+ j -= gap
+ end
+
+ arr[j] = tmp if j != i
+ end
+ end
+end
diff --git a/src/code/ruby/sorting_algorithms/sleep_sort.rb b/src/code/ruby/sorting_algorithms/sleep_sort.rb
new file mode 100644
index 0000000..dc8b244
--- /dev/null
+++ b/src/code/ruby/sorting_algorithms/sleep_sort.rb
@@ -0,0 +1,14 @@
+def sleep_sort(arr)
+ sorted_arr = []
+ threads = []
+
+ arr.each do |num|
+ threads << Thread.new do
+ sleep(num / 1000.0)
+ sorted_arr << num
+ end
+ end
+
+ threads.each(&:join)
+ sorted_arr
+end
diff --git a/src/code/ruby/sorting_algorithms/tim_sort.rb b/src/code/ruby/sorting_algorithms/tim_sort.rb
new file mode 100644
index 0000000..6feda10
--- /dev/null
+++ b/src/code/ruby/sorting_algorithms/tim_sort.rb
@@ -0,0 +1,58 @@
+def tim_sort(arr)
+ n = arr.size
+ min_run = 32
+
+ (0...n).step(min_run) do |start_idx|
+ end_idx = [start_idx + min_run - 1, n - 1].min
+ insertion_sort(arr, start_idx, end_idx)
+ end
+
+ size = min_run
+
+ while size < n
+ (0...n).step(2 * size) do |left|
+ mid = [left + size - 1, n - 1].min
+ right = [left + 2 * size - 1, n - 1].min
+ arr[left..right] = merge(arr[left..mid], arr[(mid + 1)..right])
+ end
+ size *= 2
+ end
+
+ arr
+end
+
+def insertion_sort(arr, left, right)
+ (left + 1..right).each do |i|
+ key = arr[i]
+ j = i
+ while j > left && key < arr[j - 1]
+ arr[j] = arr[j - 1]
+ j -= 1
+ end
+ arr[j] = key
+ end
+end
+
+def merge_sort(arr)
+ return arr if arr.size <= 1
+
+ mid = arr.size / 2
+ left = merge_sort(arr[0...mid])
+ right = merge_sort(arr[mid..-1])
+
+ merge(left, right)
+end
+
+def merge(left, right)
+ output = []
+
+ until left.empty? || right.empty?
+ if left.first <= right.first
+ output << left.shift
+ else
+ output << right.shift
+ end
+ end
+
+ output + left + right
+end
diff --git a/src/code/ruby/stack/monotonic_decreasing.rb b/src/code/ruby/stack/monotonic_decreasing.rb
new file mode 100644
index 0000000..491c954
--- /dev/null
+++ b/src/code/ruby/stack/monotonic_decreasing.rb
@@ -0,0 +1,14 @@
+def fn(arr)
+ stack = []
+ ans = 0
+
+ arr.each do |num|
+ while !stack.empty? && stack[-1] < num
+ # TODO: logic
+ stack.pop
+ end
+ stack << num
+ end
+
+ ans
+end
diff --git a/src/code/ruby/stack/monotonic_increasing.rb b/src/code/ruby/stack/monotonic_increasing.rb
new file mode 100644
index 0000000..e656b33
--- /dev/null
+++ b/src/code/ruby/stack/monotonic_increasing.rb
@@ -0,0 +1,14 @@
+def fn(arr)
+ stack = []
+ ans = 0
+
+ arr.each do |num|
+ while !stack.empty? && stack[-1] > num
+ # TODO: logic
+ stack.pop
+ end
+ stack << num
+ end
+
+ ans
+end
From e7622b90c3bee5b85dba88a82fd9962a84bbee05 Mon Sep 17 00:00:00 2001
From: Shiva Bhusal
Date: Thu, 27 Nov 2025 13:13:21 +0545
Subject: [PATCH 4/5] Adds Ruby language support and various algorithm
implementations
---
src/components/Code/index.tsx | 4 ++-
src/components/Language/context.tsx | 2 +-
src/components/Tabs/index.tsx | 14 ++++++++---
src/icons/Ruby.tsx | 7 ++++++
src/sections/Array/index.tsx | 11 +++++++++
src/sections/Backtracking/index.tsx | 2 ++
src/sections/BinarySearch/index.tsx | 10 ++++++++
src/sections/BinaryTree/index.tsx | 7 ++++++
src/sections/BitManipulation/index.tsx | 20 +++++++++++++++
src/sections/DataStructures/index.tsx | 20 +++++++++++++++
src/sections/DynamicProgramming/index.tsx | 6 +++++
src/sections/Graph/index.tsx | 16 ++++++++++++
src/sections/HashMap/index.tsx | 4 +++
src/sections/Heap/index.tsx | 2 ++
src/sections/LinkedList/index.tsx | 4 +++
src/sections/Matrix/index.tsx | 6 +++++
src/sections/SortingAlgorithms/index.tsx | 30 +++++++++++++++++++++++
src/sections/Stack/index.tsx | 4 +++
18 files changed, 164 insertions(+), 5 deletions(-)
create mode 100644 src/icons/Ruby.tsx
diff --git a/src/components/Code/index.tsx b/src/components/Code/index.tsx
index 007f904..dff2e8b 100644
--- a/src/components/Code/index.tsx
+++ b/src/components/Code/index.tsx
@@ -7,6 +7,7 @@ import clsx from '@utils/clsx'
import cpp from 'highlight.js/lib/languages/cpp'
import hljs from 'highlight.js/lib/core'
import java from 'highlight.js/lib/languages/java'
+import ruby from 'highlight.js/lib/languages/ruby'
import javascript from 'highlight.js/lib/languages/javascript'
import python from './python'
@@ -15,11 +16,12 @@ hljs.registerLanguage('python', python)
hljs.registerLanguage('javascript', javascript)
hljs.registerLanguage('java', java)
hljs.registerLanguage('cpp', cpp)
+hljs.registerLanguage('ruby', ruby)
interface CodeProps {
code: string
- language: 'python' | 'javascript' | 'java' | 'cpp'
+ language: 'python' | 'javascript' | 'java' | 'cpp' | 'ruby'
}
diff --git a/src/components/Language/context.tsx b/src/components/Language/context.tsx
index eb2c964..94480e0 100644
--- a/src/components/Language/context.tsx
+++ b/src/components/Language/context.tsx
@@ -7,7 +7,7 @@ import {
} from 'react'
-type Language = 'python' | 'javascript' | 'java' | 'cpp'
+type Language = 'python' | 'javascript' | 'java' | 'cpp' | 'ruby'
interface LanguageContextType {
selectedLanguage: Language
diff --git a/src/components/Tabs/index.tsx b/src/components/Tabs/index.tsx
index dee38ed..6a49950 100644
--- a/src/components/Tabs/index.tsx
+++ b/src/components/Tabs/index.tsx
@@ -1,6 +1,6 @@
import styles from './tabs.module.sass'
-import { Children, ReactElement, ReactNode } from 'react'
+import {Children, ReactElement, ReactNode} from 'react'
import Code from '@components/Code'
import CopyButton from '@components/CopyButton'
@@ -9,6 +9,7 @@ import SvgPython from '@icons/Python'
import SvgJavascript from '@/icons/Javascript'
import SvgCpp from '@icons/Cpp'
import SvgJava from '@/icons/Java'
+import SvgRuby from '@/icons/Ruby'
import { useLanguage } from '@components/Language/context'
interface TabsProps {
@@ -18,7 +19,7 @@ interface TabsProps {
interface TabProps {
code: string
- language: 'python' | 'javascript' | 'java' | 'cpp'
+ language: 'python' | 'javascript' | 'java' | 'cpp' | 'ruby'
}
const LANGUAGE_ICONS = {
@@ -26,6 +27,7 @@ const LANGUAGE_ICONS = {
javascript: SvgJavascript,
cpp: SvgCpp,
java: SvgJava,
+ ruby: SvgRuby,
}
export default function Tabs({ title, children }: TabsProps) {
@@ -34,7 +36,13 @@ export default function Tabs({ title, children }: TabsProps) {
const activeIndex = tabs.findIndex(
(tab) => tab.props.language === selectedLanguage
)
- const code = tabs[activeIndex].props.code
+ let code = ''
+ try{
+ code = tabs[activeIndex].props.code
+ }catch(e)
+ {
+ // debugger
+ }
const language = tabs[activeIndex].props.language
const changeTab = (index: number) => {
diff --git a/src/icons/Ruby.tsx b/src/icons/Ruby.tsx
new file mode 100644
index 0000000..3401448
--- /dev/null
+++ b/src/icons/Ruby.tsx
@@ -0,0 +1,7 @@
+export default function SvgRuby() {
+ return (
+
+ )
+}
diff --git a/src/sections/Array/index.tsx b/src/sections/Array/index.tsx
index fb1e2fc..ed366cd 100644
--- a/src/sections/Array/index.tsx
+++ b/src/sections/Array/index.tsx
@@ -26,6 +26,12 @@ import SlidingWindowCPP from '@code/cpp/array/sliding_window.cpp?raw'
import PrefixSumCPP from '@code/cpp/array/prefix_sum.cpp?raw'
import StringBuildingCPP from '@code/cpp/array/string_building.cpp?raw'
+import TwoPointersOneInputRuby from '@code/ruby/array/two_pointers_one_input.rb?raw'
+import TwoPointersTwoInputsRuby from '@code/ruby/array/two_pointers_two_inputs.rb?raw'
+import SlidingWindowRuby from '@code/ruby/array/sliding_window.rb?raw'
+import PrefixSumRuby from '@code/ruby/array/prefix_sum.rb?raw'
+import StringBuildingRuby from '@code/ruby/array/string_building.rb?raw'
+
export default function Array() {
return (
@@ -37,6 +43,7 @@ export default function Array() {
+
@@ -53,6 +61,7 @@ export default function Array() {
+
@@ -61,6 +70,7 @@ export default function Array() {
+
@@ -69,6 +79,7 @@ export default function Array() {
+
diff --git a/src/sections/Backtracking/index.tsx b/src/sections/Backtracking/index.tsx
index 3b1b3ac..958ea28 100644
--- a/src/sections/Backtracking/index.tsx
+++ b/src/sections/Backtracking/index.tsx
@@ -6,6 +6,7 @@ import BacktrackingPY from '@code/python/backtracking/backtracking.py?raw'
import BacktrackingJS from '@code/javascript/backtracking/backtracking.js?raw'
import BacktrackingJAVA from '@code/java/backtracking/backtracking.java?raw'
import BacktrackingCPP from '@code/cpp/backtracking/backtracking.cpp?raw'
+import BacktrackingRuby from '@code/ruby/backtracking/backtracking.rb?raw'
export default function Backtracking() {
@@ -18,6 +19,7 @@ export default function Backtracking() {
+
diff --git a/src/sections/BinarySearch/index.tsx b/src/sections/BinarySearch/index.tsx
index 5ca6333..c24a86b 100644
--- a/src/sections/BinarySearch/index.tsx
+++ b/src/sections/BinarySearch/index.tsx
@@ -26,6 +26,11 @@ import DuplicateElementsRightInsertionCPP from '@code/cpp/binary_search/duplicat
import GreedyMinimumCPP from '@code/cpp/binary_search/greedy_minimum.cpp?raw'
import GreedyMaximumCPP from '@code/cpp/binary_search/greedy_maximum.cpp?raw'
+import BinarySearchRuby from '@code/ruby/binary_search/binary_search.rb?raw'
+import DuplicateElementsLeftInsertionRuby from '@code/ruby/binary_search/duplicate_elements_left_insertion.rb?raw'
+import DuplicateElementsRightInsertionRuby from '@code/ruby/binary_search/duplicate_elements_right_insertion.rb?raw'
+import GreedyMinimumRuby from '@code/ruby/binary_search/greedy_minimum.rb?raw'
+import GreedyMaximumRuby from '@code/ruby/binary_search/greedy_maximum.rb?raw'
export default function BinarySearch() {
return (
@@ -37,6 +42,7 @@ export default function BinarySearch() {
+
@@ -45,6 +51,7 @@ export default function BinarySearch() {
+
@@ -53,6 +60,7 @@ export default function BinarySearch() {
+
@@ -61,6 +69,7 @@ export default function BinarySearch() {
+
@@ -69,6 +78,7 @@ export default function BinarySearch() {
+
diff --git a/src/sections/BinaryTree/index.tsx b/src/sections/BinaryTree/index.tsx
index a0f6221..9db1c07 100644
--- a/src/sections/BinaryTree/index.tsx
+++ b/src/sections/BinaryTree/index.tsx
@@ -18,6 +18,10 @@ import DFSrecursiveCPP from '@code/cpp/binary_tree/dfs_recursive.cpp?raw'
import DFSiterativeCPP from '@code/cpp/binary_tree/dfs_iterative.cpp?raw'
import BFSCPP from '@code/cpp/binary_tree/bfs.cpp?raw'
+import DFSrecursiveRuby from '@code/ruby/binary_tree/dfs_recursive.rb?raw'
+import DFSiterativeRuby from '@code/ruby/binary_tree/dfs_iterative.rb?raw'
+import BFSRuby from '@code/ruby/binary_tree/bfs.rb?raw'
+
export default function BinaryTree() {
return (
@@ -29,6 +33,7 @@ export default function BinaryTree() {
+
@@ -37,6 +42,7 @@ export default function BinaryTree() {
+
@@ -45,6 +51,7 @@ export default function BinaryTree() {
+
diff --git a/src/sections/BitManipulation/index.tsx b/src/sections/BitManipulation/index.tsx
index 69d3ef2..44eb94a 100644
--- a/src/sections/BitManipulation/index.tsx
+++ b/src/sections/BitManipulation/index.tsx
@@ -46,6 +46,16 @@ import DivideByPowerOfTwoCPP from '@code/cpp/bit_manipulation/divide_power_of_tw
import CheckPowerOfTwoCPP from '@code/cpp/bit_manipulation/check_power_of_two.cpp?raw'
import SwapVariablesCPP from '@code/cpp/bit_manipulation/swap_variables.cpp?raw'
+import TestKthBitRuby from '@code/ruby/bit_manipulation/test_kth_bit.rb?raw'
+import SetKthBitRuby from '@code/ruby/bit_manipulation/set_kth_bit.rb?raw'
+import ClearKthBitRuby from '@code/ruby/bit_manipulation/clear_kth_bit.rb?raw'
+import ToggleKthBitRuby from '@code/ruby/bit_manipulation/toggle_kth_bit.rb?raw'
+import GetRightmostBitRuby from '@code/ruby/bit_manipulation/get_rightmost_bit.rb?raw'
+import CountSetBitsRuby from '@code/ruby/bit_manipulation/count_set_bits.rb?raw'
+import MultiplyByPowerOfTwoRuby from '@code/ruby/bit_manipulation/multiply_power_of_two.rb?raw'
+import DivideByPowerOfTwoRuby from '@code/ruby/bit_manipulation/divide_power_of_two.rb?raw'
+import CheckPowerOfTwoRuby from '@code/ruby/bit_manipulation/check_power_of_two.rb?raw'
+import SwapVariablesRuby from '@code/ruby/bit_manipulation/swap_variables.rb?raw'
export default function BitManipulation() {
return (
@@ -57,6 +67,7 @@ export default function BitManipulation() {
+
@@ -65,6 +76,7 @@ export default function BitManipulation() {
+
@@ -73,6 +85,7 @@ export default function BitManipulation() {
+
@@ -81,6 +94,7 @@ export default function BitManipulation() {
+
@@ -89,6 +103,7 @@ export default function BitManipulation() {
+
@@ -97,6 +112,7 @@ export default function BitManipulation() {
+
@@ -105,6 +121,7 @@ export default function BitManipulation() {
+
@@ -113,6 +130,7 @@ export default function BitManipulation() {
+
@@ -121,6 +139,7 @@ export default function BitManipulation() {
+
@@ -129,6 +148,7 @@ export default function BitManipulation() {
+
diff --git a/src/sections/DataStructures/index.tsx b/src/sections/DataStructures/index.tsx
index d0bbcd3..2cf4446 100644
--- a/src/sections/DataStructures/index.tsx
+++ b/src/sections/DataStructures/index.tsx
@@ -46,6 +46,16 @@ import TrieCPP from '@code/cpp/data_structures/trie.cpp?raw'
import UnionFindCPP from '@code/cpp/data_structures/union_find.cpp?raw'
import UnionFindOptimizedCPP from '@code/cpp/data_structures/union_find_optimized.cpp?raw'
+import ArrayRuby from '@code/ruby/data_structures/array.rb?raw'
+import BinaryTreeRuby from '@code/ruby/data_structures/binary_tree.rb?raw'
+import BinarySearchTreeRuby from '@code/ruby/data_structures/binary_search_tree.rb?raw'
+import LinkedListRuby from '@code/ruby/data_structures/linked_list.rb?raw'
+import DoublyLinkedListRuby from '@code/ruby/data_structures/doubly_linked_list.rb?raw'
+import GraphRuby from '@code/ruby/data_structures/graph.rb?raw'
+import HashMapRuby from '@code/ruby/data_structures/hash_map.rb?raw'
+import TrieRuby from '@code/ruby/data_structures/trie.rb?raw'
+import UnionFindRuby from '@code/ruby/data_structures/union_find.rb?raw'
+import UnionFindOptimizedRuby from '@code/ruby/data_structures/union_find_optimized.rb?raw'
export default function DataStructures() {
return (
@@ -57,6 +67,7 @@ export default function DataStructures() {
+
@@ -65,6 +76,7 @@ export default function DataStructures() {
+
@@ -73,6 +85,7 @@ export default function DataStructures() {
+
@@ -81,6 +94,7 @@ export default function DataStructures() {
+
@@ -89,6 +103,7 @@ export default function DataStructures() {
+
@@ -97,6 +112,7 @@ export default function DataStructures() {
+
@@ -105,6 +121,7 @@ export default function DataStructures() {
+
@@ -113,6 +130,7 @@ export default function DataStructures() {
+
@@ -121,6 +139,7 @@ export default function DataStructures() {
+
@@ -129,6 +148,7 @@ export default function DataStructures() {
+
diff --git a/src/sections/DynamicProgramming/index.tsx b/src/sections/DynamicProgramming/index.tsx
index 2d1603a..7498c32 100644
--- a/src/sections/DynamicProgramming/index.tsx
+++ b/src/sections/DynamicProgramming/index.tsx
@@ -18,6 +18,9 @@ import TopDownCPP from '@code/cpp/dynamic_programming/top_down.cpp?raw'
import BottomUpCPP from '@code/cpp/dynamic_programming/bottom_up.cpp?raw'
import KadaneCPP from '@code/cpp/dynamic_programming/kadane.cpp?raw'
+import TopDownRuby from '@code/ruby/dynamic_programming/top_down.rb?raw'
+import BottomUpRuby from '@code/ruby/dynamic_programming/bottom_up.rb?raw'
+import KadaneRuby from '@code/ruby/dynamic_programming/kadane.rb?raw'
export default function DynamicProgramming() {
return (
@@ -29,6 +32,7 @@ export default function DynamicProgramming() {
+
@@ -37,6 +41,7 @@ export default function DynamicProgramming() {
+
@@ -45,6 +50,7 @@ export default function DynamicProgramming() {
+
diff --git a/src/sections/Graph/index.tsx b/src/sections/Graph/index.tsx
index 058e407..5f1ea7a 100644
--- a/src/sections/Graph/index.tsx
+++ b/src/sections/Graph/index.tsx
@@ -38,6 +38,14 @@ import KahnCPP from '@code/cpp/graph/kahn.cpp?raw'
import KruskalCPP from '@code/cpp/graph/kruskal.cpp?raw'
import PrimCPP from '@code/cpp/graph/prim.cpp?raw'
+import DFSrecursiveRuby from '@code/ruby/graph/dfs_recursive.rb?raw'
+import DFSiterativeRuby from '@code/ruby/graph/dfs_iterative.rb?raw'
+import BFSRuby from '@code/ruby/graph/bfs.rb?raw'
+import DijkstraRuby from '@code/ruby/graph/dijkstra.rb?raw'
+import BellmanFordRuby from '@code/ruby/graph/bellman_ford.rb?raw'
+import KahnRuby from '@code/ruby/graph/kahn.rb?raw'
+import KruskalRuby from '@code/ruby/graph/kruskal.rb?raw'
+import PrimRuby from '@code/ruby/graph/prim.rb?raw'
export default function Graph() {
return (
@@ -49,6 +57,7 @@ export default function Graph() {
+
@@ -57,6 +66,7 @@ export default function Graph() {
+
@@ -65,6 +75,7 @@ export default function Graph() {
+
@@ -73,6 +84,7 @@ export default function Graph() {
+
@@ -81,6 +93,7 @@ export default function Graph() {
+
@@ -89,6 +102,7 @@ export default function Graph() {
+
@@ -97,6 +111,7 @@ export default function Graph() {
+
@@ -105,6 +120,7 @@ export default function Graph() {
+
diff --git a/src/sections/HashMap/index.tsx b/src/sections/HashMap/index.tsx
index 2387b83..841c835 100644
--- a/src/sections/HashMap/index.tsx
+++ b/src/sections/HashMap/index.tsx
@@ -14,6 +14,8 @@ import SlidingWindowJAVA from '@code/java/hash_map/sliding_window.java?raw'
import FindNumberOfSubarraysCPP from '@code/cpp/hash_map/find_number_of_subarrays.cpp?raw'
import SlidingWindowCPP from '@code/cpp/hash_map/sliding_window.cpp?raw'
+import FindNumberOfSubarraysRuby from '@code/ruby/hash_map/find_number_of_subarrays.rb?raw'
+import SlidingWindowRuby from '@code/ruby/hash_map/sliding_window.rb?raw'
export default function HashMap() {
return (
@@ -25,6 +27,7 @@ export default function HashMap() {
+
@@ -33,6 +36,7 @@ export default function HashMap() {
+
diff --git a/src/sections/Heap/index.tsx b/src/sections/Heap/index.tsx
index 171ee5c..8fb8589 100644
--- a/src/sections/Heap/index.tsx
+++ b/src/sections/Heap/index.tsx
@@ -6,6 +6,7 @@ import FindTopKElementsPY from '@code/python/heap/find_top_k_elements.py?raw'
import FindTopKElementsJS from '@code/javascript/heap/find_top_k_elements.js?raw'
import FindTopKElementsJAVA from '@code/java/heap/find_top_k_elements.java?raw'
import FindTopKElementsCPP from '@code/cpp/heap/find_top_k_elements.cpp?raw'
+import FindTopKElementsRuby from '@code/ruby/heap/find_top_k_elements.rb?raw'
export default function Heap() {
@@ -18,6 +19,7 @@ export default function Heap() {
+
diff --git a/src/sections/LinkedList/index.tsx b/src/sections/LinkedList/index.tsx
index 0ab9907..818f0df 100644
--- a/src/sections/LinkedList/index.tsx
+++ b/src/sections/LinkedList/index.tsx
@@ -14,6 +14,8 @@ import ReverseLinkedListJAVA from '@code/java/linked_list/reverse_linked_list.ja
import FastAndSlowPointerCPP from '@code/cpp/linked_list/fast_and_slow_pointer.cpp?raw'
import ReverseLinkedListCPP from '@code/cpp/linked_list/reverse_linked_list.cpp?raw'
+import FastAndSlowPointerRuby from '@code/ruby/linked_list/fast_and_slow_pointer.rb?raw'
+import ReverseLinkedListRuby from '@code/ruby/linked_list/reverse_linked_list.rb?raw'
export default function LinkedList() {
return (
@@ -25,6 +27,7 @@ export default function LinkedList() {
+
@@ -33,6 +36,7 @@ export default function LinkedList() {
+
diff --git a/src/sections/Matrix/index.tsx b/src/sections/Matrix/index.tsx
index 9266b5b..bdc9c22 100644
--- a/src/sections/Matrix/index.tsx
+++ b/src/sections/Matrix/index.tsx
@@ -18,6 +18,9 @@ import CreateCopyCPP from '@code/cpp/matrix/create_copy.cpp?raw'
import DiagonalsCPP from '@code/cpp/matrix/diagonals.cpp?raw'
import RotateTransposeCPP from '@code/cpp/matrix/rotate_transpose.cpp?raw'
+import CreateCopyRuby from '@code/ruby/matrix/create_copy.rb?raw'
+import DiagonalsRuby from '@code/ruby/matrix/diagonals.rb?raw'
+import RotateTransposeRuby from '@code/ruby/matrix/rotate_transpose.rb?raw'
export default function Matrix() {
return (
@@ -29,6 +32,7 @@ export default function Matrix() {
+
@@ -37,6 +41,7 @@ export default function Matrix() {
+
@@ -45,6 +50,7 @@ export default function Matrix() {
+
diff --git a/src/sections/SortingAlgorithms/index.tsx b/src/sections/SortingAlgorithms/index.tsx
index 83b59bd..5577efc 100644
--- a/src/sections/SortingAlgorithms/index.tsx
+++ b/src/sections/SortingAlgorithms/index.tsx
@@ -66,6 +66,21 @@ import ShellSortCPP from '@code/cpp/sorting_algorithms/shell_sort.cpp?raw'
import SleepSortCPP from '@code/cpp/sorting_algorithms/sleep_sort.cpp?raw'
import TimSortCPP from '@code/cpp/sorting_algorithms/tim_sort.cpp?raw'
+import BogoSortRuby from '@code/ruby/sorting_algorithms/bogo_sort.rb?raw'
+import BubbleSortRuby from '@code/ruby/sorting_algorithms/bubble_sort.rb?raw'
+import BucketSortRuby from '@code/ruby/sorting_algorithms/bucket_sort.rb?raw'
+import CountingSortRuby from '@code/ruby/sorting_algorithms/counting_sort.rb?raw'
+import CubeSortRuby from '@code/ruby/sorting_algorithms/cube_sort.rb?raw'
+import HeapSortRuby from '@code/ruby/sorting_algorithms/heap_sort.rb?raw'
+import InsertionSortRuby from '@code/ruby/sorting_algorithms/insertion_sort.rb?raw'
+import MergeSortRuby from '@code/ruby/sorting_algorithms/merge_sort.rb?raw'
+import PancakeSortRuby from '@code/ruby/sorting_algorithms/pancake_sort.rb?raw'
+import QuickSortRuby from '@code/ruby/sorting_algorithms/quick_sort.rb?raw'
+import RadixSortRuby from '@code/ruby/sorting_algorithms/radix_sort.rb?raw'
+import SelectionSortRuby from '@code/ruby/sorting_algorithms/selection_sort.rb?raw'
+import ShellSortRuby from '@code/ruby/sorting_algorithms/shell_sort.rb?raw'
+import SleepSortRuby from '@code/ruby/sorting_algorithms/sleep_sort.rb?raw'
+import TimSortRuby from '@code/ruby/sorting_algorithms/tim_sort.rb?raw'
export default function Stack() {
return (
@@ -77,6 +92,7 @@ export default function Stack() {
+
@@ -85,6 +101,7 @@ export default function Stack() {
+
@@ -93,6 +110,7 @@ export default function Stack() {
+
@@ -101,6 +119,7 @@ export default function Stack() {
+
@@ -109,6 +128,7 @@ export default function Stack() {
+
@@ -117,6 +137,7 @@ export default function Stack() {
+
@@ -125,6 +146,7 @@ export default function Stack() {
+
@@ -133,6 +155,7 @@ export default function Stack() {
+
@@ -141,6 +164,7 @@ export default function Stack() {
+
@@ -149,6 +173,7 @@ export default function Stack() {
+
@@ -157,6 +182,7 @@ export default function Stack() {
+
@@ -165,6 +191,7 @@ export default function Stack() {
+
@@ -173,6 +200,7 @@ export default function Stack() {
+
@@ -181,6 +209,7 @@ export default function Stack() {
+
@@ -189,6 +218,7 @@ export default function Stack() {
+
diff --git a/src/sections/Stack/index.tsx b/src/sections/Stack/index.tsx
index cad7a98..32635ac 100644
--- a/src/sections/Stack/index.tsx
+++ b/src/sections/Stack/index.tsx
@@ -14,6 +14,8 @@ import MonotonicDecreasingStackJAVA from '@code/java/stack/monotonic_decreasing.
import MonotonicIncreasingStackCPP from '@code/cpp/stack/monotonic_increasing.cpp?raw'
import MonotonicDecreasingStackCPP from '@code/cpp/stack/monotonic_decreasing.cpp?raw'
+import MonotonicIncreasingStackRuby from '@code/ruby/stack/monotonic_increasing.rb?raw'
+import MonotonicDecreasingStackRuby from '@code/ruby/stack/monotonic_decreasing.rb?raw'
export default function Stack() {
return (
@@ -25,6 +27,7 @@ export default function Stack() {
+
@@ -33,6 +36,7 @@ export default function Stack() {
+
From 7d4c50c1d98ef60a601d544d730601449d37fdde Mon Sep 17 00:00:00 2001
From: Shiva Bhusal
Date: Thu, 27 Nov 2025 13:25:53 +0545
Subject: [PATCH 5/5] Builds the project to docs/
---
docs/assets/index-BWzx3p3d.js | 8133 +++++++++++++++++++++++++++++++
docs/assets/index-CCPfFMQM.js | 6739 -------------------------
docs/assets/index-DqUlzqnG.css | 1 -
docs/assets/index-or45TzHb.css | 1 +
docs/index.html | 78 +-
index.html | 4 +-
src/components/Topbar/index.tsx | 2 +-
vite.config.ts | 2 +-
8 files changed, 8177 insertions(+), 6783 deletions(-)
create mode 100644 docs/assets/index-BWzx3p3d.js
delete mode 100644 docs/assets/index-CCPfFMQM.js
delete mode 100644 docs/assets/index-DqUlzqnG.css
create mode 100644 docs/assets/index-or45TzHb.css
diff --git a/docs/assets/index-BWzx3p3d.js b/docs/assets/index-BWzx3p3d.js
new file mode 100644
index 0000000..f21faca
--- /dev/null
+++ b/docs/assets/index-BWzx3p3d.js
@@ -0,0 +1,8133 @@
+(function(){const S=document.createElement("link").relList;if(S&&S.supports&&S.supports("modulepreload"))return;for(const j of document.querySelectorAll('link[rel="modulepreload"]'))P(j);new MutationObserver(j=>{for(const $ of j)if($.type==="childList")for(const Y of $.addedNodes)Y.tagName==="LINK"&&Y.rel==="modulepreload"&&P(Y)}).observe(document,{childList:!0,subtree:!0});function p(j){const $={};return j.integrity&&($.integrity=j.integrity),j.referrerPolicy&&($.referrerPolicy=j.referrerPolicy),j.crossOrigin==="use-credentials"?$.credentials="include":j.crossOrigin==="anonymous"?$.credentials="omit":$.credentials="same-origin",$}function P(j){if(j.ep)return;j.ep=!0;const $=p(j);fetch(j.href,$)}})();function ao(c){return c&&c.__esModule&&Object.prototype.hasOwnProperty.call(c,"default")?c.default:c}var Vs={exports:{}},Ii={},$s={exports:{}},Vn={};var mc;function wf(){if(mc)return Vn;mc=1;var c=Symbol.for("react.element"),S=Symbol.for("react.portal"),p=Symbol.for("react.fragment"),P=Symbol.for("react.strict_mode"),j=Symbol.for("react.profiler"),$=Symbol.for("react.provider"),Y=Symbol.for("react.context"),C=Symbol.for("react.forward_ref"),x=Symbol.for("react.suspense"),b=Symbol.for("react.memo"),z=Symbol.for("react.lazy"),A=Symbol.iterator;function T(d){return d===null||typeof d!="object"?null:(d=A&&d[A]||d["@@iterator"],typeof d=="function"?d:null)}var k={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},N=Object.assign,w={};function I(d,E,tn){this.props=d,this.context=E,this.refs=w,this.updater=tn||k}I.prototype.isReactComponent={},I.prototype.setState=function(d,E){if(typeof d!="object"&&typeof d!="function"&&d!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,d,E,"setState")},I.prototype.forceUpdate=function(d){this.updater.enqueueForceUpdate(this,d,"forceUpdate")};function B(){}B.prototype=I.prototype;function R(d,E,tn){this.props=d,this.context=E,this.refs=w,this.updater=tn||k}var G=R.prototype=new B;G.constructor=R,N(G,I.prototype),G.isPureReactComponent=!0;var L=Array.isArray,Q=Object.prototype.hasOwnProperty,Z={current:null},on={key:!0,ref:!0,__self:!0,__source:!0};function wn(d,E,tn){var Mn,kn={},Un=null,Nn=null;if(E!=null)for(Mn in E.ref!==void 0&&(Nn=E.ref),E.key!==void 0&&(Un=""+E.key),E)Q.call(E,Mn)&&!on.hasOwnProperty(Mn)&&(kn[Mn]=E[Mn]);var jn=arguments.length-2;if(jn===1)kn.children=tn;else if(1>>1,tn=F[E];if(0>>1;Ej(Un,d))Nnj(jn,Un)?(F[E]=jn,F[Nn]=d,E=Nn):(F[E]=Un,F[kn]=d,E=kn);else if(Nnj(jn,d))F[E]=jn,F[Nn]=d,E=Nn;else break n}}return dn}function j(F,dn){var d=F.sortIndex-dn.sortIndex;return d!==0?d:F.id-dn.id}if(typeof performance=="object"&&typeof performance.now=="function"){var $=performance;c.unstable_now=function(){return $.now()}}else{var Y=Date,C=Y.now();c.unstable_now=function(){return Y.now()-C}}var x=[],b=[],z=1,A=null,T=3,k=!1,N=!1,w=!1,I=typeof setTimeout=="function"?setTimeout:null,B=typeof clearTimeout=="function"?clearTimeout:null,R=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(F){for(var dn=p(b);dn!==null;){if(dn.callback===null)P(b);else if(dn.startTime<=F)P(b),dn.sortIndex=dn.expirationTime,S(x,dn);else break;dn=p(b)}}function L(F){if(w=!1,G(F),!N)if(p(x)!==null)N=!0,Gn(Q);else{var dn=p(b);dn!==null&&Yn(L,dn.startTime-F)}}function Q(F,dn){N=!1,w&&(w=!1,B(wn),wn=-1),k=!0;var d=T;try{for(G(dn),A=p(x);A!==null&&(!(A.expirationTime>dn)||F&&!Tn());){var E=A.callback;if(typeof E=="function"){A.callback=null,T=A.priorityLevel;var tn=E(A.expirationTime<=dn);dn=c.unstable_now(),typeof tn=="function"?A.callback=tn:A===p(x)&&P(x),G(dn)}else P(x);A=p(x)}if(A!==null)var Mn=!0;else{var kn=p(b);kn!==null&&Yn(L,kn.startTime-dn),Mn=!1}return Mn}finally{A=null,T=d,k=!1}}var Z=!1,on=null,wn=-1,J=5,mn=-1;function Tn(){return!(c.unstable_now()-mnF||125E?(F.sortIndex=d,S(b,F),p(x)===null&&F===p(b)&&(w?(B(wn),wn=-1):w=!0,Yn(L,d-E))):(F.sortIndex=tn,S(x,F),N||k||(N=!0,Gn(Q))),F},c.unstable_shouldYield=Tn,c.unstable_wrapCallback=function(F){var dn=T;return function(){var d=T;T=dn;try{return F.apply(this,arguments)}finally{T=d}}}})(Js)),Js}var bc;function kf(){return bc||(bc=1,Gs.exports=jf()),Gs.exports}var wc;function Ef(){if(wc)return Ve;wc=1;var c=oo(),S=kf();function p(n){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+n,t=1;t"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),x=Object.prototype.hasOwnProperty,b=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,z={},A={};function T(n){return x.call(A,n)?!0:x.call(z,n)?!1:b.test(n)?A[n]=!0:(z[n]=!0,!1)}function k(n,e,t,i){if(t!==null&&t.type===0)return!1;switch(typeof e){case"function":case"symbol":return!0;case"boolean":return i?!1:t!==null?!t.acceptsBooleans:(n=n.toLowerCase().slice(0,5),n!=="data-"&&n!=="aria-");default:return!1}}function N(n,e,t,i){if(e===null||typeof e>"u"||k(n,e,t,i))return!0;if(i)return!1;if(t!==null)switch(t.type){case 3:return!e;case 4:return e===!1;case 5:return isNaN(e);case 6:return isNaN(e)||1>e}return!1}function w(n,e,t,i,a,o,l){this.acceptsBooleans=e===2||e===3||e===4,this.attributeName=i,this.attributeNamespace=a,this.mustUseProperty=t,this.propertyName=n,this.type=e,this.sanitizeURL=o,this.removeEmptyString=l}var I={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(n){I[n]=new w(n,0,!1,n,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(n){var e=n[0];I[e]=new w(e,1,!1,n[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(n){I[n]=new w(n,2,!1,n.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(n){I[n]=new w(n,2,!1,n,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(n){I[n]=new w(n,3,!1,n.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(n){I[n]=new w(n,3,!0,n,null,!1,!1)}),["capture","download"].forEach(function(n){I[n]=new w(n,4,!1,n,null,!1,!1)}),["cols","rows","size","span"].forEach(function(n){I[n]=new w(n,6,!1,n,null,!1,!1)}),["rowSpan","start"].forEach(function(n){I[n]=new w(n,5,!1,n.toLowerCase(),null,!1,!1)});var B=/[\-:]([a-z])/g;function R(n){return n[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(n){var e=n.replace(B,R);I[e]=new w(e,1,!1,n,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(n){var e=n.replace(B,R);I[e]=new w(e,1,!1,n,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(n){var e=n.replace(B,R);I[e]=new w(e,1,!1,n,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(n){I[n]=new w(n,1,!1,n.toLowerCase(),null,!1,!1)}),I.xlinkHref=new w("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(n){I[n]=new w(n,1,!1,n.toLowerCase(),null,!0,!0)});function G(n,e,t,i){var a=I.hasOwnProperty(e)?I[e]:null;(a!==null?a.type!==0:i||!(2u||a[l]!==o[u]){var h=`
+`+a[l].replace(" at new "," at ");return n.displayName&&h.includes("")&&(h=h.replace("",n.displayName)),h}while(1<=l&&0<=u);break}}}finally{Mn=!1,Error.prepareStackTrace=t}return(n=n?n.displayName||n.name:"")?tn(n):""}function Un(n){switch(n.tag){case 5:return tn(n.type);case 16:return tn("Lazy");case 13:return tn("Suspense");case 19:return tn("SuspenseList");case 0:case 2:case 15:return n=kn(n.type,!1),n;case 11:return n=kn(n.type.render,!1),n;case 1:return n=kn(n.type,!0),n;default:return""}}function Nn(n){if(n==null)return null;if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n;switch(n){case on:return"Fragment";case Z:return"Portal";case J:return"Profiler";case wn:return"StrictMode";case cn:return"Suspense";case Fn:return"SuspenseList"}if(typeof n=="object")switch(n.$$typeof){case Tn:return(n.displayName||"Context")+".Consumer";case mn:return(n._context.displayName||"Context")+".Provider";case vn:var e=n.render;return n=n.displayName,n||(n=e.displayName||e.name||"",n=n!==""?"ForwardRef("+n+")":"ForwardRef"),n;case ne:return e=n.displayName||null,e!==null?e:Nn(n.type)||"Memo";case Gn:e=n._payload,n=n._init;try{return Nn(n(e))}catch{}}return null}function jn(n){var e=n.type;switch(n.tag){case 24:return"Cache";case 9:return(e.displayName||"Context")+".Consumer";case 10:return(e._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return n=e.render,n=n.displayName||n.name||"",e.displayName||(n!==""?"ForwardRef("+n+")":"ForwardRef");case 7:return"Fragment";case 5:return e;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Nn(e);case 8:return e===wn?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e}return null}function Sn(n){switch(typeof n){case"boolean":case"number":case"string":case"undefined":return n;case"object":return n;default:return""}}function ue(n){var e=n.type;return(n=n.nodeName)&&n.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function H(n){var e=ue(n)?"checked":"value",t=Object.getOwnPropertyDescriptor(n.constructor.prototype,e),i=""+n[e];if(!n.hasOwnProperty(e)&&typeof t<"u"&&typeof t.get=="function"&&typeof t.set=="function"){var a=t.get,o=t.set;return Object.defineProperty(n,e,{configurable:!0,get:function(){return a.call(this)},set:function(l){i=""+l,o.call(this,l)}}),Object.defineProperty(n,e,{enumerable:t.enumerable}),{getValue:function(){return i},setValue:function(l){i=""+l},stopTracking:function(){n._valueTracker=null,delete n[e]}}}}function nn(n){n._valueTracker||(n._valueTracker=H(n))}function In(n){if(!n)return!1;var e=n._valueTracker;if(!e)return!0;var t=e.getValue(),i="";return n&&(i=ue(n)?n.checked?"true":"false":n.value),n=i,n!==t?(e.setValue(n),!0):!1}function Cn(n){if(n=n||(typeof document<"u"?document:void 0),typeof n>"u")return null;try{return n.activeElement||n.body}catch{return n.body}}function En(n,e){var t=e.checked;return d({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:t??n._wrapperState.initialChecked})}function Hn(n,e){var t=e.defaultValue==null?"":e.defaultValue,i=e.checked!=null?e.checked:e.defaultChecked;t=Sn(e.value!=null?e.value:t),n._wrapperState={initialChecked:i,initialValue:t,controlled:e.type==="checkbox"||e.type==="radio"?e.checked!=null:e.value!=null}}function Dn(n,e){e=e.checked,e!=null&&G(n,"checked",e,!1)}function zn(n,e){Dn(n,e);var t=Sn(e.value),i=e.type;if(t!=null)i==="number"?(t===0&&n.value===""||n.value!=t)&&(n.value=""+t):n.value!==""+t&&(n.value=""+t);else if(i==="submit"||i==="reset"){n.removeAttribute("value");return}e.hasOwnProperty("value")?$n(n,e.type,t):e.hasOwnProperty("defaultValue")&&$n(n,e.type,Sn(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(n.defaultChecked=!!e.defaultChecked)}function Wn(n,e,t){if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var i=e.type;if(!(i!=="submit"&&i!=="reset"||e.value!==void 0&&e.value!==null))return;e=""+n._wrapperState.initialValue,t||e===n.value||(n.value=e),n.defaultValue=e}t=n.name,t!==""&&(n.name=""),n.defaultChecked=!!n._wrapperState.initialChecked,t!==""&&(n.name=t)}function $n(n,e,t){(e!=="number"||Cn(n.ownerDocument)!==n)&&(t==null?n.defaultValue=""+n._wrapperState.initialValue:n.defaultValue!==""+t&&(n.defaultValue=""+t))}var Bn=Array.isArray;function X(n,e,t,i){if(n=n.options,e){e={};for(var a=0;a"+e.valueOf().toString()+"",e=er.firstChild;n.firstChild;)n.removeChild(n.firstChild);for(;e.firstChild;)n.appendChild(e.firstChild)}});function tr(n,e){if(e){var t=n.firstChild;if(t&&t===n.lastChild&&t.nodeType===3){t.nodeValue=e;return}}n.textContent=e}var rr={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},lo=["Webkit","ms","Moz","O"];Object.keys(rr).forEach(function(n){lo.forEach(function(e){e=e+n.charAt(0).toUpperCase()+n.substring(1),rr[e]=rr[n]})});function Bi(n,e,t){return e==null||typeof e=="boolean"||e===""?"":t||typeof e!="number"||e===0||rr.hasOwnProperty(n)&&rr[n]?(""+e).trim():e+"px"}function ni(n,e){n=n.style;for(var t in e)if(e.hasOwnProperty(t)){var i=t.indexOf("--")===0,a=Bi(t,e[t],i);t==="float"&&(t="cssFloat"),i?n.setProperty(t,a):n[t]=a}}var uo=d({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ei(n,e){if(e){if(uo[n]&&(e.children!=null||e.dangerouslySetInnerHTML!=null))throw Error(p(137,n));if(e.dangerouslySetInnerHTML!=null){if(e.children!=null)throw Error(p(60));if(typeof e.dangerouslySetInnerHTML!="object"||!("__html"in e.dangerouslySetInnerHTML))throw Error(p(61))}if(e.style!=null&&typeof e.style!="object")throw Error(p(62))}}function ti(n,e){if(n.indexOf("-")===-1)return typeof e.is=="string";switch(n){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ir=null;function Sr(n){return n=n.target||n.srcElement||window,n.correspondingUseElement&&(n=n.correspondingUseElement),n.nodeType===3?n.parentNode:n}var Tr=null,It=null,St=null;function Tt(n){if(n=bi(n)){if(typeof Tr!="function")throw Error(p(280));var e=n.stateNode;e&&(e=da(e),Tr(n.stateNode,n.type,e))}}function f(n){It?St?St.push(n):St=[n]:It=n}function O(){if(It){var n=It,e=St;if(St=It=null,Tt(n),e)for(n=0;n>>=0,n===0?32:31-(Ke(n)/mt|0)|0}var Se=64,Pe=4194304;function zt(n){switch(n&-n){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return n&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return n&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return n}}function or(n,e){var t=n.pendingLanes;if(t===0)return 0;var i=0,a=n.suspendedLanes,o=n.pingedLanes,l=t&268435455;if(l!==0){var u=l&~a;u!==0?i=zt(u):(o&=l,o!==0&&(i=zt(o)))}else l=t&~a,l!==0?i=zt(l):o!==0&&(i=zt(o));if(i===0)return 0;if(e!==0&&e!==i&&(e&a)===0&&(a=i&-i,o=e&-e,a>=o||a===16&&(o&4194240)!==0))return e;if((i&4)!==0&&(i|=t&16),e=n.entangledLanes,e!==0)for(n=n.entanglements,e&=i;0t;t++)e.push(n);return e}function vt(n,e,t){n.pendingLanes|=e,e!==536870912&&(n.suspendedLanes=0,n.pingedLanes=0),n=n.eventTimes,e=31-Qn(e),n[e]=t}function Yi(n,e){var t=n.pendingLanes&~e;n.pendingLanes=e,n.suspendedLanes=0,n.pingedLanes=0,n.expiredLanes&=e,n.mutableReadLanes&=e,n.entangledLanes&=e,e=n.entanglements;var i=n.eventTimes;for(n=n.expirationTimes;0=fi),ll=" ",ul=!1;function cl(n,e){switch(n){case"keyup":return md.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function dl(n){return n=n.detail,typeof n=="object"&&"data"in n?n.data:null}var Cr=!1;function yd(n,e){switch(n){case"compositionend":return dl(e);case"keypress":return e.which!==32?null:(ul=!0,ll);case"textInput":return n=e.data,n===ll&&ul?null:n;default:return null}}function xd(n,e){if(Cr)return n==="compositionend"||!To&&cl(n,e)?(n=tl(),na=yo=Ft=null,Cr=!1,n):null;switch(n){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:t,offset:e-n};n=i}n:{for(;t;){if(t.nextSibling){t=t.nextSibling;break n}t=t.parentNode}t=void 0}t=yl(t)}}function _l(n,e){return n&&e?n===e?!0:n&&n.nodeType===3?!1:e&&e.nodeType===3?_l(n,e.parentNode):"contains"in n?n.contains(e):n.compareDocumentPosition?!!(n.compareDocumentPosition(e)&16):!1:!1}function bl(){for(var n=window,e=Cn();e instanceof n.HTMLIFrameElement;){try{var t=typeof e.contentWindow.location.href=="string"}catch{t=!1}if(t)n=e.contentWindow;else break;e=Cn(n.document)}return e}function Eo(n){var e=n&&n.nodeName&&n.nodeName.toLowerCase();return e&&(e==="input"&&(n.type==="text"||n.type==="search"||n.type==="tel"||n.type==="url"||n.type==="password")||e==="textarea"||n.contentEditable==="true")}function Nd(n){var e=bl(),t=n.focusedElem,i=n.selectionRange;if(e!==t&&t&&t.ownerDocument&&_l(t.ownerDocument.documentElement,t)){if(i!==null&&Eo(t)){if(e=i.start,n=i.end,n===void 0&&(n=e),"selectionStart"in t)t.selectionStart=e,t.selectionEnd=Math.min(n,t.value.length);else if(n=(e=t.ownerDocument||document)&&e.defaultView||window,n.getSelection){n=n.getSelection();var a=t.textContent.length,o=Math.min(i.start,a);i=i.end===void 0?o:Math.min(i.end,a),!n.extend&&o>i&&(a=i,i=o,o=a),a=xl(t,o);var l=xl(t,i);a&&l&&(n.rangeCount!==1||n.anchorNode!==a.node||n.anchorOffset!==a.offset||n.focusNode!==l.node||n.focusOffset!==l.offset)&&(e=e.createRange(),e.setStart(a.node,a.offset),n.removeAllRanges(),o>i?(n.addRange(e),n.extend(l.node,l.offset)):(e.setEnd(l.node,l.offset),n.addRange(e)))}}for(e=[],n=t;n=n.parentNode;)n.nodeType===1&&e.push({element:n,left:n.scrollLeft,top:n.scrollTop});for(typeof t.focus=="function"&&t.focus(),t=0;t=document.documentMode,Lr=null,No=null,mi=null,Oo=!1;function wl(n,e,t){var i=t.window===t?t.document:t.nodeType===9?t:t.ownerDocument;Oo||Lr==null||Lr!==Cn(i)||(i=Lr,"selectionStart"in i&&Eo(i)?i={start:i.selectionStart,end:i.selectionEnd}:(i=(i.ownerDocument&&i.ownerDocument.defaultView||window).getSelection(),i={anchorNode:i.anchorNode,anchorOffset:i.anchorOffset,focusNode:i.focusNode,focusOffset:i.focusOffset}),mi&&gi(mi,i)||(mi=i,i=la(No,"onSelect"),0Dr||(n.current=Uo[Dr],Uo[Dr]=null,Dr--)}function ie(n,e){Dr++,Uo[Dr]=n.current,n.current=e}var Vt={},Ae=Wt(Vt),Be=Wt(!1),cr=Vt;function zr(n,e){var t=n.type.contextTypes;if(!t)return Vt;var i=n.stateNode;if(i&&i.__reactInternalMemoizedUnmaskedChildContext===e)return i.__reactInternalMemoizedMaskedChildContext;var a={},o;for(o in t)a[o]=e[o];return i&&(n=n.stateNode,n.__reactInternalMemoizedUnmaskedChildContext=e,n.__reactInternalMemoizedMaskedChildContext=a),a}function Fe(n){return n=n.childContextTypes,n!=null}function fa(){le(Be),le(Ae)}function Dl(n,e,t){if(Ae.current!==Vt)throw Error(p(168));ie(Ae,e),ie(Be,t)}function zl(n,e,t){var i=n.stateNode;if(e=e.childContextTypes,typeof i.getChildContext!="function")return t;i=i.getChildContext();for(var a in i)if(!(a in e))throw Error(p(108,jn(n)||"Unknown",a));return d({},t,i)}function pa(n){return n=(n=n.stateNode)&&n.__reactInternalMemoizedMergedChildContext||Vt,cr=Ae.current,ie(Ae,n),ie(Be,Be.current),!0}function Bl(n,e,t){var i=n.stateNode;if(!i)throw Error(p(169));t?(n=zl(n,e,cr),i.__reactInternalMemoizedMergedChildContext=n,le(Be),le(Ae),ie(Ae,n)):le(Be),ie(Be,t)}var Nt=null,ha=!1,Ho=!1;function Fl(n){Nt===null?Nt=[n]:Nt.push(n)}function Fd(n){ha=!0,Fl(n)}function $t(){if(!Ho&&Nt!==null){Ho=!0;var n=0,e=Xn;try{var t=Nt;for(Xn=1;n>=l,a-=l,Ot=1<<32-Qn(e)+a|t<An?(ke=bn,bn=null):ke=bn.sibling;var qn=M(v,bn,y[An],V);if(qn===null){bn===null&&(bn=ke);break}n&&bn&&qn.alternate===null&&e(v,bn),g=o(qn,g,An),_n===null?hn=qn:_n.sibling=qn,_n=qn,bn=ke}if(An===y.length)return t(v,bn),pe&&fr(v,An),hn;if(bn===null){for(;AnAn?(ke=bn,bn=null):ke=bn.sibling;var nr=M(v,bn,qn.value,V);if(nr===null){bn===null&&(bn=ke);break}n&&bn&&nr.alternate===null&&e(v,bn),g=o(nr,g,An),_n===null?hn=nr:_n.sibling=nr,_n=nr,bn=ke}if(qn.done)return t(v,bn),pe&&fr(v,An),hn;if(bn===null){for(;!qn.done;An++,qn=y.next())qn=U(v,qn.value,V),qn!==null&&(g=o(qn,g,An),_n===null?hn=qn:_n.sibling=qn,_n=qn);return pe&&fr(v,An),hn}for(bn=i(v,bn);!qn.done;An++,qn=y.next())qn=rn(bn,v,An,qn.value,V),qn!==null&&(n&&qn.alternate!==null&&bn.delete(qn.key===null?An:qn.key),g=o(qn,g,An),_n===null?hn=qn:_n.sibling=qn,_n=qn);return n&&bn.forEach(function(bf){return e(v,bf)}),pe&&fr(v,An),hn}function ve(v,g,y,V){if(typeof y=="object"&&y!==null&&y.type===on&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case Q:n:{for(var hn=y.key,_n=g;_n!==null;){if(_n.key===hn){if(hn=y.type,hn===on){if(_n.tag===7){t(v,_n.sibling),g=a(_n,y.props.children),g.return=v,v=g;break n}}else if(_n.elementType===hn||typeof hn=="object"&&hn!==null&&hn.$$typeof===Gn&&nu(hn)===_n.type){t(v,_n.sibling),g=a(_n,y.props),g.ref=wi(v,_n,y),g.return=v,v=g;break n}t(v,_n);break}else e(v,_n);_n=_n.sibling}y.type===on?(g=_r(y.props.children,v.mode,V,y.key),g.return=v,v=g):(V=Ha(y.type,y.key,y.props,null,v.mode,V),V.ref=wi(v,g,y),V.return=v,v=V)}return l(v);case Z:n:{for(_n=y.key;g!==null;){if(g.key===_n)if(g.tag===4&&g.stateNode.containerInfo===y.containerInfo&&g.stateNode.implementation===y.implementation){t(v,g.sibling),g=a(g,y.children||[]),g.return=v,v=g;break n}else{t(v,g);break}else e(v,g);g=g.sibling}g=Bs(y,v.mode,V),g.return=v,v=g}return l(v);case Gn:return _n=y._init,ve(v,g,_n(y._payload),V)}if(Bn(y))return fn(v,g,y,V);if(dn(y))return pn(v,g,y,V);Sa(v,y)}return typeof y=="string"&&y!==""||typeof y=="number"?(y=""+y,g!==null&&g.tag===6?(t(v,g.sibling),g=a(g,y),g.return=v,v=g):(t(v,g),g=zs(y,v.mode,V),g.return=v,v=g),l(v)):t(v,g)}return ve}var Vr=eu(!0),tu=eu(!1),Si={},xt=Wt(Si),Ti=Wt(Si),ji=Wt(Si);function hr(n){if(n===Si)throw Error(p(174));return n}function ts(n,e){switch(ie(ji,e),ie(Ti,n),ie(xt,Si),n=e.nodeType,n){case 9:case 11:e=(e=e.documentElement)?e.namespaceURI:Mt(null,"");break;default:n=n===8?e.parentNode:e,e=n.namespaceURI||null,n=n.tagName,e=Mt(e,n)}le(xt),ie(xt,e)}function $r(){le(xt),le(Ti),le(ji)}function ru(n){hr(ji.current);var e=hr(xt.current),t=Mt(e,n.type);e!==t&&(ie(Ti,n),ie(xt,t))}function rs(n){Ti.current===n&&(le(xt),le(Ti))}var he=Wt(0);function Ta(n){for(var e=n;e!==null;){if(e.tag===13){var t=e.memoizedState;if(t!==null&&(t=t.dehydrated,t===null||t.data==="$?"||t.data==="$!"))return e}else if(e.tag===19&&e.memoizedProps.revealOrder!==void 0){if((e.flags&128)!==0)return e}else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===n)break;for(;e.sibling===null;){if(e.return===null||e.return===n)return null;e=e.return}e.sibling.return=e.return,e=e.sibling}return null}var is=[];function as(){for(var n=0;nt?t:4,n(!0);var i=os.transition;os.transition={};try{n(!1),e()}finally{Xn=t,os.transition=i}}function bu(){return tt().memoizedState}function Vd(n,e,t){var i=Qt(n);if(t={lane:i,action:t,hasEagerState:!1,eagerState:null,next:null},wu(n))Su(e,t);else if(t=Kl(n,e,t,i),t!==null){var a=Ie();ft(t,n,i,a),Tu(t,e,i)}}function $d(n,e,t){var i=Qt(n),a={lane:i,action:t,hasEagerState:!1,eagerState:null,next:null};if(wu(n))Su(e,a);else{var o=n.alternate;if(n.lanes===0&&(o===null||o.lanes===0)&&(o=e.lastRenderedReducer,o!==null))try{var l=e.lastRenderedState,u=o(l,t);if(a.hasEagerState=!0,a.eagerState=u,st(u,l)){var h=e.interleaved;h===null?(a.next=a,Xo(e)):(a.next=h.next,h.next=a),e.interleaved=a;return}}catch{}finally{}t=Kl(n,e,a,i),t!==null&&(a=Ie(),ft(t,n,i,a),Tu(t,e,i))}}function wu(n){var e=n.alternate;return n===ge||e!==null&&e===ge}function Su(n,e){ki=ka=!0;var t=n.pending;t===null?e.next=e:(e.next=t.next,t.next=e),n.pending=e}function Tu(n,e,t){if((t&4194240)!==0){var i=e.lanes;i&=n.pendingLanes,t|=i,e.lanes=t,ze(n,t)}}var Oa={readContext:et,useCallback:Ce,useContext:Ce,useEffect:Ce,useImperativeHandle:Ce,useInsertionEffect:Ce,useLayoutEffect:Ce,useMemo:Ce,useReducer:Ce,useRef:Ce,useState:Ce,useDebugValue:Ce,useDeferredValue:Ce,useTransition:Ce,useMutableSource:Ce,useSyncExternalStore:Ce,useId:Ce,unstable_isNewReconciler:!1},Kd={readContext:et,useCallback:function(n,e){return _t().memoizedState=[n,e===void 0?null:e],n},useContext:et,useEffect:pu,useImperativeHandle:function(n,e,t){return t=t!=null?t.concat([n]):null,Ea(4194308,4,mu.bind(null,e,n),t)},useLayoutEffect:function(n,e){return Ea(4194308,4,n,e)},useInsertionEffect:function(n,e){return Ea(4,2,n,e)},useMemo:function(n,e){var t=_t();return e=e===void 0?null:e,n=n(),t.memoizedState=[n,e],n},useReducer:function(n,e,t){var i=_t();return e=t!==void 0?t(e):e,i.memoizedState=i.baseState=e,n={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:n,lastRenderedState:e},i.queue=n,n=n.dispatch=Vd.bind(null,ge,n),[i.memoizedState,n]},useRef:function(n){var e=_t();return n={current:n},e.memoizedState=n},useState:du,useDebugValue:ps,useDeferredValue:function(n){return _t().memoizedState=n},useTransition:function(){var n=du(!1),e=n[0];return n=Wd.bind(null,n[1]),_t().memoizedState=n,[e,n]},useMutableSource:function(){},useSyncExternalStore:function(n,e,t){var i=ge,a=_t();if(pe){if(t===void 0)throw Error(p(407));t=t()}else{if(t=e(),je===null)throw Error(p(349));(gr&30)!==0||ou(i,e,t)}a.memoizedState=t;var o={value:t,getSnapshot:e};return a.queue=o,pu(lu.bind(null,i,o,n),[n]),i.flags|=2048,Oi(9,su.bind(null,i,o,t,e),void 0,null),t},useId:function(){var n=_t(),e=je.identifierPrefix;if(pe){var t=At,i=Ot;t=(i&~(1<<32-Qn(i)-1)).toString(32)+t,e=":"+e+"R"+t,t=Ei++,0<\/script>",n=n.removeChild(n.firstChild)):typeof i.is=="string"?n=l.createElement(t,{is:i.is}):(n=l.createElement(t),t==="select"&&(l=n,i.multiple?l.multiple=!0:i.size&&(l.size=i.size))):n=l.createElementNS(n,t),n[yt]=e,n[_i]=i,Uu(n,e,!1,!1),e.stateNode=n;n:{switch(l=ti(t,i),t){case"dialog":se("cancel",n),se("close",n),a=i;break;case"iframe":case"object":case"embed":se("load",n),a=i;break;case"video":case"audio":for(a=0;aYr&&(e.flags|=128,i=!0,Ai(o,!1),e.lanes=4194304)}else{if(!i)if(n=Ta(l),n!==null){if(e.flags|=128,i=!0,t=n.updateQueue,t!==null&&(e.updateQueue=t,e.flags|=4),Ai(o,!0),o.tail===null&&o.tailMode==="hidden"&&!l.alternate&&!pe)return Le(e),null}else 2*fe()-o.renderingStartTime>Yr&&t!==1073741824&&(e.flags|=128,i=!0,Ai(o,!1),e.lanes=4194304);o.isBackwards?(l.sibling=e.child,e.child=l):(t=o.last,t!==null?t.sibling=l:e.child=l,o.last=l)}return o.tail!==null?(e=o.tail,o.rendering=e,o.tail=e.sibling,o.renderingStartTime=fe(),e.sibling=null,t=he.current,ie(he,i?t&1|2:t&1),e):(Le(e),null);case 22:case 23:return Ms(),i=e.memoizedState!==null,n!==null&&n.memoizedState!==null!==i&&(e.flags|=8192),i&&(e.mode&1)!==0?(qe&1073741824)!==0&&(Le(e),e.subtreeFlags&6&&(e.flags|=8192)):Le(e),null;case 24:return null;case 25:return null}throw Error(p(156,e.tag))}function nf(n,e){switch(Vo(e),e.tag){case 1:return Fe(e.type)&&fa(),n=e.flags,n&65536?(e.flags=n&-65537|128,e):null;case 3:return $r(),le(Be),le(Ae),as(),n=e.flags,(n&65536)!==0&&(n&128)===0?(e.flags=n&-65537|128,e):null;case 5:return rs(e),null;case 13:if(le(he),n=e.memoizedState,n!==null&&n.dehydrated!==null){if(e.alternate===null)throw Error(p(340));Ur()}return n=e.flags,n&65536?(e.flags=n&-65537|128,e):null;case 19:return le(he),null;case 4:return $r(),null;case 10:return qo(e.type._context),null;case 22:case 23:return Ms(),null;case 24:return null;default:return null}}var La=!1,Re=!1,ef=typeof WeakSet=="function"?WeakSet:Set,un=null;function Gr(n,e){var t=n.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(i){me(n,e,i)}else t.current=null}function Ss(n,e,t){try{t()}catch(i){me(n,e,i)}}var Vu=!1;function tf(n,e){if(Mo=Xi,n=bl(),Eo(n)){if("selectionStart"in n)var t={start:n.selectionStart,end:n.selectionEnd};else n:{t=(t=n.ownerDocument)&&t.defaultView||window;var i=t.getSelection&&t.getSelection();if(i&&i.rangeCount!==0){t=i.anchorNode;var a=i.anchorOffset,o=i.focusNode;i=i.focusOffset;try{t.nodeType,o.nodeType}catch{t=null;break n}var l=0,u=-1,h=-1,_=0,D=0,U=n,M=null;e:for(;;){for(var rn;U!==t||a!==0&&U.nodeType!==3||(u=l+a),U!==o||i!==0&&U.nodeType!==3||(h=l+i),U.nodeType===3&&(l+=U.nodeValue.length),(rn=U.firstChild)!==null;)M=U,U=rn;for(;;){if(U===n)break e;if(M===t&&++_===a&&(u=l),M===o&&++D===i&&(h=l),(rn=U.nextSibling)!==null)break;U=M,M=U.parentNode}U=rn}t=u===-1||h===-1?null:{start:u,end:h}}else t=null}t=t||{start:0,end:0}}else t=null;for(Io={focusedElem:n,selectionRange:t},Xi=!1,un=e;un!==null;)if(e=un,n=e.child,(e.subtreeFlags&1028)!==0&&n!==null)n.return=e,un=n;else for(;un!==null;){e=un;try{var fn=e.alternate;if((e.flags&1024)!==0)switch(e.tag){case 0:case 11:case 15:break;case 1:if(fn!==null){var pn=fn.memoizedProps,ve=fn.memoizedState,v=e.stateNode,g=v.getSnapshotBeforeUpdate(e.elementType===e.type?pn:ut(e.type,pn),ve);v.__reactInternalSnapshotBeforeUpdate=g}break;case 3:var y=e.stateNode.containerInfo;y.nodeType===1?y.textContent="":y.nodeType===9&&y.documentElement&&y.removeChild(y.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163))}}catch(V){me(e,e.return,V)}if(n=e.sibling,n!==null){n.return=e.return,un=n;break}un=e.return}return fn=Vu,Vu=!1,fn}function Ci(n,e,t){var i=e.updateQueue;if(i=i!==null?i.lastEffect:null,i!==null){var a=i=i.next;do{if((a.tag&n)===n){var o=a.destroy;a.destroy=void 0,o!==void 0&&Ss(e,t,o)}a=a.next}while(a!==i)}}function Ra(n,e){if(e=e.updateQueue,e=e!==null?e.lastEffect:null,e!==null){var t=e=e.next;do{if((t.tag&n)===n){var i=t.create;t.destroy=i()}t=t.next}while(t!==e)}}function Ts(n){var e=n.ref;if(e!==null){var t=n.stateNode;switch(n.tag){case 5:n=t;break;default:n=t}typeof e=="function"?e(n):e.current=n}}function $u(n){var e=n.alternate;e!==null&&(n.alternate=null,$u(e)),n.child=null,n.deletions=null,n.sibling=null,n.tag===5&&(e=n.stateNode,e!==null&&(delete e[yt],delete e[_i],delete e[Fo],delete e[zd],delete e[Bd])),n.stateNode=null,n.return=null,n.dependencies=null,n.memoizedProps=null,n.memoizedState=null,n.pendingProps=null,n.stateNode=null,n.updateQueue=null}function Ku(n){return n.tag===5||n.tag===3||n.tag===4}function Gu(n){n:for(;;){for(;n.sibling===null;){if(n.return===null||Ku(n.return))return null;n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.flags&2||n.child===null||n.tag===4)continue n;n.child.return=n,n=n.child}if(!(n.flags&2))return n.stateNode}}function js(n,e,t){var i=n.tag;if(i===5||i===6)n=n.stateNode,e?t.nodeType===8?t.parentNode.insertBefore(n,e):t.insertBefore(n,e):(t.nodeType===8?(e=t.parentNode,e.insertBefore(n,t)):(e=t,e.appendChild(n)),t=t._reactRootContainer,t!=null||e.onclick!==null||(e.onclick=ca));else if(i!==4&&(n=n.child,n!==null))for(js(n,e,t),n=n.sibling;n!==null;)js(n,e,t),n=n.sibling}function ks(n,e,t){var i=n.tag;if(i===5||i===6)n=n.stateNode,e?t.insertBefore(n,e):t.appendChild(n);else if(i!==4&&(n=n.child,n!==null))for(ks(n,e,t),n=n.sibling;n!==null;)ks(n,e,t),n=n.sibling}var Ne=null,ct=!1;function Jt(n,e,t){for(t=t.child;t!==null;)Ju(n,e,t),t=t.sibling}function Ju(n,e,t){if(Ln&&typeof Ln.onCommitFiberUnmount=="function")try{Ln.onCommitFiberUnmount(gn,t)}catch{}switch(t.tag){case 5:Re||Gr(t,e);case 6:var i=Ne,a=ct;Ne=null,Jt(n,e,t),Ne=i,ct=a,Ne!==null&&(ct?(n=Ne,t=t.stateNode,n.nodeType===8?n.parentNode.removeChild(t):n.removeChild(t)):Ne.removeChild(t.stateNode));break;case 18:Ne!==null&&(ct?(n=Ne,t=t.stateNode,n.nodeType===8?Bo(n.parentNode,t):n.nodeType===1&&Bo(n,t),ui(n)):Bo(Ne,t.stateNode));break;case 4:i=Ne,a=ct,Ne=t.stateNode.containerInfo,ct=!0,Jt(n,e,t),Ne=i,ct=a;break;case 0:case 11:case 14:case 15:if(!Re&&(i=t.updateQueue,i!==null&&(i=i.lastEffect,i!==null))){a=i=i.next;do{var o=a,l=o.destroy;o=o.tag,l!==void 0&&((o&2)!==0||(o&4)!==0)&&Ss(t,e,l),a=a.next}while(a!==i)}Jt(n,e,t);break;case 1:if(!Re&&(Gr(t,e),i=t.stateNode,typeof i.componentWillUnmount=="function"))try{i.props=t.memoizedProps,i.state=t.memoizedState,i.componentWillUnmount()}catch(u){me(t,e,u)}Jt(n,e,t);break;case 21:Jt(n,e,t);break;case 22:t.mode&1?(Re=(i=Re)||t.memoizedState!==null,Jt(n,e,t),Re=i):Jt(n,e,t);break;default:Jt(n,e,t)}}function Yu(n){var e=n.updateQueue;if(e!==null){n.updateQueue=null;var t=n.stateNode;t===null&&(t=n.stateNode=new ef),e.forEach(function(i){var a=ff.bind(null,n,i);t.has(i)||(t.add(i),i.then(a,a))})}}function dt(n,e){var t=e.deletions;if(t!==null)for(var i=0;ia&&(a=l),i&=~o}if(i=a,i=fe()-i,i=(120>i?120:480>i?480:1080>i?1080:1920>i?1920:3e3>i?3e3:4320>i?4320:1960*af(i/1960))-i,10n?16:n,qt===null)var i=!1;else{if(n=qt,qt=null,za=0,(Jn&6)!==0)throw Error(p(331));var a=Jn;for(Jn|=4,un=n.current;un!==null;){var o=un,l=o.child;if((un.flags&16)!==0){var u=o.deletions;if(u!==null){for(var h=0;hfe()-Os?yr(n,0):Ns|=t),We(n,e)}function lc(n,e){e===0&&((n.mode&1)===0?e=1:(e=Pe,Pe<<=1,(Pe&130023424)===0&&(Pe=4194304)));var t=Ie();n=Ct(n,e),n!==null&&(vt(n,e,t),We(n,t))}function df(n){var e=n.memoizedState,t=0;e!==null&&(t=e.retryLane),lc(n,t)}function ff(n,e){var t=0;switch(n.tag){case 13:var i=n.stateNode,a=n.memoizedState;a!==null&&(t=a.retryLane);break;case 19:i=n.stateNode;break;default:throw Error(p(314))}i!==null&&i.delete(e),lc(n,t)}var uc;uc=function(n,e,t){if(n!==null)if(n.memoizedProps!==e.pendingProps||Be.current)Ue=!0;else{if((n.lanes&t)===0&&(e.flags&128)===0)return Ue=!1,Xd(n,e,t);Ue=(n.flags&131072)!==0}else Ue=!1,pe&&(e.flags&1048576)!==0&&Ul(e,ma,e.index);switch(e.lanes=0,e.tag){case 2:var i=e.type;Ca(n,e),n=e.pendingProps;var a=zr(e,Ae.current);Wr(e,t),a=ls(null,e,i,n,a,t);var o=us();return e.flags|=1,typeof a=="object"&&a!==null&&typeof a.render=="function"&&a.$$typeof===void 0?(e.tag=1,e.memoizedState=null,e.updateQueue=null,Fe(i)?(o=!0,pa(e)):o=!1,e.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,Zo(e),a.updater=wa,e.stateNode=a,a._reactInternals=e,es(e,i,n,t),e=vs(null,e,i,!0,o,t)):(e.tag=0,pe&&o&&Wo(e),Me(null,e,a,t),e=e.child),e;case 16:i=e.elementType;n:{switch(Ca(n,e),n=e.pendingProps,a=i._init,i=a(i._payload),e.type=i,a=e.tag=hf(i),n=ut(i,n),a){case 0:e=ms(null,e,i,n,t);break n;case 1:e=Mu(null,e,i,n,t);break n;case 11:e=Au(null,e,i,n,t);break n;case 14:e=Cu(null,e,i,ut(i.type,n),t);break n}throw Error(p(306,i,""))}return e;case 0:return i=e.type,a=e.pendingProps,a=e.elementType===i?a:ut(i,a),ms(n,e,i,a,t);case 1:return i=e.type,a=e.pendingProps,a=e.elementType===i?a:ut(i,a),Mu(n,e,i,a,t);case 3:n:{if(Iu(e),n===null)throw Error(p(387));i=e.pendingProps,o=e.memoizedState,a=o.element,Gl(n,e),ba(e,i,null,t);var l=e.memoizedState;if(i=l.element,o.isDehydrated)if(o={element:i,isDehydrated:!1,cache:l.cache,pendingSuspenseBoundaries:l.pendingSuspenseBoundaries,transitions:l.transitions},e.updateQueue.baseState=o,e.memoizedState=o,e.flags&256){a=Kr(Error(p(423)),e),e=Du(n,e,i,t,a);break n}else if(i!==a){a=Kr(Error(p(424)),e),e=Du(n,e,i,t,a);break n}else for(Ye=Ht(e.stateNode.containerInfo.firstChild),Je=e,pe=!0,lt=null,t=tu(e,null,i,t),e.child=t;t;)t.flags=t.flags&-3|4096,t=t.sibling;else{if(Ur(),i===a){e=Rt(n,e,t);break n}Me(n,e,i,t)}e=e.child}return e;case 5:return ru(e),n===null&&Ko(e),i=e.type,a=e.pendingProps,o=n!==null?n.memoizedProps:null,l=a.children,Do(i,a)?l=null:o!==null&&Do(i,o)&&(e.flags|=32),Pu(n,e),Me(n,e,l,t),e.child;case 6:return n===null&&Ko(e),null;case 13:return zu(n,e,t);case 4:return ts(e,e.stateNode.containerInfo),i=e.pendingProps,n===null?e.child=Vr(e,null,i,t):Me(n,e,i,t),e.child;case 11:return i=e.type,a=e.pendingProps,a=e.elementType===i?a:ut(i,a),Au(n,e,i,a,t);case 7:return Me(n,e,e.pendingProps,t),e.child;case 8:return Me(n,e,e.pendingProps.children,t),e.child;case 12:return Me(n,e,e.pendingProps.children,t),e.child;case 10:n:{if(i=e.type._context,a=e.pendingProps,o=e.memoizedProps,l=a.value,ie(ya,i._currentValue),i._currentValue=l,o!==null)if(st(o.value,l)){if(o.children===a.children&&!Be.current){e=Rt(n,e,t);break n}}else for(o=e.child,o!==null&&(o.return=e);o!==null;){var u=o.dependencies;if(u!==null){l=o.child;for(var h=u.firstContext;h!==null;){if(h.context===i){if(o.tag===1){h=Lt(-1,t&-t),h.tag=2;var _=o.updateQueue;if(_!==null){_=_.shared;var D=_.pending;D===null?h.next=h:(h.next=D.next,D.next=h),_.pending=h}}o.lanes|=t,h=o.alternate,h!==null&&(h.lanes|=t),Qo(o.return,t,e),u.lanes|=t;break}h=h.next}}else if(o.tag===10)l=o.type===e.type?null:o.child;else if(o.tag===18){if(l=o.return,l===null)throw Error(p(341));l.lanes|=t,u=l.alternate,u!==null&&(u.lanes|=t),Qo(l,t,e),l=o.sibling}else l=o.child;if(l!==null)l.return=o;else for(l=o;l!==null;){if(l===e){l=null;break}if(o=l.sibling,o!==null){o.return=l.return,l=o;break}l=l.return}o=l}Me(n,e,a.children,t),e=e.child}return e;case 9:return a=e.type,i=e.pendingProps.children,Wr(e,t),a=et(a),i=i(a),e.flags|=1,Me(n,e,i,t),e.child;case 14:return i=e.type,a=ut(i,e.pendingProps),a=ut(i.type,a),Cu(n,e,i,a,t);case 15:return Lu(n,e,e.type,e.pendingProps,t);case 17:return i=e.type,a=e.pendingProps,a=e.elementType===i?a:ut(i,a),Ca(n,e),e.tag=1,Fe(i)?(n=!0,pa(e)):n=!1,Wr(e,t),Xl(e,i,a),es(e,i,a,t),vs(null,e,i,!0,n,t);case 19:return Fu(n,e,t);case 22:return Ru(n,e,t)}throw Error(p(156,e.tag))};function cc(n,e){return Wi(n,e)}function pf(n,e,t,i){this.tag=n,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=e,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=i,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function it(n,e,t,i){return new pf(n,e,t,i)}function Ds(n){return n=n.prototype,!(!n||!n.isReactComponent)}function hf(n){if(typeof n=="function")return Ds(n)?1:0;if(n!=null){if(n=n.$$typeof,n===vn)return 11;if(n===ne)return 14}return 2}function Zt(n,e){var t=n.alternate;return t===null?(t=it(n.tag,e,n.key,n.mode),t.elementType=n.elementType,t.type=n.type,t.stateNode=n.stateNode,t.alternate=n,n.alternate=t):(t.pendingProps=e,t.type=n.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=n.flags&14680064,t.childLanes=n.childLanes,t.lanes=n.lanes,t.child=n.child,t.memoizedProps=n.memoizedProps,t.memoizedState=n.memoizedState,t.updateQueue=n.updateQueue,e=n.dependencies,t.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext},t.sibling=n.sibling,t.index=n.index,t.ref=n.ref,t}function Ha(n,e,t,i,a,o){var l=2;if(i=n,typeof n=="function")Ds(n)&&(l=1);else if(typeof n=="string")l=5;else n:switch(n){case on:return _r(t.children,a,o,e);case wn:l=8,a|=8;break;case J:return n=it(12,t,e,a|2),n.elementType=J,n.lanes=o,n;case cn:return n=it(13,t,e,a),n.elementType=cn,n.lanes=o,n;case Fn:return n=it(19,t,e,a),n.elementType=Fn,n.lanes=o,n;case Yn:return Wa(t,a,o,e);default:if(typeof n=="object"&&n!==null)switch(n.$$typeof){case mn:l=10;break n;case Tn:l=9;break n;case vn:l=11;break n;case ne:l=14;break n;case Gn:l=16,i=null;break n}throw Error(p(130,n==null?n:typeof n,""))}return e=it(l,t,e,a),e.elementType=n,e.type=i,e.lanes=o,e}function _r(n,e,t,i){return n=it(7,n,i,e),n.lanes=t,n}function Wa(n,e,t,i){return n=it(22,n,i,e),n.elementType=Yn,n.lanes=t,n.stateNode={isHidden:!1},n}function zs(n,e,t){return n=it(6,n,null,e),n.lanes=t,n}function Bs(n,e,t){return e=it(4,n.children!==null?n.children:[],n.key,e),e.lanes=t,e.stateNode={containerInfo:n.containerInfo,pendingChildren:null,implementation:n.implementation},e}function gf(n,e,t,i,a){this.tag=e,this.containerInfo=n,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=si(0),this.expirationTimes=si(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=si(0),this.identifierPrefix=i,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function Fs(n,e,t,i,a,o,l,u,h){return n=new gf(n,e,t,u,h),e===1?(e=1,o===!0&&(e|=8)):e=0,o=it(3,null,null,e),n.current=o,o.stateNode=n,o.memoizedState={element:i,isDehydrated:t,cache:null,transitions:null,pendingSuspenseBoundaries:null},Zo(o),n}function mf(n,e,t){var i=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(S){console.error(S)}}return c(),Ks.exports=Ef(),Ks.exports}var Tc;function Nf(){if(Tc)return qa;Tc=1;var c=Mc();return qa.createRoot=c.createRoot,qa.hydrateRoot=c.hydrateRoot,qa}var Of=Nf();const Af=ao(Of);var yn=oo();const ro=ao(yn),Ic=yn.createContext(void 0),Cf=({children:c})=>{const S=localStorage.getItem("selectedLanguage")||"python",[p,P]=yn.useState(S);return yn.useEffect(()=>{localStorage.setItem("selectedLanguage",p)},[p]),r.jsx(Ic.Provider,{value:{selectedLanguage:p,setSelectedLanguage:P},children:c})};function Lf(){const c=yn.useContext(Ic);if(c===void 0)throw new Error("useLanguage must be used within a LanguageProvider");return c}const Dc=yn.createContext(void 0);function Rf({children:c}){const[S,p]=yn.useState(!0),P=()=>p(!0),j=()=>p(!1),$=()=>p(!S);return r.jsx(Dc.Provider,{value:{isSidebarOpen:S,showSidebar:P,hideSidebar:j,toggleSidebar:$},children:c})}function Xs(){const c=yn.useContext(Dc);if(c===void 0)throw new Error("useSidebar must be used within SidebarProvider");return c}const Pf="_wave_nm5to_1",Qa={wave:Pf};function Mf(){return r.jsxs("div",{className:Qa.background,children:[r.jsx("div",{className:Qa.wave}),r.jsx("div",{className:Qa.wave}),r.jsx("div",{className:Qa.wave})]})}const If="_topbar_103sc_1",Df="_container_103sc_22",zf="_buttonContainer_103sc_28",Bf="_title_103sc_35",Ff="_iconLink_103sc_53",Uf="_hamburger_103sc_75",Hf="_hamburgerIcon_103sc_79",Wf="_hamburgerTop_103sc_88",Vf="_collapsed_103sc_92",$f="_hamburgerMiddle_103sc_96",Kf="_hamburgerBottom_103sc_106",pt={topbar:If,container:Df,buttonContainer:zf,title:Bf,iconLink:Ff,hamburger:Uf,hamburgerIcon:Hf,hamburgerTop:Wf,collapsed:Vf,hamburgerMiddle:$f,hamburgerBottom:Kf};var io={exports:{}},Gf=io.exports,jc;function Jf(){return jc||(jc=1,(function(c,S){(function(P,j){c.exports=j(oo())})(Gf,p=>(()=>{var P={"./node_modules/css-mediaquery/index.js":((C,x)=>{x.match=N,x.parse=w;var b=/(?:(only|not)?\s*([^\s\(\)]+)(?:\s*and)?\s*)?(.+)?/i,z=/\(\s*([^\s\:\)]+)\s*(?:\:\s*([^\s\)]+))?\s*\)/,A=/^(?:(min|max)-)?(.+)/,T=/(em|rem|px|cm|mm|in|pt|pc)?$/,k=/(dpi|dpcm|dppx)?$/;function N(G,L){return w(G).some(function(Q){var Z=Q.inverse,on=Q.type==="all"||L.type===Q.type;if(on&&Z||!(on||Z))return!1;var wn=Q.expressions.every(function(J){var mn=J.feature,Tn=J.modifier,vn=J.value,cn=L[mn];if(!cn)return!1;switch(mn){case"orientation":case"scan":return cn.toLowerCase()===vn.toLowerCase();case"width":case"height":case"device-width":case"device-height":vn=R(vn),cn=R(cn);break;case"resolution":vn=B(vn),cn=B(cn);break;case"aspect-ratio":case"device-aspect-ratio":case"device-pixel-ratio":vn=I(vn),cn=I(cn);break;case"grid":case"color":case"color-index":case"monochrome":vn=parseInt(vn,10)||1,cn=parseInt(cn,10)||0;break}switch(Tn){case"min":return cn>=vn;case"max":return cn<=vn;default:return cn===vn}});return wn&&!Z||!wn&&Z})}function w(G){return G.split(",").map(function(L){L=L.trim();var Q=L.match(b),Z=Q[1],on=Q[2],wn=Q[3]||"",J={};return J.inverse=!!Z&&Z.toLowerCase()==="not",J.type=on?on.toLowerCase():"all",wn=wn.match(/\([^\)]+\)/g)||[],J.expressions=wn.map(function(mn){var Tn=mn.match(z),vn=Tn[1].toLowerCase().match(A);return{modifier:vn[1],feature:vn[2],value:Tn[2]}}),J})}function I(G){var L=Number(G),Q;return L||(Q=G.match(/^(\d+)\s*\/\s*(\d+)$/),L=Q[1]/Q[2]),L}function B(G){var L=parseFloat(G),Q=String(G).match(k)[1];switch(Q){case"dpcm":return L/2.54;case"dppx":return L*96;default:return L}}function R(G){var L=parseFloat(G),Q=String(G).match(T)[1];switch(Q){case"em":return L*16;case"rem":return L*16;case"cm":return L*96/2.54;case"mm":return L*96/2.54/10;case"in":return L*96;case"pt":return L*72;case"pc":return L*72/12;default:return L}}}),"./node_modules/hyphenate-style-name/index.js":((C,x,b)=>{b.r(x),b.d(x,{default:()=>w});var z=/[A-Z]/g,A=/^ms-/,T={};function k(I){return"-"+I.toLowerCase()}function N(I){if(T.hasOwnProperty(I))return T[I];var B=I.replace(z,k);return T[I]=A.test(B)?"-"+B:B}const w=N}),"./node_modules/matchmediaquery/index.js":((C,x,b)=>{var z=b("./node_modules/css-mediaquery/index.js").match,A=typeof window<"u"?window.matchMedia:null;function T(N,w,I){var B=this;if(A&&!I){var R=A.call(window,N);this.matches=R.matches,this.media=R.media,R.addListener(Q)}else this.matches=z(N,w),this.media=N;this.addListener=G,this.removeListener=L,this.dispose=Z;function G(on){R&&R.addListener(on)}function L(on){R&&R.removeListener(on)}function Q(on){B.matches=on.matches,B.media=on.media}function Z(){R&&R.removeListener(Q)}}function k(N,w,I){return new T(N,w,I)}C.exports=k}),"./node_modules/object-assign/index.js":(C=>{var x=Object.getOwnPropertySymbols,b=Object.prototype.hasOwnProperty,z=Object.prototype.propertyIsEnumerable;function A(k){if(k==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(k)}function T(){try{if(!Object.assign)return!1;var k=new String("abc");if(k[5]="de",Object.getOwnPropertyNames(k)[0]==="5")return!1;for(var N={},w=0;w<10;w++)N["_"+String.fromCharCode(w)]=w;var I=Object.getOwnPropertyNames(N).map(function(R){return N[R]});if(I.join("")!=="0123456789")return!1;var B={};return"abcdefghijklmnopqrst".split("").forEach(function(R){B[R]=R}),Object.keys(Object.assign({},B)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}C.exports=T()?Object.assign:function(k,N){for(var w,I=A(k),B,R=1;R{var z=function(){};{var A=b("./node_modules/prop-types/lib/ReactPropTypesSecret.js"),T={},k=b("./node_modules/prop-types/lib/has.js");z=function(w){var I="Warning: "+w;typeof console<"u"&&console.error(I);try{throw new Error(I)}catch{}}}function N(w,I,B,R,G){for(var L in w)if(k(w,L)){var Q;try{if(typeof w[L]!="function"){var Z=Error((R||"React class")+": "+B+" type `"+L+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof w[L]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw Z.name="Invariant Violation",Z}Q=w[L](I,L,R,B,null,A)}catch(wn){Q=wn}if(Q&&!(Q instanceof Error)&&z((R||"React class")+": type specification of "+B+" `"+L+"` is invalid; the type checker function must return `null` or an `Error` but returned a "+typeof Q+". You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument)."),Q instanceof Error&&!(Q.message in T)){T[Q.message]=!0;var on=G?G():"";z("Failed "+B+" type: "+Q.message+(on??""))}}}N.resetWarningCache=function(){T={}},C.exports=N}),"./node_modules/prop-types/factoryWithTypeCheckers.js":((C,x,b)=>{var z=b("./node_modules/react-is/index.js"),A=b("./node_modules/object-assign/index.js"),T=b("./node_modules/prop-types/lib/ReactPropTypesSecret.js"),k=b("./node_modules/prop-types/lib/has.js"),N=b("./node_modules/prop-types/checkPropTypes.js"),w=function(){};w=function(B){var R="Warning: "+B;typeof console<"u"&&console.error(R);try{throw new Error(R)}catch{}};function I(){return null}C.exports=function(B,R){var G=typeof Symbol=="function"&&Symbol.iterator,L="@@iterator";function Q(H){var nn=H&&(G&&H[G]||H[L]);if(typeof nn=="function")return nn}var Z="<>",on={array:Tn("array"),bigint:Tn("bigint"),bool:Tn("boolean"),func:Tn("function"),number:Tn("number"),object:Tn("object"),string:Tn("string"),symbol:Tn("symbol"),any:vn(),arrayOf:cn,element:Fn(),elementType:ne(),instanceOf:Gn,node:d(),objectOf:F,oneOf:Yn,oneOfType:dn,shape:tn,exact:Mn};function wn(H,nn){return H===nn?H!==0||1/H===1/nn:H!==H&&nn!==nn}function J(H,nn){this.message=H,this.data=nn&&typeof nn=="object"?nn:{},this.stack=""}J.prototype=Error.prototype;function mn(H){var nn={},In=0;function Cn(Hn,Dn,zn,Wn,$n,Bn,X){if(Wn=Wn||Z,Bn=Bn||zn,X!==T){if(R){var ce=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use `PropTypes.checkPropTypes()` to call them. Read more at http://fb.me/use-check-prop-types");throw ce.name="Invariant Violation",ce}else if(typeof console<"u"){var Ee=Wn+":"+zn;!nn[Ee]&&In<3&&(w("You are manually calling a React.PropTypes validation function for the `"+Bn+"` prop on `"+Wn+"`. This is deprecated and will throw in the standalone `prop-types` package. You may be seeing this warning due to a third-party PropTypes library. See https://fb.me/react-warning-dont-call-proptypes for details."),nn[Ee]=!0,In++)}}return Dn[zn]==null?Hn?Dn[zn]===null?new J("The "+$n+" `"+Bn+"` is marked as required "+("in `"+Wn+"`, but its value is `null`.")):new J("The "+$n+" `"+Bn+"` is marked as required in "+("`"+Wn+"`, but its value is `undefined`.")):null:H(Dn,zn,Wn,$n,Bn)}var En=Cn.bind(null,!1);return En.isRequired=Cn.bind(null,!0),En}function Tn(H){function nn(In,Cn,En,Hn,Dn,zn){var Wn=In[Cn],$n=Nn(Wn);if($n!==H){var Bn=jn(Wn);return new J("Invalid "+Hn+" `"+Dn+"` of type "+("`"+Bn+"` supplied to `"+En+"`, expected ")+("`"+H+"`."),{expectedType:H})}return null}return mn(nn)}function vn(){return mn(I)}function cn(H){function nn(In,Cn,En,Hn,Dn){if(typeof H!="function")return new J("Property `"+Dn+"` of component `"+En+"` has invalid PropType notation inside arrayOf.");var zn=In[Cn];if(!Array.isArray(zn)){var Wn=Nn(zn);return new J("Invalid "+Hn+" `"+Dn+"` of type "+("`"+Wn+"` supplied to `"+En+"`, expected an array."))}for(var $n=0;$n1?w("Invalid arguments supplied to oneOf, expected an array, got "+arguments.length+" arguments. A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z])."):w("Invalid argument supplied to oneOf, expected an array."),I;function nn(In,Cn,En,Hn,Dn){for(var zn=In[Cn],Wn=0;Wn0?", expected one of type ["+$n.join(", ")+"]":"";return new J("Invalid "+zn+" `"+Wn+"` supplied to "+("`"+Dn+"`"+Ee+"."))}return mn(Cn)}function d(){function H(nn,In,Cn,En,Hn){return kn(nn[In])?null:new J("Invalid "+En+" `"+Hn+"` supplied to "+("`"+Cn+"`, expected a ReactNode."))}return mn(H)}function E(H,nn,In,Cn,En){return new J((H||"React class")+": "+nn+" type `"+In+"."+Cn+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+En+"`.")}function tn(H){function nn(In,Cn,En,Hn,Dn){var zn=In[Cn],Wn=Nn(zn);if(Wn!=="object")return new J("Invalid "+Hn+" `"+Dn+"` of type `"+Wn+"` "+("supplied to `"+En+"`, expected `object`."));for(var $n in H){var Bn=H[$n];if(typeof Bn!="function")return E(En,Hn,Dn,$n,jn(Bn));var X=Bn(zn,$n,En,Hn,Dn+"."+$n,T);if(X)return X}return null}return mn(nn)}function Mn(H){function nn(In,Cn,En,Hn,Dn){var zn=In[Cn],Wn=Nn(zn);if(Wn!=="object")return new J("Invalid "+Hn+" `"+Dn+"` of type `"+Wn+"` "+("supplied to `"+En+"`, expected `object`."));var $n=A({},In[Cn],H);for(var Bn in $n){var X=H[Bn];if(k(H,Bn)&&typeof X!="function")return E(En,Hn,Dn,Bn,jn(X));if(!X)return new J("Invalid "+Hn+" `"+Dn+"` key `"+Bn+"` supplied to `"+En+"`.\nBad object: "+JSON.stringify(In[Cn],null," ")+`
+Valid keys: `+JSON.stringify(Object.keys(H),null," "));var ce=X(zn,Bn,En,Hn,Dn+"."+Bn,T);if(ce)return ce}return null}return mn(nn)}function kn(H){switch(typeof H){case"number":case"string":case"undefined":return!0;case"boolean":return!H;case"object":if(Array.isArray(H))return H.every(kn);if(H===null||B(H))return!0;var nn=Q(H);if(nn){var In=nn.call(H),Cn;if(nn!==H.entries){for(;!(Cn=In.next()).done;)if(!kn(Cn.value))return!1}else for(;!(Cn=In.next()).done;){var En=Cn.value;if(En&&!kn(En[1]))return!1}}else return!1;return!0;default:return!1}}function Un(H,nn){return H==="symbol"?!0:nn?nn["@@toStringTag"]==="Symbol"||typeof Symbol=="function"&&nn instanceof Symbol:!1}function Nn(H){var nn=typeof H;return Array.isArray(H)?"array":H instanceof RegExp?"object":Un(nn,H)?"symbol":nn}function jn(H){if(typeof H>"u"||H===null)return""+H;var nn=Nn(H);if(nn==="object"){if(H instanceof Date)return"date";if(H instanceof RegExp)return"regexp"}return nn}function Sn(H){var nn=jn(H);switch(nn){case"array":case"object":return"an "+nn;case"boolean":case"date":case"regexp":return"a "+nn;default:return nn}}function ue(H){return!H.constructor||!H.constructor.name?Z:H.constructor.name}return on.checkPropTypes=N,on.resetWarningCache=N.resetWarningCache,on.PropTypes=on,on}}),"./node_modules/prop-types/index.js":((C,x,b)=>{{var z=b("./node_modules/react-is/index.js"),A=!0;C.exports=b("./node_modules/prop-types/factoryWithTypeCheckers.js")(z.isElement,A)}}),"./node_modules/prop-types/lib/ReactPropTypesSecret.js":(C=>{var x="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";C.exports=x}),"./node_modules/prop-types/lib/has.js":(C=>{C.exports=Function.call.bind(Object.prototype.hasOwnProperty)}),"./node_modules/react-is/cjs/react-is.development.js":((C,x)=>{(function(){var b=typeof Symbol=="function"&&Symbol.for,z=b?Symbol.for("react.element"):60103,A=b?Symbol.for("react.portal"):60106,T=b?Symbol.for("react.fragment"):60107,k=b?Symbol.for("react.strict_mode"):60108,N=b?Symbol.for("react.profiler"):60114,w=b?Symbol.for("react.provider"):60109,I=b?Symbol.for("react.context"):60110,B=b?Symbol.for("react.async_mode"):60111,R=b?Symbol.for("react.concurrent_mode"):60111,G=b?Symbol.for("react.forward_ref"):60112,L=b?Symbol.for("react.suspense"):60113,Q=b?Symbol.for("react.suspense_list"):60120,Z=b?Symbol.for("react.memo"):60115,on=b?Symbol.for("react.lazy"):60116,wn=b?Symbol.for("react.block"):60121,J=b?Symbol.for("react.fundamental"):60117,mn=b?Symbol.for("react.responder"):60118,Tn=b?Symbol.for("react.scope"):60119;function vn(X){return typeof X=="string"||typeof X=="function"||X===T||X===R||X===N||X===k||X===L||X===Q||typeof X=="object"&&X!==null&&(X.$$typeof===on||X.$$typeof===Z||X.$$typeof===w||X.$$typeof===I||X.$$typeof===G||X.$$typeof===J||X.$$typeof===mn||X.$$typeof===Tn||X.$$typeof===wn)}function cn(X){if(typeof X=="object"&&X!==null){var ce=X.$$typeof;switch(ce){case z:var Ee=X.type;switch(Ee){case B:case R:case T:case N:case k:case L:return Ee;default:var $e=Ee&&Ee.$$typeof;switch($e){case I:case G:case on:case Z:case w:return $e;default:return ce}}case A:return ce}}}var Fn=B,ne=R,Gn=I,Yn=w,F=z,dn=G,d=T,E=on,tn=Z,Mn=A,kn=N,Un=k,Nn=L,jn=!1;function Sn(X){return jn||(jn=!0,console.warn("The ReactIs.isAsyncMode() alias has been deprecated, and will be removed in React 17+. Update your code to use ReactIs.isConcurrentMode() instead. It has the exact same API.")),ue(X)||cn(X)===B}function ue(X){return cn(X)===R}function H(X){return cn(X)===I}function nn(X){return cn(X)===w}function In(X){return typeof X=="object"&&X!==null&&X.$$typeof===z}function Cn(X){return cn(X)===G}function En(X){return cn(X)===T}function Hn(X){return cn(X)===on}function Dn(X){return cn(X)===Z}function zn(X){return cn(X)===A}function Wn(X){return cn(X)===N}function $n(X){return cn(X)===k}function Bn(X){return cn(X)===L}x.AsyncMode=Fn,x.ConcurrentMode=ne,x.ContextConsumer=Gn,x.ContextProvider=Yn,x.Element=F,x.ForwardRef=dn,x.Fragment=d,x.Lazy=E,x.Memo=tn,x.Portal=Mn,x.Profiler=kn,x.StrictMode=Un,x.Suspense=Nn,x.isAsyncMode=Sn,x.isConcurrentMode=ue,x.isContextConsumer=H,x.isContextProvider=nn,x.isElement=In,x.isForwardRef=Cn,x.isFragment=En,x.isLazy=Hn,x.isMemo=Dn,x.isPortal=zn,x.isProfiler=Wn,x.isStrictMode=$n,x.isSuspense=Bn,x.isValidElementType=vn,x.typeOf=cn})()}),"./node_modules/react-is/index.js":((C,x,b)=>{C.exports=b("./node_modules/react-is/cjs/react-is.development.js")}),"./node_modules/shallow-equal/dist/index.esm.js":((C,x,b)=>{b.r(x),b.d(x,{shallowEqualArrays:()=>A,shallowEqualObjects:()=>z});function z(T,k){if(T===k)return!0;if(!T||!k)return!1;var N=Object.keys(T),w=Object.keys(k),I=N.length;if(w.length!==I)return!1;for(var B=0;B{Object.defineProperty(x,"__esModule",{value:!0});var z=b("react"),A=(0,z.createContext)(void 0);x.default=A}),"./src/index.ts":(function(C,x,b){var z=this&&this.__importDefault||function(w){return w&&w.__esModule?w:{default:w}};Object.defineProperty(x,"__esModule",{value:!0}),x.Context=x.toQuery=x.useMediaQuery=x.default=void 0;var A=z(b("./src/useMediaQuery.ts"));x.useMediaQuery=A.default;var T=z(b("./src/Component.ts"));x.default=T.default;var k=z(b("./src/toQuery.ts"));x.toQuery=k.default;var N=z(b("./src/Context.ts"));x.Context=N.default}),"./src/mediaQuery.ts":(function(C,x,b){var z=this&&this.__assign||function(){return z=Object.assign||function(L){for(var Q,Z=1,on=arguments.length;Z{C.exports=p})},j={};function $(C){var x=j[C];if(x!==void 0)return x.exports;var b=j[C]={exports:{}};return P[C].call(b.exports,b,b.exports,$),b.exports}$.d=(C,x)=>{for(var b in x)$.o(x,b)&&!$.o(C,b)&&Object.defineProperty(C,b,{enumerable:!0,get:x[b]})},$.o=(C,x)=>Object.prototype.hasOwnProperty.call(C,x),$.r=C=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(C,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(C,"__esModule",{value:!0})};var Y=$("./src/index.ts");return Y})())})(io)),io.exports}var zc=Jf();function Yf(c){return c<.5?2*c*c:1-Math.pow(-2*c+2,2)/2}function Bc({selector:c,duration:S=1500,offset:p=0}){const P=yn.useRef(null),j=yn.useRef(0),$=yn.useRef(!1),Y=()=>{j.current&&cancelAnimationFrame(j.current)},C=()=>$.current=!0,x=yn.useCallback(()=>{if(!P.current)return;Y(),$.current=!1;const z=P.current.offsetTop,A=window.scrollY,T=z-A-p,k=performance.now();if(!T)return;const N=w=>{const I=w-k,B=I/S,R=Yf(B>1?1:B),G=A+T*R;window.scrollTo({top:G}),I(P.current=document.querySelector(c),window.addEventListener("wheel",C,{passive:!0}),window.addEventListener("touchmove",C,{passive:!0}),()=>{Y(),window.removeEventListener("wheel",C),window.removeEventListener("touchmove",C)}),[c]),x}function Qe(...c){return c.filter(Boolean).join(" ")}const qf="_brand_18f9t_1",Qf="_bounce_18f9t_19",Xf="_glowDisappear_18f9t_23",Zf="_heartBeat_18f9t_27",np="_rubberBand_18f9t_31",ep="_rotate_18f9t_35",br={brand:qf,bounce:Qf,glowDisappear:Xf,heartBeat:Zf,rubberBand:np,rotate:ep};function tp(){const[c,S]=yn.useState(br.rotate),[p,P]=yn.useState(!1),j=[br.bounce,br.glowDisappear,br.heartBeat,br.rubberBand,br.rotate],$=Qe(br.brand,p&&c),Y=()=>P(!1),C=()=>{const x=Math.floor(Math.random()*j.length),b=j[x];P(!0),S(b)};return r.jsx("div",{className:$,onClick:C,onAnimationEnd:Y,children:"JWL"})}const rp="_container_uucyv_1",ip="_input_uucyv_6",ap="_label_uucyv_16",op="_indicator_uucyv_20",sp="_decoration_uucyv_28",Di={container:rp,input:ip,label:ap,indicator:op,decoration:sp};function kc(){const c=document.documentElement,[S,p]=yn.useState(!1),P=()=>{const $=new Event("themeChange");c.dispatchEvent($)},j=()=>{p(!S),c.setAttribute("data-theme",S?"dark":"light"),P()};return yn.useEffect(()=>{const $=c.getAttribute("data-theme");p($==="light"),P()},[]),r.jsxs("div",{className:Di.container,children:[r.jsx("input",{className:Di.input,"aria-label":"theme switch",id:"theme-switch",type:"checkbox",checked:S,onChange:j}),r.jsxs("label",{className:Di.label,htmlFor:"theme-switch",children:[r.jsx("span",{className:Di.indicator}),r.jsx("span",{className:Di.decoration})]})]})}function lp(){const c=document.documentElement,[S,p]=yn.useState("light"),P=()=>{const j=c.getAttribute("data-theme")??"light";p(j)};return yn.useEffect(()=>(c.addEventListener("themeChange",P),()=>c.removeEventListener("themeChange",P)),[c]),S}function up(){const S=lp()==="dark"?"#FFFFFF":"#181616";return r.jsx("svg",{viewBox:"0 0 128 128",children:r.jsxs("g",{fill:S,children:[r.jsx("path",{clipRule:"evenodd",fillRule:"evenodd",d:"M64 5.103c-33.347 0-60.388 27.035-60.388 60.388 0 26.682 17.303 49.317 41.297 57.303 3.017.56 4.125-1.31 4.125-2.905 0-1.44-.056-6.197-.082-11.243-16.8 3.653-20.345-7.125-20.345-7.125-2.747-6.98-6.705-8.836-6.705-8.836-5.48-3.748.413-3.67.413-3.67 6.063.425 9.257 6.223 9.257 6.223 5.386 9.23 14.127 6.562 17.573 5.02.542-3.903 2.107-6.568 3.834-8.076-13.413-1.525-27.514-6.704-27.514-29.843 0-6.593 2.36-11.98 6.223-16.21-.628-1.52-2.695-7.662.584-15.98 0 0 5.07-1.623 16.61 6.19C53.7 35 58.867 34.327 64 34.304c5.13.023 10.3.694 15.127 2.033 11.526-7.813 16.59-6.19 16.59-6.19 3.287 8.317 1.22 14.46.593 15.98 3.872 4.23 6.215 9.617 6.215 16.21 0 23.194-14.127 28.3-27.574 29.796 2.167 1.874 4.097 5.55 4.097 11.183 0 8.08-.07 14.583-.07 16.572 0 1.607 1.088 3.49 4.148 2.897 23.98-7.994 41.263-30.622 41.263-57.294C124.388 32.14 97.35 5.104 64 5.104z"}),r.jsx("path",{d:"M26.484 91.806c-.133.3-.605.39-1.035.185-.44-.196-.685-.605-.543-.906.13-.31.603-.395 1.04-.188.44.197.69.61.537.91zm2.446 2.729c-.287.267-.85.143-1.232-.28-.396-.42-.47-.983-.177-1.254.298-.266.844-.14 1.24.28.394.426.472.984.17 1.255zm2.382 3.477c-.37.258-.976.017-1.35-.52-.37-.538-.37-1.183.01-1.44.373-.258.97-.025 1.35.507.368.545.368 1.19-.01 1.452zm3.261 3.361c-.33.365-1.036.267-1.552-.23-.527-.487-.674-1.18-.343-1.544.336-.366 1.045-.264 1.564.23.527.486.686 1.18.333 1.543zm4.5 1.951c-.147.473-.825.688-1.51.486-.683-.207-1.13-.76-.99-1.238.14-.477.823-.7 1.512-.485.683.206 1.13.756.988 1.237m4.943.361c.017.498-.563.91-1.28.92-.723.017-1.308-.387-1.315-.877 0-.503.568-.91 1.29-.924.717-.013 1.306.387 1.306.88zm4.598-.782c.086.485-.413.984-1.126 1.117-.7.13-1.35-.172-1.44-.653-.086-.498.422-.997 1.122-1.126.714-.123 1.354.17 1.444.663zm0 0"})]})})}const cp=72;function dp({forwardedRef:c}){const S=yn.useRef(null),p=Bc({selector:"main",offset:cp}),{isSidebarOpen:P,toggleSidebar:j}=Xs(),$=zc.useMediaQuery({maxWidth:768}),Y=Qe(pt.hamburgerIcon,!P&&pt.collapsed),C=k=>{k.preventDefault(),window.history.replaceState({},"",window.location.pathname),p()},x=()=>j(),b=()=>!$&&r.jsx(tp,{}),z=()=>!$&&r.jsx("a",{href:"main",onClick:C,role:"button",children:r.jsx("h1",{className:pt.title,children:"LeetCode Cheatsheet"})}),A=()=>r.jsx("a",{href:"/leetcode-cheatsheet","aria-label":"GitHub source",className:pt.iconLink,target:"_blank",children:r.jsx(up,{})}),T=()=>$?r.jsxs(r.Fragment,{children:[r.jsx(kc,{}),A()]}):r.jsxs("div",{className:pt.buttonContainer,children:[A(),r.jsx(kc,{})]});return r.jsx("header",{ref:S,className:pt.topbar,children:r.jsxs("div",{className:pt.container,children:[r.jsxs("div",{ref:c,className:pt.hamburger,onClick:x,children:[r.jsx("span",{className:Qe(Y,pt.hamburgerTop)}),r.jsx("span",{className:Qe(Y,pt.hamburgerMiddle)}),r.jsx("span",{className:Qe(Y,pt.hamburgerBottom)})]}),b(),z(),T()]})})}const fp="_sidebar_14bou_1",pp="_exit_14bou_21",hp="_hide_14bou_24",gp="_scrollContainer_14bou_28",Xa={sidebar:fp,exit:pp,hide:hp,scrollContainer:gp};function so(c,S){const p=P=>{const j=$=>$.current&&!$.current.contains(P.target);(Array.isArray(c)?c.every(j):j(c))&&S()};yn.useEffect(()=>(document.addEventListener("click",p),()=>document.removeEventListener("click",p)),[c,S])}const mp="_accordion_1hmri_1",vp="_button_1hmri_6",yp="_open_1hmri_25",xp="_content_1hmri_29",Za={accordion:mp,button:vp,open:yp,content:xp};function _p(c){const S=parseFloat(c);return!isNaN(S)&&isFinite(S)}function Ec(c){return typeof c=="string"&&c[c.length-1]==="%"&&_p(c.substring(0,c.length-1))}function Ys(c,S,p){S===0&&!p&&c?.style&&c?.children.length>0&&(c.style.display="none")}function bp(c,S){S===0&&c?.style&&(c.style.display="")}const wp={animating:"rah-animating",animatingUp:"rah-animating--up",animatingDown:"rah-animating--down",animatingToHeightZero:"rah-animating--to-height-zero",animatingToHeightAuto:"rah-animating--to-height-auto",animatingToHeightSpecific:"rah-animating--to-height-specific",static:"rah-static",staticHeightZero:"rah-static--height-zero",staticHeightAuto:"rah-static--height-auto",staticHeightSpecific:"rah-static--height-specific"};function Nc(c,S){return[c.static,S===0&&c.staticHeightZero,typeof S=="number"&&S>0?c.staticHeightSpecific:null,S==="auto"&&c.staticHeightAuto].filter(p=>p).join(" ")}const Sp=["animateOpacity","animationStateClasses","applyInlineTransitions","children","className","contentClassName","contentRef","delay","duration","easing","height","onHeightAnimationEnd","onHeightAnimationStart","style","disableDisplayNone"],Tp=ro.forwardRef((c,S)=>{const{animateOpacity:p=!1,animationStateClasses:P={},applyInlineTransitions:j=!0,children:$,className:Y="",contentClassName:C,delay:x=0,disableDisplayNone:b=!1,duration:z=500,easing:A="ease",height:T,onHeightAnimationEnd:k,onHeightAnimationStart:N,style:w,contentRef:I}=c,B=Object.assign({},c);Sp.forEach(Un=>{delete B[Un]});const R=yn.useRef(T),G=yn.useRef(null),L=yn.useRef(),Q=yn.useRef(),Z=yn.useRef(Object.assign(Object.assign({},wp),P)),on=typeof window<"u",wn=yn.useRef(on&&window.matchMedia?window.matchMedia("(prefers-reduced-motion)").matches:!1),J=wn.current?0:x,mn=wn.current?0:z;let Tn=T,vn="visible";typeof T=="number"?(Tn=T<0?0:T,vn="hidden"):Ec(Tn)&&(Tn=T==="0%"?0:T,vn="hidden");const[cn,Fn]=yn.useState(Tn),[ne,Gn]=yn.useState(vn),[Yn,F]=yn.useState(!1),[dn,d]=yn.useState(Nc(Z.current,T));yn.useEffect(()=>{Ys(G.current,cn,b)},[]),yn.useEffect(()=>{if(T!==R.current&&G.current){bp(G.current,R.current),G.current.style.overflow="hidden";const Un=G.current.offsetHeight;G.current.style.overflow="";const Nn=mn+J;let jn,Sn,ue="hidden",H;const nn=R.current==="auto";typeof T=="number"?(jn=T<0?0:T,Sn=jn):Ec(T)?(jn=T==="0%"?0:T,Sn=jn):(jn=Un,Sn="auto",ue=void 0),nn&&(Sn=jn,jn=Un);const In=[Z.current.animating,(R.current==="auto"||TR.current)&&Z.current.animatingDown,Sn===0&&Z.current.animatingToHeightZero,Sn==="auto"&&Z.current.animatingToHeightAuto,typeof Sn=="number"&&Sn>0?Z.current.animatingToHeightSpecific:null].filter(En=>En).join(" "),Cn=Nc(Z.current,Sn);Fn(jn),Gn("hidden"),F(!nn),d(In),clearTimeout(Q.current),clearTimeout(L.current),nn?(H=!0,Q.current=setTimeout(()=>{Fn(Sn),Gn(ue),F(H),N?.(Sn)},50),L.current=setTimeout(()=>{F(!1),d(Cn),Ys(G.current,Sn,b),k?.(Sn)},Nn)):(N?.(jn),Q.current=setTimeout(()=>{Fn(Sn),Gn(ue),F(!1),d(Cn),T!=="auto"&&Ys(G.current,jn,b),k?.(jn)},Nn))}return R.current=T,()=>{clearTimeout(Q.current),clearTimeout(L.current)}},[T]);const E=Object.assign(Object.assign({},w),{height:cn,overflow:ne||w?.overflow});Yn&&j&&(E.transition=`height ${mn}ms ${A} ${J}ms`,w?.transition&&(E.transition=`${w.transition}, ${E.transition}`),E.WebkitTransition=E.transition);const tn={};p&&(tn.transition=`opacity ${mn}ms ${A} ${J}ms`,tn.WebkitTransition=tn.transition,cn===0&&(tn.opacity=0));const kn=typeof B["aria-hidden"]<"u"?B["aria-hidden"]:T===0;return ro.createElement("div",Object.assign({},B,{"aria-hidden":kn,className:`${dn} ${Y}`,style:E,ref:S}),ro.createElement("div",{className:C,style:tn,ref:Un=>{G.current=Un,I&&(I.current=Un)}},$))});function jp(){return r.jsx("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"black",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:r.jsx("polyline",{points:"6 9 12 15 18 9"})})}function De({title:c,children:S}){const[p,P]=yn.useState(!1),j=p?"auto":0,$=Qe(Za.button,p&&Za.open),Y=()=>P(!p);return r.jsxs("div",{className:Za.accordion,children:[r.jsxs("button",{className:$,onClick:Y,children:[r.jsx("span",{children:c}),r.jsx(jp,{})]}),r.jsx(Tp,{animateOpacity:!0,height:j,duration:400,children:r.jsx("div",{className:Za.content,children:S})})]})}const kp="_linkWrapper_1logo_1",Ep="_link_1logo_1",Oc={linkWrapper:kp,link:Ep},Np="_tooltip_1edpy_1",Op="_exit_1edpy_13",Ap="_text_1edpy_27",qs={tooltip:Np,exit:Op,text:Ap};var Cp=Mc();const Lp=ao(Cp);function Rp({anchorRef:c,content:S,showTooltip:p}){const P=yn.useRef(null),[j,$]=yn.useState(null),[Y,C]=yn.useState(!1),x=Qe(qs.tooltip,!p&&qs.exit),b=()=>C(!1),z=()=>{p||C(!0)};return yn.useEffect(()=>{if(!p||!c.current)return;const A=c.current.getBoundingClientRect(),T=P.current?.offsetHeight??0,k=A.left+window.scrollX,N=A.top+window.scrollY-T-4;$({top:N,left:k})},[p]),(p||!Y)&&c.current&&Lp.createPortal(r.jsx("div",{ref:P,className:x,style:j??{},onAnimationStart:b,onAnimationEnd:z,children:r.jsx("span",{className:qs.text,children:S})}),document.body)}function en({href:c,description:S}){const p=yn.useRef(null),[P,j]=yn.useState(!1),$=Bc({selector:c,offset:72});let Y;const C=z=>{z.preventDefault(),window.history.replaceState({},"",c),clearTimeout(Y),j(!1),$()},x=()=>{Y=setTimeout(()=>{j(!0)},700)},b=()=>{clearTimeout(Y),j(!1)};return r.jsxs("div",{className:Oc.linkWrapper,children:[r.jsx("a",{ref:p,href:c,className:Oc.link,onClick:C,role:"button","aria-description":S,onMouseEnter:x,onMouseLeave:b,children:S}),r.jsx(Rp,{anchorRef:p,content:S,showTooltip:P})]})}function Pp(){return r.jsxs(r.Fragment,{children:[r.jsxs(De,{title:"Big O",children:[r.jsx(en,{href:"#bigo-chart",description:"Time/Space Complexities"}),r.jsx(en,{href:"#bigo-data-structure-operations-table",description:"Data Structure Operations"}),r.jsx(en,{href:"#bigo-sorting-algorithms-table",description:"Sorting Algorithms"})]}),r.jsxs(De,{title:"Array",children:[r.jsx(en,{href:"#array-two-pointers-one-input",description:"two pointers: one input, opposite ends"}),r.jsx(en,{href:"#array-two-pointers-two-inputs",description:"two pointers: two inputs, exhaust both"}),r.jsx(en,{href:"#array-sliding-window",description:"sliding window"}),r.jsx(en,{href:"#array-prefix-sum",description:"prefix sum"}),r.jsx(en,{href:"#array-string-building",description:"efficient string building"})]}),r.jsxs(De,{title:"Hash Map",children:[r.jsx(en,{href:"#hashmap-find-number-of-subarrays",description:"find number of subarrays that fit an exact criteria"}),r.jsx(en,{href:"#hashmap-sliding-window",description:"sliding window"})]}),r.jsxs(De,{title:"Linked List",children:[r.jsx(en,{href:"#linkedlist-fast-and-slow-pointer",description:"fast and slow pointer"}),r.jsx(en,{href:"#linkedlist-reverse",description:"reverse linked list"})]}),r.jsxs(De,{title:"Stack",children:[r.jsx(en,{href:"#stack-monotonic-increasing",description:"monotonic increasing stack"}),r.jsx(en,{href:"#stack-monotonic-decreasing",description:"monotonic decreasing stack"})]}),r.jsxs(De,{title:"Binary Tree",children:[r.jsx(en,{href:"#tree-dfs-recursive",description:"DFS (recursive)"}),r.jsx(en,{href:"#tree-dfs-iterative",description:"DFS (iterative)"}),r.jsx(en,{href:"#tree-bfs",description:"BFS"})]}),r.jsxs(De,{title:"Graph",children:[r.jsx(en,{href:"#graph-dfs-recursive",description:"DFS (recursive)"}),r.jsx(en,{href:"#graph-dfs-iterative",description:"DFS (iterative)"}),r.jsx(en,{href:"#graph-bfs",description:"BFS"}),r.jsx(en,{href:"#graph-dijkstra",description:"Dijkstra (shortest path)"}),r.jsx(en,{href:"#graph-bellman-ford",description:"Bellman-Ford (shortest path)"}),r.jsx(en,{href:"#graph-kahn",description:"Kahn (topological sort)"}),r.jsx(en,{href:"#graph-kruskal",description:"Kruskal (mst)"}),r.jsx(en,{href:"#graph-prim",description:"Prim (mst)"})]}),r.jsx(De,{title:"Heap",children:r.jsx(en,{href:"#heap-find-top-k-elements",description:"find top k elements with heap"})}),r.jsxs(De,{title:"Binary Search",children:[r.jsx(en,{href:"#binarysearch-binary-search",description:"binary search"}),r.jsx(en,{href:"#binarysearch-duplicate-elements-left-insertion",description:"duplicate elements, left-most insertion point"}),r.jsx(en,{href:"#binarysearch-duplicate-elements-right-insertion",description:"duplicate elements, right-most insertion point"}),r.jsx(en,{href:"#binarysearch-greedy-minimum",description:"greedy (minimum)"}),r.jsx(en,{href:"#binarysearch-greedy-maximum",description:"greedy (maximum)"})]}),r.jsx(De,{title:"Backtracking",children:r.jsx(en,{href:"#backtracking-backtracking",description:"backtracking"})}),r.jsxs(De,{title:"Dynamic Programming",children:[r.jsx(en,{href:"#dp-top-down",description:"top-down DP"}),r.jsx(en,{href:"#dp-bottom-up",description:"bottom-up DP"}),r.jsx(en,{href:"#dp-kadane",description:"Kadane (max-sum subarray)"})]}),r.jsxs(De,{title:"Bit Manipulation",children:[r.jsx(en,{href:"#bitmanipulation-test-kth-bit",description:"test kth bit"}),r.jsx(en,{href:"#bitmanipulation-set-kth-bit",description:"set kth bit"}),r.jsx(en,{href:"#bitmanipulation-clear-kth-bit",description:"clear kth bit"}),r.jsx(en,{href:"#bitmanipulation-get-rightmost-bit",description:"get rightmost bit"}),r.jsx(en,{href:"#bitmanipulation-count-set-bits",description:"count set bits"}),r.jsx(en,{href:"#bitmanipulation-multiply-power-of-two",description:"multiply by 2^k"}),r.jsx(en,{href:"#bitmanipulation-divide-power-of-two",description:"divide by 2^k"}),r.jsx(en,{href:"#bitmanipulation-check-power-of-two",description:"check if number is power of 2"}),r.jsx(en,{href:"#bitmanipulation-swap-variables",description:"swap two variables"})]}),r.jsxs(De,{title:"Matrix",children:[r.jsx(en,{href:"#matrix-create-copy",description:"create / copy"}),r.jsx(en,{href:"#matrix-diagonals",description:"main / anti diagonals"}),r.jsx(en,{href:"#matrix-rotate-transpose",description:"rotate / transpose"})]}),r.jsxs(De,{title:"Data Structures",children:[r.jsx(en,{href:"#ds-array",description:"array"}),r.jsx(en,{href:"#ds-hash-map",description:"hashmap"}),r.jsx(en,{href:"#ds-linked-list",description:"linked list"}),r.jsx(en,{href:"#ds-doubly-linked-list",description:"doubly linked list"}),r.jsx(en,{href:"#ds-binary-tree",description:"binary tree"}),r.jsx(en,{href:"#ds-binary-search-tree",description:"binary search tree"}),r.jsx(en,{href:"#ds-graph",description:"graph"}),r.jsx(en,{href:"#ds-union-find",description:"union find"}),r.jsx(en,{href:"#ds-union-find-optimized",description:"union find optimized"}),r.jsx(en,{href:"#ds-trie",description:"trie"})]}),r.jsxs(De,{title:"Sorting Algorithms",children:[r.jsx(en,{href:"#sort-bubble",description:"bubble sort"}),r.jsx(en,{href:"#sort-selection",description:"selection sort"}),r.jsx(en,{href:"#sort-insertion",description:"insertion sort"}),r.jsx(en,{href:"#sort-shell",description:"shell sort"}),r.jsx(en,{href:"#sort-merge",description:"mergesort"}),r.jsx(en,{href:"#sort-quick",description:"quicksort"}),r.jsx(en,{href:"#sort-tim",description:"timsort"}),r.jsx(en,{href:"#sort-heap",description:"heapsort"}),r.jsx(en,{href:"#sort-counting",description:"counting sort"}),r.jsx(en,{href:"#sort-bucket",description:"bucket sort"}),r.jsx(en,{href:"#sort-radix",description:"radix sort"}),r.jsx(en,{href:"#sort-cube",description:"cubesort"}),r.jsx(en,{href:"#sort-bogo",description:"bogo sort"}),r.jsx(en,{href:"#sort-pancake",description:"pancake sort"}),r.jsx(en,{href:"#sort-sleep",description:"sleep sort"})]})]})}function Mp({hamburgerButtonRef:c}){const S=yn.useRef(null),{isSidebarOpen:p,showSidebar:P,hideSidebar:j}=Xs(),[$,Y]=yn.useState(!1),C=Qe(Xa.sidebar,!p&&Xa.exit,!p&&$&&Xa.hide),x=k=>{k&&p?j():!k&&!p&&P()},b=zc.useMediaQuery({maxWidth:768},void 0,x),z=()=>{b&&p&&j()},A=()=>Y(!1),T=()=>{p||Y(!0)};return so([S,c],z),r.jsx("nav",{ref:S,className:C,onAnimationStart:A,onAnimationEndCapture:T,children:r.jsx("div",{className:Xa.scrollContainer,children:r.jsx(Pp,{})})})}function Ip(){const c=yn.useRef(null);return r.jsxs("div",{id:"AppBar",children:[r.jsx(dp,{forwardedRef:c}),r.jsx(Mp,{hamburgerButtonRef:c})]})}const Dp="_main_1p6ym_1",zp="_sidebarHidden_1p6ym_11",Ac={main:Dp,sidebarHidden:zp},Bp="_container_1htmy_1",Fp="_sectionHeader_1htmy_7",Zn={container:Bp,sectionHeader:Fp},Up="_container_5c21h_1",Hp="_label_5c21h_13",Wp="_tableWrapper_5c21h_21",Vp="_red_5c21h_30",$p="_oliveGreen_5c21h_34",Kp="_green_5c21h_38",Gp="_orange_5c21h_42",Jp="_yellow_5c21h_46",Yp="_gray_5c21h_50",m={container:Up,label:Hp,tableWrapper:Wp,red:Vp,oliveGreen:$p,green:Kp,orange:Gp,yellow:Jp,gray:Yp};function qp(){const c={red:"rgba(255, 77, 77, 0.7)",orange:"rgba(255, 161, 22, 0.7)",yellow:"rgba(255, 216, 102, 0.7)",oliveGreen:"rgba(169, 220, 118, 0.7)",green:"rgba(63, 200, 111, 0.7)"};return r.jsx("section",{id:"bigo-chart",children:r.jsxs("div",{className:m.container,children:[r.jsx("h3",{children:"Big-O Complexity Chart"}),r.jsxs("svg",{id:"chart",viewBox:"0 0 800 500",children:[r.jsx("path",{d:"M50 450 L 50 0 L 800 0 L 800 450 Z",fill:c.red}),r.jsx("path",{d:"M50 450 L 800 0 L 800 450 Z",fill:c.orange}),r.jsx("path",{d:"M50 450 L 800 450 L 800 330 Z",fill:c.yellow}),r.jsx("path",{d:"M50 450 L 800 450 L 800 410 Z",fill:c.oliveGreen}),r.jsx("path",{d:"M50 450 L 800 450 L 800 440 Z",fill:c.green}),r.jsx("path",{d:"M50 0 L 50 450 L 800 450",fill:"transparent",stroke:"black",strokeWidth:"2"}),r.jsx("path",{d:"M50 448 L 800 448",fill:"transparent",stroke:"black",strokeWidth:"2"}),r.jsx("text",{x:"700",y:"438",fill:"black",children:"O(log n), O(1)"}),r.jsx("path",{d:"M50 450 L 800 400",fill:"transparent",stroke:"black",strokeWidth:"2"}),r.jsx("text",{x:"760",y:"390",fill:"black",children:"O(n)"}),r.jsx("path",{d:"M50 450 Q 400 350, 800 150",fill:"transparent",stroke:"black",strokeWidth:"2"}),r.jsx("text",{x:"630",y:"190",fill:"black",children:"O(n log n)"}),r.jsx("path",{d:"M50 450 Q 180 380, 250 0",fill:"transparent",stroke:"black",strokeWidth:"2"}),r.jsx("text",{x:"260",y:"30",fill:"black",children:"O(n^2)"}),r.jsx("path",{d:"M50 450 C 100 430, 120 350, 120 0",fill:"transparent",stroke:"black",strokeWidth:"2"}),r.jsx("text",{x:"125",y:"20",fill:"black",children:"O(2^n)"}),r.jsx("path",{d:"M50 450 C 80 450, 80 350, 80 0",fill:"transparent",stroke:"black",strokeWidth:"2"}),r.jsx("text",{x:"80",y:"20",fill:"black",children:"O(n!)"}),r.jsx("text",{className:m.label,x:"0",y:"0",transform:"translate(30 230) rotate(-90)",fill:"black",children:"Operations"}),r.jsx("text",{className:m.label,x:"0",y:"0",transform:"translate(420 470)",fill:"black",children:"Elements"})]})]})})}function Qp(){const c=yn.useRef(null),[S,p]=yn.useState(""),P=()=>{S&&c.current?.querySelector(`tr[data-row-number="${S}"]`)?.removeAttribute("focused")},j=$=>{const Y=$.currentTarget,C=Y.getAttribute("data-row-number")??"";P(),C===S?p(""):(Y.setAttribute("focused",""),p(C))};return so(c,P),r.jsx("section",{id:"bigo-data-structure-operations-table",children:r.jsxs("div",{className:m.container,children:[r.jsx("h3",{children:"Data Structure Operations"}),r.jsx("div",{className:m.tableWrapper,children:r.jsx("table",{ref:c,children:r.jsxs("tbody",{children:[r.jsxs("tr",{onClick:j,"data-row-number":"1",children:[r.jsx("th",{children:"Data Structure"}),r.jsx("th",{colSpan:8,children:"Time Complexity"}),r.jsx("th",{children:"Space Complexity"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"2",children:[r.jsx("th",{}),r.jsx("th",{colSpan:4,children:"Average"}),r.jsx("th",{colSpan:4,children:"Worst"}),r.jsx("th",{children:"Worst"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"3",children:[r.jsx("th",{}),r.jsx("th",{children:"Access"}),r.jsx("th",{children:"Search"}),r.jsx("th",{children:"Insertion"}),r.jsx("th",{children:"Deletion"}),r.jsx("th",{children:"Access"}),r.jsx("th",{children:"Search"}),r.jsx("th",{children:"Insertion"}),r.jsx("th",{children:"Deletion"}),r.jsx("th",{})]}),r.jsxs("tr",{onClick:j,"data-row-number":"4",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Array_data_structure",target:"_blank",children:"Array"})}),r.jsx("td",{className:m.green,children:"Θ(1)"}),r.jsx("td",{className:m.yellow,children:"Θ(n)"}),r.jsx("td",{className:m.yellow,children:"Θ(n)"}),r.jsx("td",{className:m.yellow,children:"Θ(n)"}),r.jsx("td",{className:m.green,children:"O(1)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"5",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Stack_(abstract_data_type)",target:"_blank",children:"Stack"})}),r.jsx("td",{className:m.yellow,children:"Θ(n)"}),r.jsx("td",{className:m.yellow,children:"Θ(n)"}),r.jsx("td",{className:m.green,children:"Θ(1)"}),r.jsx("td",{className:m.green,children:"Θ(1)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.green,children:"O(1)"}),r.jsx("td",{className:m.green,children:"O(1)"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"6",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Queue_(abstract_data_type)",target:"_blank",children:"Queue"})}),r.jsx("td",{className:m.yellow,children:"Θ(n)"}),r.jsx("td",{className:m.yellow,children:"Θ(n)"}),r.jsx("td",{className:m.green,children:"Θ(1)"}),r.jsx("td",{className:m.green,children:"Θ(1)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.green,children:"O(1)"}),r.jsx("td",{className:m.green,children:"O(1)"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"7",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Singly_linked_list#Singly_linked_lists",target:"_blank",children:"Singly-Linked List"})}),r.jsx("td",{className:m.yellow,children:"Θ(n)"}),r.jsx("td",{className:m.yellow,children:"Θ(n)"}),r.jsx("td",{className:m.green,children:"Θ(1)"}),r.jsx("td",{className:m.green,children:"Θ(1)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.green,children:"O(1)"}),r.jsx("td",{className:m.green,children:"O(1)"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"8",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Doubly_linked_list",target:"_blank",children:"Doubly-Linked List"})}),r.jsx("td",{className:m.yellow,children:"Θ(n)"}),r.jsx("td",{className:m.yellow,children:"Θ(n)"}),r.jsx("td",{className:m.green,children:"Θ(1)"}),r.jsx("td",{className:m.green,children:"Θ(1)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.green,children:"O(1)"}),r.jsx("td",{className:m.green,children:"O(1)"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"9",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Skip_list",target:"_blank",children:"Skip List"})}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.orange,children:"O(n log(n))"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"10",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Hash_table",target:"_blank",children:"Hash Table"})}),r.jsx("td",{className:m.gray,children:"N/A"}),r.jsx("td",{className:m.green,children:"Θ(1)"}),r.jsx("td",{className:m.green,children:"Θ(1)"}),r.jsx("td",{className:m.green,children:"Θ(1)"}),r.jsx("td",{className:m.gray,children:"N/A"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"11",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Binary_search_tree",target:"_blank",children:"Binary Search Tree"})}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"12",children:[r.jsx("td",{children:r.jsx("a",{href:"https://en.wikipedia.org/wiki/Cartesian_tree",target:"_blank",children:"Cartesian Tree"})}),r.jsx("td",{className:m.gray,children:"N/A"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.gray,children:"N/A"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"13",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/B_tree",target:"_blank",children:"B-Tree"})}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"14",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Red-black_tree",target:"_blank",children:"Red-Black Tree"})}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"15",children:[r.jsx("td",{children:r.jsx("a",{href:"https://en.wikipedia.org/wiki/Splay_tree",target:"_blank",children:"Splay Tree"})}),r.jsx("td",{className:m.gray,children:"N/A"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.gray,children:"N/A"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"16",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/AVL_tree",target:"_blank",children:"AVL Tree"})}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"17",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/K-d_tree",target:"_blank",children:"KD Tree"})}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.oliveGreen,children:"Θ(log(n))"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]})]})})})]})})}function Xp(){const c=yn.useRef(null),[S,p]=yn.useState(""),P=()=>{S&&c.current?.querySelector(`tr[data-row-number="${S}"]`)?.removeAttribute("focused")},j=$=>{const Y=$.currentTarget,C=Y.getAttribute("data-row-number")??"";P(),C===S?p(""):(Y.setAttribute("focused",""),p(C))};return so(c,P),r.jsx("section",{id:"bigo-sorting-algorithms-table",children:r.jsxs("div",{className:m.container,children:[r.jsx("h3",{children:"Array Sorting Algorithms"}),r.jsx("div",{className:m.tableWrapper,children:r.jsx("table",{ref:c,children:r.jsxs("tbody",{children:[r.jsxs("tr",{onClick:j,"data-row-number":"1",children:[r.jsx("th",{children:"Algorithm"}),r.jsx("th",{colSpan:3,children:"Time Complexity"}),r.jsx("th",{children:"Space Complexity"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"2",children:[r.jsx("th",{}),r.jsx("th",{children:"Best"}),r.jsx("th",{children:"Average"}),r.jsx("th",{children:"Worst"}),r.jsx("th",{children:"Worst"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"3",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Quicksort",target:"_blank",children:"Quicksort"})}),r.jsx("td",{className:m.orange,children:"Ω(n log(n))"}),r.jsx("td",{className:m.orange,children:"Θ(n log(n))"}),r.jsx("td",{className:m.red,children:"O(n^2)"}),r.jsx("td",{className:m.oliveGreen,children:"O(log(n))"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"4",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Merge_sort",target:"_blank",children:"Mergesort"})}),r.jsx("td",{className:m.orange,children:"Ω(n log(n))"}),r.jsx("td",{className:m.orange,children:"Θ(n log(n))"}),r.jsx("td",{className:m.orange,children:"O(n log(n))"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"5",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Timsort",target:"_blank",children:"Timsort"})}),r.jsx("td",{className:m.yellow,children:"Ω(n)"}),r.jsx("td",{className:m.orange,children:"Θ(n log(n))"}),r.jsx("td",{className:m.orange,children:"O(n log(n))"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"6",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Heapsort",target:"_blank",children:"Heapsort"})}),r.jsx("td",{className:m.orange,children:"Ω(n log(n))"}),r.jsx("td",{className:m.orange,children:"Θ(n log(n))"}),r.jsx("td",{className:m.orange,children:"O(n log(n))"}),r.jsx("td",{className:m.green,children:"O(1)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"7",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Bubble_sort",target:"_blank",children:"Bubble Sort"})}),r.jsx("td",{className:m.yellow,children:"Ω(n)"}),r.jsx("td",{className:m.red,children:"Θ(n^2)"}),r.jsx("td",{className:m.red,children:"O(n^2)"}),r.jsx("td",{className:m.green,children:"O(1)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"8",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Insertion_sort",target:"_blank",children:"Insertion Sort"})}),r.jsx("td",{className:m.yellow,children:"Ω(n)"}),r.jsx("td",{className:m.red,children:"Θ(n^2)"}),r.jsx("td",{className:m.red,children:"O(n^2)"}),r.jsx("td",{className:m.green,children:"O(1)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"9",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Selection_sort",target:"_blank",children:"Selection Sort"})}),r.jsx("td",{className:m.red,children:"Ω(n^2)"}),r.jsx("td",{className:m.red,children:"Θ(n^2)"}),r.jsx("td",{className:m.red,children:"O(n^2)"}),r.jsx("td",{className:m.green,children:"O(1)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"10",children:[r.jsx("td",{children:r.jsx("a",{href:"https://en.wikipedia.org/wiki/Tree_sort",target:"_blank",children:"Tree Sort"})}),r.jsx("td",{className:m.orange,children:"Ω(n log(n))"}),r.jsx("td",{className:m.orange,children:"Θ(n log(n))"}),r.jsx("td",{className:m.red,children:"O(n^2)"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"11",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Shellsort",target:"_blank",children:"Shell Sort"})}),r.jsx("td",{className:m.orange,children:"Ω(n log(n))"}),r.jsx("td",{className:m.red,children:"Θ(n(log(n))^2)"}),r.jsx("td",{className:m.red,children:"O(n(log(n))^2)"}),r.jsx("td",{className:m.green,children:"O(1)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"12",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Bucket_sort",target:"_blank",children:"Bucket Sort"})}),r.jsx("td",{className:m.green,children:"Ω(n+k)"}),r.jsx("td",{className:m.green,children:"Θ(n+k)"}),r.jsx("td",{className:m.red,children:"O(n^2)"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"13",children:[r.jsx("td",{children:r.jsx("a",{href:"http://en.wikipedia.org/wiki/Radix_sort",target:"_blank",children:"Radix Sort"})}),r.jsx("td",{className:m.green,children:"Ω(nk)"}),r.jsx("td",{className:m.green,children:"Θ(nk)"}),r.jsx("td",{className:m.green,children:"O(nk)"}),r.jsx("td",{className:m.yellow,children:"O(n+k)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"14",children:[r.jsx("td",{children:r.jsx("a",{href:"https://en.wikipedia.org/wiki/Counting_sort",children:"Counting Sort"})}),r.jsx("td",{className:m.green,children:"Ω(n+k)"}),r.jsx("td",{className:m.green,children:"Θ(n+k)"}),r.jsx("td",{className:m.green,children:"O(n+k)"}),r.jsx("td",{className:m.yellow,children:"O(k)"})]}),r.jsxs("tr",{onClick:j,"data-row-number":"15",children:[r.jsx("td",{children:r.jsx("a",{href:"https://en.wikipedia.org/wiki/Cubesort",target:"_blank",children:"Cubesort"})}),r.jsx("td",{className:m.yellow,children:"Ω(n)"}),r.jsx("td",{className:m.orange,children:"Θ(n log(n))"}),r.jsx("td",{className:m.orange,children:"O(n log(n))"}),r.jsx("td",{className:m.yellow,children:"O(n)"})]})]})})})]})})}function Zp(){return r.jsxs("div",{className:Zn.container,children:[r.jsx("h2",{className:Zn.sectionHeader,children:"Big O"}),r.jsx(qp,{}),r.jsx(Qp,{}),r.jsx(Xp,{})]})}const nh="_container_12crg_1",eh="_buttonContainer_12crg_12",th="_tabButtonContainer_12crg_18",rh="_tabButton_12crg_18",no={container:nh,buttonContainer:eh,tabButtonContainer:th,tabButton:rh},ih="_code_1qx6e_1",ah="_line_1qx6e_13",Cc={code:ih,line:ah};function oh(c){const S=c.regex,p=c.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),P="decltype\\(auto\\)",j="[a-zA-Z_]\\w*::",Y="(?!struct)("+P+"|"+S.optional(j)+"[a-zA-Z_]\\w*"+S.optional("<[^<>]+>")+")",C={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},b={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[c.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+"\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)"+"|.)",end:"'",illegal:"."},c.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},z={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},A={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},c.inherit(b,{className:"string"}),{className:"string",begin:/<.*?>/},p,c.C_BLOCK_COMMENT_MODE]},T={className:"title",begin:S.optional(j)+c.IDENT_RE,relevance:0},k=S.optional(j)+c.IDENT_RE+"\\s*\\(",N=["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],w=["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],I=["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"],B=["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"],L={type:w,keyword:N,literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:I},Q={className:"function.dispatch",relevance:0,keywords:{_hint:B},begin:S.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,c.IDENT_RE,S.lookahead(/(<[^<>]+>|)\s*\(/))},Z=[Q,A,C,p,c.C_BLOCK_COMMENT_MODE,z,b],on={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:L,contains:Z.concat([{begin:/\(/,end:/\)/,keywords:L,contains:Z.concat(["self"]),relevance:0}]),relevance:0},wn={className:"function",begin:"("+Y+"[\\*&\\s]+)+"+k,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:L,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:P,keywords:L,relevance:0},{begin:k,returnBegin:!0,contains:[T],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[b,z]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:L,relevance:0,contains:[p,c.C_BLOCK_COMMENT_MODE,b,z,C,{begin:/\(/,end:/\)/,keywords:L,relevance:0,contains:["self",p,c.C_BLOCK_COMMENT_MODE,b,z,C]}]},C,p,c.C_BLOCK_COMMENT_MODE,A]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:L,illegal:"",classNameAliases:{"function.dispatch":"built_in"},contains:[].concat(on,wn,Q,Z,[A,{begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\s*<(?!<)",end:">",keywords:L,contains:["self",C]},{begin:c.IDENT_RE+"::",keywords:L},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}var Qs,Lc;function sh(){if(Lc)return Qs;Lc=1;function c(f){return f instanceof Map?f.clear=f.delete=f.set=function(){throw new Error("map is read-only")}:f instanceof Set&&(f.add=f.clear=f.delete=function(){throw new Error("set is read-only")}),Object.freeze(f),Object.getOwnPropertyNames(f).forEach(O=>{const q=f[O],On=typeof q;(On==="object"||On==="function")&&!Object.isFrozen(q)&&c(q)}),f}class S{constructor(O){O.data===void 0&&(O.data={}),this.data=O.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function p(f){return f.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function P(f,...O){const q=Object.create(null);for(const On in f)q[On]=f[On];return O.forEach(function(On){for(const ae in On)q[ae]=On[ae]}),q}const j="",$=f=>!!f.scope,Y=(f,{prefix:O})=>{if(f.startsWith("language:"))return f.replace("language:","language-");if(f.includes(".")){const q=f.split(".");return[`${O}${q.shift()}`,...q.map((On,ae)=>`${On}${"_".repeat(ae+1)}`)].join(" ")}return`${O}${f}`};class C{constructor(O,q){this.buffer="",this.classPrefix=q.classPrefix,O.walk(this)}addText(O){this.buffer+=p(O)}openNode(O){if(!$(O))return;const q=Y(O.scope,{prefix:this.classPrefix});this.span(q)}closeNode(O){$(O)&&(this.buffer+=j)}value(){return this.buffer}span(O){this.buffer+=``}}const x=(f={})=>{const O={children:[]};return Object.assign(O,f),O};class b{constructor(){this.rootNode=x(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(O){this.top.children.push(O)}openNode(O){const q=x({scope:O});this.add(q),this.stack.push(q)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(O){return this.constructor._walk(O,this.rootNode)}static _walk(O,q){return typeof q=="string"?O.addText(q):q.children&&(O.openNode(q),q.children.forEach(On=>this._walk(O,On)),O.closeNode(q)),O}static _collapse(O){typeof O!="string"&&O.children&&(O.children.every(q=>typeof q=="string")?O.children=[O.children.join("")]:O.children.forEach(q=>{b._collapse(q)}))}}class z extends b{constructor(O){super(),this.options=O}addText(O){O!==""&&this.add(O)}startScope(O){this.openNode(O)}endScope(){this.closeNode()}__addSublanguage(O,q){const On=O.root;q&&(On.scope=`language:${q}`),this.add(On)}toHTML(){return new C(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function A(f){return f?typeof f=="string"?f:f.source:null}function T(f){return w("(?=",f,")")}function k(f){return w("(?:",f,")*")}function N(f){return w("(?:",f,")?")}function w(...f){return f.map(q=>A(q)).join("")}function I(f){const O=f[f.length-1];return typeof O=="object"&&O.constructor===Object?(f.splice(f.length-1,1),O):{}}function B(...f){return"("+(I(f).capture?"":"?:")+f.map(On=>A(On)).join("|")+")"}function R(f){return new RegExp(f.toString()+"|").exec("").length-1}function G(f,O){const q=f&&f.exec(O);return q&&q.index===0}const L=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function Q(f,{joinWith:O}){let q=0;return f.map(On=>{q+=1;const ae=q;let de=A(On),sn="";for(;de.length>0;){const an=L.exec(de);if(!an){sn+=de;break}sn+=de.substring(0,an.index),de=de.substring(an.index+an[0].length),an[0][0]==="\\"&&an[1]?sn+="\\"+String(Number(an[1])+ae):(sn+=an[0],an[0]==="("&&q++)}return sn}).map(On=>`(${On})`).join(O)}const Z=/\b\B/,on="[a-zA-Z]\\w*",wn="[a-zA-Z_]\\w*",J="\\b\\d+(\\.\\d+)?",mn="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",Tn="\\b(0b[01]+)",vn="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",cn=(f={})=>{const O=/^#![ ]*\//;return f.binary&&(f.begin=w(O,/.*\b/,f.binary,/\b.*/)),P({scope:"meta",begin:O,end:/$/,relevance:0,"on:begin":(q,On)=>{q.index!==0&&On.ignoreMatch()}},f)},Fn={begin:"\\\\[\\s\\S]",relevance:0},ne={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[Fn]},Gn={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[Fn]},Yn={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},F=function(f,O,q={}){const On=P({scope:"comment",begin:f,end:O,contains:[]},q);On.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const ae=B("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return On.contains.push({begin:w(/[ ]+/,"(",ae,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),On},dn=F("//","$"),d=F("/\\*","\\*/"),E=F("#","$"),tn={scope:"number",begin:J,relevance:0},Mn={scope:"number",begin:mn,relevance:0},kn={scope:"number",begin:Tn,relevance:0},Un={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[Fn,{begin:/\[/,end:/\]/,relevance:0,contains:[Fn]}]},Nn={scope:"title",begin:on,relevance:0},jn={scope:"title",begin:wn,relevance:0},Sn={begin:"\\.\\s*"+wn,relevance:0};var H=Object.freeze({__proto__:null,APOS_STRING_MODE:ne,BACKSLASH_ESCAPE:Fn,BINARY_NUMBER_MODE:kn,BINARY_NUMBER_RE:Tn,COMMENT:F,C_BLOCK_COMMENT_MODE:d,C_LINE_COMMENT_MODE:dn,C_NUMBER_MODE:Mn,C_NUMBER_RE:mn,END_SAME_AS_BEGIN:function(f){return Object.assign(f,{"on:begin":(O,q)=>{q.data._beginMatch=O[1]},"on:end":(O,q)=>{q.data._beginMatch!==O[1]&&q.ignoreMatch()}})},HASH_COMMENT_MODE:E,IDENT_RE:on,MATCH_NOTHING_RE:Z,METHOD_GUARD:Sn,NUMBER_MODE:tn,NUMBER_RE:J,PHRASAL_WORDS_MODE:Yn,QUOTE_STRING_MODE:Gn,REGEXP_MODE:Un,RE_STARTERS_RE:vn,SHEBANG:cn,TITLE_MODE:Nn,UNDERSCORE_IDENT_RE:wn,UNDERSCORE_TITLE_MODE:jn});function nn(f,O){f.input[f.index-1]==="."&&O.ignoreMatch()}function In(f,O){f.className!==void 0&&(f.scope=f.className,delete f.className)}function Cn(f,O){O&&f.beginKeywords&&(f.begin="\\b("+f.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",f.__beforeBegin=nn,f.keywords=f.keywords||f.beginKeywords,delete f.beginKeywords,f.relevance===void 0&&(f.relevance=0))}function En(f,O){Array.isArray(f.illegal)&&(f.illegal=B(...f.illegal))}function Hn(f,O){if(f.match){if(f.begin||f.end)throw new Error("begin & end are not supported with match");f.begin=f.match,delete f.match}}function Dn(f,O){f.relevance===void 0&&(f.relevance=1)}const zn=(f,O)=>{if(!f.beforeMatch)return;if(f.starts)throw new Error("beforeMatch cannot be used with starts");const q=Object.assign({},f);Object.keys(f).forEach(On=>{delete f[On]}),f.keywords=q.keywords,f.begin=w(q.beforeMatch,T(q.begin)),f.starts={relevance:0,contains:[Object.assign(q,{endsParent:!0})]},f.relevance=0,delete q.beforeMatch},Wn=["of","and","for","in","not","or","if","then","parent","list","value"],$n="keyword";function Bn(f,O,q=$n){const On=Object.create(null);return typeof f=="string"?ae(q,f.split(" ")):Array.isArray(f)?ae(q,f):Object.keys(f).forEach(function(de){Object.assign(On,Bn(f[de],O,de))}),On;function ae(de,sn){O&&(sn=sn.map(an=>an.toLowerCase())),sn.forEach(function(an){const xn=an.split("|");On[xn[0]]=[de,X(xn[0],xn[1])]})}}function X(f,O){return O?Number(O):ce(f)?0:1}function ce(f){return Wn.includes(f.toLowerCase())}const Ee={},$e=f=>{console.error(f)},Zr=(f,...O)=>{console.log(`WARN: ${f}`,...O)},wt=(f,O)=>{Ee[`${f}/${O}`]||(console.log(`Deprecated as of ${f}. ${O}`),Ee[`${f}/${O}`]=!0)},Mt=new Error;function er(f,O,{key:q}){let On=0;const ae=f[q],de={},sn={};for(let an=1;an<=O.length;an++)sn[an+On]=ae[an],de[an+On]=!0,On+=R(O[an-1]);f[q]=sn,f[q]._emit=de,f[q]._multi=!0}function zi(f){if(Array.isArray(f.begin)){if(f.skip||f.excludeBegin||f.returnBegin)throw $e("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),Mt;if(typeof f.beginScope!="object"||f.beginScope===null)throw $e("beginScope must be object"),Mt;er(f,f.begin,{key:"beginScope"}),f.begin=Q(f.begin,{joinWith:""})}}function tr(f){if(Array.isArray(f.end)){if(f.skip||f.excludeEnd||f.returnEnd)throw $e("skip, excludeEnd, returnEnd not compatible with endScope: {}"),Mt;if(typeof f.endScope!="object"||f.endScope===null)throw $e("endScope must be object"),Mt;er(f,f.end,{key:"endScope"}),f.end=Q(f.end,{joinWith:""})}}function rr(f){f.scope&&typeof f.scope=="object"&&f.scope!==null&&(f.beginScope=f.scope,delete f.scope)}function lo(f){rr(f),typeof f.beginScope=="string"&&(f.beginScope={_wrap:f.beginScope}),typeof f.endScope=="string"&&(f.endScope={_wrap:f.endScope}),zi(f),tr(f)}function Bi(f){function O(sn,an){return new RegExp(A(sn),"m"+(f.case_insensitive?"i":"")+(f.unicodeRegex?"u":"")+(an?"g":""))}class q{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(an,xn){xn.position=this.position++,this.matchIndexes[this.matchAt]=xn,this.regexes.push([xn,an]),this.matchAt+=R(an)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const an=this.regexes.map(xn=>xn[1]);this.matcherRe=O(Q(an,{joinWith:"|"}),!0),this.lastIndex=0}exec(an){this.matcherRe.lastIndex=this.lastIndex;const xn=this.matcherRe.exec(an);if(!xn)return null;const ye=xn.findIndex((ht,Dt)=>Dt>0&&ht!==void 0),re=this.matchIndexes[ye];return xn.splice(0,ye),Object.assign(xn,re)}}class On{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(an){if(this.multiRegexes[an])return this.multiRegexes[an];const xn=new q;return this.rules.slice(an).forEach(([ye,re])=>xn.addRule(ye,re)),xn.compile(),this.multiRegexes[an]=xn,xn}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(an,xn){this.rules.push([an,xn]),xn.type==="begin"&&this.count++}exec(an){const xn=this.getMatcher(this.regexIndex);xn.lastIndex=this.lastIndex;let ye=xn.exec(an);if(this.resumingScanAtSamePosition()&&!(ye&&ye.index===this.lastIndex)){const re=this.getMatcher(0);re.lastIndex=this.lastIndex+1,ye=re.exec(an)}return ye&&(this.regexIndex+=ye.position+1,this.regexIndex===this.count&&this.considerAll()),ye}}function ae(sn){const an=new On;return sn.contains.forEach(xn=>an.addRule(xn.begin,{rule:xn,type:"begin"})),sn.terminatorEnd&&an.addRule(sn.terminatorEnd,{type:"end"}),sn.illegal&&an.addRule(sn.illegal,{type:"illegal"}),an}function de(sn,an){const xn=sn;if(sn.isCompiled)return xn;[In,Hn,lo,zn].forEach(re=>re(sn,an)),f.compilerExtensions.forEach(re=>re(sn,an)),sn.__beforeBegin=null,[Cn,En,Dn].forEach(re=>re(sn,an)),sn.isCompiled=!0;let ye=null;return typeof sn.keywords=="object"&&sn.keywords.$pattern&&(sn.keywords=Object.assign({},sn.keywords),ye=sn.keywords.$pattern,delete sn.keywords.$pattern),ye=ye||/\w+/,sn.keywords&&(sn.keywords=Bn(sn.keywords,f.case_insensitive)),xn.keywordPatternRe=O(ye,!0),an&&(sn.begin||(sn.begin=/\B|\b/),xn.beginRe=O(xn.begin),!sn.end&&!sn.endsWithParent&&(sn.end=/\B|\b/),sn.end&&(xn.endRe=O(xn.end)),xn.terminatorEnd=A(xn.end)||"",sn.endsWithParent&&an.terminatorEnd&&(xn.terminatorEnd+=(sn.end?"|":"")+an.terminatorEnd)),sn.illegal&&(xn.illegalRe=O(sn.illegal)),sn.contains||(sn.contains=[]),sn.contains=[].concat(...sn.contains.map(function(re){return uo(re==="self"?sn:re)})),sn.contains.forEach(function(re){de(re,xn)}),sn.starts&&de(sn.starts,an),xn.matcher=ae(xn),xn}if(f.compilerExtensions||(f.compilerExtensions=[]),f.contains&&f.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return f.classNameAliases=P(f.classNameAliases||{}),de(f)}function ni(f){return f?f.endsWithParent||ni(f.starts):!1}function uo(f){return f.variants&&!f.cachedVariants&&(f.cachedVariants=f.variants.map(function(O){return P(f,{variants:null},O)})),f.cachedVariants?f.cachedVariants:ni(f)?P(f,{starts:f.starts?P(f.starts):null}):Object.isFrozen(f)?P(f):f}var ei="11.9.0";class ti extends Error{constructor(O,q){super(O),this.name="HTMLInjectionError",this.html=q}}const ir=p,Sr=P,Tr=Symbol("nomatch"),It=7,St=function(f){const O=Object.create(null),q=Object.create(null),On=[];let ae=!0;const de="Could not find the language '{}', did you forget to load/include a language module?",sn={disableAutodetect:!0,name:"Plain text",contains:[]};let an={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:z};function xn(W){return an.noHighlightRe.test(W)}function ye(W){let gn=W.className+" ";gn+=W.parentNode?W.parentNode.className:"";const Ln=an.languageDetectRe.exec(gn);if(Ln){const ee=gt(Ln[1]);return ee||(Zr(de.replace("{}",Ln[1])),Zr("Falling back to no-highlight mode for this block.",W)),ee?Ln[1]:"no-highlight"}return gn.split(/\s+/).find(ee=>xn(ee)||gt(ee))}function re(W,gn,Ln){let ee="",Qn="";typeof gn=="object"?(ee=W,Ln=gn.ignoreIllegals,Qn=gn.language):(wt("10.7.0","highlight(lang, code, ...args) has been deprecated."),wt("10.7.0",`Please use highlight(code, options) instead.
+https://github.com/highlightjs/highlight.js/issues/2277`),Qn=W,ee=gn),Ln===void 0&&(Ln=!0);const Ke={code:ee,language:Qn};kt("before:highlight",Ke);const mt=Ke.result?Ke.result:ht(Ke.language,Ke.code,Ln);return mt.code=Ke.code,kt("after:highlight",mt),mt}function ht(W,gn,Ln,ee){const Qn=Object.create(null);function Ke(K,ln){return K.keywords[ln]}function mt(){if(!Rn.keywords){xe.addText(te);return}let K=0;Rn.keywordPatternRe.lastIndex=0;let ln=Rn.keywordPatternRe.exec(te),Pn="";for(;ln;){Pn+=te.substring(K,ln.index);const Kn=ze.case_insensitive?ln[0].toLowerCase():ln[0],oe=Ke(Rn,Kn);if(oe){const[ot,qi]=oe;if(xe.addText(Pn),Pn="",Qn[Kn]=(Qn[Kn]||0)+1,Qn[Kn]<=It&&(sr+=qi),ot.startsWith("_"))Pn+=ln[0];else{const lr=ze.classNameAliases[ot]||ot;Pe(ln[0],lr)}}else Pn+=ln[0];K=Rn.keywordPatternRe.lastIndex,ln=Rn.keywordPatternRe.exec(te)}Pn+=te.substring(K),xe.addText(Pn)}function kr(){if(te==="")return;let K=null;if(typeof Rn.subLanguage=="string"){if(!O[Rn.subLanguage]){xe.addText(te);return}K=ht(Rn.subLanguage,te,!0,Nr[Rn.subLanguage]),Nr[Rn.subLanguage]=K._top}else K=ar(te,Rn.subLanguage.length?Rn.subLanguage:null);Rn.relevance>0&&(sr+=K.relevance),xe.__addSublanguage(K._emitter,K.language)}function Se(){Rn.subLanguage!=null?kr():mt(),te=""}function Pe(K,ln){K!==""&&(xe.startScope(ln),xe.addText(K),xe.endScope())}function zt(K,ln){let Pn=1;const Kn=ln.length-1;for(;Pn<=Kn;){if(!K._emit[Pn]){Pn++;continue}const oe=ze.classNameAliases[K[Pn]]||K[Pn],ot=ln[Pn];oe?Pe(ot,oe):(te=ot,mt(),te=""),Pn++}}function or(K,ln){return K.scope&&typeof K.scope=="string"&&xe.openNode(ze.classNameAliases[K.scope]||K.scope),K.beginScope&&(K.beginScope._wrap?(Pe(te,ze.classNameAliases[K.beginScope._wrap]||K.beginScope._wrap),te=""):K.beginScope._multi&&(zt(K.beginScope,ln),te="")),Rn=Object.create(K,{parent:{value:Rn}}),Rn}function Gi(K,ln,Pn){let Kn=G(K.endRe,Pn);if(Kn){if(K["on:end"]){const oe=new S(K);K["on:end"](ln,oe),oe.isMatchIgnored&&(Kn=!1)}if(Kn){for(;K.endsParent&&K.parent;)K=K.parent;return K}}if(K.endsWithParent)return Gi(K.parent,ln,Pn)}function go(K){return Rn.matcher.regexIndex===0?(te+=K[0],1):(Xe=!0,0)}function oi(K){const ln=K[0],Pn=K.rule,Kn=new S(Pn),oe=[Pn.__beforeBegin,Pn["on:begin"]];for(const ot of oe)if(ot&&(ot(K,Kn),Kn.isMatchIgnored))return go(ln);return Pn.skip?te+=ln:(Pn.excludeBegin&&(te+=ln),Se(),!Pn.returnBegin&&!Pn.excludeBegin&&(te=ln)),or(Pn,K),Pn.returnBegin?0:ln.length}function Ji(K){const ln=K[0],Pn=gn.substring(K.index),Kn=Gi(Rn,K,Pn);if(!Kn)return Tr;const oe=Rn;Rn.endScope&&Rn.endScope._wrap?(Se(),Pe(ln,Rn.endScope._wrap)):Rn.endScope&&Rn.endScope._multi?(Se(),zt(Rn.endScope,K)):oe.skip?te+=ln:(oe.returnEnd||oe.excludeEnd||(te+=ln),Se(),oe.excludeEnd&&(te=ln));do Rn.scope&&xe.closeNode(),!Rn.skip&&!Rn.subLanguage&&(sr+=Rn.relevance),Rn=Rn.parent;while(Rn!==Kn.parent);return Kn.starts&&or(Kn.starts,K),oe.returnEnd?0:ln.length}function si(){const K=[];for(let ln=Rn;ln!==ze;ln=ln.parent)ln.scope&&K.unshift(ln.scope);K.forEach(ln=>xe.openNode(ln))}let vt={};function Yi(K,ln){const Pn=ln&&ln[0];if(te+=K,Pn==null)return Se(),0;if(vt.type==="begin"&&ln.type==="end"&&vt.index===ln.index&&Pn===""){if(te+=gn.slice(ln.index,ln.index+1),!ae){const Kn=new Error(`0 width match regex (${W})`);throw Kn.languageName=W,Kn.badRule=vt.rule,Kn}return 1}if(vt=ln,ln.type==="begin")return oi(ln);if(ln.type==="illegal"&&!Ln){const Kn=new Error('Illegal lexeme "'+Pn+'" for mode "'+(Rn.scope||"")+'"');throw Kn.mode=Rn,Kn}else if(ln.type==="end"){const Kn=Ji(ln);if(Kn!==Tr)return Kn}if(ln.type==="illegal"&&Pn==="")return 1;if(Bt>1e5&&Bt>ln.index*3)throw new Error("potential infinite loop, way more iterations than matches");return te+=Pn,Pn.length}const ze=gt(W);if(!ze)throw $e(de.replace("{}",W)),new Error('Unknown language: "'+W+'"');const Xn=Bi(ze);let Er="",Rn=ee||Xn;const Nr={},xe=new an.__emitter(an);si();let te="",sr=0,at=0,Bt=0,Xe=!1;try{if(ze.__emitTokens)ze.__emitTokens(gn,xe);else{for(Rn.matcher.considerAll();;){Bt++,Xe?Xe=!1:Rn.matcher.considerAll(),Rn.matcher.lastIndex=at;const K=Rn.matcher.exec(gn);if(!K)break;const ln=gn.substring(at,K.index),Pn=Yi(ln,K);at=K.index+Pn}Yi(gn.substring(at))}return xe.finalize(),Er=xe.toHTML(),{language:W,value:Er,relevance:sr,illegal:!1,_emitter:xe,_top:Rn}}catch(K){if(K.message&&K.message.includes("Illegal"))return{language:W,value:ir(gn),illegal:!0,relevance:0,_illegalBy:{message:K.message,index:at,context:gn.slice(at-100,at+100),mode:K.mode,resultSoFar:Er},_emitter:xe};if(ae)return{language:W,value:ir(gn),illegal:!1,relevance:0,errorRaised:K,_emitter:xe,_top:Rn};throw K}}function Dt(W){const gn={value:ir(W),illegal:!1,relevance:0,_top:sn,_emitter:new an.__emitter(an)};return gn._emitter.addText(W),gn}function ar(W,gn){gn=gn||an.languages||Object.keys(O);const Ln=Dt(W),ee=gn.filter(gt).filter(fe).map(Se=>ht(Se,W,!1));ee.unshift(Ln);const Qn=ee.sort((Se,Pe)=>{if(Se.relevance!==Pe.relevance)return Pe.relevance-Se.relevance;if(Se.language&&Pe.language){if(gt(Se.language).supersetOf===Pe.language)return 1;if(gt(Pe.language).supersetOf===Se.language)return-1}return 0}),[Ke,mt]=Qn,kr=Ke;return kr.secondBest=mt,kr}function co(W,gn,Ln){const ee=gn&&q[gn]||Ln;W.classList.add("hljs"),W.classList.add(`language-${ee}`)}function ri(W){let gn=null;const Ln=ye(W);if(xn(Ln))return;if(kt("before:highlightElement",{el:W,language:Ln}),W.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",W);return}if(W.children.length>0&&(an.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(W)),an.throwUnescapedHTML))throw new ti("One of your code blocks includes unescaped HTML.",W.innerHTML);gn=W;const ee=gn.textContent,Qn=Ln?re(ee,{language:Ln,ignoreIllegals:!0}):ar(ee);W.innerHTML=Qn.value,W.dataset.highlighted="yes",co(W,Ln,Qn.language),W.result={language:Qn.language,re:Qn.relevance,relevance:Qn.relevance},Qn.secondBest&&(W.secondBest={language:Qn.secondBest.language,relevance:Qn.secondBest.relevance}),kt("after:highlightElement",{el:W,result:Qn,text:ee})}function fo(W){an=Sr(an,W)}const jt=()=>{jr(),wt("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function Fi(){jr(),wt("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let ii=!1;function jr(){if(document.readyState==="loading"){ii=!0;return}document.querySelectorAll(an.cssSelector).forEach(ri)}function Ui(){ii&&jr()}typeof window<"u"&&window.addEventListener&&window.addEventListener("DOMContentLoaded",Ui,!1);function Hi(W,gn){let Ln=null;try{Ln=gn(f)}catch(ee){if($e("Language definition for '{}' could not be registered.".replace("{}",W)),ae)$e(ee);else throw ee;Ln=sn}Ln.name||(Ln.name=W),O[W]=Ln,Ln.rawDefinition=gn.bind(null,f),Ln.aliases&&$i(Ln.aliases,{languageName:W})}function Wi(W){delete O[W];for(const gn of Object.keys(q))q[gn]===W&&delete q[gn]}function Vi(){return Object.keys(O)}function gt(W){return W=(W||"").toLowerCase(),O[W]||O[q[W]]}function $i(W,{languageName:gn}){typeof W=="string"&&(W=[W]),W.forEach(Ln=>{q[Ln.toLowerCase()]=gn})}function fe(W){const gn=gt(W);return gn&&!gn.disableAutodetect}function po(W){W["before:highlightBlock"]&&!W["before:highlightElement"]&&(W["before:highlightElement"]=gn=>{W["before:highlightBlock"](Object.assign({block:gn.el},gn))}),W["after:highlightBlock"]&&!W["after:highlightElement"]&&(W["after:highlightElement"]=gn=>{W["after:highlightBlock"](Object.assign({block:gn.el},gn))})}function ai(W){po(W),On.push(W)}function Ki(W){const gn=On.indexOf(W);gn!==-1&&On.splice(gn,1)}function kt(W,gn){const Ln=W;On.forEach(function(ee){ee[Ln]&&ee[Ln](gn)})}function ho(W){return wt("10.7.0","highlightBlock will be removed entirely in v12.0"),wt("10.7.0","Please use highlightElement now."),ri(W)}Object.assign(f,{highlight:re,highlightAuto:ar,highlightAll:jr,highlightElement:ri,highlightBlock:ho,configure:fo,initHighlighting:jt,initHighlightingOnLoad:Fi,registerLanguage:Hi,unregisterLanguage:Wi,listLanguages:Vi,getLanguage:gt,registerAliases:$i,autoDetection:fe,inherit:Sr,addPlugin:ai,removePlugin:Ki}),f.debugMode=function(){ae=!1},f.safeMode=function(){ae=!0},f.versionString=ei,f.regex={concat:w,lookahead:T,either:B,optional:N,anyNumberOfTimes:k};for(const W in H)typeof H[W]=="object"&&c(H[W]);return Object.assign(f,H),f},Tt=St({});return Tt.newInstance=()=>St({}),Qs=Tt,Tt.HighlightJS=Tt,Tt.default=Tt,Qs}var lh=sh();const Xr=ao(lh);var Qr="[0-9](_*[0-9])*",eo=`\\.(${Qr})`,to="[0-9a-fA-F](_*[0-9a-fA-F])*",Rc={className:"number",variants:[{begin:`(\\b(${Qr})((${eo})|\\.)?|(${eo}))[eE][+-]?(${Qr})[fFdD]?\\b`},{begin:`\\b(${Qr})((${eo})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${eo})[fFdD]?\\b`},{begin:`\\b(${Qr})[fFdD]\\b`},{begin:`\\b0[xX]((${to})\\.?|(${to})?\\.(${to}))[pP][+-]?(${Qr})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${to})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function Fc(c,S,p){return p===-1?"":c.replace(S,P=>Fc(c,S,p-1))}function uh(c){const S=c.regex,p="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",P=p+Fc("(?:<"+p+"~~~(?:\\s*,\\s*"+p+"~~~)*>)?",/~~~/g,2),x={keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits"],literal:["false","true","null"],type:["char","boolean","long","float","int","byte","short","double"],built_in:["super","this"]},b={className:"meta",begin:"@"+p,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},z={className:"params",begin:/\(/,end:/\)/,keywords:x,relevance:0,contains:[c.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:x,illegal:/<\/|#/,contains:[c.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},c.C_LINE_COMMENT_MODE,c.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[c.BACKSLASH_ESCAPE]},c.APOS_STRING_MODE,c.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,p],className:{1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{begin:[S.concat(/(?!else)/,p),/\s+/,p,/\s+/,/=(?!=)/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,p],className:{1:"keyword",3:"title.class"},contains:[z,c.C_LINE_COMMENT_MODE,c.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+P+"\\s+)",c.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:x,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:x,relevance:0,contains:[b,c.APOS_STRING_MODE,c.QUOTE_STRING_MODE,Rc,c.C_BLOCK_COMMENT_MODE]},c.C_LINE_COMMENT_MODE,c.C_BLOCK_COMMENT_MODE]},Rc,b]}}function ch(c){const S=c.regex,p="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",P=S.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),j=S.concat(P,/(::\w+)*/),Y={"variable.constant":["__FILE__","__LINE__","__ENCODING__"],"variable.language":["self","super"],keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield",...["include","extend","prepend","public","private","protected","raise","throw"]],built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"],literal:["true","false","nil"]},C={className:"doctag",begin:"@[A-Za-z]+"},x={begin:"#<",end:">"},b=[c.COMMENT("#","$",{contains:[C]}),c.COMMENT("^=begin","^=end",{contains:[C],relevance:10}),c.COMMENT("^__END__",c.MATCH_NOTHING_RE)],z={className:"subst",begin:/#\{/,end:/\}/,keywords:Y},A={className:"string",contains:[c.BACKSLASH_ESCAPE,z],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?,end:/>/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{begin:S.concat(/<<[-~]?'?/,S.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),contains:[c.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[c.BACKSLASH_ESCAPE,z]})]}]},T="[1-9](_?[0-9])*|0",k="[0-9](_?[0-9])*",N={className:"number",relevance:0,variants:[{begin:`\\b(${T})(\\.(${k}))?([eE][+-]?(${k})|r)?i?\\b`},{begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{begin:"\\b0(_?[0-7])+r?i?\\b"}]},w={variants:[{match:/\(\)/},{className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,keywords:Y}]},Z=[A,{variants:[{match:[/class\s+/,j,/\s+<\s+/,j]},{match:[/\b(class|module)\s+/,j]}],scope:{2:"title.class",4:"title.class.inherited"},keywords:Y},{match:[/(include|extend)\s+/,j],scope:{2:"title.class"},keywords:Y},{relevance:0,match:[j,/\.new[. (]/],scope:{1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{relevance:0,match:P,scope:"title.class"},{match:[/def/,/\s+/,p],scope:{1:"keyword",3:"title.function"},contains:[w]},{begin:c.IDENT_RE+"::"},{className:"symbol",begin:c.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[A,{begin:p}],relevance:0},N,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|/,end:/\|/,excludeBegin:!0,excludeEnd:!0,relevance:0,keywords:Y},{begin:"("+c.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[c.BACKSLASH_ESCAPE,z],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(x,b),relevance:0}].concat(x,b);z.contains=Z,w.contains=Z;const mn=[{begin:/^\s*=>/,starts:{end:"$",contains:Z}},{className:"meta.prompt",begin:"^("+"[>?]>"+"|"+"[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]"+"|"+"(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>"+")(?=[ ])",starts:{end:"$",keywords:Y,contains:Z}}];return b.unshift(x),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:Y,illegal:/\/\*/,contains:[c.SHEBANG({binary:"ruby"})].concat(mn).concat(b).concat(Z)}}const Pc="[A-Za-z$_][0-9A-Za-z$_]*",dh=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],fh=["true","false","null","undefined","NaN","Infinity"],Uc=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],Hc=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],Wc=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],ph=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],hh=[].concat(Wc,Uc,Hc);function gh(c){const S=c.regex,p=(F,{after:dn})=>{const d=""+F[0].slice(1);return F.input.indexOf(d,dn)!==-1},P=Pc,j={begin:"<>",end:">"},$=/<[A-Za-z0-9\\._:-]+\s*\/>/,Y={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(F,dn)=>{const d=F[0].length+F.index,E=F.input[d];if(E==="<"||E===","){dn.ignoreMatch();return}E===">"&&(p(F,{after:d})||dn.ignoreMatch());let tn;const Mn=F.input.substring(d);if(tn=Mn.match(/^\s*=/)){dn.ignoreMatch();return}if((tn=Mn.match(/^\s+extends\s+/))&&tn.index===0){dn.ignoreMatch();return}}},C={$pattern:Pc,keyword:dh,literal:fh,built_in:hh,"variable.language":ph},x="[0-9](_?[0-9])*",b=`\\.(${x})`,z="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",A={className:"number",variants:[{begin:`(\\b(${z})((${b})|\\.)?|(${b}))[eE][+-]?(${x})\\b`},{begin:`\\b(${z})\\b((${b})\\b|\\.)?|(${b})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},T={className:"subst",begin:"\\$\\{",end:"\\}",keywords:C,contains:[]},k={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[c.BACKSLASH_ESCAPE,T],subLanguage:"xml"}},N={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[c.BACKSLASH_ESCAPE,T],subLanguage:"css"}},w={begin:"gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[c.BACKSLASH_ESCAPE,T],subLanguage:"graphql"}},I={className:"string",begin:"`",end:"`",contains:[c.BACKSLASH_ESCAPE,T]},R={className:"comment",variants:[c.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:P+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),c.C_BLOCK_COMMENT_MODE,c.C_LINE_COMMENT_MODE]},G=[c.APOS_STRING_MODE,c.QUOTE_STRING_MODE,k,N,w,I,{match:/\$\d+/},A];T.contains=G.concat({begin:/\{/,end:/\}/,keywords:C,contains:["self"].concat(G)});const L=[].concat(R,T.contains),Q=L.concat([{begin:/\(/,end:/\)/,keywords:C,contains:["self"].concat(L)}]),Z={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:C,contains:Q},on={variants:[{match:[/class/,/\s+/,P,/\s+/,/extends/,/\s+/,S.concat(P,"(",S.concat(/\./,P),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,P],scope:{1:"keyword",3:"title.class"}}]},wn={relevance:0,match:S.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...Uc,...Hc]}},J={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},mn={variants:[{match:[/function/,/\s+/,P,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[Z],illegal:/%/},Tn={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function vn(F){return S.concat("(?!",F.join("|"),")")}const cn={match:S.concat(/\b/,vn([...Wc,"super","import"]),P,S.lookahead(/\(/)),className:"title.function",relevance:0},Fn={begin:S.concat(/\./,S.lookahead(S.concat(P,/(?![0-9A-Za-z$_(])/))),end:P,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},ne={match:[/get|set/,/\s+/,P,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},Z]},Gn="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+c.UNDERSCORE_IDENT_RE+")\\s*=>",Yn={match:[/const|var|let/,/\s+/,P,/\s*/,/=\s*/,/(async\s*)?/,S.lookahead(Gn)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[Z]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:C,exports:{PARAMS_CONTAINS:Q,CLASS_REFERENCE:wn},illegal:/#(?![$_A-z])/,contains:[c.SHEBANG({label:"shebang",binary:"node",relevance:5}),J,c.APOS_STRING_MODE,c.QUOTE_STRING_MODE,k,N,w,I,R,{match:/\$\d+/},A,wn,{className:"attr",begin:P+S.lookahead(":"),relevance:0},Yn,{begin:"("+c.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[R,c.REGEXP_MODE,{className:"function",begin:Gn,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:c.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:C,contains:Q}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:j.begin,end:j.end},{match:$},{begin:Y.begin,"on:begin":Y.isTrulyOpeningTag,end:Y.end}],subLanguage:"xml",contains:[{begin:Y.begin,end:Y.end,skip:!0,contains:["self"]}]}]},mn,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+c.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[Z,c.inherit(c.TITLE_MODE,{begin:P,className:"title.function"})]},{match:/\.\.\./,relevance:0},Fn,{match:"\\$"+P,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[Z]},cn,Tn,on,ne,{match:/\$[(.]/}]}}function mh(c){const S=c.regex,p=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),P=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],j=/[-+*\/%=<>&|^~]|\*\*?|\/\/?|<<=?|>>=?|\+=|-=|\*=|\/=|%=|@|<|>/,$=["bool","complex","dict","float","frozenset","int","list","set","str","tuple"],Y=["add_vertex","add","append","backtrack","bit_length","clear","collect_words","connected","counting_sort","defaultdict","deque","dfs","dp","extend","find_max_index","find","heapify","heappop","heappush","insert","insertion_sort","join","ListNode","merge_sort","pop","popleft","print_trie","quick_sort","RECURRENCE_RELATION","remove","shuffle","sort","TreeNode","TrieNode","union","UnionFind","update"],C=["BASE_CASE","BOOLEAN","CONDITION","CRITERIA","ITERATE_OVER_INPUT","MAXIMUM_POSSIBLE_ANSWER","MINIMUM_POSSIBLE_ANSWER","OTHER_ARGUMENTS","SMALLEST_SUBPROBLEM","START_NODE","STATE_FOR_WHOLE_INPUT","STATE","WINDOW_CONDITION_BROKEN"],x=["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip",...Y],b=["__debug__","Ellipsis","False","None","NotImplemented","True",...C],z=["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union",...$],A={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:P,built_in:x,literal:b,type:z},T={className:"meta",begin:/^(>>>|\.\.\.) /},k={className:"subst",begin:/\{/,end:/\}/,keywords:A,illegal:/#/},N={begin:/\{\{/,relevance:0},w={className:"string",contains:[c.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[c.BACKSLASH_ESCAPE,T],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[c.BACKSLASH_ESCAPE,T],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[c.BACKSLASH_ESCAPE,T,N,k]},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[c.BACKSLASH_ESCAPE,T,N,k]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[c.BACKSLASH_ESCAPE,N,k]},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[c.BACKSLASH_ESCAPE,N,k]},c.APOS_STRING_MODE,c.QUOTE_STRING_MODE]},I="[0-9](_?[0-9])*",B=`(\\b(${I}))?\\.(${I})|\\b(${I})\\.`,R=`\\b|${P.join("|")}`,G={className:"number",relevance:0,variants:[{begin:`(\\b(${I})|(${B}))[eE][+-]?(${I})[jJ]?(?=${R})`},{begin:`(${B})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${R})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${R})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${R})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${R})`},{begin:`\\b(${I})[jJ](?=${R})`}]},L={className:"comment",begin:S.lookahead(/# type:/),end:/$/,keywords:A,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},Q={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:A,contains:["self",T,G,w,c.HASH_COMMENT_MODE,{scope:"params.operator",match:j},{scope:"params.comma",match:","},{scope:"params.self",match:/self/}]}]};return k.contains=[w,G,T],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:A,illegal:/(<\/|\?)|=>/,contains:[T,G,{begin:/\bself\b/},{beginKeywords:"if",relevance:0},w,L,c.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,p],scope:{1:"keyword.def",3:"title.function"},contains:[Q]},{variants:[{match:[/\bclass/,/\s+/,p,/\s*/,/\(\s*/,p,/\s*\)/]},{match:[/\bclass/,/\s+/,p]}],scope:{1:"keyword.class",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[G,Q,w]},{scope:"operator",match:j}]}}Xr.registerLanguage("python",mh);Xr.registerLanguage("javascript",gh);Xr.registerLanguage("java",uh);Xr.registerLanguage("cpp",oh);Xr.registerLanguage("ruby",ch);function vh({code:c,language:S}){const p=yn.useRef(null),[P,j]=yn.useState(""),[$,Y]=yn.useState(""),C=Qe("hljs",S,Cc.code),x=()=>{if(p.current){const w=c.split(`
+`).map((I,B)=>{const R=Xr.highlight(I,{language:S}).value;return`${R}`}).join("");Y(w)}},b=()=>{p.current?.querySelectorAll("span[data-line-number]")?.forEach(w=>w.addEventListener("click",T))},z=()=>{p.current?.querySelectorAll("span[data-line-number]")?.forEach(w=>w.removeEventListener("click",T))},A=()=>{p.current?.querySelector(`span[data-line-number="${P}"]`)?.removeAttribute("focused")},T=k=>{const N=k.currentTarget,w=N.getAttribute("data-line-number")??"";A(),w===P?j(""):(N.setAttribute("focused",""),j(w))};return so(p,A),yn.useEffect(()=>(x(),b(),()=>z()),[c,$,P]),r.jsx("pre",{ref:p,children:r.jsx("code",{className:C,dangerouslySetInnerHTML:{__html:$}})})}const yh="_copyButton_1hjzm_1",xh="_copySvg_1hjzm_25",_h="_checkSvg_1hjzm_32",bh="_checkSvgPath_1hjzm_37",wh="_enter_1hjzm_48",Sh="_exit_1hjzm_52",wr={copyButton:yh,copySvg:xh,checkSvg:_h,checkSvgPath:bh,enter:wh,exit:Sh};function Th({onClick:c}){const[S,p]=yn.useState("show"),[P,j]=yn.useState("hide"),$=Qe(wr.copySvg,S==="enter"&&wr.enter,S==="exit"&&wr.exit),Y=Qe(wr.checkSvg,P==="exit"&&wr.exit),C=Qe(wr.checkSvgPath),x=()=>{S==="show"&&P==="hide"&&(p("exit"),c())},b=()=>{S==="enter"&&p("show"),S==="exit"&&(p("hide"),j("show"))},z=()=>{P==="show"&&setTimeout(()=>{j("exit")},500),P==="exit"&&(j("hide"),p("enter"))},A=()=>S!=="hide"&&r.jsx("svg",{className:$,viewBox:"0 0 512 512",onAnimationEnd:b,children:r.jsx("path",{d:"M64 464H288c8.8 0 16-7.2 16-16V384h48v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V224c0-35.3 28.7-64 64-64h64v48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16zM224 304H448c8.8 0 16-7.2 16-16V64c0-8.8-7.2-16-16-16H224c-8.8 0-16 7.2-16 16V288c0 8.8 7.2 16 16 16zm-64-16V64c0-35.3 28.7-64 64-64H448c35.3 0 64 28.7 64 64V288c0 35.3-28.7 64-64 64H224c-35.3 0-64-28.7-64-64z"})}),T=()=>P!=="hide"&&r.jsx("svg",{className:Y,viewBox:"0 0 16 16",onAnimationEnd:z,children:r.jsx("path",{className:C,d:"M3.428571,9.14285714 L6.85714286,12.57142857 L12.5714286,3.42857143"})});return r.jsxs("button",{"aria-label":"copy button",className:wr.copyButton,onClick:x,children:[A(),T()]})}function jh(){return r.jsxs("svg",{viewBox:"0 0 128 128",children:[r.jsxs("linearGradient",{id:"python_svg__a",x1:70.252,x2:170.659,y1:1237.476,y2:1151.089,gradientTransform:"matrix(.563 0 0 -.568 -29.215 707.817)",gradientUnits:"userSpaceOnUse",children:[r.jsx("stop",{offset:0,stopColor:"#5A9FD4"}),r.jsx("stop",{offset:1,stopColor:"#306998"})]}),r.jsxs("linearGradient",{id:"python_svg__b",x1:209.474,x2:173.62,y1:1098.811,y2:1149.537,gradientTransform:"matrix(.563 0 0 -.568 -29.215 707.817)",gradientUnits:"userSpaceOnUse",children:[r.jsx("stop",{offset:0,stopColor:"#FFD43B"}),r.jsx("stop",{offset:1,stopColor:"#FFE873"})]}),r.jsx("path",{fill:"url(#python_svg__a)",d:"M63.391 1.988c-4.222.02-8.252.379-11.8 1.007-10.45 1.846-12.346 5.71-12.346 12.837v9.411h24.693v3.137H29.977c-7.176 0-13.46 4.313-15.426 12.521-2.268 9.405-2.368 15.275 0 25.096 1.755 7.311 5.947 12.519 13.124 12.519h8.491V67.234c0-8.151 7.051-15.34 15.426-15.34h24.665c6.866 0 12.346-5.654 12.346-12.548V15.833c0-6.693-5.646-11.72-12.346-12.837-4.244-.706-8.645-1.027-12.866-1.008M50.037 9.557c2.55 0 4.634 2.117 4.634 4.721 0 2.593-2.083 4.69-4.634 4.69-2.56 0-4.633-2.097-4.633-4.69-.001-2.604 2.073-4.721 4.633-4.721",transform:"translate(0 10.26)"}),r.jsx("path",{fill:"url(#python_svg__b)",d:"M91.682 28.38v10.966c0 8.5-7.208 15.655-15.426 15.655H51.591c-6.756 0-12.346 5.783-12.346 12.549v23.515c0 6.691 5.818 10.628 12.346 12.547 7.816 2.297 15.312 2.713 24.665 0 6.216-1.801 12.346-5.423 12.346-12.547v-9.412H63.938v-3.138h37.012c7.176 0 9.852-5.005 12.348-12.519 2.578-7.735 2.467-15.174 0-25.096-1.774-7.145-5.161-12.521-12.348-12.521h-9.268zM77.809 87.927c2.561 0 4.634 2.097 4.634 4.692 0 2.602-2.074 4.719-4.634 4.719-2.55 0-4.633-2.117-4.633-4.719 0-2.595 2.083-4.692 4.633-4.692",transform:"translate(0 10.26)"}),r.jsxs("radialGradient",{id:"python_svg__c",cx:1825.678,cy:444.45,r:26.743,gradientTransform:"matrix(0 -.24 -1.055 0 532.979 557.576)",gradientUnits:"userSpaceOnUse",children:[r.jsx("stop",{offset:0,stopColor:"#B8B8B8",stopOpacity:.498}),r.jsx("stop",{offset:1,stopColor:"#7F7F7F",stopOpacity:0})]}),r.jsx("path",{fill:"url(#python_svg__c)",d:"M97.309 119.597c0 3.543-14.816 6.416-33.091 6.416-18.276 0-33.092-2.873-33.092-6.416s14.815-6.417 33.092-6.417c18.275 0 33.091 2.872 33.091 6.417",opacity:.444})]})}function kh(){return r.jsxs("svg",{viewBox:"0 0 128 128",children:[r.jsx("path",{fill:"#F0DB4F",d:"M1.408 1.408h125.184v125.185H1.408z"}),r.jsx("path",{fill:"#323330",d:"M116.347 96.736c-.917-5.711-4.641-10.508-15.672-14.981-3.832-1.761-8.104-3.022-9.377-5.926-.452-1.69-.512-2.642-.226-3.665.821-3.32 4.784-4.355 7.925-3.403 2.023.678 3.938 2.237 5.093 4.724 5.402-3.498 5.391-3.475 9.163-5.879-1.381-2.141-2.118-3.129-3.022-4.045-3.249-3.629-7.676-5.498-14.756-5.355l-3.688.477c-3.534.893-6.902 2.748-8.877 5.235-5.926 6.724-4.236 18.492 2.975 23.335 7.104 5.332 17.54 6.545 18.873 11.531 1.297 6.104-4.486 8.08-10.234 7.378-4.236-.881-6.592-3.034-9.139-6.949-4.688 2.713-4.688 2.713-9.508 5.485 1.143 2.499 2.344 3.63 4.26 5.795 9.068 9.198 31.76 8.746 35.83-5.176.165-.478 1.261-3.666.38-8.581M69.462 58.943H57.753l-.048 30.272c0 6.438.333 12.34-.714 14.149-1.713 3.558-6.152 3.117-8.175 2.427-2.059-1.012-3.106-2.451-4.319-4.485-.333-.584-.583-1.036-.667-1.071l-9.52 5.83c1.583 3.249 3.915 6.069 6.902 7.901 4.462 2.678 10.459 3.499 16.731 2.059 4.082-1.189 7.604-3.652 9.448-7.401 2.666-4.915 2.094-10.864 2.07-17.444.06-10.735.001-21.468.001-32.237"})]})}function Eh(){return r.jsxs("svg",{id:"Layer_1",x:"0px",y:"0px",width:"306px",height:"344.35px",viewBox:"0 0 306 344.35","enable-background":"new 0 0 306 344.35",children:[r.jsx("path",{fill:"#00599C",d:"M302.107,258.262c2.401-4.159,3.893-8.845,3.893-13.053V99.14c0-4.208-1.49-8.893-3.892-13.052L153,172.175L302.107,258.262z"}),r.jsx("path",{fill:"#004482",d:"M166.25,341.193l126.5-73.034c3.644-2.104,6.956-5.737,9.357-9.897L153,172.175L3.893,258.263c2.401,4.159,5.714,7.793,9.357,9.896l126.5,73.034C147.037,345.401,158.963,345.401,166.25,341.193z"}),r.jsx("path",{fill:"#659AD2",d:"M302.108,86.087c-2.402-4.16-5.715-7.793-9.358-9.897L166.25,3.156c-7.287-4.208-19.213-4.208-26.5,0L13.25,76.19C5.962,80.397,0,90.725,0,99.14v146.069c0,4.208,1.491,8.894,3.893,13.053L153,172.175L302.108,86.087z"}),r.jsx("g",{children:r.jsx("path",{fill:"#FFFFFF",d:"M153,274.175c-56.243,0-102-45.757-102-102s45.757-102,102-102c36.292,0,70.139,19.53,88.331,50.968l-44.143,25.544c-9.105-15.736-26.038-25.512-44.188-25.512c-28.122,0-51,22.878-51,51c0,28.121,22.878,51,51,51c18.152,0,35.085-9.776,44.191-25.515l44.143,25.543C223.142,254.644,189.294,274.175,153,274.175z"})}),r.jsx("g",{children:r.jsx("polygon",{fill:"#FFFFFF",points:"255,166.508 243.666,166.508 243.666,155.175 232.334,155.175 232.334,166.508 221,166.508221,177.841 232.334,177.841 232.334,189.175 243.666,189.175 243.666,177.841 255,177.841 "})}),r.jsx("g",{children:r.jsx("polygon",{fill:"#FFFFFF",points:"297.5,166.508 286.166,166.508 286.166,155.175 274.834,155.175 274.834,166.508 263.5,166.508263.5,177.841 274.834,177.841 274.834,189.175 286.166,189.175 286.166,177.841 297.5,177.841 "})})]})}function Nh(){return r.jsxs("svg",{height:"800px",width:"800px",id:"Layer_1",viewBox:"0 0 511.998 511.998",children:[r.jsxs("g",{children:[r.jsx("path",{fill:"#DB380E",d:"M253.464,94.869c-23.658,16.639-50.471,35.498-64.838,66.699c-24.954,54.435,51.062,113.812,54.311,116.313c0.755,0.581,1.659,0.871,2.56,0.871c0.957,0,1.915-0.327,2.693-0.979c1.509-1.262,1.937-3.406,1.031-5.152c-0.275-0.53-27.561-53.53-26.547-91.552c0.359-13.243,18.892-28.266,38.512-44.171c17.97-14.568,38.34-31.079,50.258-50.394c26.164-42.516-2.916-84.322-3.213-84.74c-1.155-1.622-3.287-2.209-5.11-1.41c-1.821,0.804-2.83,2.773-2.414,4.72c0.059,0.277,5.714,27.923-10.022,56.406C284.203,73.25,269.959,83.268,253.464,94.869z"}),r.jsx("path",{fill:"#DB380E",d:"M353.137,113.617c1.669-1.257,2.159-3.55,1.15-5.38c-1.011-1.83-3.211-2.637-5.165-1.895c-4.019,1.528-98.416,37.915-98.416,81.88c0,30.307,12.946,46.317,22.399,58.009c3.708,4.586,6.909,8.546,7.964,11.927c2.97,9.743-4.066,27.353-7.025,33.317c-0.853,1.714-0.435,3.792,1.016,5.044c0.784,0.677,1.763,1.021,2.743,1.021c0.834,0,1.672-0.248,2.396-0.752c1.623-1.128,39.667-28.026,32.844-60.433c-2.542-12.318-8.595-21.318-13.936-29.26c-8.274-12.305-14.25-21.193-5.184-37.609C304.545,150.338,352.65,113.981,353.137,113.617z"})]}),r.jsxs("g",{children:[r.jsx("path",{fill:"#73A1FB",d:"M107.418,298.236c-1.618,4.845-0.854,9.651,2.207,13.903c10.233,14.207,46.48,22.029,102.068,22.029c0.003,0,0.005,0,0.007,0c7.532,0,15.484-0.148,23.629-0.44c88.875-3.181,121.839-30.869,123.199-32.046c1.482-1.283,1.878-3.419,0.957-5.147c-0.922-1.727-2.909-2.595-4.808-2.072c-31.301,8.546-89.748,11.58-130.288,11.58c-45.363,0-68.465-3.268-74.121-5.681c2.902-3.985,20.802-11.101,42.983-15.464c2.12-0.416,3.577-2.374,3.367-4.524s-2.016-3.79-4.177-3.79C179.439,276.584,114.234,277.628,107.418,298.236z"}),r.jsx("path",{fill:"#73A1FB",d:"M404.812,269.718c-18.331,0-35.714,9.188-36.446,9.577c-1.695,0.908-2.555,2.852-2.09,4.72c0.467,1.865,2.144,3.176,4.067,3.178c0.389,0,39.102,0.317,42.608,22.436c3.106,19.082-36.629,50-52.202,60.304c-1.682,1.113-2.335,3.263-1.554,5.123c0.665,1.583,2.206,2.573,3.868,2.573c0.29,0,0.584-0.03,0.876-0.092c3.696-0.791,90.406-19.899,81.238-70.384C439.584,276.213,420.138,269.718,404.812,269.718z"}),r.jsx("path",{fill:"#73A1FB",d:"M345.347,363.755c0.302-1.617-0.371-3.262-1.717-4.207l-20.791-14.563c-1.014-0.71-2.295-0.933-3.485-0.618c-0.217,0.055-21.959,5.771-53.525,9.276c-12.528,1.405-26.56,2.147-40.582,2.147c-31.558,0-52.192-3.708-55.197-6.428c-0.398-0.764-0.272-1.111-0.201-1.304c0.546-1.518,3.472-3.322,5.358-4.036c2.083-0.771,3.206-3.033,2.558-5.157c-0.646-2.127-2.837-3.378-4.999-2.859c-20.856,5.033-31.054,12.071-30.312,20.918c1.318,15.686,37.65,23.737,68.365,25.865c4.417,0.302,9.194,0.455,14.195,0.455c0.003,0,0.005,0,0.008,0c51.074,0,116.55-16.025,117.204-16.188C343.825,366.666,345.044,365.375,345.347,363.755z"}),r.jsx("path",{fill:"#73A1FB",d:"M188.602,397.419c1.575-1.024,2.273-2.971,1.714-4.764c-0.557-1.793-2.234-2.971-4.118-2.946c-2.795,0.074-27.349,1.182-29.068,16.815c-0.52,4.672,0.818,8.941,3.979,12.686c8.816,10.448,32.614,16.658,72.741,18.984c4.747,0.285,9.569,0.428,14.334,0.428c51.015,0,85.373-15.973,86.812-16.653c1.395-0.66,2.315-2.031,2.397-3.571s-0.687-3.001-2.003-3.806l-26.275-16.04c-0.912-0.556-2.003-0.74-3.043-0.527c-0.166,0.035-16.849,3.495-42.026,6.913c-4.764,0.648-10.73,0.977-17.73,0.977c-25.15,0-53.124-4.109-58.489-6.8C187.749,398.613,187.848,397.975,188.602,397.419z"}),r.jsx("path",{fill:"#73A1FB",d:"M224.408,486.85c116.854-0.099,179.571-20.88,191.653-33.957c4.277-4.626,4.739-9.006,4.376-11.867c-0.898-7.04-7.311-11.35-8.038-11.818c-1.754-1.128-4.108-0.833-5.476,0.745c-1.365,1.578-1.397,3.884-0.027,5.461c0.737,0.948,1.163,2.535-0.992,4.692c-4.83,4.511-53.545,18.204-134.656,22.318c-11.111,0.577-22.765,0.871-34.636,0.873c-72.623,0-125.772-9.948-132.749-15.744c2.689-3.864,21.489-10.037,41.482-13.529c2.253-0.393,3.775-2.516,3.426-4.776c-0.349-2.259-2.432-3.814-4.709-3.519c-0.564,0.077-2.478,0.191-4.694,0.327c-32.988,2.014-71.109,6.503-73.098,23.5c-0.604,5.179,0.935,9.881,4.576,13.973c8.909,10.01,34.516,23.319,153.558,23.319C224.406,486.85,224.406,486.85,224.408,486.85z"}),r.jsx("path",{fill:"#73A1FB",d:"M439.013,456.578c-1.652-0.764-3.604-0.378-4.836,0.952c-0.171,0.185-17.74,18.556-70.564,29.344c-20.223,4.052-58.183,6.107-112.826,6.107c-54.745,0-106.838-2.154-107.357-2.176c-2.176-0.106-4.037,1.476-4.333,3.618c-0.297,2.14,1.083,4.158,3.184,4.658c0.542,0.128,55.135,12.918,129.779,12.918c35.801,0,70.639-2.907,103.548-8.645c61.361-10.757,65.657-41.183,65.81-42.473C441.632,459.078,440.662,457.342,439.013,456.578z"})]})]})}function Oh(){return r.jsx("svg",{viewBox:"0 0 32 32",children:r.jsx("path",{fill:"#DB380E",d:"M9.456 27.25L28 29.782l-6.27-10.441L9.457 27.25zM29.755 7.705c-.548.823-1.097 1.645-1.644 2.468-1.879 2.827-3.758 5.654-5.635 8.482-.105.158-.24.283-.093.525 1.814 2.995 3.613 5.999 5.417 9 .285.474.572.946.941 1.401l1.094-21.852-.08-.023zm-24.76 9.338c.085.081.296.127.395.079 1.74-.855 3.491-1.691 5.192-2.617.555-.302.982-.842 1.46-1.281 1.583-1.452 3.164-2.907 4.744-4.362.097-.089.211-.176.269-.288.568-1.109 1.125-2.224 1.703-3.371-.689-.259-1.341-.512-2.002-.742-.089-.031-.231.031-.328.085-1.53.854-3.088 1.663-4.569 2.595-.741.466-1.345 1.154-2.001 1.752a263.561 263.561 0 0 0-3.156 2.915 5.385 5.385 0 0 0-.744.872c-.713 1.038-1.404 2.091-2.127 3.173.404.419.772.819 1.165 1.191zm6.358-1.418L8.738 26.672l12.286-7.916-9.671-3.13zM28.692 7.74L18.25 9.484l3.544 8.62L28.693 7.74zm-17.194 7.137l9.479 3.077a46701.83 46701.83 0 0 0-3.506-8.538l-5.973 5.461zm-6.372 4.298l-3.317 7.93 6.318-.187-3.001-7.744zm3.075 5.905l.079-.017c.758-3.154 1.528-6.287 2.303-9.565l-5.069 2.635c.864 2.246 1.785 4.615 2.688 6.947zM27.417 7.229l-3.027-.801c-1.451-.381-2.903-.758-4.353-1.143-.181-.048-.312-.08-.419.139-.512 1.05-1.041 2.092-1.561 3.138-.016.032-.013.074-.025.155l9.383-1.422.002-.066zm-5.853-2.388l8.223 2.275-1.359-3.872-6.852 1.519-.012.077zM8.899 27.856c-1.019-.117-2.064-.009-3.097.008-.849.015-1.697.047-2.545.073a.338.338 0 0 0-.262.114l21.044 1.946.014-.094-6.746-.921c-2.802-.383-5.599-.803-8.408-1.127zm-6.952-3.171c.904-2.097 1.804-4.197 2.712-6.292.091-.21.084-.353-.094-.522-.38-.361-.732-.751-1.147-1.182L1.763 24.86l.061.029c.042-.067.093-.131.124-.203zM19.763 4.287c1.524-.393 3.071-.701 4.608-1.044.099-.022.197-.055.295-.083l-.015-.075-6.606.889c.62.271 1.098.473 1.718.314z"})})}const Ah={python:jh,javascript:kh,cpp:Eh,java:Nh,ruby:Oh};function s({title:c,children:S}){const{selectedLanguage:p,setSelectedLanguage:P}=Lf(),j=yn.Children.toArray(S),$=j.findIndex(A=>A.props.language===p);let Y="";try{Y=j[$].props.code}catch{}const C=j[$].props.language,x=A=>{P(j[A].props.language)},b=()=>navigator.clipboard.writeText(Y),z=()=>j.map((A,T)=>{const k=Ah[A.props.language],N=`view ${A.props.language} code`;return r.jsx("button",{role:"tab","aria-label":N,"aria-selected":T===$,className:no.tabButton,onClick:()=>x(T),children:r.jsx(k,{})},T)});return r.jsxs("div",{role:"tablist",className:no.container,children:[r.jsx("h3",{children:c}),r.jsxs("div",{className:no.buttonContainer,children:[r.jsx("div",{role:"tablist",className:no.tabButtonContainer,children:z()}),r.jsx(Th,{onClick:b})]}),r.jsx("div",{role:"tabpanel",className:"tabs-content",children:r.jsx(vh,{code:Y,language:C})})]})}s.Tab=c=>r.jsx(r.Fragment,{children:c});const Ch=`def fn(arr):
+ ans = 0
+ left = 0
+ right = len(arr) - 1
+
+ while left < right:
+ # TODO: logic with left and right
+ if CONDITION:
+ left += 1
+ else:
+ right -= 1
+
+ return ans
+`,Lh=`def fn(arr1, arr2):
+ i = 0
+ j = 0
+ ans = 0
+
+ while i < len(arr1) and j < len(arr2):
+ # TODO: logic
+ if CONDITION:
+ i += 1
+ else:
+ j += 1
+
+ while i < len(arr1):
+ # TODO: logic
+ i += 1
+
+ while j < len(arr2):
+ # TODO: logic
+ j += 1
+
+ return ans
+`,Rh=`def fn(arr):
+ n = len(arr)
+ window = 0
+ left = 0
+ ans = 0
+
+ for right in range(n):
+ # TODO: add arr[right] to window
+
+ while WINDOW_CONDITION_BROKEN:
+ # TODO: remove arr[left] from window
+ left += 1
+
+ # TODO: update ans
+
+ return ans
+`,Ph=`def fn(arr):
+ n = len(arr)
+ prefix = [arr[0]]
+
+ for i in range(1, n):
+ prefix.append(prefix[-1] + arr[i])
+
+ return prefix
+`,Mh=`def fn(strs: list[str]):
+ ans = []
+
+ for char in strs:
+ ans.append(char)
+
+ return ''.join(ans)
+`,Ih=`const fn = (arr) => {
+ let ans = 0
+ let left = 0
+ let right = arr.length - 1
+
+ while (left < right) {
+ // TODO: logic with left and right
+ if (CONDITION) {
+ left++
+ } else {
+ right--
+ }
+ }
+
+ return ans
+}
+`,Dh=`let fn = (arr1, arr2) => {
+ let ans = 0
+ let i = 0
+ let j = 0
+
+ while (i < arr1.length && j < arr2.length) {
+ // TODO: logic
+ if (CONDITION) {
+ i++
+ } else {
+ j++
+ }
+ }
+
+ while (i < arr1.length) {
+ // TODO: logic
+ i++
+ }
+
+ while (j < arr2.length) {
+ // TODO: logic
+ j++
+ }
+
+ return ans
+}
+`,zh=`const fn = (arr) => {
+ let window = 0
+ let ans = 0
+ let left = 0
+
+ for (let right = 0; right < arr.length; right++) {
+ // TODO: add arr[right] to window
+
+ while (WINDOW_CONDITION_BROKEN) {
+ // TODO: remove arr[left] from window
+ left++
+ }
+
+ // TODO: update ans
+ }
+
+ return ans
+}
+`,Bh=`const fn = (arr) => {
+ let prefix = [arr[0]]
+
+ for (let i = 1; i < arr.length; i++) {
+ prefix.push(prefix[prefix.length - 1] + arr[i])
+ }
+
+ return prefix
+}
+`,Fh=`const fn = (arr) => {
+ let ans = []
+
+ for (const c of arr) {
+ ans.push(c)
+ }
+
+ return ans.join('')
+}
+
+const fn = (arr) => {
+ let ans = ''
+
+ for (const c of arr) {
+ ans += c
+ }
+
+ return ans
+}
+`,Uh=`public int fn(int[] arr) {
+ int ans = 0;
+ int left = 0;
+ int right = arr.length - 1;
+
+ while (left < right) {
+ // TODO: logic with left and right
+ if (CONDITION) {
+ left++;
+ } else {
+ right--;
+ }
+ }
+
+ return ans;
+}
+`,Hh=`public int fn(int[] arr1, int[] arr2) {
+ int i = 0;
+ int j = 0;
+ int ans = 0;
+
+ while (i < arr1.length && j < arr2.length) {
+ // TODO: logic
+ if (CONDITION) {
+ i++;
+ } else {
+ j++;
+ }
+ }
+
+ while (i < arr1.length) {
+ // TODO: logic
+ i++;
+ }
+
+ while (j < arr2.length) {
+ // TODO: logic
+ j++;
+ }
+
+ return ans;
+}
+`,Wh=`public int fn(int[] arr) {
+ int n = arr.length;
+ int window = 0;
+ int left = 0;
+ int ans = 0;
+
+ for (int right = 0; right < arr.length; right++) {
+ // TODO: add arr[right] to window
+
+ while (WINDOW_CONDITION_BROKEN) {
+ // TODO: remove arr[left] from window
+ left++;
+ }
+
+ // TODO: update ans
+ }
+
+ return ans;
+}
+`,Vh=`import java.util.ArrayList;
+import java.util.List;
+
+
+public int[] fn(int[] arr) {
+ int n = arr.length;
+ int[] prefix = new int[n];
+ prefix[0] = arr[0];
+
+ for (int i = 1; i < n; i++) {
+ prefix[i] = prefix[i - 1] + arr[i];
+ }
+
+ return prefix;
+}
+`,$h=`public String fn(char[] strs) {
+ StringBuilder sb = new StringBuilder();
+
+ for (char c: strs) {
+ sb.append(c);
+ }
+
+ return sb.toString();
+}
+`,Kh=`#include
+
+using namespace std;
+
+
+int fn(vector& arr) {
+ int ans = 0;
+ int left = 0;
+ int right = arr.size() - 1;
+
+ while (left < right) {
+ // TODO: logic with left and right
+ if (CONDITION) {
+ left++;
+ } else {
+ right--;
+ }
+ }
+
+ return ans;
+}
+`,Gh=`#include
+
+using namespace std;
+
+
+int fn(vector& arr1, vector& arr2) {
+ int i = 0;
+ int j = 0;
+ int ans = 0;
+
+ while (i < arr1.size() && j < arr2.size()) {
+ // TODO: logic
+ if (CONDITION) {
+ i++;
+ } else {
+ j++;
+ }
+ }
+
+ while (i < arr1.size()) {
+ // TODO: logic
+ i++;
+ }
+
+ while (j < arr2.size()) {
+ // TODO: logic
+ j++;
+ }
+
+ return ans;
+}
+`,Jh=`#include
+
+using namespace std;
+
+
+int fn(vector& arr) {
+ int n = arr.size();
+ int window = 0;
+ int left = 0;
+ int ans = 0;
+
+ for (int right = 0; right < n; right++) {
+ // TODO: add arr[right] to window
+
+ while (WINDOW_CONDITION_BROKEN) {
+ // TODO: remove arr[left] from window
+ left++;
+ }
+
+ // TODO: update ans
+ }
+
+ return ans;
+}
+`,Yh=`#include
+#include
+
+using namespace std;
+
+
+vector fn(vector& arr) {
+ int n = arr.size();
+ vector prefix;
+ prefix.push_back(arr[0]);
+
+ for (int i = 1; i < n; ++i) {
+ prefix.push_back(prefix.back() + arr[i]);
+ }
+
+ return prefix;
+}
+`,qh=`string fn(vector& arr) {
+ return string(arr.begin(), arr.end())
+}
+`,Qh=`def fn(arr)
+ ans = 0
+ left = 0
+ right = arr.length - 1
+
+ while left < right
+ # TODO: logic with left and right
+ if CONDITION
+ left += 1
+ else
+ right -= 1
+ end
+ end
+
+ ans
+end`,Xh=`def fn(arr1, arr2)
+ i, j = 0, 0
+ ans = 0
+
+ while i < arr1.length && j < arr2.length
+ # TODO: Logic
+ if CONDITION
+ i += 1
+ else
+ j += 1
+ end
+ end
+
+ while i < arr1.length
+ # TODO: Logic
+ i += 1
+ end
+
+ while j < arr2.length
+ # TODO: Logic
+ j += 1
+ end
+
+ ans
+end
+`,Zh=`def fn(arr)
+ n = arr.length
+ window = 0
+ left = 0
+ result = 0
+
+ (0...n).each do |right|
+ # TODO: add arr[right] to window
+
+ while WINDOW_CONDITION_BROKEN
+ # TODO: remove arr[left] from window
+ left += 1
+ end
+
+ # TODO: update result
+ end
+
+ result
+end
+`,ng=`# This method computes the prefix sum of an array.
+# It returns a new array where each element at index i is the sum of elements from index 0 to i-1 in the original array.
+# # For example, given the array [1, 2, 3], the prefix sum array will be [1, 3, 6].
+def prefix_sum(arr)
+ n = arr.length
+ prefix = [arr[0]]
+
+ (1...n).each do |i|
+ prefix << (prefix.last + arr[i])
+ end
+
+ prefix
+end
+`,eg=`def fn(strs)
+ # array of strings/chrs
+ ans = []
+
+ strs.each do |char|
+ ans << char
+ end
+
+ ans.join('')
+end
+
+# simple
+def fn2(strs)
+ strs.join
+end
+`;function tg(){return r.jsxs("div",{className:Zn.container,children:[r.jsx("h2",{className:Zn.sectionHeader,children:"Array"}),r.jsx("section",{id:"array-two-pointers-one-input",children:r.jsxs(s,{title:"two pointers: one input, opposite ends",children:[r.jsx(s.Tab,{code:Ch,language:"python"}),r.jsx(s.Tab,{code:Ih,language:"javascript"}),r.jsx(s.Tab,{code:Uh,language:"java"}),r.jsx(s.Tab,{code:Kh,language:"cpp"}),r.jsx(s.Tab,{code:Qh,language:"ruby"})]})}),r.jsx("section",{id:"array-two-pointers-two-inputs",children:r.jsxs(s,{title:"two pointers: two inputs, exhaust both",children:[r.jsx(s.Tab,{code:Lh,language:"python"}),r.jsx(s.Tab,{code:Dh,language:"javascript"}),r.jsx(s.Tab,{code:Hh,language:"java"}),r.jsx(s.Tab,{code:Gh,language:"cpp"}),r.jsx(s.Tab,{code:Xh,language:"ruby"})]})}),r.jsx("section",{id:"array-sliding-window",children:r.jsxs(s,{title:"sliding window",children:[r.jsx(s.Tab,{code:Rh,language:"python"}),r.jsx(s.Tab,{code:zh,language:"javascript"}),r.jsx(s.Tab,{code:Wh,language:"java"}),r.jsx(s.Tab,{code:Jh,language:"cpp"}),r.jsx(s.Tab,{code:Zh,language:"ruby"})]})}),r.jsx("section",{id:"array-prefix-sum",children:r.jsxs(s,{title:"prefix sum",children:[r.jsx(s.Tab,{code:Ph,language:"python"}),r.jsx(s.Tab,{code:Bh,language:"javascript"}),r.jsx(s.Tab,{code:Vh,language:"java"}),r.jsx(s.Tab,{code:Yh,language:"cpp"}),r.jsx(s.Tab,{code:ng,language:"ruby"})]})}),r.jsx("section",{id:"array-string-building",children:r.jsxs(s,{title:"efficient string building",children:[r.jsx(s.Tab,{code:Mh,language:"python"}),r.jsx(s.Tab,{code:Fh,language:"javascript"}),r.jsx(s.Tab,{code:$h,language:"java"}),r.jsx(s.Tab,{code:qh,language:"cpp"}),r.jsx(s.Tab,{code:eg,language:"ruby"})]})})]})}const rg=`from collections import defaultdict
+
+
+def fn(arr, k):
+ counts = defaultdict(int)
+ counts[0] = 1
+ ans = curr = 0
+
+ for num in arr:
+ # TODO: logic to change curr
+ ans += counts[curr - k]
+ counts[curr] += 1
+
+ return ans
+`,ig=`def fn(arr):
+ window = set()
+ ans = 0
+ left = 0
+
+ for right, ELEMENT in enumerate(arr):
+ # TODO: add arr[right] to window
+
+ while WINDOW_CONDITION_BROKEN:
+ # TODO: remove arr[left] from window
+ left += 1
+
+ # TODO: update ans
+
+ return ans
+`,ag=`const fn = (arr, k) => {
+ let counts = new Map()
+ counts.set(0, 1)
+ let ans = 0
+ let curr = 0
+
+ for (const num of arr) {
+ // TODO: logic to change curr
+ ans += counts.get(curr - k) || 0
+ counts.set(curr, (counts.get(curr) || 0) + 1)
+ }
+
+ return ans
+}
+`,og=`function fn(arr) {
+ let window = new Set()
+ let ans = 0
+ let left = 0
+
+ for (let right = 0; right < arr.length; right++) {
+ // TODO: add arr[right] to window
+
+ while (WINDOW_CONDITION_BROKEN) {
+ // TODO: remove arr[left] from window
+ left += 1
+ }
+
+ // TODO: update ans
+ }
+
+ return ans
+}
+`,sg=`import java.util.HashMap;
+import java.util.Map;
+
+
+public int fn(int[] arr, int k) {
+ Map counts = new HashMap<>();
+ counts.put(0, 1);
+ int ans = 0;
+ int curr = 0;
+
+ for (int num: arr) {
+ // TODO: logic to change curr
+ ans += counts.getOrDefault(curr - k, 0);
+ counts.put(curr, counts.getOrDefault(curr, 0) + 1);
+ }
+
+ return ans;
+}
+`,lg=`import java.util.HashSet;
+import java.util.Set;
+
+
+public int fn(int[] arr) {
+ Set window = new HashSet<>();
+ int ans = 0;
+ int left = 0;
+
+ for (int right = 0; right < arr.length; right++) {
+ // TODO: add arr[right] to window
+
+ while (WINDOW_CONDITION_BROKEN) {
+ // TODO: remove arr[left] from window
+ left++;
+ }
+
+ // TODO: update ans
+ }
+
+ return ans;
+}
+`,ug=`#include
+#include
+
+using namespace std;
+
+
+int fn(vector& arr, int k) {
+ unordered_map counts;
+ counts[0] = 1;
+ int ans = 0;
+ int curr = 0;
+
+ for (int num : arr) {
+ // TODO: logic to change curr
+ ans += counts[curr - k];
+ counts[curr]++;
+ }
+
+ return ans;
+}
+`,cg=`#include
+#include
+
+using namespace std;
+
+
+int fn(vector& arr) {
+ unordered_set window;
+ int ans = 0;
+ int left = 0;
+
+ for (int right = 0; right < arr.size(); right++) {
+ // TODO: add arr[right] to window
+
+ while (WINDOW_CONDITION_BROKEN) {
+ // TODO: remove arr[left] from window
+ left++;
+ }
+
+ // TODO: update ans
+ }
+
+ return ans;
+}
+`,dg=`def fn(arr, k)
+ counts = Hash.new(0)
+ counts[0] = 1
+ ans = 0
+ curr = 0
+
+ arr.each do |num|
+ # TODO: logic to change curr
+ ans += counts[curr - k]
+ counts[curr] += 1
+ end
+
+ ans
+end
+`,fg=`require 'set'
+
+def fn(arr)
+ window = Set.new
+ ans = 0
+ left = 0
+
+ arr.each_with_index do |ELEMENT, right|
+ # TODO: add arr[right] to window
+
+ while WINDOW_CONDITION_BROKEN
+ # TODO: remove arr[left] from window
+ left += 1
+ end
+
+ # TODO: update ans
+ end
+
+ ans
+end
+`;function pg(){return r.jsxs("div",{className:Zn.container,children:[r.jsx("h2",{className:Zn.sectionHeader,children:"Hash Map"}),r.jsx("section",{id:"hashmap-find-number-of-subarrays",children:r.jsxs(s,{title:"find number of subarrays that fit an exact criteria",children:[r.jsx(s.Tab,{code:rg,language:"python"}),r.jsx(s.Tab,{code:ag,language:"javascript"}),r.jsx(s.Tab,{code:sg,language:"java"}),r.jsx(s.Tab,{code:ug,language:"cpp"}),r.jsx(s.Tab,{code:dg,language:"ruby"})]})}),r.jsx("section",{id:"hashmap-sliding-window",children:r.jsxs(s,{title:"sliding window",children:[r.jsx(s.Tab,{code:ig,language:"python"}),r.jsx(s.Tab,{code:og,language:"javascript"}),r.jsx(s.Tab,{code:lg,language:"java"}),r.jsx(s.Tab,{code:cg,language:"cpp"}),r.jsx(s.Tab,{code:fg,language:"ruby"})]})})]})}const hg=`def fn(head):
+ slow = head
+ fast = head
+ ans = 0
+
+ while fast and fast.next:
+ # TODO: logic
+ slow = slow.next
+ fast = fast.next.next
+
+ return ans
+`,gg=`def fn(head):
+ prev = None
+ curr = head
+
+ while curr:
+ nxt = curr.next
+ curr.next = prev
+ prev = curr
+ curr = nxt
+
+ return prev
+`,mg=`const fn = (head) => {
+ let ans = 0
+ let slow = head
+ let fast = head
+
+ while (fast && fast.next) {
+ // TODO: logic
+ slow = slow.next
+ fast = fast.next.next
+ }
+
+ return ans
+}
+`,vg=`const fn = (head) => {
+ let prev = null
+ let curr = head
+
+ while (curr) {
+ let next = curr.next
+ curr.next = prev
+ prev = curr
+ curr = next
+ }
+
+ return prev
+}
+`,yg=`public int fn(ListNode head) {
+ ListNode slow = head;
+ ListNode fast = head;
+ int ans = 0;
+
+ while (fast != null && fast.next != null) {
+ // TODO: logic
+ slow = slow.next;
+ fast = fast.next.next;
+ }
+
+ return ans;
+}
+`,xg=`public ListNode fn(ListNode head) {
+ ListNode curr = head;
+ ListNode prev = null;
+
+ while (curr != null) {
+ ListNode nextNode = curr.next;
+ curr.next = prev;
+ prev = curr;
+ curr = nextNode;
+ }
+
+ return prev;
+}
+`,_g=`int fn(ListNode* head) {
+ ListNode* slow = head;
+ ListNode* fast = head;
+ int ans = 0;
+
+ while (fast && fast->next) {
+ // TODO: logic
+ slow = slow->next;
+ fast = fast->next->next;
+ }
+
+ return ans;
+}
+`,bg=`ListNode* fn(ListNode* head) {
+ ListNode* prev = nullptr;
+ ListNode* curr = head;
+
+ while (curr) {
+ ListNode* nxt = curr->next;
+ curr->next = prev;
+ prev = curr;
+ curr = nxt;
+ }
+
+ return prev;
+}
+`,wg=`def fn(head)
+ slow = head
+ fast = head
+ ans = 0
+
+ until fast.nil? || fast.next.nil?
+ # TODO: logic
+ slow = slow.next
+ fast = fast.next.next
+ end
+
+ ans
+end
+`,Sg=`def fn(head)
+ prev = nil
+ curr = head
+
+ until curr.nil?
+ nxt = curr.next
+ curr.next = prev
+ prev = curr
+ curr = nxt
+ end
+
+ prev
+end
+`;function Tg(){return r.jsxs("div",{className:Zn.container,children:[r.jsx("h2",{className:Zn.sectionHeader,children:"Linked List"}),r.jsx("section",{id:"linkedlist-fast-and-slow-pointer",children:r.jsxs(s,{title:"fast and slow pointer",children:[r.jsx(s.Tab,{code:hg,language:"python"}),r.jsx(s.Tab,{code:mg,language:"javascript"}),r.jsx(s.Tab,{code:yg,language:"java"}),r.jsx(s.Tab,{code:_g,language:"cpp"}),r.jsx(s.Tab,{code:wg,language:"ruby"})]})}),r.jsx("section",{id:"linkedlist-reverse",children:r.jsxs(s,{title:"reverse linked list",children:[r.jsx(s.Tab,{code:gg,language:"python"}),r.jsx(s.Tab,{code:vg,language:"javascript"}),r.jsx(s.Tab,{code:xg,language:"java"}),r.jsx(s.Tab,{code:bg,language:"cpp"}),r.jsx(s.Tab,{code:Sg,language:"ruby"})]})})]})}const jg=`def fn(arr):
+ stack = []
+ ans = 0
+
+ for num in arr:
+ while stack and stack[-1] > num:
+ # TODO: logic
+ stack.pop()
+ stack.append(num)
+
+ return ans
+`,kg=`def fn(arr):
+ stack = []
+ ans = 0
+
+ for num in arr:
+ while stack and stack[-1] < num:
+ # TODO: logic
+ stack.pop()
+ stack.append(num)
+
+ return ans
+`,Eg=`const fn = (arr) => {
+ let stack = []
+ let ans = 0
+
+ for (const num of arr) {
+ while (stack.length && stack[stack.length - 1] > num) {
+ // TODO: logic
+ stack.pop()
+ }
+
+ stack.push(num)
+ }
+
+ return ans
+}
+`,Ng=`const fn = (arr) => {
+ let stack = []
+ let ans = 0
+
+ for (const num of arr) {
+ while (stack.length && stack[stack.length - 1] < num) {
+ // TODO: logic
+ stack.pop()
+ }
+
+ stack.push(num)
+ }
+
+ return ans
+}
+`,Og=`import java.util.Stack;
+
+
+public int fn(int[] arr) {
+ Stack stack = new Stack<>();
+ int ans = 0;
+
+ for (int num : arr) {
+ while (!stack.isEmpty() && stack.peek() > num) {
+ // TODO: logic
+ stack.pop();
+ }
+ stack.push(num);
+ }
+
+ return ans;
+}
+`,Ag=`import java.util.Stack;
+
+
+public int fn(int[] arr) {
+ Stack stack = new Stack<>();
+ int ans = 0;
+
+ for (int num : arr) {
+ while (!stack.isEmpty() && stack.peek() < num) {
+ // TODO: logic
+ stack.pop();
+ }
+ stack.push(num);
+ }
+
+ return ans;
+}
+`,Cg=`#include
+#include
+
+using namespace std;
+
+
+int fn(vector& arr) {
+ stack stack;
+ int ans = 0;
+
+ for (int num : arr) {
+ while (!stack.empty() && stack.top() > num) {
+ // TODO: logic
+ stack.pop();
+ }
+ stack.push(num);
+ }
+
+ return ans;
+}
+`,Lg=`#include
+#include
+
+using namespace std;
+
+
+int fn(vector& arr) {
+ stack stack;
+ int ans = 0;
+
+ for (int num : arr) {
+ while (!stack.empty() && stack.top() < num) {
+ // TODO: logic
+ stack.pop();
+ }
+ stack.push(num);
+ }
+
+ return ans;
+}
+`,Rg=`def fn(arr)
+ stack = []
+ ans = 0
+
+ arr.each do |num|
+ while !stack.empty? && stack[-1] > num
+ # TODO: logic
+ stack.pop
+ end
+ stack << num
+ end
+
+ ans
+end
+`,Pg=`def fn(arr)
+ stack = []
+ ans = 0
+
+ arr.each do |num|
+ while !stack.empty? && stack[-1] < num
+ # TODO: logic
+ stack.pop
+ end
+ stack << num
+ end
+
+ ans
+end
+`;function Mg(){return r.jsxs("div",{className:Zn.container,children:[r.jsx("h2",{className:Zn.sectionHeader,children:"Stack"}),r.jsx("section",{id:"stack-monotonic-increasing",children:r.jsxs(s,{title:"monotonic increasing stack",children:[r.jsx(s.Tab,{code:jg,language:"python"}),r.jsx(s.Tab,{code:Eg,language:"javascript"}),r.jsx(s.Tab,{code:Og,language:"java"}),r.jsx(s.Tab,{code:Cg,language:"cpp"}),r.jsx(s.Tab,{code:Rg,language:"ruby"})]})}),r.jsx("section",{id:"stack-monotonic-decreasing",children:r.jsxs(s,{title:"monotonic decreasing stack",children:[r.jsx(s.Tab,{code:kg,language:"python"}),r.jsx(s.Tab,{code:Ng,language:"javascript"}),r.jsx(s.Tab,{code:Ag,language:"java"}),r.jsx(s.Tab,{code:Lg,language:"cpp"}),r.jsx(s.Tab,{code:Pg,language:"ruby"})]})})]})}const Ig=`def dfs(root):
+ if not root:
+ return
+
+ ans = 0
+
+ # TODO: logic
+ dfs(root.left)
+ dfs(root.right)
+
+ return ans
+`,Dg=`def dfs(root):
+ stack = [root]
+ ans = 0
+
+ while stack:
+ node = stack.pop()
+ # TODO: logic
+ if node.left:
+ stack.append(node.left)
+ if node.right:
+ stack.append(node.right)
+
+ return ans
+`,zg=`from collections import deque
+
+
+def fn(root):
+ que = deque([root])
+ ans = 0
+
+ while que:
+ current_length = len(que)
+ # TODO: logic for current level
+ for _ in range(current_length):
+ node = que.popleft()
+ # TODO: logic
+ if node.left:
+ que.append(node.left)
+ if node.right:
+ que.append(node.right)
+
+ return ans
+`,Bg=`const dfs = (root) => {
+ if (!root) {
+ return
+ }
+
+ let ans = 0
+
+ // TODO: logic
+ dfs(root.left)
+ dfs(root.right)
+
+ return ans
+}
+`,Fg=`const dfs = (root) => {
+ let stack = [root]
+ let ans = 0
+
+ while (stack.length) {
+ let node = stack.pop()
+ // TODO: logic
+ if (node.left) {
+ stack.push(node.left)
+ }
+ if (node.right) {
+ stack.push(node.right)
+ }
+ }
+
+ return ans
+}
+`,Ug=`const fn = (root) => {
+ let que = [root]
+ let ans = 0
+
+ while (que.length) {
+ let currentLength = que.length
+ let nextQue = []
+ // TODO: logic for current level
+
+ for (let i = 0; i < currentLength; i++) {
+ let node = que[i]
+ // TODO: logic
+ if (node.left) {
+ nextQue.push(node.left)
+ }
+ if (node.right) {
+ nextQue.push(node.right)
+ }
+ }
+
+ que = nextQue
+ }
+
+ return ans
+}
+`,Hg=`public int dfs(TreeNode root) {
+ if (root == null) {
+ return 0;
+ }
+
+ int ans = 0;
+
+ // TODO: logic
+ ans += dfs(root.left);
+ ans += dfs(root.right);
+
+ return ans;
+}
+`,Wg=`import java.util.Stack;
+
+
+public int dfs(TreeNode root) {
+ Stack stack = new Stack<>();
+ stack.push(root);
+ int ans = 0;
+
+ while (!stack.isEmpty()) {
+ TreeNode node = stack.pop();
+ // TODO: logic
+ if (node.left != null) {
+ stack.push(node.left);
+ }
+ if (node.right != null) {
+ stack.push(node.right);
+ }
+ }
+
+ return ans;
+}
+`,Vg=`import java.util.LinkedList;
+import java.util.Queue;
+
+
+public int fn(TreeNode root) {
+ Queue que = new LinkedList<>();
+ que.add(root);
+ int ans = 0;
+
+ while (!que.isEmpty()) {
+ int currentLength = que.size();
+ // TODO: logic for current level
+ for (int i = 0; i < currentLength; i++) {
+ TreeNode node = que.remove();
+ // TODO: logic
+ if (node.left != null) {
+ que.add(node.left);
+ }
+ if (node.right != null) {
+ que.add(node.right);
+ }
+ }
+ }
+
+ return ans;
+}
+`,$g=`int dfs(TreeNode* root) {
+ if (root == nullptr) {
+ return 0;
+ }
+
+ int ans = 0;
+
+ // TODO: logic
+ dfs(root.left);
+ dfs(root.right);
+
+ return ans;
+}
+`,Kg=`#include
+
+using namespace std;
+
+
+int dfs(TreeNode* root) {
+ stack stack;
+ stack.push(root);
+ int ans = 0;
+
+ while (!stack.empty()) {
+ TreeNode* node = stack.top();
+ stack.pop();
+ // TODO: logic
+ if (node->left) {
+ stack.push(node->left);
+ }
+ if (node->right) {
+ stack.push(node->right);
+ }
+ }
+
+ return ans;
+}
+`,Gg=`#include
+
+using namespace std;
+
+
+int fn(TreeNode* root) {
+ queue que;
+ que.push(root);
+ int ans = 0;
+
+ while (!que.empty()) {
+ int currentLength = que.size();
+ // TODO: logic for current level
+
+ for (int i = 0; i < currentLength; i++) {
+ TreeNode* node = que.front();
+ que.pop();
+ // TODO: logic
+ if (node->left != nullptr) {
+ que.push(node->left);
+ }
+ if (node->right != nullptr) {
+ que.push(node->right);
+ }
+ }
+ }
+
+ return ans;
+}
+`,Jg=`def dfs(root)
+ return unless root
+
+ ans = 0
+
+ # TODO: logic
+ dfs(root.left)
+ dfs(root.right)
+
+ ans
+end
+`,Yg=`def dfs(root)
+ stack = [root]
+ ans = 0
+
+ until stack.empty?
+ node = stack.pop
+ # TODO: logic
+
+ stack << node.left if node.left
+ stack << node.right if node.right
+ end
+
+ ans
+end
+`,qg=`def fn(root)
+ queue = [root]
+ ans = 0
+
+ until queue.empty?
+ current_length = queue.length
+ # TODO: logic for current level
+
+ current_length.times do
+ node = queue.shift
+ # TODO: logic
+
+ queue << node.left if node.left
+ queue << node.right if node.right
+ end
+ end
+
+ ans
+end
+`;function Qg(){return r.jsxs("div",{className:Zn.container,children:[r.jsx("h2",{className:Zn.sectionHeader,children:"Binary Tree"}),r.jsx("section",{id:"tree-dfs-recursive",children:r.jsxs(s,{title:"DFS (recursive)",children:[r.jsx(s.Tab,{code:Ig,language:"python"}),r.jsx(s.Tab,{code:Bg,language:"javascript"}),r.jsx(s.Tab,{code:Hg,language:"java"}),r.jsx(s.Tab,{code:$g,language:"cpp"}),r.jsx(s.Tab,{code:Jg,language:"ruby"})]})}),r.jsx("section",{id:"tree-dfs-iterative",children:r.jsxs(s,{title:"DFS (iterative)",children:[r.jsx(s.Tab,{code:Dg,language:"python"}),r.jsx(s.Tab,{code:Fg,language:"javascript"}),r.jsx(s.Tab,{code:Wg,language:"java"}),r.jsx(s.Tab,{code:Kg,language:"cpp"}),r.jsx(s.Tab,{code:Yg,language:"ruby"})]})}),r.jsx("section",{id:"tree-bfs",children:r.jsxs(s,{title:"BFS",children:[r.jsx(s.Tab,{code:zg,language:"python"}),r.jsx(s.Tab,{code:Ug,language:"javascript"}),r.jsx(s.Tab,{code:Vg,language:"java"}),r.jsx(s.Tab,{code:Gg,language:"cpp"}),r.jsx(s.Tab,{code:qg,language:"ruby"})]})})]})}const Xg=`def fn(graph):
+ def dfs(node):
+ ans = 0
+ # TODO: logic
+ for neighbor in graph[node]:
+ if neighbor not in seen:
+ seen.add(neighbor)
+ ans += dfs(neighbor)
+
+ return ans
+
+ seen = {START_NODE}
+
+ return dfs(START_NODE)
+`,Zg=`def fn(graph):
+ stack = [START_NODE]
+ seen = {START_NODE}
+ ans = 0
+
+ while stack:
+ node = stack.pop()
+ # TODO: logic
+ for neighbor in graph[node]:
+ if neighbor not in seen:
+ seen.add(neighbor)
+ stack.append(neighbor)
+
+ return ans
+`,nm=`from collections import deque
+
+
+def fn(graph):
+ que = deque([START_NODE])
+ seen = {START_NODE}
+ ans = 0
+
+ while que:
+ node = que.popleft()
+ # TODO: logic
+ for neighbor in graph[node]:
+ if neighbor not in seen:
+ seen.add(neighbor)
+ que.append(neighbor)
+
+ return ans
+`,em=`from heapq import heappop, heappush
+
+
+def dijkstras(graph: list[list[tuple[int, int]]], source: int) -> list[int]:
+ n = len(graph)
+ distances = [float('inf')] * n
+ distances[source] = 0
+ heap = [(0, source)]
+
+ while heap:
+ curr_dist, node = heappop(heap)
+
+ if curr_dist > distances[node]:
+ continue
+
+ for neighbor, weight in graph[node]:
+ dist = curr_dist + weight
+
+ if dist < distances[neighbor]:
+ distances[neighbor] = dist
+ heappush(heap, (dist, neighbor))
+
+ return distances
+`,tm=`def bellman_ford(n: int, edges: list[tuple[int, int, int]], source: int) -> list[int]:
+ distances = [float('inf')] * n
+ distances[source] = 0
+
+ for _ in range(n - 1):
+ for u, v, w in edges:
+ if distances[u] != float('inf') and distances[u] + w < distances[v]:
+ distances[v] = distances[u] + w
+
+ for u, v, w in edges:
+ if distances[u] != float('inf') and distances[u] + w < distances[v]:
+ return []
+
+ return distances
+`,rm=`from collections import defaultdict, deque
+
+
+def kahn_topological_sort(graph: dict[int, list[int]]) -> list[int]:
+ result = []
+ indegree = defaultdict(int)
+
+ for vertices in graph.values():
+ for v in vertices:
+ indegree[v] += 1
+
+ que = deque([node for node in graph if not indegree[node]])
+
+ while que:
+ node = que.popleft()
+ result.append(node)
+
+ for neighbor in graph[node]:
+ indegree[neighbor] -= 1
+
+ if not indegree[neighbor]:
+ que.append(neighbor)
+
+ return result if len(result) == len(graph) else []
+`,im=`def kruskal_mst(n: int, edges: list[tuple[int, int, int]]) -> list[tuple[int, int, int]]:
+ mst = []
+ uf = UnionFind(n)
+ edges.sort()
+
+ for w, u, v in edges:
+ if not uf.connected(u, v):
+ uf.union(u, v)
+ mst.append((w, u, v))
+
+ return mst
+`,am=`from heapq import heappop
+
+
+def prim_mst(n: int, edges: list[tuple[int, int, int]]) -> list[tuple[int, int, int]]:
+ mst = []
+ uf = UnionFind(n)
+ edges.sort()
+
+ while edges:
+ w, u, v = heappop(edges)
+
+ if not uf.connected(u, v):
+ uf.union(u, v)
+ mst.append((w, u, v))
+
+ return mst
+`,om=`const fn = (graph) => {
+ const dfs = (node) => {
+ let ans = 0
+ // TODO: logic
+ for (const neighbor of graph[node]) {
+ if (!seen.has(neighbor)) {
+ seen.add(neighbor)
+ ans += dfs(neighbor)
+ }
+ }
+
+ return ans
+ }
+
+ let seen = new Set([START_NODE])
+
+ return dfs(START_NODE)
+}
+`,sm=`const fn = (graph) => {
+ let stack = [START_NODE]
+ let seen = new Set([START_NODE])
+ let ans = 0
+
+ while (stack.length) {
+ let node = stack.pop()
+ // TODO: logic
+ for (const neighbor of graph[node]) {
+ if (!seen.has(neighbor)) {
+ seen.add(neighbor)
+ stack.push(neighbor)
+ }
+ }
+ }
+
+ return ans
+}
+`,lm=`const fn = (graph) => {
+ let que = [START_NODE]
+ let seen = new Set([START_NODE])
+ let ans = 0
+
+ while (que.length) {
+ let currentLength = que.length
+ let nextQue = []
+
+ for (let i = 0; i < currentLength; i++) {
+ let node = que[i]
+ // TODO: logic
+ for (const neighbor of graph[node]) {
+ if (!seen.has(neighbor)) {
+ seen.add(neighbor)
+ nextQue.push(neighbor)
+ }
+ }
+ }
+
+ que = nextQue
+ }
+
+ return ans
+}
+`,um=`/*
+ JavaScript lacks built-in support for heaps.
+ Try using a language that doesn't hate you, like Python.
+*/
+`,cm=`const bellmanFord = (n, edges, source) => {
+ let distances = new Array(n).fill(Infinity)
+ distances[source] = 0
+
+ for (let i = 0; i < n - 1; i++) {
+ for (let j = 0; j < edges.length; j++) {
+ let [u, v, w] = edges[j]
+
+ if (distances[u] !== Infinity && distances[u] + w < distances[v]) {
+ distances[v] = distances[u] + w
+ }
+ }
+ }
+
+ for (let i = 0; i < edges.length; i++) {
+ let [u, v, w] = edges[i]
+
+ if (distances[u] !== Infinity && distances[u] + w < distances[v]) {
+ return []
+ }
+ }
+
+ return distances
+}
+`,dm=`const kahnTopologicalSort = (graph) => {
+ const result = []
+ const queue = []
+ const indegree = new Map()
+
+ for (let nodes of Object.values(graph)) {
+ for (let node of nodes) {
+ if (indegree.has(node)) {
+ indegree.set(node, indegree.get(node) + 1)
+ } else {
+ indegree.set(node, 1)
+ }
+ }
+ }
+
+ for (let node of Object.keys(graph)) {
+ if (!indegree.has(node)) {
+ queue.push(node)
+ }
+ }
+
+ while (queue.length > 0) {
+ const node = queue.shift()
+ result.push(node)
+
+ if (graph[node]) {
+ for (let neighbor of graph[node]) {
+ indegree.set(neighbor, indegree.get(neighbor) - 1)
+
+ if (indegree.get(neighbor) === 0) {
+ queue.push(neighbor)
+ }
+ }
+ }
+ }
+
+ return result.length === Object.keys(graph).length ? result : []
+}
+`,fm=`const kruskalMst = (n, edges) => {
+ let mst = []
+ let uf = new UnionFind(n)
+
+ edges.sort((a, b) => a[0] - b[0])
+
+ for (let i = 0; i < edges.length; i++) {
+ let [w, u, v] = edges[i]
+
+ if (!uf.connected(u, v)) {
+ uf.union(u, v)
+ mst.push([w, u, v])
+ }
+ }
+
+ return mst
+}
+`,pm=`/*
+ JavaScript lacks built-in support for heaps.
+ Try using a language that doesn't hate you, like Python.
+*/
+`,hm=`import java.util.HashSet;
+import java.util.Set;
+
+
+Set seen = new HashSet<>();
+
+public int fn(int[][] graph) {
+ seen.add(START_NODE);
+ return dfs(START_NODE, graph);
+}
+
+public int dfs(int node, int[][] graph) {
+ int ans = 0;
+ // TODO: logic
+ for (int neighbor: graph[node]) {
+ if (!seen.contains(neighbor)) {
+ seen.add(neighbor);
+ ans += dfs(neighbor, graph);
+ }
+ }
+
+ return ans;
+}
+`,gm=`import java.util.Stack;
+import java.util.HashSet;
+import java.util.Set;
+
+
+public int fn(int[][] graph) {
+ Stack stack = new Stack<>();
+ Set seen = new HashSet<>();
+ stack.push(START_NODE);
+ seen.add(START_NODE);
+ int ans = 0;
+
+ while (!stack.empty()) {
+ int node = stack.pop();
+ // TODO: logic
+ for (int neighbor: graph[node]) {
+ if (!seen.contains(neighbor)) {
+ seen.add(neighbor);
+ stack.push(neighbor);
+ }
+ }
+ }
+
+ return ans;
+}
+`,mm=`import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Queue;
+import java.util.Set;
+
+
+public int fn(int[][] graph) {
+ Queue que = new LinkedList<>();
+ Set seen = new HashSet<>();
+ que.offer(START_NODE);
+ seen.add(START_NODE);
+ int ans = 0;
+
+ while (!que.isEmpty()) {
+ int node = que.remove();
+ // TODO: Logic
+ for (int neighbor: graph[node]) {
+ if (!seen.contains(neighbor)) {
+ seen.add(neighbor);
+ que.add(neighbor);
+ }
+ }
+ }
+
+ return ans;
+}
+`,vm=`import java.util.Arrays;
+import java.util.Comparator;
+import java.util.PriorityQueue;
+import java.util.Queue;
+import java.util.List;
+
+
+public int[] dijkstras(List> graph, int source) {
+ int n = graph.size();
+ int[] distances = new int[n];
+ Arrays.fill(distances, Integer.MAX_VALUE);
+ distances[source] = 0;
+
+ PriorityQueue pq = new PriorityQueue<>(Comparator.comparingInt(a -> a[1]));
+ pq.offer(new int[]{source, 0});
+
+ while (!pq.isEmpty()) {
+ int[] curr = pq.poll();
+ int node = curr[0];
+ int dist = curr[1];
+
+ if (dist > distances[node]) {
+ continue;
+ }
+
+ for (int[] edge : graph.get(node)) {
+ int neighbor = edge[0];
+ int weight = edge[1];
+ int newDist = dist + weight;
+
+ if (newDist < distances[neighbor]) {
+ distances[neighbor] = newDist;
+ pq.offer(new int[]{neighbor, newDist});
+ }
+ }
+ }
+
+ return distances;
+}
+`,ym=`import java.util.Arrays;
+import java.util.List;
+
+
+public int[] bellmanFord(int n, List edges, int source) {
+ int[] distances = new int[n];
+ Arrays.fill(distances, Integer.MAX_VALUE);
+ distances[source] = 0;
+
+ for (int i = 0; i < n - 1; i++) {
+ for (int[] edge : edges) {
+ int u = edge[0];
+ int v = edge[1];
+ int w = edge[2];
+
+ if (distances[u] != Integer.MAX_VALUE && distances[u] + w < distances[v]) {
+ distances[v] = distances[u] + w;
+ }
+ }
+ }
+
+ for (int[] edge : edges) {
+ int u = edge[0];
+ int v = edge[1];
+ int w = edge[2];
+
+ if (distances[u] != Integer.MAX_VALUE && distances[u] + w < distances[v]) {
+ return new int[]{};
+ }
+ }
+
+ return distances;
+}
+`,xm=`import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Queue;
+
+
+public static List kahnTopologicalSort(Map> graph) {
+ List result = new ArrayList<>();
+ Map indegree = new HashMap<>();
+ Queue que = new LinkedList<>();
+
+ for (List vertices : graph.values()) {
+ for (int v : vertices) {
+ indegree.put(v, indegree.getOrDefault(v, 0) + 1);
+ }
+ }
+
+ for (Integer node : graph.keySet()) {
+ if (!indegree.containsKey(node)) {
+ que.offer(node);
+ }
+ }
+
+ while (!que.isEmpty()) {
+ int node = que.poll();
+ result.add(node);
+
+ if (graph.containsKey(node)) {
+ for (int neighbor : graph.get(node)) {
+ indegree.put(neighbor, indegree.get(neighbor) - 1);
+
+ if (indegree.get(neighbor) == 0) {
+ que.offer(neighbor);
+ }
+ }
+ }
+ }
+
+ if (result.size() != graph.size()) {
+ return new ArrayList<>();
+ }
+
+ return result;
+}
+`,_m=`import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+
+public List kruskalMST(int n, List edges) {
+ List mst = new ArrayList<>();
+ UnionFind uf = new UnionFind(n);
+ Collections.sort(edges, (a, b) -> Integer.compare(a[0], b[0]));
+
+ for (int[] edge : edges) {
+ int weight = edge[0];
+ int u = edge[1];
+ int v = edge[2];
+
+ if (!uf.connected(u, v)) {
+ uf.union(u, v);
+ mst.add(edge);
+ }
+ }
+
+ return mst;
+}
+`,bm=`import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.PriorityQueue;
+
+
+public List primMST(int n, List edges) {
+ List mst = new ArrayList<>();
+ UnionFind uf = new UnionFind(n);
+ PriorityQueue pq = new PriorityQueue<>(Comparator.comparingInt(edge -> edge[0]));
+
+ for (int[] edge : edges) {
+ pq.offer(edge);
+ }
+
+ while (!pq.isEmpty()) {
+ int[] edge = pq.poll();
+ int w = edge[0];
+ int u = edge[1];
+ int v = edge[2];
+
+ if (!uf.connected(u, v)) {
+ uf.union(u, v);
+ mst.add(edge);
+ }
+ }
+
+ return mst;
+}
+`,wm=`#include
+#include
+
+using namespace std;
+
+
+unordered_set seen;
+
+int fn(vector>& graph) {
+ seen.insert(START_NODE);
+ return dfs(START_NODE, graph);
+}
+
+int dfs(int node, vector>& graph) {
+ int ans = 0;
+ // TODO: logic
+ for (int neighbor: graph[node]) {
+ if (seen.find(neighbor) == seen.end()) {
+ seen.insert(neighbor);
+ ans += dfs(neighbor, graph);
+ }
+ }
+
+ return ans;
+}
+`,Sm=`#include
+#include
+#include
+
+using namespace std;
+
+
+int fn(vector>& graph) {
+ stack stack;
+ unordered_set seen;
+ stack.push(START_NODE);
+ seen.insert(START_NODE);
+ int ans = 0;
+
+ while (!stack.empty()) {
+ int node = stack.top();
+ stack.pop();
+ // TODO: logic
+ for (int neighbor: graph[node]) {
+ if (seen.find(neighbor) == seen.end()) {
+ seen.insert(neighbor);
+ stack.push(neighbor);
+ }
+ }
+ }
+}
+`,Tm=`#include
+#include
+#include
+
+using namespace std;
+
+
+int fn(vector>& graph) {
+ queue que;
+ unordered_set seen;
+ que.push(START_NODE);
+ seen.insert(START_NODE);
+ int ans = 0;
+
+ while (!que.empty()) {
+ int node = que.front();
+ que.pop();
+ // TODO: logic
+ for (int neighbor: graph[node]) {
+ if (seen.find(neighbor) == seen.end()) {
+ seen.insert(neighbor);
+ que.push(neighbor);
+ }
+ }
+ }
+}
+`,jm=`#include
+#include
+#include
+#include
+
+using namespace std;
+
+
+vector dijkstra(vector>>& graph, int source) {
+ int n = graph.size();
+ vector distances(n, INT_MAX);
+ distances[source] = 0;
+
+ priority_queue, vector>, greater>> heap;
+ heap.push({0, source});
+
+ while (!heap.empty()) {
+ int currDist = heap.top().first;
+ int node = heap.top().second;
+ heap.pop();
+
+ if (currDist > distances[node]) {
+ continue;
+ }
+
+ for (pair edge : graph[node]) {
+ int neighbor = edge.first;
+ int weight = edge.second;
+ int dist = currDist + weight;
+
+ if (dist < distances[neighbor]) {
+ distances[neighbor] = dist;
+ heap.push({dist, neighbor});
+ }
+ }
+ }
+
+ return distances;
+}
+`,km=`#include
+#include
+#include
+
+using namespace std;
+
+
+vector bellman_ford(int n, vector, int>>& edges, int source) {
+ vector distances(n, numeric_limits::max());
+ distances[source] = 0;
+
+ for (int i = 0; i < n - 1; ++i) {
+ for (const auto& edge : edges) {
+ int u = edge.first.first;
+ int v = edge.first.second;
+ int w = edge.second;
+
+ if (distances[u] != numeric_limits::max() && distances[u] + w < distances[v]) {
+ distances[v] = distances[u] + w;
+ }
+ }
+ }
+
+ for (const auto& edge : edges) {
+ int u = edge.first.first;
+ int v = edge.first.second;
+ int w = edge.second;
+
+ if (distances[u] != numeric_limits::max() && distances[u] + w < distances[v]) {
+ return vector();
+ }
+ }
+
+ return distances;
+}
+`,Em=`#include
+#include
+#include
+
+using namespace std;
+
+
+vector kahn_topological_sort(unordered_map>& graph) {
+ vector result;
+ unordered_map indegree;
+
+ for (auto& [node, neighbors] : graph) {
+ for (int neighbor : neighbors) {
+ indegree[neighbor]++;
+ }
+ }
+
+ queue que;
+
+ for (auto& [node, _] : graph) {
+ if (indegree[node] == 0) {
+ que.push(node);
+ }
+ }
+
+ while (!que.empty()) {
+ int node = que.front();
+ que.pop();
+ result.push_back(node);
+
+ for (int neighbor : graph[node]) {
+ indegree[neighbor]--;
+ if (indegree[neighbor] == 0) {
+ que.push(neighbor);
+ }
+ }
+ }
+
+ return (result.size() == graph.size()) ? result : vector();
+}
+`,Nm=`#include
+#include
+
+using namespace std;
+
+
+vector> kruskal_mst(int n, vector>& edges) {
+ vector> mst;
+ UnionFind uf(n);
+ sort(edges.begin(), edges.end());
+
+ for (auto& [w, u, v] : edges) {
+ if (!uf.connected(u, v)) {
+ uf.unionNodes(u, v);
+ mst.emplace_back(w, u, v);
+ }
+ }
+
+ return mst;
+}
+`,Om=`#include
+#include
+#include
+
+using namespace std;
+
+
+vector> prim_mst(int n, vector>& edges) {
+ vector> mst;
+ UnionFind uf(n);
+ make_heap(edges.begin(), edges.end());
+
+ while (!edges.empty()) {
+ auto [w, u, v] = edges.front();
+ pop_heap(edges.begin(), edges.end());
+ edges.pop_back();
+
+ if (!uf.connected(u, v)) {
+ uf.unionNodes(u, v);
+ mst.emplace_back(w, u, v);
+ }
+ }
+
+ return mst;
+}
+`,Am=`require 'set'
+
+def fn(graph)
+ seen = Set.new([START_NODE])
+
+ dfs = lambda do |node|
+ ans = 0
+ # TODO: logic
+ graph[node].each do |neighbor|
+ unless seen.include?(neighbor)
+ seen.add(neighbor)
+ ans += dfs.call(neighbor)
+ end
+ end
+ ans
+ end
+
+ dfs.call(START_NODE)
+end
+`,Cm=`require 'set'
+
+def fn(graph)
+ stack = [START_NODE]
+ seen = Set.new([START_NODE])
+ ans = 0
+
+ until stack.empty?
+ node = stack.pop
+ # TODO: logic
+ graph[node].each do |neighbor|
+ unless seen.include?(neighbor)
+ seen.add(neighbor)
+ stack << neighbor
+ end
+ end
+ end
+
+ ans
+end
+`,Lm=`require 'set'
+
+def fn(graph)
+ queue = [START_NODE]
+ seen = Set.new([START_NODE])
+ ans = 0
+
+ until queue.empty?
+ node = queue.shift
+ # TODO: logic
+ graph[node].each do |neighbor|
+ unless seen.include?(neighbor)
+ seen.add(neighbor)
+ queue << neighbor
+ end
+ end
+ end
+
+ ans
+end
+`,Rm=`require 'priority_queue'
+
+def dijkstras(graph, source)
+ n = graph.size
+ distances = Array.new(n, Float::INFINITY)
+
+ distances[source] = 0
+
+ heap = PriorityQueue.new
+ heap[source] = 0
+
+ until heap.empty?
+ node, curr_dist = heap.delete_min
+ next if curr_dist > distances[node]
+
+ graph[node].each do |neighbor, weight|
+ dist = curr_dist + weight
+ if dist < distances[neighbor]
+ distances[neighbor] = dist
+ heap[neighbor] = dist
+ end
+ end
+ end
+
+ distances
+end
+`,Pm=`def bellman_ford(n, edges, source)
+ distances = Array.new(n, Float::INFINITY)
+ distances[source] = 0
+
+ (n - 1).times do
+ edges.each do |u, v, w|
+ if distances[u] != Float::INFINITY && distances[u] + w < distances[v]
+ distances[v] = distances[u] + w
+ end
+ end
+ end
+
+ edges.each do |u, v, w|
+ if distances[u] != Float::INFINITY && distances[u] + w < distances[v]
+ return []
+ end
+ end
+
+ distances
+end
+`,Mm=`def kahn_topological_sort(graph)
+ result = []
+ indegree = Hash.new(0)
+
+ graph.each_value do |vertices|
+ vertices.each do |v|
+ indegree[v] += 1
+ end
+ end
+
+ queue = graph.keys.select { |node| indegree[node] == 0 }
+
+ until queue.empty?
+ node = queue.shift
+ result << node
+
+ graph[node].each do |neighbor|
+ indegree[neighbor] -= 1
+ queue << neighbor if indegree[neighbor] == 0
+ end
+ end
+
+ result.size == graph.size ? result : []
+end
+`,Im=`def kruskal_mst(n, edges)
+ mst = []
+ uf = UnionFind.new(n)
+ edges.sort.each do |w, u, v|
+ unless uf.connected(u, v)
+ uf.union(u, v)
+ mst << [w, u, v]
+ end
+ end
+
+ mst
+end
+`,Dm=`def prim_mst(n, edges)
+ mst = []
+ uf = UnionFind.new(n)
+ edges.sort.each do |w, u, v|
+ unless uf.connected(u, v)
+ uf.union(u, v)
+ mst << [w, u, v]
+ end
+ end
+
+ mst
+end
+`;function zm(){return r.jsxs("div",{className:Zn.container,children:[r.jsx("h2",{className:Zn.sectionHeader,children:"Graph"}),r.jsx("section",{id:"graph-dfs-recursive",children:r.jsxs(s,{title:"DFS (recursive)",children:[r.jsx(s.Tab,{code:Xg,language:"python"}),r.jsx(s.Tab,{code:om,language:"javascript"}),r.jsx(s.Tab,{code:hm,language:"java"}),r.jsx(s.Tab,{code:wm,language:"cpp"}),r.jsx(s.Tab,{code:Am,language:"ruby"})]})}),r.jsx("section",{id:"graph-dfs-iterative",children:r.jsxs(s,{title:"DFS (iterative)",children:[r.jsx(s.Tab,{code:Zg,language:"python"}),r.jsx(s.Tab,{code:sm,language:"javascript"}),r.jsx(s.Tab,{code:gm,language:"java"}),r.jsx(s.Tab,{code:Sm,language:"cpp"}),r.jsx(s.Tab,{code:Cm,language:"ruby"})]})}),r.jsx("section",{id:"graph-bfs",children:r.jsxs(s,{title:"BFS",children:[r.jsx(s.Tab,{code:nm,language:"python"}),r.jsx(s.Tab,{code:lm,language:"javascript"}),r.jsx(s.Tab,{code:mm,language:"java"}),r.jsx(s.Tab,{code:Tm,language:"cpp"}),r.jsx(s.Tab,{code:Lm,language:"ruby"})]})}),r.jsx("section",{id:"graph-dijkstra",children:r.jsxs(s,{title:"Dijkstra (shortest path)",children:[r.jsx(s.Tab,{code:em,language:"python"}),r.jsx(s.Tab,{code:um,language:"javascript"}),r.jsx(s.Tab,{code:vm,language:"java"}),r.jsx(s.Tab,{code:jm,language:"cpp"}),r.jsx(s.Tab,{code:Rm,language:"ruby"})]})}),r.jsx("section",{id:"graph-bellman-ford",children:r.jsxs(s,{title:"Bellman-Ford (shortest path)",children:[r.jsx(s.Tab,{code:tm,language:"python"}),r.jsx(s.Tab,{code:cm,language:"javascript"}),r.jsx(s.Tab,{code:ym,language:"java"}),r.jsx(s.Tab,{code:km,language:"cpp"}),r.jsx(s.Tab,{code:Pm,language:"ruby"})]})}),r.jsx("section",{id:"graph-kahn",children:r.jsxs(s,{title:"Kahn (topological sort)",children:[r.jsx(s.Tab,{code:rm,language:"python"}),r.jsx(s.Tab,{code:dm,language:"javascript"}),r.jsx(s.Tab,{code:xm,language:"java"}),r.jsx(s.Tab,{code:Em,language:"cpp"}),r.jsx(s.Tab,{code:Mm,language:"ruby"})]})}),r.jsx("section",{id:"graph-kruskal",children:r.jsxs(s,{title:"Kruskal (mst)",children:[r.jsx(s.Tab,{code:im,language:"python"}),r.jsx(s.Tab,{code:fm,language:"javascript"}),r.jsx(s.Tab,{code:_m,language:"java"}),r.jsx(s.Tab,{code:Nm,language:"cpp"}),r.jsx(s.Tab,{code:Im,language:"ruby"})]})}),r.jsx("section",{id:"graph-prim",children:r.jsxs(s,{title:"Prim (mst)",children:[r.jsx(s.Tab,{code:am,language:"python"}),r.jsx(s.Tab,{code:pm,language:"javascript"}),r.jsx(s.Tab,{code:bm,language:"java"}),r.jsx(s.Tab,{code:Om,language:"cpp"}),r.jsx(s.Tab,{code:Dm,language:"ruby"})]})})]})}const Bm=`from heapq import heappop, heappush
+
+
+def fn(arr, k):
+ heap = []
+
+ for num in arr:
+ # TODO: logic to push onto heap according to problem's criteria
+ heappush(heap, (CRITERIA, num))
+
+ if len(heap) > k:
+ heappop(heap)
+
+ return [num for num in heap]
+`,Fm=`/*
+ JavaScript lacks built-in support for heaps.
+ Try using a language that doesn't hate you, like Python.
+*/
+`,Um=`import java.util.PriorityQueue;
+
+
+public int[] fn(int[] arr, int k) {
+ PriorityQueue heap = new PriorityQueue<>(CRITERIA);
+
+ for (int num: arr) {
+ // TODO: logic to push onto heap according to problem's criteria
+ heap.add(num);
+
+ if (heap.size() > k) {
+ heap.remove();
+ }
+ }
+
+ int[] ans = new int[k];
+
+ for (int i = 0; i < k; i++) {
+ ans[i] = heap.remove();
+ }
+
+ return ans;
+}
+`,Hm=`#include
+#include
+
+using namespace std;
+
+
+vector fn(vector& arr, int k) {
+ priority_queue, greater> min_heap;
+ vector result;
+
+ for (int num : arr) {
+ // TODO: logic to push onto heap according to problem's criteria
+ min_heap.push(num);
+
+ if (min_heap.size() > k) {
+ min_heap.pop();
+ }
+ }
+
+ while (!min_heap.empty()) {
+ result.push_back(min_heap.top());
+ min_heap.pop();
+ }
+
+ return result;
+}
+`,Wm=`def fn(arr, k)
+ heap = []
+
+ arr.each do |num|
+ # TODO: logic to push onto heap according to problem's criteria
+ heap.push([CRITERIA, num])
+
+ if heap.size > k
+ # TODO: pop the top element from heap
+ heap.pop
+ end
+ end
+
+ heap.map { |item| item[1] }
+end
+`;function Vm(){return r.jsxs("div",{className:Zn.container,children:[r.jsx("h2",{className:Zn.sectionHeader,children:"Heap"}),r.jsx("section",{id:"heap-find-top-k-elements",children:r.jsxs(s,{title:"find top k elements",children:[r.jsx(s.Tab,{code:Bm,language:"python"}),r.jsx(s.Tab,{code:Fm,language:"javascript"}),r.jsx(s.Tab,{code:Um,language:"java"}),r.jsx(s.Tab,{code:Hm,language:"cpp"}),r.jsx(s.Tab,{code:Wm,language:"ruby"})]})})]})}const $m=`def fn(arr, target):
+ left = 0
+ right = len(arr) - 1
+
+ while left <= right:
+ mid = (left + right) // 2
+
+ if arr[mid] == target:
+ # TODO: logic
+ return
+ if arr[mid] > target:
+ right = mid - 1
+ else:
+ left = mid + 1
+
+ return left
+`,Km=`def fn(arr, target):
+ left = 0
+ right = len(arr)
+
+ while left < right:
+ mid = (left + right) // 2
+
+ if arr[mid] >= target:
+ right = mid
+ else:
+ left = mid + 1
+
+ return left
+`,Gm=`def fn(arr, target):
+ left = 0
+ right = len(arr)
+
+ while left < right:
+ mid = (left + right) // 2
+
+ if arr[mid] > target:
+ right = mid
+ else:
+ left = mid + 1
+
+ return left
+`,Jm=`def fn(arr):
+ def check(x):
+ return BOOLEAN
+
+ left = MINIMUM_POSSIBLE_ANSWER
+ right = MAXIMUM_POSSIBLE_ANSWER
+
+ while left <= right:
+ mid = (left + right) // 2
+
+ if check(mid):
+ right = mid - 1
+ else:
+ left = mid + 1
+
+ return left
+`,Ym=`def fn(arr):
+ def check(x):
+ return BOOLEAN
+
+ left = MINIMUM_POSSIBLE_ANSWER
+ right = MAXIMUM_POSSIBLE_ANSWER
+
+ while left <= right:
+ mid = (left + right) // 2
+
+ if check(mid):
+ left = mid + 1
+ else:
+ right = mid - 1
+
+ return right
+`,qm=`const fn = (arr, target) => {
+ let left = 0
+ let right = arr.length - 1
+
+ while (left <= right) {
+ let mid = Math.floor((left + right) / 2)
+
+ if (arr[mid] == target) {
+ // TODO: logic
+ return
+ }
+
+ if (arr[mid] > target) {
+ right = mid - 1
+ } else {
+ left = mid + 1
+ }
+ }
+
+ return left
+}
+`,Qm=`const fn = (arr, target) => {
+ let left = 0
+ let right = arr.length
+
+ while (left < right) {
+ let mid = Math.floor((left + right) / 2)
+
+ if (arr[mid] >= target) {
+ right = mid
+ } else {
+ left = mid + 1
+ }
+ }
+
+ return left
+}
+`,Xm=`const fn = (arr, target) => {
+ let left = 0
+ let right = arr.length
+
+ while (left < right) {
+ let mid = Math.floor((left + right) / 2)
+
+ if (arr[mid] > target) {
+ right = mid
+ } else {
+ left = mid + 1
+ }
+ }
+
+ return left
+}
+`,Zm=`const fn = (arr) => {
+ const check = (x) => {
+ return BOOLEAN
+ }
+
+ let left = MINIMUM_POSSIBLE_ANSWER
+ let right = MAXMIMUM_POSSIBLE_ANSWER
+
+ while (left <= right) {
+ let mid = Math.floor((left + right) / 2)
+
+ if (check(mid)) {
+ right = mid - 1
+ } else {
+ left = mid + 1
+ }
+ }
+
+ return left
+}
+`,nv=`const fn = (arr) => {
+ const check = (x) => {
+ return BOOLEAN
+ }
+
+ let left = MINIMUM_POSSIBLE_ANSWER
+ let right = MAXMIMUM_POSSIBLE_ANSWER
+
+ while (left <= right) {
+ let mid = Math.floor((left + right) / 2)
+
+ if (check(mid)) {
+ left = mid + 1
+ } else {
+ right = mid - 1
+ }
+ }
+
+ return right
+}
+`,ev=`public int fn(int[] arr, int target) {
+ int left = 0;
+ int right = arr.length - 1;
+
+ while (left <= right) {
+ int mid = left + (right - left) / 2;
+
+ if (arr[mid] == target) {
+ // TODO: logic
+ return mid;
+ }
+ if (arr[mid] > target) {
+ right = mid - 1;
+ } else {
+ left = mid + 1;
+ }
+ }
+
+ return left;
+}
+`,tv=`public int fn(int[] arr, int target) {
+ int left = 0;
+ int right = arr.length;
+
+ while (left < right) {
+ int mid = left + (right - left) / 2;
+
+ if (arr[mid] >= target) {
+ right = mid;
+ } else {
+ left = mid + 1;
+ }
+ }
+
+ return left;
+}
+`,rv=`public int fn(int[] arr, int target) {
+ int left = 0;
+ int right = arr.length;
+
+ while (left < right) {
+ int mid = left + (right - left) / 2;
+
+ if (arr[mid] > target) {
+ right = mid;
+ } else {
+ left = mid + 1;
+ }
+ }
+
+ return left;
+}
+`,iv=`public int fn(int[] arr) {
+ int left = MINIMUM_POSSIBLE_ANSWER;
+ int right = MAXIMUM_POSSIBLE_ANSWER;
+
+ while (left <= right) {
+ int mid = left + (right - left) / 2;
+
+ if (check(mid)) {
+ right = mid - 1;
+ } else {
+ left = mid + 1;
+ }
+ }
+
+ return left;
+}
+
+public boolean check(int x) {
+ return BOOLEAN
+}
+`,av=`public int fn(int[] arr) {
+ int left = MINIMUM_POSSIBLE_ANSWER;
+ int right = MAXIMUM_POSSIBLE_ANSWER;
+
+ while (left <= right) {
+ int mid = left + (right - left) / 2;
+
+ if (check(mid)) {
+ left = mid + 1;
+ } else {
+ right = mid - 1;
+ }
+ }
+
+ return right;
+}
+
+public boolean check(int x) {
+ return BOOLEAN
+}
+`,ov=`#include
+
+using namespace std;
+
+
+int fn(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) {
+ // TODO: logic
+ return mid;
+ }
+ if (arr[mid] > target) {
+ right = mid - 1;
+ } else {
+ left = mid + 1;
+ }
+ }
+
+ return left;
+}
+`,sv=`#include
+
+using namespace std;
+
+
+int fn(vector& arr, int target) {
+ int left = 0;
+ int right = arr.size();
+
+ while (left < right) {
+ int mid = left + (right - left) / 2;
+
+ if (arr[mid] >= target) {
+ right = mid;
+ } else {
+ left = mid + 1;
+ }
+ }
+
+ return left;
+}
+`,lv=`#include
+
+using namespace std;
+
+
+int fn(vector& arr, int target) {
+ int left = 0;
+ int right = arr.size();
+
+ while (left < right) {
+ int mid = left + (right - left) / 2;
+
+ if (arr[mid] > target) {
+ right = mid;
+ } else {
+ left = mid + 1;
+ }
+ }
+
+ return left;
+}
+`,uv=`#include
+
+using namespace std;
+
+
+bool check(int x) {
+ return BOOLEAN;
+}
+
+int fn(vector& arr) {
+ int left = MINIMUM_POSSIBLE_ANSWER;
+ int right = MAXIMUM_POSSIBLE_ANSWER;
+
+ while (left <= right) {
+ int mid = left + (right - left) / 2;
+
+ if (check(mid)) {
+ right = mid - 1;
+ } else {
+ left = mid + 1;
+ }
+ }
+
+ return left;
+}
+`,cv=`#include
+
+using namespace std;
+
+
+bool check(int x) {
+ return BOOLEAN;
+}
+
+int fn(vector& arr) {
+ int left = MINIMUM_POSSIBLE_ANSWER;
+ int right = MAXIMUM_POSSIBLE_ANSWER;
+
+ while (left <= right) {
+ int mid = left + (right - left) / 2;
+
+ if (check(mid)) {
+ left = mid + 1;
+ } else {
+ right = mid - 1;
+ }
+ }
+
+ return right;
+}
+`,dv=`def fn(arr, target)
+ left = 0
+ right = arr.length - 1
+
+ while left <= right
+ mid = (left + right) / 2
+
+ if arr[mid] == target
+ # TODO: logic
+ return
+ elsif arr[mid] > target
+ right = mid - 1
+ else
+ left = mid + 1
+ end
+ end
+
+ left
+end
+`,fv=`def fn(arr, target)
+ left = 0
+ right = len(arr)
+
+ while left < right
+ mid = (left + right) / 2
+
+ if arr[mid] >= target
+ right = mid
+ else
+ left = mid + 1
+ end
+ end
+
+ left
+end
+`,pv=`def fn(arr, target)
+ left = 0
+ right = len(arr)
+
+ while left < right
+ mid = (left + right) / 2
+
+ if arr[mid] > target
+ right = mid
+ else
+ left = mid + 1
+ end
+ end
+
+ left
+end
+`,hv=`def fn(arr)
+ left = MINIMUM_POSSIBLE_ANSWER
+ right = MAXIMUM_POSSIBLE_ANSWER
+
+ while left <= right
+ mid = (left + right) / 2 # int div
+
+ if check(mid)
+ right = mid - 1
+ else
+ left = mid + 1
+ end
+ end
+
+ left
+end
+
+def check(x)
+ BOOLEAN
+end`,gv=`def fn(arr)
+ left = MINIMUM_POSSIBLE_ANSWER
+ right = MAXIMUM_POSSIBLE_ANSWER
+
+ while left <= right
+ mid = (left + right) / 2 # integer division
+
+ if check(mid)
+ left = mid + 1
+ else
+ right = mid - 1
+ end
+
+ end
+
+ right
+end
+
+def check(x)
+ BOOLEAN
+end
+`;function mv(){return r.jsxs("div",{className:Zn.container,children:[r.jsx("h2",{className:Zn.sectionHeader,children:"Binary Search"}),r.jsx("section",{id:"binarysearch-binary-search",children:r.jsxs(s,{title:"binary search",children:[r.jsx(s.Tab,{code:$m,language:"python"}),r.jsx(s.Tab,{code:qm,language:"javascript"}),r.jsx(s.Tab,{code:ev,language:"java"}),r.jsx(s.Tab,{code:ov,language:"cpp"}),r.jsx(s.Tab,{code:dv,language:"ruby"})]})}),r.jsx("section",{id:"binarysearch-duplicate-elements-left-insertion",children:r.jsxs(s,{title:"duplicate elements, left-most insertion point",children:[r.jsx(s.Tab,{code:Km,language:"python"}),r.jsx(s.Tab,{code:Qm,language:"javascript"}),r.jsx(s.Tab,{code:tv,language:"java"}),r.jsx(s.Tab,{code:sv,language:"cpp"}),r.jsx(s.Tab,{code:fv,language:"ruby"})]})}),r.jsx("section",{id:"binarysearch-duplicate-elements-right-insertion",children:r.jsxs(s,{title:"duplicate elements, right-most insertion point",children:[r.jsx(s.Tab,{code:Gm,language:"python"}),r.jsx(s.Tab,{code:Xm,language:"javascript"}),r.jsx(s.Tab,{code:rv,language:"java"}),r.jsx(s.Tab,{code:lv,language:"cpp"}),r.jsx(s.Tab,{code:pv,language:"ruby"})]})}),r.jsx("section",{id:"binarysearch-greedy-minimum",children:r.jsxs(s,{title:"greedy (minimum)",children:[r.jsx(s.Tab,{code:Jm,language:"python"}),r.jsx(s.Tab,{code:Zm,language:"javascript"}),r.jsx(s.Tab,{code:iv,language:"java"}),r.jsx(s.Tab,{code:uv,language:"cpp"}),r.jsx(s.Tab,{code:hv,language:"ruby"})]})}),r.jsx("section",{id:"binarysearch-greedy-maximum",children:r.jsxs(s,{title:"greedy (maximum)",children:[r.jsx(s.Tab,{code:Ym,language:"python"}),r.jsx(s.Tab,{code:nv,language:"javascript"}),r.jsx(s.Tab,{code:av,language:"java"}),r.jsx(s.Tab,{code:cv,language:"cpp"}),r.jsx(s.Tab,{code:gv,language:"ruby"})]})})]})}const vv=`def backtrack(curr, OTHER_ARGUMENTS...):
+ if (BASE_CASE):
+ # TODO: modify answer
+ return
+
+ ans = 0
+
+ for (ITERATE_OVER_INPUT):
+ # TODO: modify current state
+ ans += backtrack(curr, OTHER_ARGUMENTS...)
+ # TODO: undo modification of current state
+
+ return ans
+`,yv=`const backtrack = (curr, OTHER_ARGUMENTS...) => {
+ if (BASE_CASE) {
+ // TODO: modify answer
+ return
+ }
+
+ let ans = 0
+
+ for (ITERATE_OVER_INPUT) {
+ // TODO: modify current state
+ ans += backtrack(curr, OTHER_ARGUMENTS...)
+ // TODO: undo modification of current state
+ }
+
+ return ans
+}
+`,xv=`public int backtrack(STATE curr, OTHER_ARGUMENTS...) {
+ if (BASE_CASE) {
+ // TODO: modify answer
+ return 0;
+ }
+
+ int ans = 0;
+
+ for (ITERATE_OVER_INPUT) {
+ // TODO: modify current state
+ ans += backtrack(curr, OTHER_ARGUMENTS...);
+ // TODO: undo modification of current state
+ }
+
+ return ans;
+}
+`,_v=`int backtrack(STATE curr, OTHER_ARGUMENTS...) {
+ if (BASE_CASE) {
+ // TODO: modify answer
+ return 0;
+ }
+
+ int ans = 0;
+
+ for (ITERATE_OVER_INPUT) {
+ // TODO: modify current state
+ ans += backtrack(curr, OTHER_ARGUMENTS...);
+ // TODO: undo modification of current state
+ }
+
+ return ans;
+}
+`,bv=`def backtrack(curr, OTHER_ARGUMENTS...)
+ if(BASE_CASE)
+ # TODO: modify answer
+ return
+ end
+
+ ans = 0
+
+ INPUTS.each do |i|
+ # TODO: modify current state
+ ans += backtrack(curr, OTHER_ARGUMENTS...)
+ # TODO: undo modification of current state
+ end
+
+ ans
+end
+`;function wv(){return r.jsxs("div",{className:Zn.container,children:[r.jsx("h2",{className:Zn.sectionHeader,children:"Backtracking"}),r.jsx("section",{id:"backtracking-backtracking",children:r.jsxs(s,{title:"backtracking",children:[r.jsx(s.Tab,{code:vv,language:"python"}),r.jsx(s.Tab,{code:yv,language:"javascript"}),r.jsx(s.Tab,{code:xv,language:"java"}),r.jsx(s.Tab,{code:_v,language:"cpp"}),r.jsx(s.Tab,{code:bv,language:"ruby"})]})})]})}const Sv=`def fn(arr):
+ @cache
+ def dp(STATE):
+ if BASE_CASE:
+ return 0
+ return RECURRENCE_RELATION(STATE)
+
+ return dp(STATE_FOR_WHOLE_INPUT)
+`,Tv=`def fn(arr):
+ if BASE_CASE:
+ return 0
+
+ dp = [BASE_CASE] * (STATE_FOR_WHOLE_INPUT + 1)
+
+ for STATE in range(SMALLEST_SUBPROBLEM, STATE_FOR_WHOLE_INPUT + 1):
+ if BASE_CASE:
+ dp[STATE] = BASE_CASE
+ else:
+ dp[STATE] = RECURRENCE_RELATION(STATE)
+
+ return dp[STATE_FOR_WHOLE_INPUT]
+`,jv=`def kadane(arr: list[int]) -> int:
+ curr_sub = max_sub = arr[0]
+
+ for num in arr[1:]:
+ curr_sub = max(curr_sub + num, num)
+ max_sub = max(max_sub, curr_sub)
+
+ return max_sub
+`,kv=`const fn = (arr) => {
+ const dp = (STATE) => {
+ if (BASE_CASE) {
+ return 0
+ }
+
+ if (memo[STATE] != -1) {
+ return memo[STATE]
+ }
+
+ let ans = RECURRENCE_RELATION(STATE)
+ memo[STATE] = ans
+
+ return ans
+ }
+
+ let memo = ARRAY_SIZED_ACCORDING_TO_STATE
+
+ return dp(STATE_FOR_WHOLE_INPUT)
+}
+`,Ev=`const fn = (arr) => {
+ const dp = new Array(STATE_FOR_WHOLE_INPUT + 1).fill(BASE_CASE)
+
+ for (let state = SMALLEST_SUBPROBLEM; state <= STATE_FOR_WHOLE_INPUT; state++) {
+ if (BASE_CASE) {
+ dp[state] = BASE_CASE
+ } else {
+ dp[state] = RECURRENCE_RELATION(state)
+ }
+ }
+
+ return dp[STATE_FOR_WHOLE_INPUT]
+}
+`,Nv=`const kadane = (arr) => {
+ let currSub = arr[0]
+ let maxSub = arr[0]
+
+ for (let i = 1; i < arr.length; i++) {
+ currSub = Math.max(currSub + arr[i], arr[i])
+ maxSub = Math.max(maxSub, currSub)
+ }
+
+ return maxSub
+}
+`,Ov=`import java.util.HashMap;
+import java.util.Map;
+
+
+Map memo = new HashMap<>();
+
+public int fn(int[] arr) {
+ return dp(STATE_FOR_WHOLE_INPUT, arr);
+}
+
+public int dp(STATE, int[] arr) {
+ if (BASE_CASE) {
+ return 0;
+ }
+
+ if (memo.contains(STATE)) {
+ return memo.get(STATE);
+ }
+
+ int ans = RECURRENCE_RELATION(STATE);
+ memo.put(STATE, ans);
+ return ans;
+}
+`,Av=`import java.util.Arrays;
+
+
+public int fn(int[] arr) {
+ if (BASE_CASE) {
+ return 0;
+ }
+
+ int[] dp = new int[STATE_FOR_WHOLE_INPUT + 1];
+ Arrays.fill(dp, BASE_CASE);
+
+ for (int STATE = SMALLEST_SUBPROBLEM; STATE <= STATE_FOR_WHOLE_INPUT; STATE++) {
+ if (BASE_CASE) {
+ dp[STATE] = BASE_CASE;
+ } else {
+ dp[STATE] = RECURRENCE_RELATION(STATE);
+ }
+ }
+
+ return dp[STATE_FOR_WHOLE_INPUT];
+}
+`,Cv=`public int kadane(int[] arr) {
+ int currSub = arr[0];
+ int maxSub = arr[0];
+
+ for (int i = 1; i < arr.length; i++) {
+ currSub = Math.max(currSub + arr[i], arr[i]);
+ maxSub = Math.max(maxSub, currSub);
+ }
+
+ return maxSub;
+}
+`,Lv=`#include
+
+using namespace std;
+
+
+unordered_map memo;
+
+int fn(vector& arr) {
+ return dp(STATE_FOR_WHOLE_INPUT, arr);
+}
+
+int dp(STATE, vector& arr) {
+ if (BASE_CASE) {
+ return 0;
+ }
+
+ if (memo.find(STATE) != memo.end()) {
+ return memo[STATE];
+ }
+
+ int ans = RECURRENCE_RELATION(STATE);
+ memo[STATE] = ans;
+ return ans;
+}
+`,Rv=`#include
+#include
+
+using namespace std;
+
+
+int fn(int arr[], int size) {
+ if (BASE_CASE) {
+ return 0;
+ }
+
+ vector dp(STATE_FOR_WHOLE_INPUT + 1, BASE_CASE);
+
+ for (int state = SMALLEST_SUBPROBLEM; state <= STATE_FOR_WHOLE_INPUT; ++state) {
+ if (BASE_CASE) {
+ dp[state] = BASE_CASE;
+ } else {
+ dp[state] = RECURRENCE_RELATION(state);
+ }
+ }
+
+ return dp[STATE_FOR_WHOLE_INPUT];
+}
+`,Pv=`#include
+#include
+
+using namespace std;
+
+
+int kadane(vector& arr) {
+ int curr_sub = arr[0];
+ int max_sub = arr[0];
+
+ for (size_t i = 1; i < arr.size(); ++i) {
+ curr_sub = max(curr_sub + arr[i], arr[i]);
+ max_sub = max(max_sub, curr_sub);
+ }
+
+ return max_sub;
+}
+`,Mv=`def fn(arr)
+ cache = {}
+
+ dp = lambda do |state|
+ return 0 if BASE_CASE
+ return cache[state] if cache.key?(state)
+
+ cache[state] = RECURRENCE_RELATION(state)
+ end
+
+ dp.call(STATE_FOR_WHOLE_INPUT)
+end
+`,Iv=`def fn(arr)
+ if BASE_CASE
+ return 0
+ end
+
+ dp = Array.new(STATE_FOR_WHOLE_INPUT + 1, BASE_CASE)
+
+ (SMALLEST_SUBPROBLEM..STATE_FOR_WHOLE_INPUT).each do |state|
+ if BASE_CASE
+ dp[state] = BASE_CASE
+ else
+ dp[state] = RECURRENCE_RELATION(state)
+ end
+ end
+
+ dp[STATE_FOR_WHOLE_INPUT]
+end
+`,Dv=`def kadane(arr)
+ curr_sub = arr[0]
+ max_sub = arr[0]
+
+ arr[1..-1].each do |num|
+ curr_sub = [curr_sub + num, num].max
+ max_sub = [max_sub, curr_sub].max
+ end
+
+ max_sub
+end
+`;function zv(){return r.jsxs("div",{className:Zn.container,children:[r.jsx("h2",{className:Zn.sectionHeader,children:"Dynamic Programming"}),r.jsx("section",{id:"dp-top-down",children:r.jsxs(s,{title:"DP top-down",children:[r.jsx(s.Tab,{code:Sv,language:"python"}),r.jsx(s.Tab,{code:kv,language:"javascript"}),r.jsx(s.Tab,{code:Ov,language:"java"}),r.jsx(s.Tab,{code:Lv,language:"cpp"}),r.jsx(s.Tab,{code:Mv,language:"ruby"})]})}),r.jsx("section",{id:"dp-bottom-up",children:r.jsxs(s,{title:"DP bottom-up",children:[r.jsx(s.Tab,{code:Tv,language:"python"}),r.jsx(s.Tab,{code:Ev,language:"javascript"}),r.jsx(s.Tab,{code:Av,language:"java"}),r.jsx(s.Tab,{code:Rv,language:"cpp"}),r.jsx(s.Tab,{code:Iv,language:"ruby"})]})}),r.jsx("section",{id:"dp-kadane",children:r.jsxs(s,{title:"Kadane (max-sum subarray)",children:[r.jsx(s.Tab,{code:jv,language:"python"}),r.jsx(s.Tab,{code:Nv,language:"javascript"}),r.jsx(s.Tab,{code:Cv,language:"java"}),r.jsx(s.Tab,{code:Pv,language:"cpp"}),r.jsx(s.Tab,{code:Dv,language:"ruby"})]})})]})}const Bv=`def test_kth_bit(num: int, k: int) -> bool:
+ return num & (1 << k) != 0
+`,Fv=`def set_kth_bit(num: int, k: int) -> int:
+ return num | (1 << k)
+`,Uv=`def clear_kth_bit(num: int, k: int) -> int:
+ return num & ~(1 << k)
+`,Hv=`def toggle_kth_bit(num: int, k: int) -> int:
+ return num ^ (1 << k)
+`,Wv=`def get_rightmost_set_bit(num: int) -> int:
+ return num & -num
+`,Vv=`def count_set_bits(num: int) -> int:
+ return bin(num).count('1')
+`,$v=`def multiply_by_power_of_two(num: int, k: int) -> int:
+ return num << k
+`,Kv=`def divide_by_power_of_two(num: int, k: int) -> int:
+ return num >> k
+`,Gv=`def is_power_of_two(num: int) -> bool:
+ return (num & (num - 1)) == 0
+`,Jv=`def swap_variables(num1: int, num2: int) -> tuple:
+ num1 ^= num2
+ num2 ^= num1
+ num1 ^= num2
+ return num1, num2
+`,Yv=`const testKthBit = (num, k) => {
+ return num & (1 << k) !== 0
+}
+`,qv=`const setKthBit = (num, k) => {
+ return num | (1 << k)
+}
+`,Qv=`const clearKthBit = (num, k) => {
+ return num & ~(1 << k)
+}
+`,Xv=`const toggleKthBit = (num, k) => {
+ return num ^ (1 << k)
+}
+`,Zv=`const getRightmostSetBit = (num) => {
+ return num & -num
+}
+`,n1=`const countSetBits = (num) => {
+ return num.toString(2).split('1').length - 1
+}
+`,e1=`const multiplyByPowerOfTwo = (num, k) => {
+ return num << k
+}
+`,t1=`const divideByPowerOfTwo = (num, k) => {
+ return num >> k;
+}
+`,r1=`const isPowerOfTwo = (num) => {
+ return (num & (num - 1)) === 0
+}
+`,i1=`const swapVariables = (num1, num2) => {
+ num1 ^= num2
+ num2 ^= num1
+ num1 ^= num2
+ return [num1, num2]
+}
+`,a1=`public boolean testKthBit(int num, int k) {
+ return (num & (1 << k)) != 0;
+}
+`,o1=`public int setKthBit(int num, int k) {
+ return num | (1 << k);
+}
+`,s1=`public int clearKthBit(int num, int k) {
+ return num & ~(1 << k);
+}
+`,l1=`public int toggleKthBit(int num, int k) {
+ return num ^ (1 << k);
+}
+`,u1=`public int getRightmostSetBit(int num) {
+ return num & -num;
+}
+`,c1=`public int countSetBits(int num) {
+ int count = 0;
+
+ while (num > 0) {
+ count += num & 1;
+ num >>= 1;
+ }
+
+ return count;
+}
+`,d1=`public int multiplyByPowerOfTwo(int num, int k) {
+ return num << k;
+}
+`,f1=`public int divideByPowerOfTwo(int num, int k) {
+ return num >> k;
+}
+`,p1=`public boolean isPowerOfTwo(int num) {
+ return (num & (num - 1)) == 0;
+}
+`,h1=`public int[] swapVariables(int num1, int num2) {
+ num1 ^= num2;
+ num2 ^= num1;
+ num1 ^= num2;
+ return new int[] { num1, num2 };
+}
+`,g1=`bool test_kth_bit(int num, int k) {
+ return (num & (1 << k)) != 0;
+}
+`,m1=`int set_kth_bit(int num, int k) {
+ return num | (1 << k);
+}
+`,v1=`int clear_kth_bit(int num, int k) {
+ return num & ~(1 << k);
+}
+`,y1=`int toggle_kth_bit(int num, int k) {
+ return num ^ (1 << k);
+}
+`,x1=`int get_rightmost_set_bit(int num) {
+ return num & -num;
+}
+`,_1=`int count_set_bits(int num) {
+ int count = 0;
+
+ while (num) {
+ count += num & 1;
+ num >>= 1;
+ }
+
+ return count;
+}
+`,b1=`int multiply_by_power_of_two(int num, int k) {
+ return num << k;
+}
+`,w1=`int divide_by_power_of_two(int num, int k) {
+ return num >> k;
+}
+`,S1=`bool is_power_of_two(int num) {
+ return (num & (num - 1)) == 0;
+}
+`,T1=`#include
+
+using namespace std;
+
+
+tuple swap_variables(int num1, int num2) {
+ num1 ^= num2;
+ num2 ^= num1;
+ num1 ^= num2;
+ return std::make_tuple(num1, num2);
+}
+`,j1=`def test_kth_bit(num, k)
+ num & (1 << k) != 0
+end
+`,k1=`def set_kth_bit(num, k)
+ num | (1 << k)
+end
+`,E1=`def clear_kth_bit(num, k)
+ num & ~(1 << k)
+end
+`,N1=`def toggle_kth_bit(num, k)
+ num ^ (1 << k)
+end
+`,O1=`def get_rightmost_set_bit(num)
+ num & -num
+end
+`,A1=`def count_set_bits(num)
+ num.to_s(2).count('1')
+end
+`,C1=`def multiply_by_power_of_two(num, k)
+ num << k
+end
+`,L1=`def divide_by_power_of_two(num, k)
+ num >> k
+end
+`,R1=`def is_power_of_two(num)
+ (num & (num - 1)) == 0
+end
+`,P1=`# in-memory swaps
+# unnecessary for modern languages
+def swap_variables(num1, num2)
+ num1 ^= num2
+ num2 ^= num1
+ num1 ^= num2
+
+ return num1, num2
+end
+`;function M1(){return r.jsxs("div",{className:Zn.container,children:[r.jsx("h2",{className:Zn.sectionHeader,children:"Bit Manipulation"}),r.jsx("section",{id:"bitmanipulation-test-kth-bit",children:r.jsxs(s,{title:"test kth-bit",children:[r.jsx(s.Tab,{code:Bv,language:"python"}),r.jsx(s.Tab,{code:Yv,language:"javascript"}),r.jsx(s.Tab,{code:a1,language:"java"}),r.jsx(s.Tab,{code:g1,language:"cpp"}),r.jsx(s.Tab,{code:j1,language:"ruby"})]})}),r.jsx("section",{id:"bitmanipulation-set-kth-bit",children:r.jsxs(s,{title:"set kth bit",children:[r.jsx(s.Tab,{code:Fv,language:"python"}),r.jsx(s.Tab,{code:qv,language:"javascript"}),r.jsx(s.Tab,{code:o1,language:"java"}),r.jsx(s.Tab,{code:m1,language:"cpp"}),r.jsx(s.Tab,{code:k1,language:"ruby"})]})}),r.jsx("section",{id:"bitmanipulation-clear-kth-bit",children:r.jsxs(s,{title:"clear kth bit",children:[r.jsx(s.Tab,{code:Uv,language:"python"}),r.jsx(s.Tab,{code:Qv,language:"javascript"}),r.jsx(s.Tab,{code:s1,language:"java"}),r.jsx(s.Tab,{code:v1,language:"cpp"}),r.jsx(s.Tab,{code:E1,language:"ruby"})]})}),r.jsx("section",{id:"bitmanipulation-toggle-kth-bit",children:r.jsxs(s,{title:"toggle kth bit",children:[r.jsx(s.Tab,{code:Hv,language:"python"}),r.jsx(s.Tab,{code:Xv,language:"javascript"}),r.jsx(s.Tab,{code:l1,language:"java"}),r.jsx(s.Tab,{code:y1,language:"cpp"}),r.jsx(s.Tab,{code:N1,language:"ruby"})]})}),r.jsx("section",{id:"bitmanipulation-get-rightmost-bit",children:r.jsxs(s,{title:"get rightmost bit",children:[r.jsx(s.Tab,{code:Wv,language:"python"}),r.jsx(s.Tab,{code:Zv,language:"javascript"}),r.jsx(s.Tab,{code:u1,language:"java"}),r.jsx(s.Tab,{code:x1,language:"cpp"}),r.jsx(s.Tab,{code:O1,language:"ruby"})]})}),r.jsx("section",{id:"bitmanipulation-count-set-bits",children:r.jsxs(s,{title:"count set bits",children:[r.jsx(s.Tab,{code:Vv,language:"python"}),r.jsx(s.Tab,{code:n1,language:"javascript"}),r.jsx(s.Tab,{code:c1,language:"java"}),r.jsx(s.Tab,{code:_1,language:"cpp"}),r.jsx(s.Tab,{code:A1,language:"ruby"})]})}),r.jsx("section",{id:"bitmanipulation-multiply-power-of-two",children:r.jsxs(s,{title:"multiply by 2^k",children:[r.jsx(s.Tab,{code:$v,language:"python"}),r.jsx(s.Tab,{code:e1,language:"javascript"}),r.jsx(s.Tab,{code:d1,language:"java"}),r.jsx(s.Tab,{code:b1,language:"cpp"}),r.jsx(s.Tab,{code:C1,language:"ruby"})]})}),r.jsx("section",{id:"bitmanipulation-divide-power-of-two",children:r.jsxs(s,{title:"divide by 2^k",children:[r.jsx(s.Tab,{code:Kv,language:"python"}),r.jsx(s.Tab,{code:t1,language:"javascript"}),r.jsx(s.Tab,{code:f1,language:"java"}),r.jsx(s.Tab,{code:w1,language:"cpp"}),r.jsx(s.Tab,{code:L1,language:"ruby"})]})}),r.jsx("section",{id:"bitmanipulation-check-power-of-two",children:r.jsxs(s,{title:"check if number is power of 2",children:[r.jsx(s.Tab,{code:Gv,language:"python"}),r.jsx(s.Tab,{code:r1,language:"javascript"}),r.jsx(s.Tab,{code:p1,language:"java"}),r.jsx(s.Tab,{code:S1,language:"cpp"}),r.jsx(s.Tab,{code:R1,language:"ruby"})]})}),r.jsx("section",{id:"bitmanipulation-swap-variables",children:r.jsxs(s,{title:"swap two variables",children:[r.jsx(s.Tab,{code:Jv,language:"python"}),r.jsx(s.Tab,{code:i1,language:"javascript"}),r.jsx(s.Tab,{code:h1,language:"java"}),r.jsx(s.Tab,{code:T1,language:"cpp"}),r.jsx(s.Tab,{code:P1,language:"ruby"})]})})]})}const I1=`def fn(matrix: list[list[int]]):
+ r = len(matrix)
+ c = len(matrix[0])
+
+ create_matrix = [[0 for _ in range(c)] for _ in range(r)]
+ copy_matrix = [row[:] for row in matrix]
+`,D1=`def fn(matrix: list[list[int]]):
+ r = len(matrix)
+ c = len(matrix[0])
+
+ main_diagonal = [matrix[i][i] for i in range(min(r, c))]
+ anti_diagonal = [matrix[i][~i] for i in range(min(r, c))]
+`,z1=`def fn(matrix: list[list[int]]):
+ r = len(matrix)
+ c = len(matrix[0])
+
+ transpose_tuple = zip(*matrix)
+ transpose = [list(row) for row in transpose_tuple]
+ rotate_left = transpose[::-1]
+ rotate_right = [row[::-1] for row in transpose]
+`,B1=`const fn = (matrix) => {
+ const r = matrix.length;
+ const c = matrix[0].length;
+
+ const createMatrix = Array.from({ length: r }, () => Array(c).fill(0))
+ const copyMatrix = matrix.map(row => [...row])
+}
+`,F1=`const fn = (matrix) => {
+ const r = matrix.length
+ const c = matrix[0].length
+
+ const mainDiagonal = Array.from({ length: Math.min(r, c) }, (_, i) => matrix[i][i])
+ const antiDiagonal = Array.from({ length: Math.min(r, c) }, (_, i) => matrix[i][~i])
+}
+`,U1=`const fn = (matrix) => {
+ const r = matrix.length
+ const c = matrix[0].length
+
+ const transposeTuple = matrix[0].map((_, i) => matrix.map(row => row[i]))
+ const transpose = transposeTuple.map(row => [...row])
+ const rotateLeft = transpose.reverse()
+ const rotateRight = transpose.map(row => row.reverse())
+}
+`,H1=`import java.util.ArrayList;
+import java.util.List;
+
+
+public void fn(List> matrix) {
+ List> createMatrix = new ArrayList<>();
+ List> copyMatrix = new ArrayList<>();
+ int r = matrix.size();
+ int c = matrix.get(0).size();
+
+ for (int i = 0; i < r; i++) {
+ List row = new ArrayList<>();
+
+ for (int j = 0; j < c; j++) {
+ row.add(0);
+ }
+
+ createMatrix.add(row);
+ }
+
+ for (List row : matrix) {
+ copyMatrix.add(new ArrayList<>(row));
+ }
+}
+`,W1=`import java.util.ArrayList;
+import java.util.List;
+
+
+public void fn(List> matrix) {
+ List mainDiagonal = new ArrayList<>();
+ List antiDiagonal = new ArrayList<>();
+ int r = matrix.size();
+ int c = matrix.get(0).size();
+
+ for (int i = 0; i < Math.min(r, c); i++) {
+ mainDiagonal.add(matrix.get(i).get(i));
+ }
+
+ for (int i = 0; i < Math.min(r, c); i++) {
+ antiDiagonal.add(matrix.get(i).get(c - 1 - i));
+ }
+}
+`,V1=`import java.util.ArrayList;
+import java.util.List;
+
+
+public static void fn(List> matrix) {
+ List> transpose = new ArrayList<>();
+ List> rotateLeft = new ArrayList<>();
+ List> rotateRight = new ArrayList<>();
+ int r = matrix.size();
+ int c = matrix.get(0).size();
+
+ for (int j = 0; j < c; j++) {
+ List newRow = new ArrayList<>();
+
+ for (int i = 0; i < r; i++) {
+ newRow.add(matrix.get(i).get(j));
+ }
+
+ transpose.add(newRow);
+ }
+
+ for (int i = transpose.size() - 1; i >= 0; i--) {
+ rotateLeft.add(transpose.get(i));
+ }
+
+ for (List row : transpose) {
+ List newRow = new ArrayList<>();
+
+ for (int i = row.size() - 1; i >= 0; i--) {
+ newRow.add(row.get(i));
+ }
+
+ rotateRight.add(newRow);
+ }
+}
+`,$1=`#include
+
+using namespace std;
+
+
+void fn(vector>& matrix) {
+ int r = matrix.size();
+ int c = matrix[0].size();
+
+ vector> create_matrix(r, vector(c, 0));
+ vector> copy_matrix(matrix);
+}
+`,K1=`#include
+
+using namespace std;
+
+
+void fn(vector>& matrix) {
+ int r = matrix.size();
+ int c = matrix[0].size();
+
+ vector main_diagonal;
+ vector anti_diagonal;
+
+ for (int i = 0; i < min(r, c); ++i) {
+ main_diagonal.push_back(matrix[i][i]);
+ anti_diagonal.push_back(matrix[i][c - i - 1]);
+ }
+}
+`,G1=`#include
+
+using namespace std;
+
+
+void fn(vector>& matrix) {
+ int r = matrix.size();
+ int c = matrix[0].size();
+ vector> transpose(c, vector(r));
+ vector> rotate_left(c, vector(r));
+ vector> rotate_right(c, vector(r));
+
+ for (int i = 0; i < r; ++i) {
+ for (int j = 0; j < c; ++j) {
+ transpose[j][i] = matrix[i][j];
+ }
+ }
+
+ for (int i = 0; i < c; ++i) {
+ for (int j = 0; j < r; ++j) {
+ rotate_left[i][j] = transpose[c - i - 1][j];
+ }
+ }
+
+ for (int i = 0; i < c; ++i) {
+ for (int j = 0; j < r; ++j) {
+ rotate_right[i][j] = transpose[i][r - j - 1];
+ }
+ }
+}
+`,J1=`def fn(matrix)
+ r = matrix.size
+ c = matrix[0].size
+
+ create_matrix = Array.new(r) { Array.new(c, 0) }
+ copy_matrix = matrix.map(&:dup)
+end
+`,Y1=`def fn(matrix)
+ r = matrix.size
+ c = matrix[0].size
+
+ main_diagonal = (0...[r, c].min).map { |i| matrix[i][i] }
+ anti_diagonal = (0...[r, c].min).map { |i| matrix[i][-i - 1] }
+end
+`,q1=`def fn(matrix)
+ r = matrix.size
+ c = matrix[0].size
+
+ transpose = matrix[0].zip(*matrix[1..-1])
+ rotate_left = transpose.reverse
+ rotate_right = transpose.map(&:reverse)
+end
+`;function Q1(){return r.jsxs("div",{className:Zn.container,children:[r.jsx("h2",{className:Zn.sectionHeader,children:"Matrix"}),r.jsx("section",{id:"matrix-create-copy",children:r.jsxs(s,{title:"create / copy",children:[r.jsx(s.Tab,{code:I1,language:"python"}),r.jsx(s.Tab,{code:B1,language:"javascript"}),r.jsx(s.Tab,{code:H1,language:"java"}),r.jsx(s.Tab,{code:$1,language:"cpp"}),r.jsx(s.Tab,{code:J1,language:"ruby"})]})}),r.jsx("section",{id:"matrix-diagonals",children:r.jsxs(s,{title:"diagonals / anti-diagonals",children:[r.jsx(s.Tab,{code:D1,language:"python"}),r.jsx(s.Tab,{code:F1,language:"javascript"}),r.jsx(s.Tab,{code:W1,language:"java"}),r.jsx(s.Tab,{code:K1,language:"cpp"}),r.jsx(s.Tab,{code:Y1,language:"ruby"})]})}),r.jsx("section",{id:"matrix-rotate-transpose",children:r.jsxs(s,{title:"rotate / transpose",children:[r.jsx(s.Tab,{code:z1,language:"python"}),r.jsx(s.Tab,{code:U1,language:"javascript"}),r.jsx(s.Tab,{code:V1,language:"java"}),r.jsx(s.Tab,{code:G1,language:"cpp"}),r.jsx(s.Tab,{code:q1,language:"ruby"})]})})]})}const X1=`from typing import Any
+
+
+class Array:
+ def __init__(self, size: int) -> None:
+ self.size = size
+ self.data = [None] * size
+
+ def __getitem__(self, index: int) -> Any:
+ return self.data[index]
+
+ def __setitem__(self, index: int, value: Any) -> None:
+ self.data[index] = value
+
+ def __len__(self) -> int:
+ return len(self.data)
+
+ def __repr__(self) -> str:
+ return repr(self.data)
+`,Z1=`from typing import Any
+
+
+class TreeNode:
+ def __init__(self, data: Any) -> None:
+ self.data = data
+ self.left = None
+ self.right = None
+
+
+class BinaryTree:
+ def __init__(self) -> None:
+ self.root = None
+
+ def insert(self, data: Any) -> None:
+ if not self.root:
+ self.root = TreeNode(data)
+ else:
+ self.insert_node(self.root, data)
+
+ def insert_node(self, node: TreeNode | None, data: Any) -> TreeNode:
+ if not node:
+ return TreeNode(data)
+
+ if not node.left:
+ node.left = TreeNode(data)
+ elif not node.right:
+ node.right = TreeNode(data)
+ else:
+ node.left = self.insert_node(node.left, data)
+
+ return node
+
+ def __repr__(self) -> str:
+ return 'Empty tree' if not self.root else self._print_tree(self.root, '', True)
+
+ def _print_tree(self, node: TreeNode | None, prefix: str, is_left: bool) -> str:
+ if node is None:
+ return ''
+
+ result = ''
+ result += self._print_tree(node.right, prefix + ('│ ' if is_left else ' '), False)
+ result += prefix + ('└── ' if is_left else '┌── ') + str(node.data) + '\\n'
+ result += self._print_tree(node.left, prefix + (' ' if is_left else '│ '), True)
+
+ return result
+`,ny=`from typing import Any
+
+
+class TreeNode:
+ def __init__(self, data: Any) -> None:
+ self.data = data
+ self.left = None
+ self.right = None
+
+
+class BinarySearchTree:
+ def __init__(self) -> None:
+ self.root = None
+
+ def insert(self, data: Any) -> None:
+ if not self.root:
+ self.root = TreeNode(data)
+ else:
+ self.insert_node(self.root, data)
+
+ def insert_node(self, node: TreeNode | None, data: Any) -> None:
+ if data < node.data:
+ if not node.left:
+ node.left = TreeNode(data)
+ else:
+ self.insert_node(node.left, data)
+ else:
+ if not node.right:
+ node.right = TreeNode(data)
+ else:
+ self.insert_node(node.right, data)
+
+ def __repr__(self) -> str:
+ return 'Empty tree' if not self.root else self._print_tree(self.root, '', True)
+
+ def _print_tree(self, node: TreeNode | None, prefix: str, is_left: bool) -> str:
+ if node is None:
+ return ''
+
+ result = ''
+ result += self._print_tree(node.right, prefix + ('│ ' if is_left else ' '), False)
+ result += prefix + ('└── ' if is_left else '┌── ') + str(node.data) + '\\n'
+ result += self._print_tree(node.left, prefix + (' ' if is_left else '│ '), True)
+
+ return result
+`,ey=`from typing import Any
+
+
+class ListNode:
+ def __init__(self, data: Any) -> None:
+ self.data = data
+ self.next = None
+
+ def __repr__(self) -> str:
+ return f'[{self.data}]'
+
+
+class LinkedList:
+ def __init__(self) -> None:
+ self.head = None
+
+ def append(self, data: Any) -> None:
+ if not self.head:
+ self.head = ListNode(data)
+ return
+
+ curr = self.head
+
+ while curr.next:
+ curr = curr.next
+
+ curr.next = ListNode(data)
+
+ def delete(self, data: Any) -> None:
+ if not self.head:
+ return
+
+ if self.head.data == data:
+ self.head = self.head.next
+ return
+
+ prev = None
+ curr = self.head
+
+ while curr:
+ if curr.data == data:
+ prev.next = curr.next
+ return
+
+ prev = curr
+ curr = curr.next
+
+ def reverse(self) -> None:
+ prev = None
+ curr = self.head
+
+ while curr:
+ nxt = curr.next
+ curr.next = prev
+ prev = curr
+ curr = nxt
+
+ self.head = prev
+
+ def __repr__(self) -> str:
+ if not self.head:
+ return 'None'
+
+ nodes = []
+ node = self.head
+
+ while node:
+ nodes.append(repr(node))
+ node = node.next
+
+ return ' -> '.join(nodes) + ' -> None'
+`,ty=`from typing import Any
+
+
+class ListNode:
+ def __init__(self, data: Any) -> None:
+ self.data = data
+ self.prev = None
+ self.next = None
+
+ def __repr__(self) -> str:
+ return f'[{self.data}]'
+
+
+class DoublyLinkedList:
+ def __init__(self) -> None:
+ self.head = None
+
+ def append(self, data: Any) -> None:
+ if not self.head:
+ self.head = ListNode(data)
+ return
+
+ curr = self.head
+
+ while curr.next:
+ curr = curr.next
+
+ new_node = ListNode(data)
+ curr.next = new_node
+ new_node.prev = curr
+
+ def delete(self, data: Any) -> None:
+ if not self.head:
+ return
+
+ if self.head.data == data:
+ self.head = self.head.next
+ if self.head:
+ self.head.prev = None
+ return
+
+ curr = self.head
+ while curr:
+ if curr.data == data:
+ prev_node = curr.prev
+ prev_node.next = curr.next
+ if curr.next:
+ curr.next.prev = prev_node
+ return
+ curr = curr.next
+
+ def reverse(self) -> None:
+ curr = self.head
+ prev = None
+
+ while curr:
+ nxt = curr.next
+ curr.next = prev
+ curr.prev = nxt
+ prev = curr
+ curr = nxt
+
+ self.head = prev
+
+ def __repr__(self) -> str:
+ if not self.head:
+ return 'None'
+
+ nodes = []
+ curr = self.head
+
+ while curr:
+ nodes.append(repr(curr))
+ curr = curr.next
+
+ return ' <-> '.join(nodes) + ' <-> None'
+`,ry=`class Graph:
+ def __init__(self) -> None:
+ self.graph = {}
+
+ def add_vertex(self, vertex: str) -> None:
+ if vertex not in self.graph:
+ self.graph[vertex] = []
+
+ def add_edge(self, a: str, b: str) -> None:
+ self.add_vertex(a)
+ self.add_vertex(b)
+ self.graph[a].append(b)
+ self.graph[b].append(a)
+
+ def get_neighbors(self, vertex: str) -> list[str]:
+ return self.graph.get(vertex, [])
+
+ def __repr__(self) -> str:
+ output = ''
+
+ for vertex, neighbors in self.graph.items():
+ output += f'{vertex} - {' - '.join(neighbors)}\\n'
+
+ return output
+`,iy=`from typing import Any
+
+
+class HashMap:
+ def __init__(self) -> None:
+ self.size = 100000
+ self.bucket = [None] * self.size
+
+ def _hash(self, key: int) -> int:
+ return hash(key) % self.size
+
+ def __setitem__(self, key: int, value: Any) -> None:
+ self.bucket[self._hash(key)] = value
+
+ def __getitem__(self, key: int) -> Any:
+ return self.bucket[self._hash(key)]
+
+ def __delitem__(self, key: int) -> None:
+ self.bucket[self._hash(key)] = None
+`,ay=`class TrieNode:
+ def __init__(self) -> None:
+ self.children = {}
+ self.is_word = False
+
+
+class Trie:
+ def __init__(self) -> None:
+ self.root = TrieNode()
+
+ def build(self, words: list[str]) -> None:
+ for word in words:
+ self.insert(word)
+
+ def insert(self, word: str) -> None:
+ node = self.root
+
+ for char in word:
+ if char not in node.children:
+ node.children[char] = TrieNode()
+ node = node.children[char]
+
+ node.is_word = True
+
+ def search(self, word: str) -> bool:
+ node = self.root
+
+ for char in word:
+ if char not in node.children:
+ return False
+ node = node.children[char]
+
+ return node.is_word
+
+ def starts_with(self, prefix: str) -> bool:
+ node = self.root
+
+ for char in prefix:
+ if char not in node.children:
+ return False
+ node = node.children[char]
+
+ return True
+
+ def collect_words(self, node: TrieNode, prefix: str) -> list[str]:
+ words = []
+
+ if node.is_word:
+ words.append(prefix)
+
+ for char, child_node in node.children.items():
+ words.extend(self.collect_words(child_node, prefix + char))
+
+ return words
+
+ def __repr__(self) -> str:
+ return 'Trie:\\n' + self._print_trie(self.root)
+
+ def _print_trie(self, node: TrieNode | None, level: int = 0, prefix: str = '') -> str:
+ output = ''
+ prefix_str = ' ' * level + prefix
+
+ if not node:
+ return output
+
+ if node.is_word:
+ output += prefix_str + ' ├─ ' + '(*)' + '\\n'
+
+ for i, (char, child_node) in enumerate(node.children.items()):
+ is_last = i == len(node.children) - 1
+ marker = '└─ ' if is_last else '├─ '
+ output += prefix_str + marker + char + '\\n'
+ output += self._print_trie(child_node, level + 1, ' │' if not is_last else ' ')
+
+ return output
+`,oy=`class UnionFind:
+ def __init__(self, n: int) -> None:
+ self.root = list(range(n))
+
+ def find(self, a: int) -> int:
+ return a if a == self.root[a] else self.find(self.root[a])
+
+ def union(self, a: int, b: int) -> None:
+ self.root[self.find(a)] = self.find(b)
+
+ def connected(self, a: int, b: int) -> bool:
+ return self.find(a) == self.find(b)
+
+ def __repr__(self) -> str:
+ n = len(self.root)
+ lines = []
+ components = {}
+
+ for i in range(n):
+ root = self.find(i)
+
+ if root not in components:
+ components[root] = []
+
+ components[root].append(i)
+
+ for component in components.values():
+ lines.append(' - '.join(f'({node})' for node in component))
+
+ return '\\n'.join(lines)
+`,sy=`class UnionFind:
+ def __init__(self, n: int) -> None:
+ self.root = list(range(n))
+ self.rank = [1] * n
+
+ def find(self, a: int) -> int:
+ return a if a == self.root[a] else self.find(self.root[a])
+
+ def union(self, a: int, b: int) -> None:
+ root_a = self.find(a)
+ root_b = self.find(b)
+
+ if root_a != root_b:
+ if self.rank[root_a] < self.rank[root_b]:
+ self.root[root_a] = root_b
+ elif self.rank[root_a] > self.rank[root_b]:
+ self.root[root_b] = root_a
+ else:
+ self.root[root_b] = root_a
+ self.rank[root_a] += 1
+
+ def connected(self, a: int, b: int) -> bool:
+ return self.find(a) == self.find(b)
+
+ def __repr__(self) -> str:
+ n = len(self.root)
+ lines = []
+ components = {}
+
+ for i in range(n):
+ root = self.find(i)
+
+ if root not in components:
+ components[root] = []
+
+ components[root].append(i)
+
+ for component in components.values():
+ lines.append(' - '.join(f'({node})' for node in component))
+
+ return '\\n'.join(lines)
+`,ly=`class Array {
+ constructor(size) {
+ this.size = size
+ this.data = new Array(size).fill(null)
+ }
+
+ getItem(index) {
+ return this.data[index]
+ }
+
+ setItem(index, value) {
+ this.data[index] = value
+ }
+
+ get length() {
+ return this.data.length
+ }
+
+ toString() {
+ return this.data.toString()
+ }
+}
+`,uy=`class TreeNode {
+ constructor(data) {
+ this.data = data
+ this.left = null
+ this.right = null
+ }
+}
+
+class BinaryTree {
+ constructor() {
+ this.root = null
+ }
+
+ insert(data) {
+ if (!this.root) {
+ this.root = new TreeNode(data)
+ } else {
+ this.insertNode(this.root, data)
+ }
+ }
+
+ insertNode(node, data) {
+ if (!node) {
+ return new TreeNode(data)
+ }
+
+ if (!node.left) {
+ node.left = new TreeNode(data)
+ } else if (!node.right) {
+ node.right = new TreeNode(data)
+ } else {
+ node.left = this.insertNode(node.left, data)
+ }
+
+ return node
+ }
+
+ toString() {
+ return this.root ? this.printTree(this.root, '', true) : 'Empty tree'
+ }
+
+ printTree(node, prefix, isLeft) {
+ if (!node) {
+ return ''
+ }
+
+ let result = ''
+ result += this.printTree(node.right, prefix + (isLeft ? '│ ' : ' '), false)
+ result += prefix + (isLeft ? '└── ' : '┌── ') + node.data + '\\n'
+ result += this.printTree(node.left, prefix + (isLeft ? ' ' : '│ '), true)
+
+ return result
+ }
+}
+`,cy=`class TreeNode {
+ constructor(data) {
+ this.data = data
+ this.left = null
+ this.right = null
+ }
+}
+
+class BinarySearchTree {
+ constructor() {
+ this.root = null
+ }
+
+ insert(data) {
+ if (!this.root) {
+ this.root = new TreeNode(data)
+ } else {
+ this._insertNode(this.root, data)
+ }
+ }
+
+ _insertNode(node, data) {
+ if (data < node.data) {
+ if (!node.left) {
+ node.left = new TreeNode(data)
+ } else {
+ this._insertNode(node.left, data)
+ }
+ } else {
+ if (!node.right) {
+ node.right = new TreeNode(data)
+ } else {
+ this._insertNode(node.right, data)
+ }
+ }
+ }
+
+ toString() {
+ return this.root ? this._printTree(this.root, '', true) : 'Empty tree'
+ }
+
+ _printTree(node, prefix, isLeft) {
+ if (!node) {
+ return ''
+ }
+
+ let result = ''
+ result += this._printTree(node.right, prefix + (isLeft ? '│ ' : ' '), false)
+ result += prefix + (isLeft ? '└── ' : '┌── ') + node.data + '\\n'
+ result += this._printTree(node.left, prefix + (isLeft ? ' ' : '│ '), true)
+
+ return result
+ }
+}
+`,dy=`class ListNode {
+ constructor(data) {
+ this.data = data
+ this.next = null
+ }
+
+ toString() {
+ return \`[\${this.data}]\`
+ }
+}
+
+class LinkedList {
+ constructor() {
+ this.head = null
+ }
+
+ append(data) {
+ if (!this.head) {
+ this.head = new ListNode(data)
+ return
+ }
+
+ let curr = this.head
+ while (curr.next) {
+ curr = curr.next
+ }
+
+ curr.next = new ListNode(data)
+ }
+
+ delete(data) {
+ if (!this.head) {
+ return
+ }
+
+ if (this.head.data === data) {
+ this.head = this.head.next
+ return
+ }
+
+ let prev = null
+ let curr = this.head
+
+ while (curr) {
+ if (curr.data === data) {
+ prev.next = curr.next
+ return
+ }
+
+ prev = curr
+ curr = curr.next
+ }
+ }
+
+ reverse() {
+ let prev = null
+ let curr = this.head
+
+ while (curr) {
+ let nxt = curr.next
+ curr.next = prev
+ prev = curr
+ curr = nxt
+ }
+
+ this.head = prev
+ }
+
+ toString() {
+ if (!this.head) {
+ return 'None'
+ }
+
+ let nodes = []
+ let node = this.head
+
+ while (node) {
+ nodes.push(node.toString())
+ node = node.next
+ }
+
+ return nodes.join(' -> ') + ' -> None'
+ }
+}
+`,fy=`class ListNode {
+ constructor(data) {
+ this.data = data
+ this.prev = null
+ this.next = null
+ }
+
+ toString() {
+ return \`[\${this.data}]\`
+ }
+}
+
+class DoublyLinkedList {
+ constructor() {
+ this.head = null
+ }
+
+ append(data) {
+ if (!this.head) {
+ this.head = new ListNode(data)
+ return
+ }
+
+ let curr = this.head
+ while (curr.next) {
+ curr = curr.next
+ }
+
+ const new_node = new ListNode(data)
+ curr.next = new_node
+ new_node.prev = curr
+ }
+
+ delete(data) {
+ if (!this.head) {
+ return
+ }
+
+ if (this.head.data === data) {
+ this.head = this.head.next
+ if (this.head) {
+ this.head.prev = null
+ }
+ return
+ }
+
+ let curr = this.head
+ while (curr) {
+ if (curr.data === data) {
+ const prev_node = curr.prev
+ prev_node.next = curr.next
+ if (curr.next) {
+ curr.next.prev = prev_node
+ }
+ return
+ }
+ curr = curr.next
+ }
+ }
+
+ reverse() {
+ let curr = this.head
+ let prev = null
+
+ while (curr) {
+ const nxt = curr.next
+ curr.next = prev
+ curr.prev = nxt
+ prev = curr
+ curr = nxt
+ }
+
+ this.head = prev
+ }
+
+ toString() {
+ if (!this.head) {
+ return 'None'
+ }
+
+ const nodes = []
+ let curr = this.head
+
+ while (curr) {
+ nodes.push(curr.toString())
+ curr = curr.next
+ }
+
+ return nodes.join(' <-> ') + ' <-> None'
+ }
+}
+`,py=`class Graph {
+ constructor() {
+ this.graph = {}
+ }
+
+ addVertex(vertex) {
+ if (!(vertex in this.graph)) {
+ this.graph[vertex] = []
+ }
+ }
+
+ addEdge(a, b) {
+ this.addVertex(a)
+ this.addVertex(b)
+ this.graph[a].push(b)
+ this.graph[b].push(a)
+ }
+
+ getNeighbors(vertex) {
+ return this.graph[vertex] || []
+ }
+
+ toString() {
+ let output = ''
+
+ for (const [vertex, neighbors] of Object.entries(this.graph)) {
+ output += \`\${vertex} - \${neighbors.join(' - ')}\\n\`
+ }
+
+ return output
+ }
+}
+`,hy=`class HashMap {
+ constructor() {
+ this.size = 100000
+ this.bucket = new Array(this.size).fill(null)
+ }
+
+ _hash(key) {
+ return key % this.size
+ }
+
+ setItem(key, value) {
+ this.bucket[this._hash(key)] = value
+ }
+
+ getItem(key) {
+ return this.bucket[this._hash(key)]
+ }
+
+ deleteItem(key) {
+ this.bucket[this._hash(key)] = null
+ }
+}
+`,gy=`class TrieNode {
+ constructor() {
+ this.children = {}
+ this.isWord = false
+ }
+}
+
+class Trie {
+ constructor() {
+ this.root = new TrieNode()
+ }
+
+ build(words) {
+ for (const word of words) {
+ this.insert(word)
+ }
+ }
+
+ insert(word) {
+ let node = this.root
+
+ for (const char of word) {
+ if (!(char in node.children)) {
+ node.children[char] = new TrieNode()
+ }
+ node = node.children[char]
+ }
+
+ node.isWord = true
+ }
+
+ search(word) {
+ let node = this.root
+
+ for (const char of word) {
+ if (!(char in node.children)) {
+ return false
+ }
+ node = node.children[char]
+ }
+
+ return node.isWord
+ }
+
+ startsWith(prefix) {
+ let node = this.root
+
+ for (const char of prefix) {
+ if (!(char in node.children)) {
+ return false
+ }
+ node = node.children[char]
+ }
+
+ return true
+ }
+
+ collectWords(node, prefix) {
+ const words = []
+
+ if (node.isWord) {
+ words.push(prefix)
+ }
+
+ for (const [char, childNode] of Object.entries(node.children)) {
+ words.push(...this.collectWords(childNode, prefix + char))
+ }
+
+ return words
+ }
+
+ toString() {
+ return 'Trie:\\n' + this._printTrie(this.root)
+ }
+
+ _printTrie(node, level = 0, prefix = '') {
+ let output = ''
+ const prefixStr = ' '.repeat(level) + prefix
+
+ if (!node) {
+ return output
+ }
+
+ if (node.isWord) {
+ output += prefixStr + ' ├─ ' + '(*)' + '\\n'
+ }
+
+ const children = Object.entries(node.children)
+ children.forEach(([char, childNode], i) => {
+ const isLast = i === children.length - 1
+ const marker = isLast ? '└─ ' : '├─ '
+ output += prefixStr + marker + char + '\\n'
+ output += this._printTrie(childNode, level + 1, isLast ? ' ' : ' │')
+ })
+
+ return output
+ }
+}
+`,my=`class UnionFind {
+ constructor(n) {
+ this.root = [...Array(n).keys()]
+ }
+
+ find(a) {
+ return a === this.root[a] ? a : this.find(this.root[a])
+ }
+
+ union(a, b) {
+ this.root[this.find(a)] = this.find(b)
+ }
+
+ connected(a, b) {
+ return this.find(a) === this.find(b)
+ }
+
+ toString() {
+ const n = this.root.length
+ const lines = []
+ const components = {}
+
+ for (let i = 0; i < n; i++) {
+ const root = this.find(i)
+
+ if (!(root in components)) {
+ components[root] = []
+ }
+
+ components[root].push(i)
+ }
+
+ for (const component of Object.values(components)) {
+ lines.push(\`(\${component.join(' - ')})\`)
+ }
+
+ return lines.join('\\n')
+ }
+}
+`,vy=`class UnionFind {
+ constructor(n) {
+ this.root = [...Array(n).keys()]
+ this.rank = Array(n).fill(1)
+ }
+
+ find(a) {
+ return a === this.root[a] ? a : this.find(this.root[a])
+ }
+
+ union(a, b) {
+ const rootA = this.find(a)
+ const rootB = this.find(b)
+
+ if (rootA !== rootB) {
+ if (this.rank[rootA] < this.rank[rootB]) {
+ this.root[rootA] = rootB
+ } else if (this.rank[rootA] > this.rank[rootB]) {
+ this.root[rootB] = rootA
+ } else {
+ this.root[rootB] = rootA
+ this.rank[rootA]++
+ }
+ }
+ }
+
+ connected(a, b) {
+ return this.find(a) === this.find(b)
+ }
+
+ toString() {
+ const n = this.root.length
+ const lines = []
+ const components = {}
+
+ for (let i = 0; i < n; i++) {
+ const root = this.find(i)
+
+ if (!(root in components)) {
+ components[root] = []
+ }
+
+ components[root].push(i)
+ }
+
+ for (const component of Object.values(components)) {
+ lines.push(component.map(node => \`(\${node})\`).join(' - '))
+ }
+
+ return lines.join('\\n')
+ }
+}
+`,yy=`public class Array {
+ private int size;
+ private T[] data;
+
+ @SuppressWarnings("unchecked")
+ public Array(int size) {
+ this.size = size;
+ this.data = (T[]) new Object[size];
+ }
+
+ public T get(int index) {
+ if (index < 0 || index >= size) {
+ throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
+ }
+ return data[index];
+ }
+
+ public void set(int index, T value) {
+ if (index < 0 || index >= size) {
+ throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
+ }
+ data[index] = value;
+ }
+
+ public int size() {
+ return size;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder("[");
+
+ for (int i = 0; i < size; i++) {
+ sb.append(data[i]);
+ if (i < size - 1) {
+ sb.append(", ");
+ }
+ }
+
+ sb.append("]");
+ return sb.toString();
+ }
+}
+`,xy=`public class TreeNode {
+ T data;
+ TreeNode left;
+ TreeNode right;
+
+ public TreeNode(T data) {
+ this.data = data;
+ left = null;
+ right = null;
+ }
+}
+
+public class BinaryTree {
+ TreeNode root;
+
+ public BinaryTree() {
+ root = null;
+ }
+
+ public void insert(T data) {
+ root = insertNode(root, data);
+ }
+
+ private TreeNode insertNode(TreeNode node, T data) {
+ if (node == null) {
+ return new TreeNode<>(data);
+ }
+
+ if (node.left == null) {
+ node.left = new TreeNode<>(data);
+ } else if (node.right == null) {
+ node.right = new TreeNode<>(data);
+ } else {
+ node.left = insertNode(node.left, data);
+ }
+
+ return node;
+ }
+
+ @Override
+ public String toString() {
+ return root == null ? "Empty tree" : printTree(root, "", true);
+ }
+
+ private String printTree(TreeNode node, String prefix, boolean isLeft) {
+ if (node == null) {
+ return "";
+ }
+
+ StringBuilder sb = new StringBuilder();
+ sb.append(printTree(node.right, prefix + (isLeft ? "│ " : " "), false));
+ sb.append(prefix).append(isLeft ? "└── " : "┌── ").append(node.data).append("\\n");
+ sb.append(printTree(node.left, prefix + (isLeft ? " " : "│ "), true));
+
+ return sb.toString();
+ }
+}
+`,_y=`public class TreeNode> {
+ T data;
+ TreeNode left;
+ TreeNode right;
+
+ public TreeNode(T data) {
+ this.data = data;
+ left = null;
+ right = null;
+ }
+}
+
+public class BinarySearchTree> {
+ TreeNode root;
+
+ public BinarySearchTree() {
+ root = null;
+ }
+
+ public void insert(T data) {
+ root = insertNode(root, data);
+ }
+
+ private TreeNode insertNode(TreeNode node, T data) {
+ if (node == null) {
+ return new TreeNode<>(data);
+ }
+
+ if (data.compareTo(node.data) < 0) {
+ node.left = insertNode(node.left, data);
+ } else if (data.compareTo(node.data) > 0) {
+ node.right = insertNode(node.right, data);
+ }
+
+ return node;
+ }
+
+ @Override
+ public String toString() {
+ return root == null ? "Empty tree" : printTree(root, "", true);
+ }
+
+ private String printTree(TreeNode node, String prefix, boolean isLeft) {
+ if (node == null) {
+ return "";
+ }
+
+ StringBuilder sb = new StringBuilder();
+ sb.append(printTree(node.right, prefix + (isLeft ? "│ " : " "), false));
+ sb.append(prefix).append(isLeft ? "└── " : "┌── ").append(node.data).append("\\n");
+ sb.append(printTree(node.left, prefix + (isLeft ? " " : "│ "), true));
+
+ return sb.toString();
+ }
+}
+`,by=`class ListNode {
+ public int data;
+ public ListNode next;
+
+ public ListNode(int data) {
+ this.data = data;
+ this.next = null;
+ }
+
+ @Override
+ public String toString() {
+ return "[" + data + "]";
+ }
+}
+
+class LinkedList {
+ private ListNode head;
+
+ public LinkedList() {
+ this.head = null;
+ }
+
+ public void append(int data) {
+ if (head == null) {
+ head = new ListNode(data);
+ return;
+ }
+
+ ListNode current = head;
+
+ while (current.next != null) {
+ current = current.next;
+ }
+
+ current.next = new ListNode(data);
+ }
+
+ public void delete(int data) {
+ if (head == null) {
+ return;
+ }
+
+ if (head.data == data) {
+ head = head.next;
+ return;
+ }
+
+ ListNode prev = null;
+ ListNode current = head;
+
+ while (current != null) {
+ if (current.data == data) {
+ prev.next = current.next;
+ return;
+ }
+ prev = current;
+ current = current.next;
+ }
+ }
+
+ public void reverse() {
+ ListNode prev = null;
+ ListNode current = head;
+
+ while (current != null) {
+ ListNode next = current.next;
+ current.next = prev;
+ prev = current;
+ current = next;
+ }
+
+ head = prev;
+ }
+
+ @Override
+ public String toString() {
+ if (head == null) {
+ return "None";
+ }
+
+ StringBuilder result = new StringBuilder();
+ ListNode current = head;
+
+ while (current != null) {
+ result.append(current.toString()).append(" -> ");
+ current = current.next;
+ }
+
+ result.append("None");
+ return result.toString();
+ }
+}
+`,wy=`public class ListNode {
+ T data;
+ ListNode prev;
+ ListNode next;
+
+ public ListNode(T data) {
+ this.data = data;
+ prev = null;
+ next = null;
+ }
+
+ @Override
+ public String toString() {
+ return "[" + data + "]";
+ }
+}
+
+public class DoublyLinkedList {
+ ListNode head;
+
+ public DoublyLinkedList() {
+ head = null;
+ }
+
+ public void append(T data) {
+ if (head == null) {
+ head = new ListNode<>(data);
+ return;
+ }
+
+ ListNode curr = head;
+
+ while (curr.next != null) {
+ curr = curr.next;
+ }
+
+ ListNode newNode = new ListNode<>(data);
+ curr.next = newNode;
+ newNode.prev = curr;
+ }
+
+ public void delete(T data) {
+ if (head == null) {
+ return;
+ }
+
+ if (head.data.equals(data)) {
+ head = head.next;
+ if (head != null) {
+ head.prev = null;
+ }
+ return;
+ }
+
+ ListNode curr = head;
+
+ while (curr != null) {
+ if (curr.data.equals(data)) {
+ ListNode prevNode = curr.prev;
+ prevNode.next = curr.next;
+ if (curr.next != null) {
+ curr.next.prev = prevNode;
+ }
+ return;
+ }
+ curr = curr.next;
+ }
+ }
+
+ public void reverse() {
+ ListNode curr = head;
+ ListNode prev = null;
+
+ while (curr != null) {
+ ListNode nextNode = curr.next;
+ curr.next = prev;
+ curr.prev = nextNode;
+ prev = curr;
+ curr = nextNode;
+ }
+
+ head = prev;
+ }
+
+ @Override
+ public String toString() {
+ if (head == null) {
+ return "None";
+ }
+
+ StringBuilder sb = new StringBuilder();
+ ListNode curr = head;
+
+ while (curr != null) {
+ sb.append(curr.toString()).append(" <-> ");
+ curr = curr.next;
+ }
+
+ sb.append("None");
+ return sb.toString();
+ }
+}
+`,Sy=`import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+public class Graph {
+ Map