-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMergedStringChecker.js
More file actions
80 lines (73 loc) · 2.7 KB
/
MergedStringChecker.js
File metadata and controls
80 lines (73 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// https://www.codewars.com/kata/54c9fcad28ec4c6e680011aa
/*
isMerge :: String -> String -> String -> Bool
isMerge "" "" "" = True
isMerge a "" c = a == c
isMerge a b "" = a == b
isMerge a@(x:xs) b@(y:ys) c@(z:zs)
| a == b ++ c = True
| a == c ++ b = True
| and [x == y, x == z] = or [mergeLeft , mergeRight]
| x == y = mergeLeft
| x == z = mergeRight
| otherwise = False
where
mergeLeft = isMerge xs ys c
mergeRight = isMerge xs b zs
isMerge _ _ _ = False
*/
function isMerge(s, part1, part2) {
console.log("isMerge");
console.log({ s });
console.log({ part1 });
console.log({ part2 });
console.log();
if (s.length == 0) {
return part1.length == 0 && part2.length == 0;
// if (part1.length == 0 && part2.length == 0) return true;
// else return false;
}
else {
isMergeLeft = function () {
console.log("isMergeLeft");
// console.log({ s });
// console.log({ part1 });
// console.log({ part2 });
// console.log();
return isMerge(s.slice(1), part1.slice(1), part2);
};
isMergeRight = function () {
console.log("isMergeRight");
// console.log({ s });
// console.log({ part1 });
// console.log({ part2 });
// console.log();
return isMerge(s.slice(1), part1, part2.slice(1));
};
switch (true) {
case part1.length == 0: return s == part2;
case part2.length == 0: return s == part1;
case s == part1 + part2: return true;
case s == part2 + part1: return true;
case s[0] == part1[0] && s[0] == part2[0]: {
// return isMergeLeft() || isMergeRight();
return isMerge(s.slice(1), part1.slice(1), part2) || isMerge(s.slice(1), part1, part2.slice(1));
}
// case s[0] == part1[0]: return isMergeLeft();
// case s[0] == part2[0]: return isMergeRight();
case s[0] == part1[0]: return isMerge(s.slice(1), part1.slice(1), part2);
case s[0] == part2[0]: return isMerge(s.slice(1), part1, part2.slice(1));
default: return false;
}
}
}
// console.log(isMerge('', '', ''));
// console.log(isMerge('', 'a', ''));
// console.log(isMerge('', '', 'b'));
// console.log(isMerge('', '', 'b'));
console.log( isMerge("cac", "c", "ca"));
// console.log(isMerge('codewars', 'code', 'wars'));
// console.log(isMerge('codewars', 'wars', 'code'));
// console.log(isMerge('codewars', 'cdw', 'oears'));
// console.log(isMerge('codewars', 'cod', 'wars'));
// console.log(isMerge("Bananas from Bahamas", "Bahas", "Bananas from am"));