Skip to content

Commit e7622b9

Browse files
committed
Adds Ruby language support and various algorithm implementations
1 parent 08a3324 commit e7622b9

File tree

18 files changed

+164
-5
lines changed

18 files changed

+164
-5
lines changed

src/components/Code/index.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import clsx from '@utils/clsx'
77
import cpp from 'highlight.js/lib/languages/cpp'
88
import hljs from 'highlight.js/lib/core'
99
import java from 'highlight.js/lib/languages/java'
10+
import ruby from 'highlight.js/lib/languages/ruby'
1011
import javascript from 'highlight.js/lib/languages/javascript'
1112
import python from './python'
1213

@@ -15,11 +16,12 @@ hljs.registerLanguage('python', python)
1516
hljs.registerLanguage('javascript', javascript)
1617
hljs.registerLanguage('java', java)
1718
hljs.registerLanguage('cpp', cpp)
19+
hljs.registerLanguage('ruby', ruby)
1820

1921

2022
interface CodeProps {
2123
code: string
22-
language: 'python' | 'javascript' | 'java' | 'cpp'
24+
language: 'python' | 'javascript' | 'java' | 'cpp' | 'ruby'
2325
}
2426

2527

src/components/Language/context.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
} from 'react'
88

99

10-
type Language = 'python' | 'javascript' | 'java' | 'cpp'
10+
type Language = 'python' | 'javascript' | 'java' | 'cpp' | 'ruby'
1111

