diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-08-17 20:14:34 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-17 20:14:34 +0100 |
| commit | 298bef1c7ca6244d542229e3a2b868ee6201b14a (patch) | |
| tree | bb4327f7d670e7c86daa1445217a8a6ad3ea6a3c /challenge-074/shawn-wagner/java | |
| parent | be7ef08333f2a20a1c2589ca69d57b542ba671f0 (diff) | |
| parent | 218420ca9c9c744ce225312a44fe03110ff725b7 (diff) | |
| download | perlweeklychallenge-club-298bef1c7ca6244d542229e3a2b868ee6201b14a.tar.gz perlweeklychallenge-club-298bef1c7ca6244d542229e3a2b868ee6201b14a.tar.bz2 perlweeklychallenge-club-298bef1c7ca6244d542229e3a2b868ee6201b14a.zip | |
Merge pull request #2093 from shawnw/challenge-074-solution
Solutions for challenge 074.
Diffstat (limited to 'challenge-074/shawn-wagner/java')
| -rw-r--r-- | challenge-074/shawn-wagner/java/ch1.java | 26 | ||||
| -rw-r--r-- | challenge-074/shawn-wagner/java/ch2.java | 31 |
2 files changed, 57 insertions, 0 deletions
diff --git a/challenge-074/shawn-wagner/java/ch1.java b/challenge-074/shawn-wagner/java/ch1.java new file mode 100644 index 0000000000..7d14236d22 --- /dev/null +++ b/challenge-074/shawn-wagner/java/ch1.java @@ -0,0 +1,26 @@ +// Use streams to calculate the count of distinct elements in an array and +// filter out just the first one above the cutoff. + +// I'm particularly proud of this one. + +import java.util.*; +import java.util.stream.*; +import java.util.function.Function; + +class ch1 { + private static void task1(int[] a) { + int cutoff = (int)Math.floor(a.length / 2.0); + int over_cutoff = + Arrays.stream(a).boxed() + .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())) + .entrySet().stream() + .filter(entry -> entry.getValue() > cutoff) + .findFirst().map(entry -> entry.getKey()).orElse(-1); + System.out.println(over_cutoff); + } + + public static void main(String[] args) { + task1(new int[] {1, 2, 2, 3, 2, 4, 2}); + task1(new int[] {1, 3, 1, 2, 4, 5}); + } +} diff --git a/challenge-074/shawn-wagner/java/ch2.java b/challenge-074/shawn-wagner/java/ch2.java new file mode 100644 index 0000000000..65a8a04a67 --- /dev/null +++ b/challenge-074/shawn-wagner/java/ch2.java @@ -0,0 +1,31 @@ +// Same algorithm as the perl version, using a LinkedHashMap to +// preserve order of keys, and streams to avoid most loops. + +import java.util.*; + +class ch2 { + private static void task2(String s) { + ArrayList<Character> chars = new ArrayList<Character>(); + chars.ensureCapacity(s.length()); + s.chars().forEach(ch -> chars.add((char)ch)); + Collections.reverse(chars); + StringBuilder sb = new StringBuilder(); + while (chars.size() > 0) { + HashMap<Character, Integer> counts = + new LinkedHashMap<Character, Integer>(); + chars.stream().forEach(ch -> counts.put(ch, counts.getOrDefault(ch, 0) + 1)); + char fnr = counts.entrySet().stream() + .filter(entry -> entry.getValue() == 1) + .findFirst().map(entry -> entry.getKey()).orElse('#'); + sb.append(fnr); + chars.remove(0); + } + sb.reverse(); + System.out.println(sb); + } + + public static void main(String[] args) { + task2("ababc"); + task2("xyzzyx"); + } +} |
