Skip to content

Commit cc1717d

Browse files
davidagustinclaude
andcommitted
feat: add 10 new languages and expand to 2299 problems
- Add 10 new programming languages: Rust, Swift, Scala, R, Perl, Lua, Haskell, Elixir, Dart, Clojure - Expand problem sets for all 11 existing languages - Update homepage to display 21 languages with 2200+ problems - Add Monaco editor support for all new languages - Update type definitions and problem loaders for new languages - Fix validPatterns string to RegExp conversions across multiple files Total: 21 languages, 2299 problems Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 2753ddb commit cc1717d

28 files changed

+28584
-8
lines changed

app/[language]/drill/page.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,17 @@ const problemLoaders: Record<
123123
c: () => import('@/lib/problems/c'),
124124
php: () => import('@/lib/problems/php'),
125125
kotlin: () => import('@/lib/problems/kotlin'),
126+
// New languages
127+
rust: () => import('@/lib/problems/rust'),
128+
swift: () => import('@/lib/problems/swift'),
129+
scala: () => import('@/lib/problems/scala'),
130+
r: () => import('@/lib/problems/r'),
131+
perl: () => import('@/lib/problems/perl'),
132+
lua: () => import('@/lib/problems/lua'),
133+
haskell: () => import('@/lib/problems/haskell'),
134+
elixir: () => import('@/lib/problems/elixir'),
135+
dart: () => import('@/lib/problems/dart'),
136+
clojure: () => import('@/lib/problems/clojure'),
126137
};
127138

128139
// Extract problems from module based on naming convention

app/page.tsx

Lines changed: 115 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,117 @@ const languages = [
124124
iconBg: 'bg-gradient-to-br from-violet-500 to-orange-400',
125125
iconText: 'text-white font-bold',
126126
},
127+
// New languages
128+
{
129+
name: 'Rust',
130+
slug: 'rust',
131+
icon: null,
132+
emoji: '🦀',
133+
bgGradient: 'from-orange-600/20 to-red-700/10',
134+
borderColor: 'border-orange-600/30',
135+
hoverGlow: 'hover:shadow-[0_0_30px_rgba(234,88,12,0.4)]',
136+
iconBg: 'bg-gradient-to-br from-orange-600 to-red-700',
137+
iconText: 'text-white',
138+
},
139+
{
140+
name: 'Swift',
141+
slug: 'swift',
142+
icon: null,
143+
emoji: '🐦',
144+
bgGradient: 'from-orange-500/20 to-red-500/10',
145+
borderColor: 'border-orange-500/30',
146+
hoverGlow: 'hover:shadow-[0_0_30px_rgba(249,115,22,0.4)]',
147+
iconBg: 'bg-gradient-to-br from-orange-500 to-red-500',
148+
iconText: 'text-white',
149+
},
150+
{
151+
name: 'Scala',
152+
slug: 'scala',
153+
icon: 'Sc',
154+
emoji: null,
155+
bgGradient: 'from-red-500/20 to-red-600/10',
156+
borderColor: 'border-red-500/30',
157+
hoverGlow: 'hover:shadow-[0_0_30px_rgba(239,68,68,0.4)]',
158+
iconBg: 'bg-red-600',
159+
iconText: 'text-white font-bold',
160+
},
161+
{
162+
name: 'R',
163+
slug: 'r',
164+
icon: 'R',
165+
emoji: null,
166+
bgGradient: 'from-blue-400/20 to-gray-500/10',
167+
borderColor: 'border-blue-400/30',
168+
hoverGlow: 'hover:shadow-[0_0_30px_rgba(96,165,250,0.4)]',
169+
iconBg: 'bg-blue-500',
170+
iconText: 'text-white font-bold',
171+
},
172+
{
173+
name: 'Perl',
174+
slug: 'perl',
175+
icon: null,
176+
emoji: '🐪',
177+
bgGradient: 'from-indigo-400/20 to-blue-500/10',
178+
borderColor: 'border-indigo-400/30',
179+
hoverGlow: 'hover:shadow-[0_0_30px_rgba(129,140,248,0.4)]',
180+
iconBg: 'bg-indigo-500',
181+
iconText: 'text-white',
182+
},
183+
{
184+
name: 'Lua',
185+
slug: 'lua',
186+
icon: null,
187+
emoji: '🌙',
188+
bgGradient: 'from-blue-800/20 to-blue-900/10',
189+
borderColor: 'border-blue-800/30',
190+
hoverGlow: 'hover:shadow-[0_0_30px_rgba(30,64,175,0.4)]',
191+
iconBg: 'bg-blue-800',
192+
iconText: 'text-white',
193+
},
194+
{
195+
name: 'Haskell',
196+
slug: 'haskell',
197+
icon: 'λ',
198+
emoji: null,
199+
bgGradient: 'from-purple-600/20 to-purple-700/10',
200+
borderColor: 'border-purple-600/30',
201+
hoverGlow: 'hover:shadow-[0_0_30px_rgba(147,51,234,0.4)]',
202+
iconBg: 'bg-purple-700',
203+
iconText: 'text-white font-bold text-2xl',
204+
},
205+
{
206+
name: 'Elixir',
207+
slug: 'elixir',
208+
icon: null,
209+
emoji: '💧',
210+
bgGradient: 'from-purple-500/20 to-violet-600/10',
211+
borderColor: 'border-purple-500/30',
212+
hoverGlow: 'hover:shadow-[0_0_30px_rgba(168,85,247,0.4)]',
213+
iconBg: 'bg-gradient-to-br from-purple-500 to-violet-600',
214+
iconText: 'text-white',
215+
},
216+
{
217+
name: 'Dart',
218+
slug: 'dart',
219+
icon: null,
220+
emoji: '🎯',
221+
bgGradient: 'from-cyan-400/20 to-blue-500/10',
222+
borderColor: 'border-cyan-400/30',
223+
hoverGlow: 'hover:shadow-[0_0_30px_rgba(34,211,238,0.4)]',
224+
iconBg: 'bg-gradient-to-br from-cyan-400 to-blue-500',
225+
iconText: 'text-white',
226+
},
227+
{
228+
name: 'Clojure',
229+
slug: 'clojure',
230+
icon: null,
231+
emoji: '☯',
232+
bgGradient: 'from-green-500/20 to-teal-600/10',
233+
borderColor: 'border-green-500/30',
234+
hoverGlow: 'hover:shadow-[0_0_30px_rgba(34,197,94,0.4)]',
235+
iconBg: 'bg-gradient-to-br from-green-500 to-teal-600',
236+
iconText: 'text-white',
237+
},
127238
];
128239

