Skip to content

Commit

Permalink
fix: missing header pada folder backtracking (#109)
Browse files Browse the repository at this point in the history
* fix: missing header pada folder backtracking

menggunakan fungsi cstdint pada untuk memperbaiki
issue pada error import builtin function uint64_t dan uint32_t

Signed-off-by: slowy07 <slowy.arfy@proton.me>

* chore: clang formatter and clang-tidy fixing 038b7bfd978380ad40e1ebda87b602b8

---------

Signed-off-by: slowy07 <slowy.arfy@proton.me>
Co-authored-by: github-actions[bot] <github-actions@users.noreply.github.com>
  • Loading branch information
slowy07 and github-actions[bot] authored Oct 12, 2024
1 parent bbed622 commit 8a618cc
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 120 deletions.
79 changes: 38 additions & 41 deletions backtracking/subarray_sum.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,62 +10,59 @@
* array saja.
*/

#include <iostream>
#include <cassert>
#include <cstdint>
#include <iostream>
#include <unordered_map>
#include <vector>

/**
* @brief algoritma backtracking
* @namespace backtracking
*
*
*/
namespace backtracking {
namespace subarray_sum{
/**
* @brief fungsi utama untuk implementasi dari subarray sum
* @param sum adalah yang diperlukan dari setiap subarray
* @param in_arr adalh input dari array
* @return jumlah dari angka set
*/
uint64_t subarray_sum(int64_t sum, const std::vector<int64_t> &in_arr){
int64_t nelement = in_arr.size();
int64_t count_of_subset = 0;
int64_t current_sum = 0;
std::unordered_map<int64_t, int64_t>
sumarray;

for (int64_t i = 0; i < nelement; i++){
current_sum += in_arr[i];
if (current_sum == sum){
count_of_subset++;
}
namespace subarray_sum {
/**
* @brief fungsi utama untuk implementasi dari subarray sum
* @param sum adalah yang diperlukan dari setiap subarray
* @param in_arr adalh input dari array
* @return jumlah dari angka set
*/
uint64_t subarray_sum(int64_t sum, const std::vector<int64_t> &in_arr) {
int64_t nelement = in_arr.size();
int64_t count_of_subset = 0;
int64_t current_sum = 0;
std::unordered_map<int64_t, int64_t> sumarray;

// jika seandainya current_sum lebih besar
// dari jumlah yang dibutuhkan
if (sumarray.find(current_sum - sum) != sumarray.end()){
count_of_subset += (sumarray[current_sum - sum]);
}
sumarray[current_sum]++;
}
return count_of_subset;
}
for (int64_t i = 0; i < nelement; i++) {
current_sum += in_arr[i];
if (current_sum == sum) {
count_of_subset++;
}

// jika seandainya current_sum lebih besar
// dari jumlah yang dibutuhkan
if (sumarray.find(current_sum - sum) != sumarray.end()) {
count_of_subset += (sumarray[current_sum - sum]);
}
sumarray[current_sum]++;
}
return count_of_subset;
}
} // namespace subarray_sum
} // namespace backtracking

static void testing(){
std::cout<<"test pertama ";
std::vector<int64_t> array1 = {-7, -3, -2, 5, 8};
assert(
backtracking::subarray_sum::subarray_sum(0, array1) == 1
);
static void testing() {
std::cout << "test pertama ";
std::vector<int64_t> array1 = {-7, -3, -2, 5, 8};
assert(backtracking::subarray_sum::subarray_sum(0, array1) == 1);

std::cout<<"berhasil!"<<std::endl;
std::cout << "berhasil!" << std::endl;
}

int main() {
testing();

int main(){
testing();

return 0;
return 0;
}
147 changes: 68 additions & 79 deletions backtracking/wildcard_matching.cpp
Original file line number Diff line number Diff line change
@@ -1,99 +1,88 @@
#include <cassert>
#include <iostream>
#include <vector>
#include <cassert>
#include <cstdint>
#include <iostream>
#include <vector>

namespace backtracking {
namespace wildcard_matching {
std::vector<std::vector<int64_t>> dpTable(1000, std::vector<int64_t>(1000, -1));
bool wildcard_matching(std::string s, std::string p, uint32_t pos1,
uint32_t pos2) {
uint32_t n = s.length();
uint32_t m = p.length();
if (pos1 == n && pos2 == m) {
return true;
std::uint32_t pos2) {
uint32_t n = s.length();
uint32_t m = p.length();
if (pos1 == n && pos2 == m) {
return true;
}
if (pos1 != n && pos2 == m) {
return false;
}
if (pos1 == n && pos2 != m) {
while (pos2 < m && p[pos2] == '*') {
pos2++;
}
if (pos1 != n && pos2 == m) {
return false;
}
if (pos1 == n && pos2 != m) {
while (pos2 < m && p[pos2] == '*') {
pos2++;
}

return pos2 == m;
}
if (dpTable[pos1][pos2] != -1) {
return dpTable[pos1][pos2];
}
if (s[pos1] == p[pos2]) {
return dpTable[pos1][pos2] =
wildcard_matching(s, p, pos1 + 1, pos2 + 1);
}
return pos2 == m;
}
if (dpTable[pos1][pos2] != -1) {
return dpTable[pos1][pos2];
}
if (s[pos1] == p[pos2]) {
return dpTable[pos1][pos2] = wildcard_matching(s, p, pos1 + 1, pos2 + 1);
}

else {
if (p[pos2] == '?') {
return dpTable[pos1][pos2] =
wildcard_matching(s, p, pos1 + 1, pos2 + 1);
}
else if (p[pos2] == '*') {
return dpTable[pos1][pos2] =
wildcard_matching(s, p, pos1, pos2 + 1) ||
wildcard_matching(s, p, pos1 + 1, pos2);
}
else {
return dpTable[pos1][pos2] = 0;
}
else {
if (p[pos2] == '?') {
return dpTable[pos1][pos2] = wildcard_matching(s, p, pos1 + 1, pos2 + 1);
} else if (p[pos2] == '*') {
return dpTable[pos1][pos2] = wildcard_matching(s, p, pos1, pos2 + 1) ||
wildcard_matching(s, p, pos1 + 1, pos2);
} else {
return dpTable[pos1][pos2] = 0;
}
}
}

} // namespace wildcard_matching
} // namespace backtracking

} // namespace wildcard_matching
} // namespace backtracking

static void test() {
std::cout << "1st test ";
std::string matching1 = "baaabab";
std::string pattern1 = "*****ba*****ab";
assert(backtracking::wildcard_matching::wildcard_matching(matching1,
pattern1, 0, 0) ==
1);
std::cout << "passed" << std::endl;

std::cout << "1st test ";
std::string matching1 = "baaabab";
std::string pattern1 = "*****ba*****ab";
assert(backtracking::wildcard_matching::wildcard_matching(matching1, pattern1,
0, 0) == 1);
std::cout << "passed" << std::endl;

std::cout << "2nd test ";
std::string matching2 = "baaabab";
std::string pattern2 = "ba*****ab";
assert(backtracking::wildcard_matching::wildcard_matching(matching2,
pattern2, 0, 0) ==
1);
std::cout << "passed" << std::endl;
std::cout << "2nd test ";
std::string matching2 = "baaabab";
std::string pattern2 = "ba*****ab";
assert(backtracking::wildcard_matching::wildcard_matching(matching2, pattern2,
0, 0) == 1);
std::cout << "passed" << std::endl;

std::cout << "3rd test ";
std::string matching3 = "baaabab";
std::string pattern3 = "ba*ab";
assert(backtracking::wildcard_matching::wildcard_matching(matching3,
pattern3, 0, 0) ==
1);
std::cout << "passed" << std::endl;
std::cout << "3rd test ";
std::string matching3 = "baaabab";
std::string pattern3 = "ba*ab";
assert(backtracking::wildcard_matching::wildcard_matching(matching3, pattern3,
0, 0) == 1);
std::cout << "passed" << std::endl;

std::cout << "4th test ";
std::string matching4 = "baaabab";
std::string pattern4 = "a*ab";
assert(backtracking::wildcard_matching::wildcard_matching(matching4,
pattern4, 0, 0) ==
1);
std::cout << "passed" << std::endl;
std::cout << "4th test ";
std::string matching4 = "baaabab";
std::string pattern4 = "a*ab";
assert(backtracking::wildcard_matching::wildcard_matching(matching4, pattern4,
0, 0) == 1);
std::cout << "passed" << std::endl;

std::cout << "5th test ";
std::string matching5 = "baaabab";
std::string pattern5 = "aa?ab";
assert(backtracking::wildcard_matching::wildcard_matching(matching5,
pattern5, 0, 0) ==
1);
std::cout << "passed" << std::endl;
std::cout << "5th test ";
std::string matching5 = "baaabab";
std::string pattern5 = "aa?ab";
assert(backtracking::wildcard_matching::wildcard_matching(matching5, pattern5,
0, 0) == 1);
std::cout << "passed" << std::endl;
}

int main() {
test();
return 0;
}
test();
return 0;
}

0 comments on commit 8a618cc

Please sign in to comment.