Skip to content

Commit c8962c6

Browse files
committed
Initial Commit
0 parents  commit c8962c6

20 files changed

+711
-0
lines changed

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
build/**/*
2+
**/*.class
3+
**/*.exe
4+
**/*.obj
5+
**/*.pdb

cli.py

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
import argparse
2+
import os
3+
import subprocess
4+
import shutil
5+
6+
__ITEM_LOCATION = lambda item, lang, pref="", suff="": f"{pref}{item}/{lang}{suff}"
7+
__ITEM_PATH = lambda item, lang, pref="", suff="": __ITEM_LOCATION(item, lang, pref, "/" + item + suff)
8+
9+
__SUPPORTED_LANGS = {
10+
"zig": {
11+
"ext": ".zig",
12+
"build": "zig build-exe {0}.zig",
13+
},
14+
"java": {
15+
"ext": ".java",
16+
"build": "javac -d . {0}.java",
17+
},
18+
"c++": {
19+
"ext": ".cpp",
20+
"build": "g++ {0}.cpp",
21+
}
22+
}
23+
24+
# create
25+
def _create_dir(dirname):
26+
print("Making directory:", dirname)
27+
if os.path.exists(dirname):
28+
print(f"Path '{dirname}' already exists")
29+
exit(1)
30+
os.mkdir(dirname)
31+
32+
def _create_file(filename):
33+
print("Making file:", filename)
34+
if os.path.exists(filename):
35+
print(f"Path '{filename}' already exists")
36+
exit(1)
37+
with open(filename, "w"):
38+
pass
39+
40+
def _create_supported_langs_dirs(item_name):
41+
_create_dir(f"src/{item_name}")
42+
for lang in __SUPPORTED_LANGS:
43+
_create_dir(f"src/{item_name}/{lang}")
44+
_create_file(f"src/{item_name}/{lang}/{item_name}{__SUPPORTED_LANGS[lang]['ext']}")
45+
46+
# build
47+
def _get_items_in_src():
48+
return [f.name for f in os.scandir("./src/") if f.is_dir()]
49+
50+
def _run_build_command(lang, item):
51+
start_dir = os.getcwd()
52+
53+
try:
54+
print("Building %s in language %s" % (item, lang))
55+
os.chdir(f"{start_dir}/build/")
56+
subprocess.run(__SUPPORTED_LANGS[lang]["build"].format(__ITEM_PATH(item, lang, "../src/")).split(), shell=True, check=True)
57+
for i in [f.name for f in os.scandir(".") if f.is_file()]:
58+
if i.endswith(__SUPPORTED_LANGS[lang]["ext"]):
59+
continue
60+
try:
61+
shutil.copy("./" + i, __ITEM_LOCATION(item, lang, "../build/", "/" + i))
62+
except IOError:
63+
os.makedirs(os.path.dirname(__ITEM_LOCATION(item, lang, "../build/", "/" + i)))
64+
shutil.copy("./" + i, __ITEM_LOCATION(item, lang, "../build/", "/" + i))
65+
66+
os.remove("./" + i)
67+
os.chdir(start_dir)
68+
print("Success.")
69+
except Exception as e:
70+
print(e)
71+
os.chdir(start_dir)
72+
print("Failed to build: %s for language %s\nFull command was %s\n" % (item, lang, __SUPPORTED_LANGS[lang]["build"].format(__ITEM_PATH(item, lang, "./src/"))))
73+
74+
def _build_supported_langs(item_name):
75+
for lang in __SUPPORTED_LANGS:
76+
_run_build_command(lang, item_name)
77+
78+
def _build_items_in_src():
79+
if not os.path.exists("./build/"):
80+
os.mkdir("./build/")
81+
for item in _get_items_in_src():
82+
_build_supported_langs(item)
83+
84+
85+
# args
86+
argParser = argparse.ArgumentParser()
87+
argParser.add_argument("-c", "--create", type=str, help="Create a directory structure with all supported programming languages.")
88+
argParser.add_argument("-b", "--build", action='store_true', help="Build all the files in the src directory and places them in a separate build directory structure. Builds all supported programming languages.")
89+
90+
# main
91+
if __name__ == "__main__":
92+
args = argParser.parse_args()
93+
94+
if args.create:
95+
_create_supported_langs_dirs(args.create)
96+
if args.build:
97+
_build_items_in_src()
98+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
template <typename T>
2+
int binary_search(T arr[], T key, int length) {
3+
int left = 0;
4+
int right = length;
5+
while (left < right) {
6+
int mid = (left + right) / 2;
7+
if (arr[mid] == key) return mid;
8+
if (arr[mid] < key) left = mid;
9+
if (arr[mid] > key) right = mid;
10+
}
11+
return -1;
12+
}
13+
14+
int main() {
15+
return 0;
16+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class BinarySearch {
2+
public static <T extends Comparable<T>> int search(T[] arr, T key) {
3+
int left = 0;
4+
int right = arr.length;
5+
while (left < right) {
6+
int mid = (left + right) / 2;
7+
if (arr[mid].compareTo(key) == 0) return mid;
8+
if (arr[mid].compareTo(key) < 0) left = mid;
9+
if (arr[mid].compareTo(key) > 0) right = mid;
10+
}
11+
return -1;
12+
}
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
pub fn binary(comptime T: type, arr: []T, key: T) i32 {
2+
var left: u32 = 0;
3+
var right: u32 = @intCast(u32, arr.len);
4+
while (left < right) {
5+
var mid = (left + right) / 2;
6+
if (arr[mid] == key) return mid;
7+
if (arr[mid] < key) left = mid;
8+
if (arr[mid] > key) right = mid;
9+
}
10+
return -1;
11+
}
12+
13+
pub fn main() !void {}

src/bubble_sort/c++/bubble_sort.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
template <typename T>
2+
void bubble_sort(T arr[], int length) {
3+
for (int i = 0; i < length; i++) {
4+
for (int j = 0; j < length - i - 1; j++) {
5+
if (arr[j] > (arr[j+1])) {
6+
T temp = arr[j];
7+
arr[j] = arr[j+1];
8+
arr[j+1] = temp;
9+
}
10+
}
11+
}
12+
}
13+
14+
int main() {
15+
return 0;
16+
}

src/bubble_sort/java/bubble_sort.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class BubbleSort {
2+
public static <T extends Comparable<T>> void sort(T[] arr) {
3+
for (int i = 0; i < arr.length; i++) {
4+
for (int j = 0; j < arr.length - i - 1; j++) {
5+
if (arr[j].compareTo(arr[j+1]) > 0) {
6+
T temp = arr[j];
7+
arr[j] = arr[j+1];
8+
arr[j+1] = temp;
9+
}
10+
}
11+
}
12+
}
13+
}

src/bubble_sort/zig/bubble_sort.zig

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
pub fn bubble(comptime T: type, arr: []T) void {
2+
var i: u32 = 0;
3+
while (i < arr.len) : (i += 1) {
4+
var j: u32 = 0;
5+
while (j < arr.len - i - 1) : (j += 1) {
6+
if (arr[j] > arr[j + 1]) {
7+
var temp = arr[j];
8+
arr[j] = arr[j + 1];
9+
arr[j + 1] = temp;
10+
}
11+
}
12+
}
13+
}
14+
15+
pub fn main() !void {}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
template <typename T>
2+
int linear_search(T arr[], T key, int length) {
3+
for (int i = 0; i < length; i++) {
4+
if (arr[i] == key) return i;
5+
}
6+
return -1;
7+
}
8+
9+
int main() {
10+
return 0;
11+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class LinearSearch {
2+
public static <T extends Comparable<T>> int search(T[] arr, T key) {
3+
for (int i = 0; i < arr.length; i++) {
4+
if (arr[i].compareTo(key) == 0) return i;
5+
}
6+
return -1;
7+
}
8+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
pub fn linear_search(comptime T: type, arr: []T, key: T) i32 {
2+
for (arr) |e, i| {
3+
if (e == key) {
4+
return @intCast(i32, i);
5+
}
6+
}
7+
return -1;
8+
}
9+
10+
pub fn main() !void {}

src/linked_list/c++/linked_list.cpp

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
template <typename T>
2+
class Node {
3+
T data;
4+
Node<T> next;
5+
Node<T> prev;
6+
};
7+
8+
template <typename T>
9+
class LinkedList {
10+
private:
11+
Node<T> head;
12+
Node<T> tail;
13+
int _size;
14+
public:
15+
bool is_empty() {return _size == 0;}
16+
bool add(T data) {
17+
Node<T> curr = new Node<T>();
18+
if (_size == 0) {
19+
curr.data = data;
20+
head = tail = curr;
21+
} else {
22+
tail.next = curr;
23+
curr.prev = tail;
24+
tail = curr;
25+
}
26+
_size++;
27+
return true;
28+
}
29+
T get(int idx) {
30+
Node<T> curr = head;
31+
while (idx - 1 > 0 && curr != nullptr) {
32+
curr = curr.next;
33+
}
34+
if (idx != 0) return nullptr;
35+
return curr.data;
36+
}
37+
bool insert(int idx, T data) {
38+
if (idx < 0 || idx >= this._size) return false;
39+
Node<T> curr = head;
40+
while (idx - 1 > 0 && curr != nullptr) {
41+
curr = curr.next;
42+
}
43+
if (idx != 0) return false;
44+
Node<T> temp = curr.next;
45+
Node<T> next = new Node<T>();
46+
next.data = data;
47+
curr.next = next;
48+
next.prev = curr;
49+
50+
next.next = temp;
51+
temp.prev = next;
52+
return true;
53+
}
54+
T remove(int idx) {
55+
if (idx < 0 || idx >= this._size) return nullptr;
56+
Node<T> curr = head;
57+
while (idx - 1 > 0 && curr != nullptr) {
58+
curr = curr.next;
59+
}
60+
if (idx != 0) return nullptr;
61+
Node<T> temp = curr.next;
62+
63+
T ret = curr.data;
64+
curr.prev.next = curr.next;
65+
curr.next.prev = curr.prev;
66+
return ret;
67+
}
68+
bool replace(int idx, T data) {
69+
if (this.remove(idx) != nullptr) {
70+
return this.insert(idx, data);
71+
}
72+
return false;
73+
}
74+
int size() {
75+
return this._size;
76+
}
77+
// void print() {
78+
// if (this._size < 1) {
79+
// printf("[]\n");
80+
// return;
81+
// }
82+
// var curr = head;
83+
// printf("[");
84+
// while (curr != nullptr) {
85+
// printf("%s, ", curr.data);
86+
// curr = curr.next;
87+
// }
88+
// System.out.println("]");
89+
// }
90+
};
91+
92+
int main() {
93+
return 0;
94+
}

0 commit comments

Comments
 (0)