From 3352fd94304c12533a5602ba460bac64889c4d46 Mon Sep 17 00:00:00 2001 From: Subham1999 Date: Fri, 20 Sep 2024 14:41:33 +0530 Subject: [PATCH 1/6] ADDED --- .idea/workspace.xml | 74 +++++++++++----- .../array/NumberOfWonderfulSubstrings.java | 50 +++++++++++ .../backtracking/SudokuSolver.java | 28 ++++++ .../MaximizeTheMinimumPoweredCity.java | 67 ++++++++++++++ .../dp/DifferentWaysToAddParenthesis.java | 44 ++++++++++ .../com/thealgorithm/dp/StrangePrinter.java | 50 +++++++++++ .../graph/EulerianPathOnDirectedGraph.java | 44 ++++++++++ .../graph/ValidArrangementOfPairs.java | 13 +++ .../thealgorithm/interval/MergeInterval.java | 88 +++++++++++++++++++ .../com/thealgorithm/strings/RollingHash.java | 35 ++++++++ 10 files changed, 469 insertions(+), 24 deletions(-) create mode 100644 data-structures/src/main/java/com/thealgorithm/array/NumberOfWonderfulSubstrings.java create mode 100644 data-structures/src/main/java/com/thealgorithm/backtracking/SudokuSolver.java create mode 100644 data-structures/src/main/java/com/thealgorithm/binsearch/MaximizeTheMinimumPoweredCity.java create mode 100644 data-structures/src/main/java/com/thealgorithm/dp/DifferentWaysToAddParenthesis.java create mode 100644 data-structures/src/main/java/com/thealgorithm/dp/StrangePrinter.java create mode 100644 data-structures/src/main/java/com/thealgorithm/graph/EulerianPathOnDirectedGraph.java create mode 100644 data-structures/src/main/java/com/thealgorithm/graph/ValidArrangementOfPairs.java create mode 100644 data-structures/src/main/java/com/thealgorithm/interval/MergeInterval.java create mode 100644 data-structures/src/main/java/com/thealgorithm/strings/RollingHash.java diff --git a/.idea/workspace.xml b/.idea/workspace.xml index df09c66..ffbb2f8 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,7 +5,15 @@ - + + + + + + + + + @@ -96,13 +104,13 @@ - - - @@ -608,6 +624,16 @@ 23 - - - - - - - - - + + + + + + + + + + + + - { - "keyToString": { - "ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true", - "RunOnceActivity.OpenProjectViewOnStart": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "SHARE_PROJECT_CONFIGURATION_FILES": "true", - "git-widget-placeholder": "back__tracking", - "jdk.selected.JAVA_MODULE": "openjdk-21 (3)", - "onboarding.tips.debug.path": "/Users/subhamsantra/Projects/Interview/TheAlgorithm/low-level-design/src/main/java/com/subham/tbpp/Main.java", - "settings.editor.selected.configurable": "preferences.lookFeel" + +}]]> + + + + - - - @@ -630,9 +646,29 @@ diff --git a/data-structures/src/main/java/com/thealgorithm/array/FindTwonNonOverlappingSubArrays.java b/data-structures/src/main/java/com/thealgorithm/array/FindTwonNonOverlappingSubArrays.java new file mode 100644 index 0000000..42bab14 --- /dev/null +++ b/data-structures/src/main/java/com/thealgorithm/array/FindTwonNonOverlappingSubArrays.java @@ -0,0 +1,67 @@ +package com.thealgorithm.array; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author: Subham Santra + */ +public class FindTwonNonOverlappingSubArrays { + public int minSumOfLengths(int[] arr, int target) { + int n = arr.length; + int INF = 1000_000; + int[] prefix = new int[n]; + int[] suffix = new int[n]; + + Map map = new HashMap<>(); + + int sum = 0; + map.put(0, -1); + for (int i = 0; i < n; ++i) { + int boundary = map.getOrDefault(sum - target, -2); + if (boundary != -2) { + prefix[i] = i - boundary - 1; + } else { + prefix[i] = (i == 0 ? INF : prefix[i - 1]); + } + sum += arr[i]; + map.put(sum, i); + } + + map.clear(); + map.put(0, n); + sum = 0; + + for (int i = n - 1; i >= 0; --i) { + sum += arr[i]; + int boundary = map.getOrDefault(sum - target, -2); + if (boundary != -2) { + suffix[i] = boundary - i; + } else { + suffix[i] = (i == (n - 1) ? INF : suffix[i + 1]); + } + map.put(sum, i); + } + +// System.out.println(Arrays.toString(prefix)); +// System.out.println(Arrays.toString(suffix)); + + for (int i = 1; i < n; ++i) prefix[i] = Math.min(prefix[i - 1], prefix[i]); + for (int i = n - 2; i >= 0; --i) suffix[i] = Math.min(suffix[i + 1], suffix[i]); + + int ans = INF; + for (int i = 0; i < n; ++i) { + ans = Math.min(ans, prefix[i] + suffix[i]); + } + return ans == INF ? -1 : ans; + } + + public static void main(String[] args) { + + System.out.println( + new FindTwonNonOverlappingSubArrays().minSumOfLengths(new int[] {1, 1, 2, 2, 2, 4, 3}, 3)); + + System.out.println( + new FindTwonNonOverlappingSubArrays().minSumOfLengths(new int[] {4, 3, 2, 6, 2, 3, 4}, 6)); + } +} diff --git a/data-structures/src/main/java/com/thealgorithm/array/KthSmallestInLexicographicalOrder.java b/data-structures/src/main/java/com/thealgorithm/array/KthSmallestInLexicographicalOrder.java new file mode 100644 index 0000000..a47b505 --- /dev/null +++ b/data-structures/src/main/java/com/thealgorithm/array/KthSmallestInLexicographicalOrder.java @@ -0,0 +1,74 @@ +//package com.thealgorithm.array; +// +//import java.util.Arrays; +// +///** +// * @author: Subham Santra +// */ +//public class KthSmallestInLexicographicalOrder { +// int[] off = {1, 11, 111, 111_1, 111_11, 111_111, 111_111_1, 111_111_11, 111_111_111}; +// int[] off_d = {-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; +// int[] off_z = {1, 9, 99, 999, 999_9, 999_99, 999_999, 999_999_9, 999_999_99, 999_999_999}; +// +// public int findKthNumber(int n, int k) { +// if (n <= 9) { +// return k; +// } +// int nd = (int) Math.ceil(Math.log10(n)); +// int[] an = new int[nd]; +// Arrays.fill(an, -1); +// func(an, nd, 0, k); +// // System.out.println(Arrays.toString(an)); +// +// int num = 0; +// for (int ix : an) { +// if (ix == -1) { +// break; +// } +// num = (num * 10 + ix); +// } +// return num; +// } +// +// void func(int[] a, int n, int i, int k) { +// // System.out.println(Arrays.toString(a) + " " + n + " " + i + " " + k); +// if (i >= n) { +// return; +// } +// if (i == n - 1) { +// a[i] = a.length == 0 ? off_d[k] : off_d[k - 1]; +// return; +// } +// int rem = a.length - i - 1; +// +// for (int d = (i == 0 ? 1 : 0); d <= 9; ++d) { +// if (d == 0) { +// int range = 0; +// for (int r = 0; r < rem; ++r) { +// range += (r == 0) ? 1 : (off[r] * 9); +// } +// if (k <= range) { +// a[i] = d; +// func(a, n, i + 1, k); +// return; +// } +// k -= range; +// } else { +// int range = off[rem]; +// if (k <= range) { +// a[i] = d; +// func(a, n, i + 1, k); +// return; +// } +// k -= range; +// } +// } +// } +// +// public static void main(String[] args) { +// System.out.println(new KthSmallestInLexicographicalOrder().findKthNumber(13, 5)); +// System.out.println(new KthSmallestInLexicographicalOrder().findKthNumber(1, 1)); +// System.out.println(new KthSmallestInLexicographicalOrder().findKthNumber(37, 25)); +// Arrays.bin +// } +//} diff --git a/data-structures/src/main/java/com/thealgorithm/array/ShortestPalindrome.java b/data-structures/src/main/java/com/thealgorithm/array/ShortestPalindrome.java new file mode 100644 index 0000000..975550d --- /dev/null +++ b/data-structures/src/main/java/com/thealgorithm/array/ShortestPalindrome.java @@ -0,0 +1,35 @@ +package com.thealgorithm.array; + +/** + * @author: Subham Santra + */ +public class ShortestPalindrome { + static class Solution { + public String shortestPalindrome(String s) { +// int n = s.length(); +// int mid = (s.length() % 2 == 1) ? (s.length() / 2) : ((s.length() / 2) - 1); +// String answer = s + s; +// +// for (int i = 0; i <= mid; ++i) { +// +// } +// return answer; + return "0"; + } + + boolean match(String s, int mid, int length) { +// for (int i = 0, j = mid + length; 0 <= i && ) + return false; + } + } + + public static void main(String[] args) { + System.out.println(new Solution().shortestPalindrome("abbad")); // dabbad + System.out.println(new Solution().shortestPalindrome("abcd").equals("dcbabcd")); + System.out.println(new Solution().shortestPalindrome("aaab").equals("baaab")); + System.out.println(new Solution().shortestPalindrome("aa").equals("aa")); + System.out.println(new Solution().shortestPalindrome("ab").equals("bab")); + System.out.println(new Solution().shortestPalindrome("aca").equals("aca")); + System.out.println(new Solution().shortestPalindrome("aaca").equals("acaaca")); + } +} diff --git a/data-structures/src/main/java/com/thealgorithm/dp/MatchsticksToSquare.java b/data-structures/src/main/java/com/thealgorithm/dp/MatchsticksToSquare.java new file mode 100644 index 0000000..4672e3c --- /dev/null +++ b/data-structures/src/main/java/com/thealgorithm/dp/MatchsticksToSquare.java @@ -0,0 +1,102 @@ +package com.thealgorithm.dp; + +/** + * @author: Subham Santra + */ +public class MatchsticksToSquare { + static class Solution { + Boolean[][] DP; + + int getMask(boolean a, boolean b, boolean c, boolean d) { + int mask = 0b0000; + if (a) mask |= 0b1000; + if (b) mask |= 0b0100; + if (c) mask |= 0b0010; + if (d) mask |= 0b0001; + return mask; + } + + public boolean makesquare(int[] matchsticks) { + int n = matchsticks.length; + DP = new Boolean[n + 1][5]; + int sum = 0; + for (int x : matchsticks) sum += x; + + if (sum % 4 == 0) { + // return func(matchsticks, 0, 0, 0, 0, 0, (sum / 4)); + return funcWithoutDP(matchsticks, 0, 0, 0, 0, 0, (sum / 4)); + } + return false; + } + + boolean funcWithoutDP(int[] arr, int index, int s1, int s2, int s3, int s4, int t) { + if (index == arr.length) { + if (s1 == s2 && s2 == s3 && s3 == s4 && s4 == t) { + return true; + } + return false; + } + + return func(arr, index + 1, s1 + arr[index], s2, s3, s4, t) + || func(arr, index + 1, s1, s2 + arr[index], s3, s4, t) + || func(arr, index + 1, s1, s2, s3 + arr[index], s4, t) + || func(arr, index + 1, s1, s2, s3, s4 + arr[index], t); + } + + boolean func(int[] arr, int index, int s1, int s2, int s3, int s4, int t) { + if (index == arr.length) { + if (s1 == s2 && s2 == s3 && s3 == s4 && s4 == t) { + return true; + } + return false; + } + + if (DP[index][4] != null + && DP[index][1] != null + && DP[index][2] != null + && DP[index][3] != null) { + return DP[index][4] || DP[index][1] || DP[index][2] || DP[index][3]; + } + + DP[index][1] = func(arr, index + 1, s1 + arr[index], s2, s3, s4, t); + DP[index][2] = func(arr, index + 1, s1, s2 + arr[index], s3, s4, t); + DP[index][3] = func(arr, index + 1, s1, s2, s3 + arr[index], s4, t); + DP[index][4] = func(arr, index + 1, s1, s2, s3, s4 + arr[index], t); + + return DP[index][1] || DP[index][2] || DP[index][3] || DP[index][4]; + } + } + + /** + * 1 1 2 2 2 + * + *

-> 8 / 4 == 2 + * + *

1 1 2 2 2 + * + *

{1, 1} {2} {2} {2} + * + *

size = 5 + * + *

{1, 1, 1, 2, 3, 3, 4, 5} {3, 2} {4, 1} {5} {3, 1, 1} + * + *

0000 --> 1111 0 to 31 {1, 4, 3, 3, 4, 5} + * + *

1. Subset SUM + * + *

[] [] [] [] + * + *

--> bit DP --> 0000 -> int[index][mask] boolean [][][][][]DP + * + *

f (s1, s2, s3, s4, i, T) { // O(4^N) if (s1 == s2 == s3 == s4 == t) --> true; if i >= length + * --> false; if any of (s1, s2, s3, s4) > T --> false + * + *

return f(s1 + a[i], s2, s3, s4, i + 1, T) OR f(s1, s2 + a[i], s3, s4, i + 1, T) OR f(s1, s2, + * s3 + a[i], s4, i + 1, T) OR f(s1, s2, s3, s4 + a[i], i + 1, T) } + */ + public static void main(String[] args) { + System.out.println(new Solution().makesquare(new int[] {1, 1, 2, 2, 2})); + System.out.println(new Solution().makesquare(new int[] {3, 3, 3, 3, 4})); + System.out.println(new Solution().makesquare(new int[] {5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3})); + } +} diff --git a/data-structures/src/main/java/com/thealgorithm/graph/Capacity.java b/data-structures/src/main/java/com/thealgorithm/graph/Capacity.java new file mode 100644 index 0000000..dfdfa15 --- /dev/null +++ b/data-structures/src/main/java/com/thealgorithm/graph/Capacity.java @@ -0,0 +1,6 @@ +package com.thealgorithm.graph; + +/** + * @author: Subham Santra + */ +public class Capacity {} diff --git a/data-structures/src/main/java/com/thealgorithm/graph/Edge.java b/data-structures/src/main/java/com/thealgorithm/graph/Edge.java index d0bf120..e2588bd 100644 --- a/data-structures/src/main/java/com/thealgorithm/graph/Edge.java +++ b/data-structures/src/main/java/com/thealgorithm/graph/Edge.java @@ -11,13 +11,50 @@ public class Edge { private Vertex vertex1; private Vertex vertex2; private double weight = 1D; + private final int capacity; + private int currentFlow; + private int residualCapacity; public static Edge createSimpleEdgeUnWeighted(V v1, V v2) { - return new Edge<>(Vertex.create(v1), Vertex.create(v2), 0D); + return new Edge<>(Vertex.create(v1), Vertex.create(v2), 0D, 0, 0, 0); } public static Edge createEdge(V v1, V v2, double weight) { - return new Edge<>(Vertex.create(v1), Vertex.create(v2), weight); + return new Edge<>(Vertex.create(v1), Vertex.create(v2), weight, 0, 0, 0); + } + + public static Edge createNetworkEdge(V v1, V v2, int capacity) { + return new Edge<>(Vertex.create(v1), Vertex.create(v2), 0D, capacity, 0, capacity); + } + + public int reduceFlow(int delta) { + if (currentFlow - delta < 0) { + throw new RuntimeException("Flow can not be (-)ve"); + } + currentFlow -= delta; + residualCapacity += delta; + return residualCapacity; + } + + public int increaseFlow(int delta) { + if (currentFlow + delta > capacity) { + throw new RuntimeException("Flow can not be more than capacity"); + } + currentFlow += delta; + residualCapacity -= delta; + return residualCapacity; + } + + public int setFlow(int flow) { + if (flow < 0) { + throw new RuntimeException("Flow can not be (-)ve"); + } + if (flow > capacity) { + throw new RuntimeException("Flow can not be more than capacity"); + } + currentFlow = flow; + residualCapacity = capacity - flow; + return residualCapacity; } @Override diff --git a/data-structures/src/main/java/com/thealgorithm/graph/EdmondKarpAlgorithm.java b/data-structures/src/main/java/com/thealgorithm/graph/EdmondKarpAlgorithm.java new file mode 100644 index 0000000..139ac9e --- /dev/null +++ b/data-structures/src/main/java/com/thealgorithm/graph/EdmondKarpAlgorithm.java @@ -0,0 +1,97 @@ +package com.thealgorithm.graph; + +import com.thealgorithm.commons.Pair; +import java.util.ArrayDeque; +import java.util.HashMap; +import java.util.Map; +import java.util.Queue; + +/** + * @author: Subham Santra + */ +public class EdmondKarpAlgorithm { + private static final int INF = Integer.MAX_VALUE; + + private int BFS( + final Vertex source, + final Vertex sink, + final Map, Vertex> parent, + final Map, Map, Integer>> capacityMatrix) { + + Queue, Integer>> queue = new ArrayDeque<>(); + queue.add(Pair.of(source, INF)); + + while (!queue.isEmpty()) { + Pair, Integer> vPair = queue.poll(); + Vertex currentVertex = vPair.getFirst(); + for (Vertex neighbor : currentVertex.getNeighbors()) { + if ((parent.get(neighbor) == null) + && (capacityMatrix.get(currentVertex).get(neighbor) > 0)) { + parent.put(neighbor, currentVertex); + int maxFlow = + Math.min(capacityMatrix.get(currentVertex).get(neighbor), vPair.getSecond()); + if (currentVertex.equals(sink)) { + return maxFlow; + } + queue.add(Pair.of(neighbor, maxFlow)); + } + } + } + return 0; + } + + public int maxFlow( + final Graph graph, final Vertex source, final Vertex sink) { + Map, Map, Integer>> capacityMatrix = new HashMap<>(); + + for (var v : graph.getVertexSet()) { + capacityMatrix.put(v, new HashMap<>()); + } + for (var e : capacityMatrix.keySet()) { + for (var v : graph.getVertexSet()) { + capacityMatrix.get(e).put(v, 0); + } + } + for (var edge : graph.getEdgeSet()) { + capacityMatrix.get(edge.getVertex1()).put(edge.getVertex2(), edge.getResidualCapacity()); + } + + int totalFlow = 0; + + while (true) { + Map, Vertex> parent = new HashMap<>(); + int maxFlow = BFS(source, sink, parent, capacityMatrix); + if (maxFlow == 0) { + break; + } + totalFlow += maxFlow; + Vertex v = sink; + while (!v.equals(source)) { + Vertex p = parent.get(v); + capacityMatrix.get(p).put(v, capacityMatrix.get(p).get(v) - maxFlow); + capacityMatrix.get(v).put(p, capacityMatrix.get(v).get(p) + maxFlow); + v = p; + } + } + return totalFlow; + } + + public static void main(String[] args) { + // Finding MAX FLOW from source to destination + Graph graph = new Graph<>(true); + + graph.addEdge(Edge.createNetworkEdge('S', 'A', 7)); + graph.addEdge(Edge.createNetworkEdge('S', 'D', 4)); + graph.addEdge(Edge.createNetworkEdge('D', 'A', 3)); + graph.addEdge(Edge.createNetworkEdge('D', 'A', 3)); + graph.addEdge(Edge.createNetworkEdge('D', 'C', 2)); + graph.addEdge(Edge.createNetworkEdge('A', 'C', 3)); + graph.addEdge(Edge.createNetworkEdge('A', 'B', 5)); + graph.addEdge(Edge.createNetworkEdge('B', 'T', 8)); + graph.addEdge(Edge.createNetworkEdge('C', 'B', 3)); + graph.addEdge(Edge.createNetworkEdge('C', 'T', 5)); + + System.out.println( + new EdmondKarpAlgorithm().maxFlow(graph, graph.getVertex('S'), graph.getVertex('T'))); + } +} diff --git a/data-structures/src/main/java/com/thealgorithm/graph/Graph.java b/data-structures/src/main/java/com/thealgorithm/graph/Graph.java index abad3c4..839243c 100644 --- a/data-structures/src/main/java/com/thealgorithm/graph/Graph.java +++ b/data-structures/src/main/java/com/thealgorithm/graph/Graph.java @@ -38,4 +38,8 @@ void clear() { edgeSet.clear(); isDirected = false; } + + Vertex getVertex(K key) { + return vertexSet.stream().filter(v -> v.getKey().equals(key)).findFirst().get(); + } } diff --git a/data-structures/src/main/java/com/thealgorithm/lld/SnapshotArray.java b/data-structures/src/main/java/com/thealgorithm/lld/SnapshotArray.java new file mode 100644 index 0000000..56e4cd9 --- /dev/null +++ b/data-structures/src/main/java/com/thealgorithm/lld/SnapshotArray.java @@ -0,0 +1,79 @@ +package com.thealgorithm.lld; + +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map; +import java.util.NavigableSet; +import java.util.TreeSet; + +/** + * @author: Subham Santra + */ +public class SnapshotArray { + static class Pair { + int snap; + int val; + + public Pair(int s, int v) { + this.snap = s; + this.val = v; + } + + public String toString() { + return String.format("[%d @%d]", val, snap); + } + } + + private int snapId; + private final Map> snapshots; + + public SnapshotArray(int length) { + snapshots = new HashMap<>(); + for (int i = 0; i < length; ++i) { + snapshots.put(i, new TreeSet<>(Comparator.comparingInt(p -> p.snap))); + } + } + + public void set(int index, int val) { + TreeSet change = snapshots.get(index); + if (!change.isEmpty() && change.getLast().snap == snapId) { + change.getLast().val = val; + } else { + change.add(new Pair(snapId, val)); + } + print(); + } + + public int snap() { + return snapId++; + } + + public int get(int index, int snap_id) { + TreeSet change = snapshots.get(index); + NavigableSet pairs = change.headSet(new Pair(snap_id, 0), true); + if (pairs.isEmpty()) return 0; + return pairs.getLast().val; + } + + public void print() { + System.out.println(snapshots); + } + + /** + * Your SnapshotArray object will be instantiated and called as such: SnapshotArray obj = new + * SnapshotArray(length); obj.set(index,val); int param_2 = obj.snap(); int param_3 = + * obj.get(index,snap_id); + */ + public static void main(String[] args) { + SnapshotArray snapshotArray = new SnapshotArray(1); + + snapshotArray.set(0, 15); + System.out.println(snapshotArray.snap()); + System.out.println(snapshotArray.snap()); + System.out.println(snapshotArray.snap()); + System.out.println(snapshotArray.get(0, 2)); + System.out.println(snapshotArray.snap()); + System.out.println(snapshotArray.snap()); + System.out.println(snapshotArray.get(0, 0)); + } +} diff --git a/data-structures/src/main/java/com/thealgorithm/strings/BasicCalculator.java b/data-structures/src/main/java/com/thealgorithm/strings/BasicCalculator.java new file mode 100644 index 0000000..07236e8 --- /dev/null +++ b/data-structures/src/main/java/com/thealgorithm/strings/BasicCalculator.java @@ -0,0 +1,94 @@ +package com.thealgorithm.strings; + +import java.util.ArrayDeque; + +/** + * @author: Subham Santra + */ +public class BasicCalculator { + public int calculate(String s) { + s = clean(s); + ArrayDeque runstack = new ArrayDeque<>(); + ArrayDeque opstack = new ArrayDeque<>(); + + for (int i = 0; i < s.length(); ) { + char c = s.charAt(i); + if (Character.isDigit(c)) { + int[] e = nextInt(s, i); + runstack.addLast(e[0]); + i = e[1]; + while (!opstack.isEmpty() + && (opstack.getLast() == '*' || opstack.getLast() == '/') + && runstack.size() > 1) { + int last = runstack.pollLast(); + int secondLast = runstack.pollLast(); + runstack.addLast(perform(secondLast, last, opstack.pollLast())); + } + } else { + opstack.addLast(c); + ++i; + } + } + while (runstack.size() > 1) { + int last = runstack.pollFirst(); + int secondLast = runstack.pollFirst(); + int result = perform(last, secondLast, opstack.pollFirst()); + runstack.addFirst(result); + } + return runstack.peek(); + } + + int ord(char c) { + switch (c) { + case '/': + return 4; + case '*': + return 3; + case '+': + return 1; + case '-': + return 1; + } + return 0; + } + + private int perform(int i, int j, char op) { + switch (op) { + case '-': + return i - j; + case '+': + return i + j; + case '*': + return i * j; + case '/': + return i / j; + } + return 0; + } + + String clean(String s) { + StringBuilder sb = new StringBuilder(); + for (char c : s.toCharArray()) { + if (c != ' ') sb.append(c); + } + return sb.toString(); + } + + int[] nextInt(String s, int i) { + int n = 0; + while (i < s.length() && Character.isDigit(s.charAt(i))) { + n = (n * 10) + (s.charAt(i) - '0'); + ++i; + } + return new int[] {n, i}; + } + + public static void main(String[] args) { + System.out.println(new BasicCalculator().calculate("1-1")); + System.out.println(new BasicCalculator().calculate("1-1+1")); + System.out.println(new BasicCalculator().calculate("2+3*4/2-1")); + System.out.println(new BasicCalculator().calculate(" 3+5 / 2 ")); + // [8,1 + // [- + } +} diff --git a/data-structures/src/main/java/com/thealgorithm/strings/SumOfPrefixScores.java b/data-structures/src/main/java/com/thealgorithm/strings/SumOfPrefixScores.java new file mode 100644 index 0000000..1265644 --- /dev/null +++ b/data-structures/src/main/java/com/thealgorithm/strings/SumOfPrefixScores.java @@ -0,0 +1,126 @@ +//package com.thealgorithm.strings; +// +//import java.util.Arrays; +// +///** +// * @author: Subham Santra +// */ +//public class SumOfPrefixScores { +// static class TrieNode { +// char c; +// TrieNode[] nxt; +// boolean isEnd; +// int score; +// +// public TrieNode(char c) { +// this.c = c; +// this.nxt = new TrieNode[26]; +// } +// +// @Override +// public String toString() { +// return "<" + c + ", " + Arrays.toString(nxt) + '>'; +// } +// } +// +// static class Trie { +// TrieNode root = new TrieNode('a'); +// +// void add(String a) { +// add(a, 0, root); +// } +// +// void add(String a, int i, TrieNode node) { +// if (i == a.length()) return; +// node.score++; +// if (node.nxt[a.charAt(i) - 'a'] != null) { +// if (i == a.length() - 1) { +// node.nxt[a.charAt(i) - 'a'].isEnd = true; +// } +// add(a, i + 1, node.nxt[a.charAt(i) - 'a']); +// return; +// } +// node.nxt[a.charAt(i) - 'a'] = new TrieNode(a.charAt(i)); +// node.nxt[a.charAt(i) - 'a'].score = 1; +// if (i == a.length() - 1) { +// node.nxt[a.charAt(i) - 'a'].isEnd = true; +// } +// add(a, i + 1, node.nxt[a.charAt(i) - 'a']); +// } +// +// // void DFS() { +// // DFS(root); +// // } +// +// // int DFS(TrieNode node) { +// // if (node == null) { +// // return 0; +// // } +// // +// // boolean isNull = true; +// // for (int i = 0; i < node.nxt.length; ++i) { +// // if (node.nxt[i] != null) { +// // isNull = false; +// // break; +// // } +// // } +// // +// // if (isNull) { +// // return node.score = 1; +// // } +// // +// // for (int i = 0; i < node.nxt.length; ++i) { +// // node.score += DFS(node.nxt[i]); +// // } +// // +// // node.score += (node.isEnd ? 1 : 0); +// // return node.score; +// // } +// +// int scoreOf(String a) { +// TrieNode node = root.nxt[a.charAt(0) - 'a']; +// int i = 0; +// int score = 0; +// +// while (node != null) { +// score += node.score; +// if (i + 1 < a.length()) { +// node = node.nxt[a.charAt(i + 1) - 'a']; +// i++; +// } else { +// break; +// } +// } +// +// return score; +// } +// } +// +// static class Solution { +// public int[] sumPrefixScores(String[] words) { +// int[] score = new int[words.length]; +// Trie trie = new Trie(); +// +// for (String word : words) trie.add(word); +// +// // trie.DFS(); +// +// int idx = 0; +// for (String word : words) { +// score[idx] = trie.scoreOf(word); +// idx++; +// } +// +// return score; +// } +// } +// +// public static void main(String[] args) { +// System.out.println( +// Arrays.toString(new Solution().sumPrefixScores(new String[] {"abc", "ab", "bc", "b"}))); +// +// System.out.println(Arrays.toString(new Solution().sumPrefixScores(new String[] {"abcd"}))); +// +// Arrays.stream(new int[] {}).max().or +// } +//} diff --git a/data-structures/src/main/resources/edmond_karp.png b/data-structures/src/main/resources/edmond_karp.png new file mode 100644 index 0000000000000000000000000000000000000000..ed909c4a70a3ceb9aca0eaf15c2f535c4e1fcdad GIT binary patch literal 94029 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 literal 0 HcmV?d00001 From 255f666f3af05c0383d27022c8ed81b7e3ec39af Mon Sep 17 00:00:00 2001 From: Subham1999 Date: Fri, 4 Oct 2024 22:27:51 +0530 Subject: [PATCH 3/6] ADDED --- .idea/workspace.xml | 75 +++++++------- .../TimeTakenToCrossTheDoor.java | 97 +++++++++++++++++++ 2 files changed, 133 insertions(+), 39 deletions(-) create mode 100644 data-structures/src/main/java/com/thealgorithm/miscelleneous/TimeTakenToCrossTheDoor.java diff --git a/.idea/workspace.xml b/.idea/workspace.xml index f9e42f0..cc61a6f 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,19 +5,8 @@ - - - - - - - - - - + - - - { + "keyToString": { + "ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true", + "RunOnceActivity.OpenProjectViewOnStart": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "SHARE_PROJECT_CONFIGURATION_FILES": "true", + "git-widget-placeholder": "back__tracking", + "jdk.selected.JAVA_MODULE": "openjdk-21 (3)", + "last_opened_file_path": "/Users/subhamsantra/Projects/Interview/TheAlgorithm/data-structures/src/main/resources", + "onboarding.tips.debug.path": "/Users/subhamsantra/Projects/Interview/TheAlgorithm/low-level-design/src/main/java/com/subham/tbpp/Main.java", + "settings.editor.selected.configurable": "preferences.lookFeel" } -}]]> +} @@ -112,7 +101,7 @@ - + - - @@ -493,7 +482,15 @@ diff --git a/data-structures/src/main/java/com/thealgorithm/miscelleneous/TimeTakenToCrossTheDoor.java b/data-structures/src/main/java/com/thealgorithm/miscelleneous/TimeTakenToCrossTheDoor.java new file mode 100644 index 0000000..43be605 --- /dev/null +++ b/data-structures/src/main/java/com/thealgorithm/miscelleneous/TimeTakenToCrossTheDoor.java @@ -0,0 +1,97 @@ +package com.thealgorithm.miscelleneous; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.PriorityQueue; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @author: Subham Santra + */ +public class TimeTakenToCrossTheDoor { + static class Node implements Comparable { + int index; + int state; + int time; + + public Node(int index, int state, int time) { + this.index = index; + this.state = state; + this.time = time; + } + + @Override + public int compareTo(Node o) { + if (time == o.time) { + return Integer.compare(index, o.index); + } + return Integer.compare(time, o.time); + } + } + + List sameArrivals(PriorityQueue priorityQueue) { + List nodes = new ArrayList<>(); + int nextTime = priorityQueue.isEmpty() ? 0 : priorityQueue.peek().time; + while (!priorityQueue.isEmpty() && priorityQueue.peek().time == nextTime) { + nodes.add(priorityQueue.poll()); + } + return nodes; + } + + public int[] solve(int[] arrival, int[] state) { + final PriorityQueue entryQueue = new PriorityQueue<>(); + final int n = arrival.length; + final int[] timeToCross = new int[n]; + + for (int i = 0; i < n; ++i) { + entryQueue.add(new Node(i, state[i], arrival[i])); + } + + AtomicInteger lastSecond = new AtomicInteger(-2); + AtomicInteger lastState = new AtomicInteger(-2); + while (!entryQueue.isEmpty()) { + List sameArrivals = sameArrivals(entryQueue); + Node possibleNext; + if (lastSecond.get() == sameArrivals.get(0).time - 1) { + // Last second is used by someone else. + possibleNext = + sameArrivals.stream() + .filter(node -> node.state == lastState.get()) + .findFirst() + .orElse(sameArrivals.get(0)); + } else { + possibleNext = sameArrivals.get(0); + } + + // update result array for possibleNext + timeToCross[possibleNext.index] = possibleNext.time; + lastState.set(possibleNext.state); + lastSecond.set(possibleNext.time); + + // add again to entry queue + sameArrivals.stream() + .filter(node -> node.index != possibleNext.index) + .peek(node -> node.time++) + .forEach(entryQueue::add); + } + + return timeToCross; + } + + public static void main(String[] args) { + System.out.println( + Arrays.toString( + new TimeTakenToCrossTheDoor() + .solve(new int[] {0, 1, 1, 2, 4}, new int[] {0, 1, 0, 0, 1}))); + + System.out.println( + Arrays.toString( + new TimeTakenToCrossTheDoor() + .solve(new int[] {0, 0, 1, 1, 1, 2, 3}, new int[] {0, 1, 0}))); + + System.out.println( + Arrays.toString( + new TimeTakenToCrossTheDoor().solve(new int[] {0, 0, 0}, new int[] {1, 0, 1}))); + } +} From 94ac58653a23cf57741f349b2f16992d65efd047 Mon Sep 17 00:00:00 2001 From: Subham1999 Date: Wed, 9 Oct 2024 01:19:32 +0530 Subject: [PATCH 4/6] ADDED --- .idea/workspace.xml | 71 ++++++--- .../FindMinimumInRotatedSortedArray.java | 50 +++++++ .../graph/RegionCutBySlashes.java | 135 ++++++++++++++++++ .../java/com/thealgorithm/lld/Twitter.java | 120 ++++++++++++++++ .../strings/ReorganizeStrings.java | 73 ++++++++++ .../strings/StringWithoutAAAorBBB.java | 49 +++++++ 6 files changed, 476 insertions(+), 22 deletions(-) create mode 100644 data-structures/src/main/java/com/thealgorithm/binsearch/FindMinimumInRotatedSortedArray.java create mode 100644 data-structures/src/main/java/com/thealgorithm/graph/RegionCutBySlashes.java create mode 100644 data-structures/src/main/java/com/thealgorithm/lld/Twitter.java create mode 100644 data-structures/src/main/java/com/thealgorithm/strings/ReorganizeStrings.java create mode 100644 data-structures/src/main/java/com/thealgorithm/strings/StringWithoutAAAorBBB.java diff --git a/.idea/workspace.xml b/.idea/workspace.xml index cc61a6f..64edf2a 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,7 +5,11 @@ - + + + + + - - - @@ -667,6 +679,21 @@ 108 leetcode + * post + */ +public class RegionCutBySlashes { + + public static void main(String[] args) { + System.out.println(new RegionCutBySlashes().regionsBySlashes(new String[] {" /", "/ "})); + System.out.println(new RegionCutBySlashes().regionsBySlashes(new String[] {" /", " "})); + System.out.println(new RegionCutBySlashes().regionsBySlashes(new String[] {"/\\", "\\/"})); + } + + public int regionsBySlashes(String[] grid) { + List edges = new ArrayList<>(); + int m = grid.length + 1; + int n = grid[0].toCharArray().length + 1; + + for (int i = 0; i < grid.length; ++i) { + char[] row = grid[i].toCharArray(); + // System.out.println(Arrays.toString(row)); + for (int j = 0; j < row.length; ++j) { + if (row[j] == ' ') continue; + if (row[j] == '/') { + int u = vertexCode(i + 1, j, n); + int v = vertexCode(i, j + 1, n); + edges.add(new Edge(u, v)); + } else if (row[j] == '\\') { + int u = vertexCode(i, j, n); + int v = vertexCode(i + 1, j + 1, n); + edges.add(new Edge(u, v)); + } + } + } + + for (int j = 0; j < n - 1; ++j) { + int u = vertexCode(0, j, n); + int v = vertexCode(0, j + 1, n); + edges.add(new Edge(u, v)); + } + + for (int j = 0; j < n - 1; ++j) { + int u = vertexCode(m - 1, j, n); + int v = vertexCode(m - 1, j + 1, n); + edges.add(new Edge(u, v)); + } + + for (int i = 0; i < m - 1; ++i) { + int u = vertexCode(i, 0, n); + int v = vertexCode(i + 1, 0, n); + edges.add(new Edge(u, v)); + } + + for (int i = 0; i < m - 1; ++i) { + int u = vertexCode(i, n - 1, n); + int v = vertexCode(i + 1, n - 1, n); + edges.add(new Edge(u, v)); + } + + // RUN U-F here + int cycleCount = 0; + UnionFind unionFind = new UnionFind((m + 1) * (n + 1) + 1); + + for (Edge edge : edges) { + if (unionFind.addEdge(edge)) { + cycleCount++; + } + } + + return cycleCount; + } + + int vertexCode(int i, int j, int C) { + return (i * C) + j + 1; + } + + static class UnionFind { + private int[] UF; + + public UnionFind(int size) { + UF = new int[size]; + Arrays.fill(UF, -1); + } + + boolean addEdge(Edge e) { + int up = parent(e.u); + int vp = parent(e.v); + if (up == vp) { + // If already part of same group then cycle exists; + return true; + } + join(up, vp); + return false; + } + + int parent(int n) { + if (UF[n] < 0) { + return n; + } + return parent(UF[n]); + } + + void join(int a, int b) { + int x = UF[b]; + UF[b] = a; + UF[a] = UF[a] - Math.abs(x); + } + } + + static class Edge { + int u; + int v; + + public Edge(int u, int v) { + this.u = u; + this.v = v; + } + + public int hashCode() { + return Objects.hash(u, v); + } + + public boolean equals(Object e) { + return (e != null) && (e instanceof Edge) && (((Edge) e).u == u && ((Edge) e).v == v); + } + } +} diff --git a/data-structures/src/main/java/com/thealgorithm/lld/Twitter.java b/data-structures/src/main/java/com/thealgorithm/lld/Twitter.java new file mode 100644 index 0000000..7193b34 --- /dev/null +++ b/data-structures/src/main/java/com/thealgorithm/lld/Twitter.java @@ -0,0 +1,120 @@ +package com.thealgorithm.lld; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.PriorityQueue; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * @author: Subham Santra + */ +class Tweet { + int tweetId; + int time; + + public Tweet(int te, int tm) { + this.tweetId = te; + this.time = tm; + } + + public int hashcode() { + return time; + } + + public boolean equals(Tweet t) { + if (t == null) return false; + return t.time == time; + } + + @Override + public String toString() { + return "Tweet{" + "tweetId=" + tweetId + ", time=" + time + '}'; + } +} + +public class Twitter { + private final Map> following; + private final Map> tweets; + private final AtomicInteger atom = new AtomicInteger(0); + + public Twitter() { + following = new HashMap<>(); + tweets = new HashMap<>(); + } + + public void postTweet(int userId, int tweetId) { + tweets.putIfAbsent(userId, new LinkedHashSet<>()); + tweets.get(userId).add(new Tweet(tweetId, atom.incrementAndGet())); + if (tweets.get(userId).size() > 10) { + tweets.get(userId).removeFirst(); + } + } + + public List getNewsFeed(int userId) { + // System.out.println(following); + // System.out.println(tweets); + PriorityQueue userFeed = new PriorityQueue<>(Comparator.comparingInt(t -> t.time)); + + // add own tweets. + addToFeed(userId, userFeed, 10); + following.getOrDefault(userId, Set.of()).forEach(f -> addToFeed(f, userFeed, 10)); + + // prepare sorted result for feed + List resultant = new ArrayList<>(); + resultant.addAll(userFeed); +// Collections.sort(resultant, (t1, t2) -> t2.time - t1.time); + return resultant.stream().map(tweet -> tweet.tweetId).collect(Collectors.toList()); + } + + public void addToFeed(int userId, PriorityQueue feed, final int k) { + LinkedHashSet allTweets = tweets.get(userId); + + if (allTweets == null || allTweets.isEmpty()) return; + + Iterator tweetIterator = allTweets.reversed().iterator(); + int cap = k; + while (tweetIterator.hasNext() && (cap > 0)) { + feed.add(tweetIterator.next()); + while (feed.size() > k) { + feed.poll(); + } + --cap; + } + } + + public void follow(int followerId, int followeeId) { + following.putIfAbsent(followerId, new HashSet<>()); + following.get(followerId).add(followeeId); + } + + public void unfollow(int followerId, int followeeId) { + if (following.get(followerId) == null) return; + following.get(followerId).remove(followeeId); + } + + public static void main(String[] args) { + Twitter twitter = new Twitter(); + + twitter.postTweet(1, 1); + twitter.postTweet(1, 2); + twitter.postTweet(1, 3); + twitter.postTweet(1, 4); + twitter.postTweet(1, 5); + twitter.postTweet(1, 6); + twitter.postTweet(1, 7); + twitter.postTweet(1, 8); + twitter.postTweet(1, 9); + twitter.postTweet(1, 10); + twitter.postTweet(1, 11); + System.out.println(twitter.getNewsFeed(1)); + System.out.println(twitter.getNewsFeed(4)); + } +} diff --git a/data-structures/src/main/java/com/thealgorithm/strings/ReorganizeStrings.java b/data-structures/src/main/java/com/thealgorithm/strings/ReorganizeStrings.java new file mode 100644 index 0000000..41bcf6c --- /dev/null +++ b/data-structures/src/main/java/com/thealgorithm/strings/ReorganizeStrings.java @@ -0,0 +1,73 @@ +package com.thealgorithm.strings; + +import java.util.Comparator; +import java.util.LinkedList; +import java.util.ListIterator; +import java.util.Map; +import java.util.PriorityQueue; +import java.util.stream.Collectors; + +/** + * @author: Subham Santra + */ +public class ReorganizeStrings { + static class Solution { + static class Entry { + char c; + int count; + + public Entry(char c, int count) { + this.c = c; + this.count = count; + } + } + + public String reorganizeString(String s) { + Comparator comp = (e1, e2) -> Integer.compare(e2.count, e1.count); + PriorityQueue priorityQueue = new PriorityQueue<>(comp); + Map frequency = + s.chars().boxed().collect(Collectors.toMap(c -> c, c -> 1, Integer::sum)); + System.out.println(frequency); + frequency.forEach((key, value) -> priorityQueue.add(new Entry((char) key.intValue(), value))); + + LinkedList list = new LinkedList<>(); + + ListIterator integerListIterator = list.listIterator(); + + + StringBuilder b = new StringBuilder(); + + while (!priorityQueue.isEmpty()) { + Entry top = priorityQueue.poll(); + if (b.isEmpty()) { + b.append(top.c); + top.count--; + if (top.count > 0) priorityQueue.add(top); + } else { + if (b.charAt(b.length() - 1) == top.c) { + if (priorityQueue.isEmpty()) { + return ""; + } + Entry second = priorityQueue.poll(); + b.append(second.c); + second.count--; + priorityQueue.add(top); + if (second.count > 0) priorityQueue.add(second); + } else { + b.append(top.c); + top.count--; + if (top.count > 0) priorityQueue.add(top); + } + } + } + + return b.toString(); + } + } + + public static void main(String[] args) { + System.out.println(new Solution().reorganizeString("aabbab")); + System.out.println(new Solution().reorganizeString("aaaabccccd")); + System.out.println(new Solution().reorganizeString("aaabbbccc")); + } +} diff --git a/data-structures/src/main/java/com/thealgorithm/strings/StringWithoutAAAorBBB.java b/data-structures/src/main/java/com/thealgorithm/strings/StringWithoutAAAorBBB.java new file mode 100644 index 0000000..c943b9e --- /dev/null +++ b/data-structures/src/main/java/com/thealgorithm/strings/StringWithoutAAAorBBB.java @@ -0,0 +1,49 @@ +package com.thealgorithm.strings; + +/** + * @author: Subham Santra + */ +public class StringWithoutAAAorBBB { + static class Solution { + public String strWithout3a3b(int a, int b) { + StringBuilder ans = new StringBuilder(); + while (a > 0 || b > 0) { + if (ans.toString().endsWith("aa")) { + ans.append("b"); + --b; + } else if (ans.toString().endsWith("bb")) { + ans.append("a"); + --a; + } else { + if (a > b) { + ans.append("a"); + --a; + } else { + ans.append("b"); + --b; + } + } + } + + return ans.toString(); + } + } + + /** + * 3 1 aaba + * + *

if (a == b) --> ababa.... + * + *

if (a == b + 1) --> abab...ba + * + *

if (a == b + 2) --> aabab...ba if (a == b + 3) --> aabaab...ba if (a == b + b + 1) --> + * aabaab...baa + * + *

1 2 + * + *

a a b a a + */ + public static void main(String[] args) { + System.out.println(new Solution().strWithout3a3b(6, 10)); + } +} From d00e41ba7d1f5e96fd3314b4d73049e75a60dc2a Mon Sep 17 00:00:00 2001 From: Subham1999 Date: Sat, 19 Oct 2024 19:09:28 +0530 Subject: [PATCH 5/6] LLD started --- .idea/workspace.xml | 78 ++++++---- ...allestRangeCoveringElementsFromKLists.java | 144 ++++++++++++++++++ .../com/thealgorithm/lld/DatabaseLocks.java | 33 +++- .../lld/caching/AbstractCache.java | 11 ++ .../thealgorithm/lld/caching/CacheEntry.java | 19 +++ .../com/thealgorithm/lld/caching/ICache.java | 9 ++ .../lld/caching/ICacheEvictionPolicy.java | 13 ++ .../lld/caching/LeastRecentlyUsedCache.java | 37 +++++ .../src/main/resources/graph/sample.sql | 12 ++ .../observer/AbstractObservable.java | 34 +++++ .../observer/AbstractObserver.java | 13 ++ .../observer/example/FacebookWatcher.java | 17 +++ .../observer/example/TelevisionWatcher.java | 17 +++ .../thealgorithm/observer/example/Test.java | 27 ++++ .../observer/example/WeatherUpdate.java | 23 +++ .../example/WeatherUpdateChannel.java | 14 ++ 16 files changed, 468 insertions(+), 33 deletions(-) create mode 100644 data-structures/src/main/java/com/thealgorithm/array/SmallestRangeCoveringElementsFromKLists.java create mode 100644 data-structures/src/main/java/com/thealgorithm/lld/caching/AbstractCache.java create mode 100644 data-structures/src/main/java/com/thealgorithm/lld/caching/CacheEntry.java create mode 100644 data-structures/src/main/java/com/thealgorithm/lld/caching/ICache.java create mode 100644 data-structures/src/main/java/com/thealgorithm/lld/caching/ICacheEvictionPolicy.java create mode 100644 data-structures/src/main/java/com/thealgorithm/lld/caching/LeastRecentlyUsedCache.java create mode 100644 data-structures/src/main/resources/graph/sample.sql create mode 100644 low-level-design/src/main/java/com/thealgorithm/observer/AbstractObservable.java create mode 100644 low-level-design/src/main/java/com/thealgorithm/observer/AbstractObserver.java create mode 100644 low-level-design/src/main/java/com/thealgorithm/observer/example/FacebookWatcher.java create mode 100644 low-level-design/src/main/java/com/thealgorithm/observer/example/TelevisionWatcher.java create mode 100644 low-level-design/src/main/java/com/thealgorithm/observer/example/Test.java create mode 100644 low-level-design/src/main/java/com/thealgorithm/observer/example/WeatherUpdate.java create mode 100644 low-level-design/src/main/java/com/thealgorithm/observer/example/WeatherUpdateChannel.java diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 64edf2a..08c4988 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,12 +5,22 @@ - - - - - + + + + + + + + + + + + + + + @@ -105,13 +116,13 @@ - - - @@ -689,11 +708,6 @@ 39 - - - - - - - - - - - - - - - + + + + + + + + + + - - + - - @@ -521,7 +515,15 @@ @@ -559,7 +561,8 @@ - diff --git a/low-level-design/src/main/java/com/thealgorithm/decorator/BasePizza.java b/low-level-design/src/main/java/com/thealgorithm/decorator/BasePizza.java new file mode 100644 index 0000000..fb0d479 --- /dev/null +++ b/low-level-design/src/main/java/com/thealgorithm/decorator/BasePizza.java @@ -0,0 +1,8 @@ +package com.thealgorithm.decorator; + +/** + * @author: Subham Santra + */ +public abstract class BasePizza { + public abstract double cost(); +} diff --git a/low-level-design/src/main/java/com/thealgorithm/decorator/ExtraCheese.java b/low-level-design/src/main/java/com/thealgorithm/decorator/ExtraCheese.java new file mode 100644 index 0000000..29a06a3 --- /dev/null +++ b/low-level-design/src/main/java/com/thealgorithm/decorator/ExtraCheese.java @@ -0,0 +1,15 @@ +package com.thealgorithm.decorator; + +/** + * @author: Subham Santra + */ +public class ExtraCheese extends ToppingDecorator { + public ExtraCheese(BasePizza basePizza) { + super(basePizza); + } + + @Override + public double cost() { + return this.basePizza.cost() + 35; + } +} diff --git a/low-level-design/src/main/java/com/thealgorithm/decorator/ExtraSauce.java b/low-level-design/src/main/java/com/thealgorithm/decorator/ExtraSauce.java new file mode 100644 index 0000000..11c66f4 --- /dev/null +++ b/low-level-design/src/main/java/com/thealgorithm/decorator/ExtraSauce.java @@ -0,0 +1,15 @@ +package com.thealgorithm.decorator; + +/** + * @author: Subham Santra + */ +public class ExtraSauce extends ToppingDecorator { + public ExtraSauce(BasePizza basePizza) { + super(basePizza); + } + + @Override + public double cost() { + return basePizza.cost() + 95; + } +} diff --git a/low-level-design/src/main/java/com/thealgorithm/decorator/FarmHouse.java b/low-level-design/src/main/java/com/thealgorithm/decorator/FarmHouse.java new file mode 100644 index 0000000..de27a00 --- /dev/null +++ b/low-level-design/src/main/java/com/thealgorithm/decorator/FarmHouse.java @@ -0,0 +1,11 @@ +package com.thealgorithm.decorator; + +/** + * @author: Subham Santra + */ +public class FarmHouse extends BasePizza { + @Override + public double cost() { + return 110; + } +} diff --git a/low-level-design/src/main/java/com/thealgorithm/decorator/Margherita.java b/low-level-design/src/main/java/com/thealgorithm/decorator/Margherita.java new file mode 100644 index 0000000..ff68224 --- /dev/null +++ b/low-level-design/src/main/java/com/thealgorithm/decorator/Margherita.java @@ -0,0 +1,11 @@ +package com.thealgorithm.decorator; + +/** + * @author: Subham Santra + */ +public class Margherita extends BasePizza { + @Override + public double cost() { + return 100; + } +} diff --git a/low-level-design/src/main/java/com/thealgorithm/decorator/Mashroom.java b/low-level-design/src/main/java/com/thealgorithm/decorator/Mashroom.java new file mode 100644 index 0000000..6a99c8b --- /dev/null +++ b/low-level-design/src/main/java/com/thealgorithm/decorator/Mashroom.java @@ -0,0 +1,15 @@ +package com.thealgorithm.decorator; + +/** + * @author: Subham Santra + */ +public class Mashroom extends ToppingDecorator { + public Mashroom(BasePizza basePizza) { + super(basePizza); + } + + @Override + public double cost() { + return basePizza.cost() + 65; + } +} diff --git a/low-level-design/src/main/java/com/thealgorithm/decorator/Test.java b/low-level-design/src/main/java/com/thealgorithm/decorator/Test.java new file mode 100644 index 0000000..26662b8 --- /dev/null +++ b/low-level-design/src/main/java/com/thealgorithm/decorator/Test.java @@ -0,0 +1,15 @@ +package com.thealgorithm.decorator; + +/** + * @author: Subham Santra + */ +public class Test { + public static void main(String[] args) { + BasePizza pizza = new Margherita(); + + // Adding toppings + BasePizza finalPizza = new ExtraSauce(new ExtraCheese(pizza)); + + System.out.println(finalPizza.cost()); + } +} diff --git a/low-level-design/src/main/java/com/thealgorithm/decorator/ToppingDecorator.java b/low-level-design/src/main/java/com/thealgorithm/decorator/ToppingDecorator.java new file mode 100644 index 0000000..f872662 --- /dev/null +++ b/low-level-design/src/main/java/com/thealgorithm/decorator/ToppingDecorator.java @@ -0,0 +1,12 @@ +package com.thealgorithm.decorator; + +/** + * @author: Subham Santra + */ +public abstract class ToppingDecorator extends BasePizza { + protected BasePizza basePizza; + + public ToppingDecorator(BasePizza basePizza) { + this.basePizza = basePizza; + } +} diff --git a/low-level-design/src/main/java/com/thealgorithm/decorator/VegDelight.java b/low-level-design/src/main/java/com/thealgorithm/decorator/VegDelight.java new file mode 100644 index 0000000..ecba4bf --- /dev/null +++ b/low-level-design/src/main/java/com/thealgorithm/decorator/VegDelight.java @@ -0,0 +1,11 @@ +package com.thealgorithm.decorator; + +/** + * @author: Subham Santra + */ +public class VegDelight extends BasePizza { + @Override + public double cost() { + return 106; + } +}