1212
interface LanguageContextType {
1313
selectedLanguage: Language

src/components/Tabs/index.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import styles from './tabs.module.sass'
22

3-
import { Children, ReactElement, ReactNode } from 'react'
3+
import {Children, ReactElement, ReactNode} from 'react'
44

55
import Code from '@components/Code'
66
import CopyButton from '@components/CopyButton'
@@ -9,6 +9,7 @@ import SvgPython from '@icons/Python'
99
import SvgJavascript from '@/icons/Javascript'
1010
import SvgCpp from '@icons/Cpp'
1111
import SvgJava from '@/icons/Java'
12+
import SvgRuby from '@/icons/Ruby'
1213
import { useLanguage } from '@components/Language/context'
1314

1415
interface TabsProps {
@@ -18,14 +19,15 @@ interface TabsProps {
1819

1920
interface TabProps {
2021
code: string
21-
language: 'python' | 'javascript' | 'java' | 'cpp'
22+
language: 'python' | 'javascript' | 'java' | 'cpp' | 'ruby'
2223
}
2324

2425
const LANGUAGE_ICONS = {
2526
python: SvgPython,
2627
javascript: SvgJavascript,
2728
cpp: SvgCpp,
2829
java: SvgJava,
30+
ruby: SvgRuby,
2931
}
3032

3133
export default function Tabs({ title, children }: TabsProps) {
@@ -34,7 +36,13 @@ export default function Tabs({ title, children }: TabsProps) {
3436
const activeIndex = tabs.findIndex(
3537
(tab) => tab.props.language === selectedLanguage
3638
)
37-
const code = tabs[activeIndex].props.code
39+
let code = ''
40+
try{
41+
code = tabs[activeIndex].props.code
42+
}catch(e)
43+
{
44+
// debugger
45+
}
3846
const language = tabs[activeIndex].props.language
3947

4048
const changeTab = (index: number) => {

src/icons/Ruby.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export default function SvgRuby() {
2+
return (
3+
<svg viewBox="0 0 32 32">
4+
<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"/>
5+
</svg>
6+
)
7+
}

src/sections/Array/index.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ import SlidingWindowCPP from '@code/cpp/array/sliding_window.cpp?raw'
2626
import PrefixSumCPP from '@code/cpp/array/prefix_sum.cpp?raw'
2727
import StringBuildingCPP from '@code/cpp/array/string_building.cpp?raw'
2828

29+
import TwoPointersOneInputRuby from '@code/ruby/array/two_pointers_one_input.rb?raw'
30+
import TwoPointersTwoInputsRuby from '@code/ruby/array/two_pointers_two_inputs.rb?raw'
31+
import SlidingWindowRuby from '@code/ruby/array/sliding_window.rb?raw'
32+
import PrefixSumRuby from '@code/ruby/array/prefix_sum.rb?raw'
33+
import StringBuildingRuby from '@code/ruby/array/string_building.rb?raw'
34+
2935

3036
export default function Array() {
3137
return (
@@ -37,6 +43,7 @@ export default function Array() {
3743
<Tabs.Tab code={TwoPointersOneInputJS} language="javascript" />
3844
<Tabs.Tab code={TwoPointersOneInputJAVA} language="java" />
3945
<Tabs.Tab code={TwoPointersOneInputCPP} language="cpp" />
46+
<Tabs.Tab code={TwoPointersOneInputRuby} language="ruby" />
4047
</Tabs>
4148
</section>
4249
<section id="array-two-pointers-two-inputs">
@@ -45,6 +52,7 @@ export default function Array() {
4552
<Tabs.Tab code={TwoPointersTwoInputsJS} language="javascript" />
4653
<Tabs.Tab code={TwoPointersTwoInputsJAVA} language="java" />
4754
<Tabs.Tab code={TwoPointersTwoInputsCPP} language="cpp" />
55+
<Tabs.Tab code={TwoPointersTwoInputsRuby} language="ruby" />
4856
</Tabs>
4957
</section>
5058
<section id="array-sliding-window">
@@ -53,6 +61,7 @@ export default function Array() {
5361
<Tabs.Tab code={SlidingWindowJS} language="javascript" />
5462
<Tabs.Tab code={SlidingWindowJAVA} language="java" />
5563
<Tabs.Tab code={SlidingWindowCPP} language="cpp" />
64+
<Tabs.Tab code={SlidingWindowRuby} language="ruby" />
5665
</Tabs>
5766
</section>
5867
<section id="array-prefix-sum">
@@ -61,6 +70,7 @@ export default function Array() {
6170
<Tabs.Tab code={PrefixSumJS} language="javascript" />
6271
<Tabs.Tab code={PrefixSumJAVA} language="java" />
6372
<Tabs.Tab code={PrefixSumCPP} language="cpp" />
73+
<Tabs.Tab code={PrefixSumRuby} language="ruby" />
6474
</Tabs>
6575
</section>
6676
<section id="array-string-building">
@@ -69,6 +79,7 @@ export default function Array() {
6979
<Tabs.Tab code={StringBuildingJS} language="javascript" />
7080
<Tabs.Tab code={StringBuildingJAVA} language="java" />
7181
<Tabs.Tab code={StringBuildingCPP} language="cpp" />
82+
<Tabs.Tab code={StringBuildingRuby} language="ruby" />
7283
</Tabs>
7384
</section>
7485
</div>

src/sections/Backtracking/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import BacktrackingPY from '@code/python/backtracking/backtracking.py?raw'
66
import BacktrackingJS from '@code/javascript/backtracking/backtracking.js?raw'
77
import BacktrackingJAVA from '@code/java/backtracking/backtracking.java?raw'
88
import BacktrackingCPP from '@code/cpp/backtracking/backtracking.cpp?raw'
9+
import BacktrackingRuby from '@code/ruby/backtracking/backtracking.rb?raw'
910

1011

1112
export default function Backtracking() {
@@ -18,6 +19,7 @@ export default function Backtracking() {
1819
<Tabs.Tab code={BacktrackingJS} language="javascript" />
1920
<Tabs.Tab code={BacktrackingJAVA} language="java" />
2021
<Tabs.Tab code={BacktrackingCPP} language="cpp" />
22+
<Tabs.Tab code={BacktrackingRuby} language="ruby" />
2123
</Tabs>
2224
</section>
2325
</div>

src/sections/BinarySearch/index.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ import DuplicateElementsRightInsertionCPP from '@code/cpp/binary_search/duplicat
2626
import GreedyMinimumCPP from '@code/cpp/binary_search/greedy_minimum.cpp?raw'
2727
import GreedyMaximumCPP from '@code/cpp/binary_search/greedy_maximum.cpp?raw'
2828

29+
import BinarySearchRuby from '@code/ruby/binary_search/binary_search.rb?raw'
30+
import DuplicateElementsLeftInsertionRuby from '@code/ruby/binary_search/duplicate_elements_left_insertion.rb?raw'
31+
import DuplicateElementsRightInsertionRuby from '@code/ruby/binary_search/duplicate_elements_right_insertion.rb?raw'
32+
import GreedyMinimumRuby from '@code/ruby/binary_search/greedy_minimum.rb?raw'
33+
import GreedyMaximumRuby from '@code/ruby/binary_search/greedy_maximum.rb?raw'
2934

3035
export default function BinarySearch() {
3136
return (
@@ -37,6 +42,7 @@ export default function BinarySearch() {
3742
<Tabs.Tab code={BinarySearchJS} language="javascript" />
3843
<Tabs.Tab code={BinarySearchJAVA} language="java" />
3944
<Tabs.Tab code={BinarySearchCPP} language="cpp" />
45+
<Tabs.Tab code={BinarySearchRuby} language="ruby" />
4046
</Tabs>
4147
</section>
4248
<section id="binarysearch-duplicate-elements-left-insertion">
@@ -45,6 +51,7 @@ export default function BinarySearch() {
4551
<Tabs.Tab code={DuplicateElementsLeftInsertionJS} language="javascript" />
4652
<Tabs.Tab code={DuplicateElementsLeftInsertionJAVA} language="java" />
4753
<Tabs.Tab code={DuplicateElementsLeftInsertionCPP} language="cpp" />
54+
<Tabs.Tab code={DuplicateElementsLeftInsertionRuby} language="ruby" />
4855
</Tabs>
4956
</section>
5057
<section id="binarysearch-duplicate-elements-right-insertion">
@@ -53,6 +60,7 @@ export default function BinarySearch() {
5360
<Tabs.Tab code={DuplicateElementsRightInsertionJS} language="javascript" />
5461
<Tabs.Tab code={DuplicateElementsRightInsertionJAVA} language="java" />
5562
<Tabs.Tab code={DuplicateElementsRightInsertionCPP} language="cpp" />
63+
<Tabs.Tab code={DuplicateElementsRightInsertionRuby} language="ruby" />
5664
</Tabs>
5765
</section>
5866
<section id="binarysearch-greedy-minimum">
@@ -61,6 +69,7 @@ export default function BinarySearch() {
6169
<Tabs.Tab code={GreedyMinimumJS} language="javascript" />
6270
<Tabs.Tab code={GreedyMinimumJAVA} language="java" />
6371
<Tabs.Tab code={GreedyMinimumCPP} language="cpp" />
72+
<Tabs.Tab code={GreedyMinimumRuby} language="ruby" />
6473
</Tabs>
6574
</section>
6675
<section id="binarysearch-greedy-maximum">
@@ -69,6 +78,7 @@ export default function BinarySearch() {
6978
<Tabs.Tab code={GreedyMaximumJS} language="javascript" />
7079
<Tabs.Tab code={GreedyMaximumJAVA} language="java" />
7180
<Tabs.Tab code={GreedyMaximumCPP} language="cpp" />
81+
<Tabs.Tab code={GreedyMaximumRuby} language="ruby" />
7282
</Tabs>
7383
</section>
7484
</div>

src/sections/BinaryTree/index.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ import DFSrecursiveCPP from '@code/cpp/binary_tree/dfs_recursive.cpp?raw'
1818
import DFSiterativeCPP from '@code/cpp/binary_tree/dfs_iterative.cpp?raw'
1919
import BFSCPP from '@code/cpp/binary_tree/bfs.cpp?raw'
2020

21+
import DFSrecursiveRuby from '@code/ruby/binary_tree/dfs_recursive.rb?raw'
22+
import DFSiterativeRuby from '@code/ruby/binary_tree/dfs_iterative.rb?raw'
23+
import BFSRuby from '@code/ruby/binary_tree/bfs.rb?raw'
24+
2125

2226
export default function BinaryTree() {
2327
return (
@@ -29,6 +33,7 @@ export default function BinaryTree() {
2933
<Tabs.Tab code={DFSrecursiveJS} language="javascript" />
3034
<Tabs.Tab code={DFSrecursiveJAVA} language="java" />
3135
<Tabs.Tab code={DFSrecursiveCPP} language="cpp" />
36+
<Tabs.Tab code={DFSrecursiveRuby} language="ruby" />
3237
</Tabs>
3338
</section>
3439
<section id="tree-dfs-iterative">
@@ -37,6 +42,7 @@ export default function BinaryTree() {
3742
<Tabs.Tab code={DFSiterativeJS} language="javascript" />
3843
<Tabs.Tab code={DFSiterativeJAVA} language="java" />
3944
<Tabs.Tab code={DFSiterativeCPP} language="cpp" />
45+
<Tabs.Tab code={DFSiterativeRuby} language="ruby" />
4046
</Tabs>
4147
</section>
4248
<section id="tree-bfs">
@@ -45,6 +51,7 @@ export default function BinaryTree() {
4551
<Tabs.Tab code={BFSJS} language="javascript" />
4652
<Tabs.Tab code={BFSJAVA} language="java" />
4753
<Tabs.Tab code={BFSCPP} language="cpp" />
54+
<Tabs.Tab code={BFSRuby} language="ruby" />
4855
</Tabs>
4956
</section>
5057
</div>

src/sections/BitManipulation/index.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,16 @@ import DivideByPowerOfTwoCPP from '@code/cpp/bit_manipulation/divide_power_of_tw
4646
import CheckPowerOfTwoCPP from '@code/cpp/bit_manipulation/check_power_of_two.cpp?raw'
4747
import SwapVariablesCPP from '@code/cpp/bit_manipulation/swap_variables.cpp?raw'
4848

49+
import TestKthBitRuby from '@code/ruby/bit_manipulation/test_kth_bit.rb?raw'
50+
import SetKthBitRuby from '@code/ruby/bit_manipulation/set_kth_bit.rb?raw'
51+
import ClearKthBitRuby from '@code/ruby/bit_manipulation/clear_kth_bit.rb?raw'
52+
import ToggleKthBitRuby from '@code/ruby/bit_manipulation/toggle_kth_bit.rb?raw'
53+
import GetRightmostBitRuby from '@code/ruby/bit_manipulation/get_rightmost_bit.rb?raw'
54+
import CountSetBitsRuby from '@code/ruby/bit_manipulation/count_set_bits.rb?raw'
55+
import MultiplyByPowerOfTwoRuby from '@code/ruby/bit_manipulation/multiply_power_of_two.rb?raw'
56+
import DivideByPowerOfTwoRuby from '@code/ruby/bit_manipulation/divide_power_of_two.rb?raw'
57+
import CheckPowerOfTwoRuby from '@code/ruby/bit_manipulation/check_power_of_two.rb?raw'
58+
import SwapVariablesRuby from '@code/ruby/bit_manipulation/swap_variables.rb?raw'
4959

5060
export default function BitManipulation() {
5161
return (
@@ -57,6 +67,7 @@ export default function BitManipulation() {
5767
<Tabs.Tab code={TestKthBitJS} language="javascript" />
5868
<Tabs.Tab code={TestKthBitJAVA} language="java" />
5969
<Tabs.Tab code={TestKthBitCPP} language="cpp" />
70+
<Tabs.Tab code={TestKthBitRuby} language="ruby" />
6071
</Tabs>
6172
</section>
6273
<section id="bitmanipulation-set-kth-bit">
@@ -65,6 +76,7 @@ export default function BitManipulation() {
6576
<Tabs.Tab code={SetKthBitJS} language="javascript" />
6677
<Tabs.Tab code={SetKthBitJAVA} language="java" />
6778
<Tabs.Tab code={SetKthBitCPP} language="cpp" />
79+
<Tabs.Tab code={SetKthBitRuby} language="ruby" />
6880
</Tabs>
6981
</section>
7082
<section id="bitmanipulation-clear-kth-bit">
@@ -73,6 +85,7 @@ export default function BitManipulation() {
7385
<Tabs.Tab code={ClearKthBitJS} language="javascript" />
7486
<Tabs.Tab code={ClearKthBitJAVA} language="java" />
7587
<Tabs.Tab code={ClearKthBitCPP} language="cpp" />
88+
<Tabs.Tab code={ClearKthBitRuby} language="ruby" />
7689
</Tabs>
7790
</section>
7891
<section id="bitmanipulation-toggle-kth-bit">
@@ -81,6 +94,7 @@ export default function BitManipulation() {
8194
<Tabs.Tab code={ToggleKthBitJS} language="javascript" />
8295
<Tabs.Tab code={ToggleKthBitJAVA} language="java" />
8396
<Tabs.Tab code={ToggleKthBitCPP} language="cpp" />
97+
<Tabs.Tab code={ToggleKthBitRuby} language="ruby" />
8498
</Tabs>
8599
</section>
86100
<section id="bitmanipulation-get-rightmost-bit">
@@ -89,6 +103,7 @@ export default function BitManipulation() {
89103
<Tabs.Tab code={GetRightmostBitJS} language="javascript" />
90104
<Tabs.Tab code={GetRightmostBitJAVA} language="java" />
91105
<Tabs.Tab code={GetRightmostBitCPP} language="cpp" />
106+
<Tabs.Tab code={GetRightmostBitRuby} language="ruby" />
92107
</Tabs>
93108
</section>
94109
<section id="bitmanipulation-count-set-bits">
@@ -97,6 +112,7 @@ export default function BitManipulation() {
97112
<Tabs.Tab code={CountSetBitsJS} language="javascript" />
98113
<Tabs.Tab code={CountSetBitsJAVA} language="java" />
99114
<Tabs.Tab code={CountSetBitsCPP} language="cpp" />
115+
<Tabs.Tab code={CountSetBitsRuby} language="ruby" />
100116
</Tabs>
101117
</section>
102118
<section id="bitmanipulation-multiply-power-of-two">
@@ -105,6 +121,7 @@ export default function BitManipulation() {
105121
<Tabs.Tab code={MultiplyByPowerOfTwoJS} language="javascript" />
106122
<Tabs.Tab code={MultiplyByPowerOfTwoJAVA} language="java" />
107123
<Tabs.Tab code={MultiplyByPowerOfTwoCPP} language="cpp" />
124+
<Tabs.Tab code={MultiplyByPowerOfTwoRuby} language="ruby" />
108125
</Tabs>
109126
</section>
110127
<section id="bitmanipulation-divide-power-of-two">
@@ -113,6 +130,7 @@ export default function BitManipulation() {
113130
<Tabs.Tab code={DivideByPowerOfTwoJS} language="javascript" />
114131
<Tabs.Tab code={DivideByPowerOfTwoJAVA} language="java" />
115132
<Tabs.Tab code={DivideByPowerOfTwoCPP} language="cpp" />
133+
<Tabs.Tab code={DivideByPowerOfTwoRuby} language="ruby" />
116134
</Tabs>
117135
</section>
118136
<section id="bitmanipulation-check-power-of-two">
@@ -121,6 +139,7 @@ export default function BitManipulation() {
121139
<Tabs.Tab code={CheckPowerOfTwoJS} language="javascript" />
122140
<Tabs.Tab code={CheckPowerOfTwoJAVA} language="java" />
123141
<Tabs.Tab code={CheckPowerOfTwoCPP} language="cpp" />
142+
<Tabs.Tab code={CheckPowerOfTwoRuby} language="ruby" />
124143
</Tabs>
125144
</section>
126145
<section id="bitmanipulation-swap-variables">
@@ -129,6 +148,7 @@ export default function BitManipulation() {
129148
<Tabs.Tab code={SwapVariablesJS} language="javascript" />
130149
<Tabs.Tab code={SwapVariablesJAVA} language="java" />
131150
<Tabs.Tab code={SwapVariablesCPP} language="cpp" />
151+
<Tabs.Tab code={SwapVariablesRuby} language="ruby" />
132152
</Tabs>
133153
</section>
134154
</div>

0 commit comments

Comments
 (0)