diff --git a/.gitignore b/.gitignore index f0ca1dc..dc6db80 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,7 @@ *.exe *.out *.app + +# Ignore all bazel-* symlinks. There is no full list since this can change +# based on the name of the directory bazel is cloned into. +bazel-* diff --git a/BUILD b/BUILD new file mode 100644 index 0000000..e69de29 diff --git a/WORKSPACE b/WORKSPACE new file mode 100644 index 0000000..ce0adcb --- /dev/null +++ b/WORKSPACE @@ -0,0 +1,20 @@ +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") + +http_archive( + name = "com_google_googletest", + urls = ["https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip"], + strip_prefix = "googletest-609281088cfefc76f9d0ce82e1ff6c30cc3591e5", +) + +http_archive( + name = "rules_cc", + urls = ["https://github.com/bazelbuild/rules_cc/archive/40548a2974f1aea06215272d9c2b47a14a24e556.zip"], + strip_prefix = "rules_cc-40548a2974f1aea06215272d9c2b47a14a24e556", +) + +git_repository( + name = "com_google_absl", + remote = "https://github.com/abseil/abseil-cpp.git", + tag = "20200225.2", +) diff --git a/bazel-leetcode b/bazel-leetcode new file mode 120000 index 0000000..f3a6a54 --- /dev/null +++ b/bazel-leetcode @@ -0,0 +1 @@ +/private/var/tmp/_bazel_charlie/e7928186a18aa82e5e16642fa33bc2a2/execroot/__main__ \ No newline at end of file diff --git a/cpp/0001_two_sum/0001_two_sum.cc b/cpp/0001_two_sum/0001_two_sum.cc index 9a0f11f..dd50bcc 100644 --- a/cpp/0001_two_sum/0001_two_sum.cc +++ b/cpp/0001_two_sum/0001_two_sum.cc @@ -1,3 +1,4 @@ +#include "0001_two_sum.h" #include #include #include @@ -6,29 +7,18 @@ using std::cout; using std::unordered_map; using std::vector; -class Solution { -public: - vector twoSum(vector &nums, int target) { - unordered_map umap; - for (int i = 0; i < nums.size(); i++) { - const int current = nums[i]; +vector Solution::twoSum(vector &nums, int target) { + unordered_map umap; + for (int i = 0; i < nums.size(); i++) { + const int current = nums[i]; - if (umap.count(current) > 0) { - return {i, umap[current]}; - } - - const int diff = target - nums[i]; - umap[diff] = i; + if (umap.count(current) > 0) { + return {i, umap[current]}; } - return {}; + const int diff = target - nums[i]; + umap[diff] = i; } -}; -int main() { - vector nums = {2, 7, 11, 15}; - auto result = Solution().twoSum(nums, 9); - for (auto n : result) { - cout << n << " "; - } + return {}; } diff --git a/cpp/0001_two_sum/0001_two_sum.h b/cpp/0001_two_sum/0001_two_sum.h new file mode 100644 index 0000000..5cc8f41 --- /dev/null +++ b/cpp/0001_two_sum/0001_two_sum.h @@ -0,0 +1,8 @@ +#include + +using std::vector; + +class Solution { +public: + vector twoSum(vector &nums, int target); +}; diff --git a/cpp/0001_two_sum/0001_two_sum_test.cc b/cpp/0001_two_sum/0001_two_sum_test.cc index 2efb493..9a37ebb 100644 --- a/cpp/0001_two_sum/0001_two_sum_test.cc +++ b/cpp/0001_two_sum/0001_two_sum_test.cc @@ -1,4 +1,15 @@ -//#include -#include <0001_two_sum> +#include "cpp/0001_two_sum/0001_two_sum.h" +#include +#include +using std::vector; +TEST(TwoSumTest, Example1) { + vector nums = {2, 7, 11, 15}; + const vector mock = Solution().twoSum(nums, 9); + + const vector solution = {1, 0}; + for (int i = 0; i < mock.size(); ++i) { + EXPECT_EQ(solution[i], mock[i]); + } +} diff --git a/cpp/0200_number_of_islands/0200_number_of_islands.cc b/cpp/0200_number_of_islands/0200_number_of_islands.cc index 964605b..b5bd3cf 100644 --- a/cpp/0200_number_of_islands/0200_number_of_islands.cc +++ b/cpp/0200_number_of_islands/0200_number_of_islands.cc @@ -1,45 +1,33 @@ +#include "0200_number_of_islands.h" #include #include using std::cout; using std::vector; -class Solution { -private: - void dfs(vector> &grid, size_t row, size_t column) { - if (row >= grid.size() || column >= grid[row].size() || - grid[row][column] == '0') { - return; - } - - grid[row][column] = '0'; - dfs(grid, row + 1, column); - dfs(grid, row, column + 1); - dfs(grid, row - 1, column); - dfs(grid, row, column - 1); +void dfs(vector> &grid, size_t row, size_t column) { + if (row >= grid.size() || column >= grid[row].size() || + grid[row][column] == '0') { + return; } -public: - int numIslands(vector> &grid) { - int islands = 0; - for (int row = 0; row < grid.size(); row++) { - for (int column = 0; column < grid[row].size(); column++) { - if (grid[row][column] == '1') { - islands++; - dfs(grid, row, column); - } + grid[row][column] = '0'; + dfs(grid, row + 1, column); + dfs(grid, row, column + 1); + dfs(grid, row - 1, column); + dfs(grid, row, column - 1); +} + +int Solution::numIslands(vector> &grid) { + int islands = 0; + for (int row = 0; row < grid.size(); row++) { + for (int column = 0; column < grid[row].size(); column++) { + if (grid[row][column] == '1') { + islands++; + dfs(grid, row, column); } } - - return islands; } -}; - -int main() { - vector> grid = {{'1', '1', '1', '1', '0'}, - {'1', '1', '0', '1', '0'}, - {'1', '1', '0', '0', '0'}, - {'0', '0', '0', '0', '0'}}; - cout << Solution().numIslands(grid); + return islands; } diff --git a/cpp/0200_number_of_islands/0200_number_of_islands.h b/cpp/0200_number_of_islands/0200_number_of_islands.h new file mode 100644 index 0000000..a5fe7ef --- /dev/null +++ b/cpp/0200_number_of_islands/0200_number_of_islands.h @@ -0,0 +1,9 @@ +#include + +using std::vector; + +class Solution { +public: + int numIslands(vector> &grid); +} +; diff --git a/cpp/0200_number_of_islands/0200_number_of_islands_test.cc b/cpp/0200_number_of_islands/0200_number_of_islands_test.cc new file mode 100644 index 0000000..f0d836a --- /dev/null +++ b/cpp/0200_number_of_islands/0200_number_of_islands_test.cc @@ -0,0 +1,27 @@ +#include "cpp/0200_number_of_islands/0200_number_of_islands.h" +#include +#include + +using std::vector; + +TEST(NumberOfIslands, Example1) { + vector> grid = {{'1', '1', '1', '1', '0'}, + {'1', '1', '0', '1', '0'}, + {'1', '1', '0', '0', '0'}, + {'0', '0', '0', '0', '0'}}; + + const int result = Solution().numIslands(grid); + + EXPECT_EQ(result, 1); +} + +TEST(NumberOfIslands, Example2) { + vector> grid = {{'1', '1', '0', '0', '0'}, + {'1', '1', '0', '0', '0'}, + {'0', '0', '1', '0', '0'}, + {'0', '0', '0', '1', '1'}}; + + const int result = Solution().numIslands(grid); + + EXPECT_EQ(result, 3); +} diff --git a/cpp/BUILD b/cpp/BUILD new file mode 100644 index 0000000..43893a3 --- /dev/null +++ b/cpp/BUILD @@ -0,0 +1,21 @@ +package(default_visibility = ["//visibility:public"]) +load("@rules_cc//cc:defs.bzl", "cc_test") + +cc_library( + name="exercises", + hdrs=glob(["**/**/*.h"]), + srcs = glob( + ["**/**/*.cc"], + exclude = ["**/**/*_test.cc"] + ), + visibility = ["//visibility:public"], +) + +cc_test( + name = "tests", + srcs = glob(["**/**/*_test.cc"]), + deps = [ + ":exercises", + "@com_google_googletest//:gtest_main" + ], +) diff --git a/typescript/BUILD b/typescript/BUILD new file mode 100644 index 0000000..7f2ed2a --- /dev/null +++ b/typescript/BUILD @@ -0,0 +1,8 @@ +exports_files(["tsconfig.json"]) + +ts_library( + name = "leetcode_typescript", + srcs = glob(["**/*.ts"]), + deps = [ + ], +)