129240
const modes = [
@@ -185,9 +296,8 @@ export default function Home() {
185296
</p>
186297

187298
<p className="text-gray-500 max-w-xl mx-auto leading-relaxed animate-fade-in-up delay-200">
188-
Sharpen your coding skills across 11 programming languages. Practice essential
189-
methods, test your knowledge with quizzes, and build the muscle memory every developer
190-
needs.
299+
Sharpen your coding skills across 21 programming languages. Practice 2200+ problems,
300+
test your knowledge with quizzes, and build the muscle memory every developer needs.
191301
</p>
192302

193303
{/* CTA Arrow */}
@@ -264,8 +374,8 @@ export default function Home() {
264374
<section className="max-w-6xl mx-auto px-6 py-12">
265375
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-6 text-center">
266376
{[
267-
{ stat: '11', label: 'Languages', icon: '🌐' },
268-
{ stat: '100+', label: 'Methods', icon: '⚡' },
377+
{ stat: '21', label: 'Languages', icon: '🌐' },
378+
{ stat: '2200+', label: 'Problems', icon: '⚡' },
269379
{ stat: '∞', label: 'Practice', icon: '🔄' },
270380
{ stat: 'Free', label: 'Forever', icon: '✨' },
271381
].map((item) => (

components/ClearDataDialog.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,17 @@ const STORAGE_CATEGORIES = [
3333
'coding-drills-exercises-c',
3434
'coding-drills-exercises-php',
3535
'coding-drills-exercises-kotlin',
36+
// New languages
37+
'coding-drills-exercises-rust',
38+
'coding-drills-exercises-swift',
39+
'coding-drills-exercises-scala',
40+
'coding-drills-exercises-r',
41+
'coding-drills-exercises-perl',
42+
'coding-drills-exercises-lua',
43+
'coding-drills-exercises-haskell',
44+
'coding-drills-exercises-elixir',
45+
'coding-drills-exercises-dart',
46+
'coding-drills-exercises-clojure',
3647
],
3748
},
3849
{
@@ -51,6 +62,17 @@ const STORAGE_CATEGORIES = [
5162
'coding-drills-stats-c',
5263
'coding-drills-stats-php',
5364
'coding-drills-stats-kotlin',
65+
// New languages
66+
'coding-drills-stats-rust',
67+
'coding-drills-stats-swift',
68+
'coding-drills-stats-scala',
69+
'coding-drills-stats-r',
70+
'coding-drills-stats-perl',
71+
'coding-drills-stats-lua',
72+
'coding-drills-stats-haskell',
73+
'coding-drills-stats-elixir',
74+
'coding-drills-stats-dart',
75+
'coding-drills-stats-clojure',
5476
],
5577
},
5678
{

components/CodeDisplay.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,17 @@ const LANGUAGE_TO_MONACO: Record<LanguageId, string> = {
1818
c: 'c',
1919
php: 'php',
2020
kotlin: 'kotlin',
21+
// New languages
22+
rust: 'rust',
23+
swift: 'swift',
24+
scala: 'scala',
25+
r: 'r',
26+
perl: 'perl',
27+
lua: 'lua',
28+
haskell: 'haskell',
29+
elixir: 'elixir',
30+
dart: 'dart',
31+
clojure: 'clojure',
2132
};
2233

2334
interface CodeDisplayProps {

components/CodeEditor.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,17 @@ const LANGUAGE_TO_MONACO: Record<LanguageId, string> = {
2121
c: 'c',
2222
php: 'php',
2323
kotlin: 'kotlin',
24+
// New languages
25+
rust: 'rust',
26+
swift: 'swift',
27+
scala: 'scala',
28+
r: 'r',
29+
perl: 'perl',
30+
lua: 'lua',
31+
haskell: 'haskell',
32+
elixir: 'elixir',
33+
dart: 'dart',
34+
clojure: 'clojure',
2435
};
2536

2637
/**
@@ -38,6 +49,17 @@ const LANGUAGE_EXTENSIONS: Record<LanguageId, string> = {
3849
c: '.c',
3950
php: '.php',
4051
kotlin: '.kt',
52+
// New languages
53+
rust: '.rs',
54+
swift: '.swift',
55+
scala: '.scala',
56+
r: '.r',
57+
perl: '.pl',
58+
lua: '.lua',
59+
haskell: '.hs',
60+
elixir: '.ex',
61+
dart: '.dart',
62+
clojure: '.clj',
4163
};
4264

4365
interface CodeEditorProps {

0 commit comments

Comments
 (0)