aboutsummaryrefslogtreecommitdiff
path: root/challenge-180
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2022-09-03 21:38:53 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2022-09-03 21:38:53 +0100
commit0ea24ad3f2e62e9531e778ee31b582d73efe4b77 (patch)
tree72f6f4d626a3cdbea98d71ad60d9c08a8b83b3e7 /challenge-180
parent198cd4bdf0fc36df387cf2a636fadbfb74f9a169 (diff)
downloadperlweeklychallenge-club-0ea24ad3f2e62e9531e778ee31b582d73efe4b77.tar.gz
perlweeklychallenge-club-0ea24ad3f2e62e9531e778ee31b582d73efe4b77.tar.bz2
perlweeklychallenge-club-0ea24ad3f2e62e9531e778ee31b582d73efe4b77.zip
- Added solutions to week 180.
Diffstat (limited to 'challenge-180')
-rw-r--r--challenge-180/mohammad-anwar/java/theweeklychallenge/FirstUniqueCharacter.java72
-rw-r--r--challenge-180/mohammad-anwar/java/theweeklychallenge/TrimList.java63
-rw-r--r--challenge-180/mohammad-anwar/perl/ch-1.pl52
-rw-r--r--challenge-180/mohammad-anwar/perl/ch-2.pl37
-rw-r--r--challenge-180/mohammad-anwar/python/ch-1.py52
-rw-r--r--challenge-180/mohammad-anwar/python/ch-2.py37
-rw-r--r--challenge-180/mohammad-anwar/raku/ch-1.raku52
-rw-r--r--challenge-180/mohammad-anwar/raku/ch-2.raku36
-rw-r--r--challenge-180/mohammad-anwar/swift/ch-1.swift70
-rw-r--r--challenge-180/mohammad-anwar/swift/ch-2.swift84
10 files changed, 555 insertions, 0 deletions
diff --git a/challenge-180/mohammad-anwar/java/theweeklychallenge/FirstUniqueCharacter.java b/challenge-180/mohammad-anwar/java/theweeklychallenge/FirstUniqueCharacter.java
new file mode 100644
index 0000000000..34bf56bc6a
--- /dev/null
+++ b/challenge-180/mohammad-anwar/java/theweeklychallenge/FirstUniqueCharacter.java
@@ -0,0 +1,72 @@
+package theweeklychallenge;
+
+/*
+
+Week 180:
+
+ https://theweeklychallenge.org/blog/perl-weekly-challenge-180
+
+Task #1: First Unique Character
+
+ You are given a string, $s.
+
+ Write a script to find out the first unique character in the
+ given string and print its index (0-based).
+
+Compile and Run:
+
+ mohammad-anwar/java$ javac theweeklychallenge/FirstUniqueCharacter.java
+ mohammad-anwar/java$ java theweeklychallenge.FirstUniqueCharacter
+
+*/
+
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.ArrayList;
+import junit.framework.TestCase;
+import static junit.framework.Assert.*;
+
+public class FirstUniqueCharacter extends TestCase {
+
+ public static void main(String[] args) {
+ junit.textui.TestRunner.run(
+ theweeklychallenge.FirstUniqueCharacter.class);
+ }
+
+ public void testDammAlgorithm() {
+ assertEquals(firstUniqueCharacter("Perl Weekly Challenge"), 0);
+ assertEquals(firstUniqueCharacter("Long Live Perl"), 1);
+ }
+
+ public static int firstUniqueCharacter(String str) {
+ char[] chars = str.toCharArray();
+ ArrayList<Character> chars_array = new ArrayList<Character>();
+ Map<Character, Integer> chars_map = new TreeMap<Character, Integer>();
+ int j = 0;
+ for (int i = 0; i < chars.length; i++) {
+ char c = chars[i];
+ if (Character.compare(c, ' ') == 0) {
+ continue;
+ }
+ c = Character.toLowerCase(c);
+ if (chars_map.containsKey(c)) {
+ chars_map.put(c, chars_map.get(c) + 1);
+ }
+ else {
+ chars_array.add(c);
+ chars_map.put(c, 1);
+ j++;
+ }
+ }
+
+ int k = 0;
+ for (char c : chars_array) {
+ if (chars_map.get(c) == 1) {
+ break;
+ }
+ k++;
+ }
+
+ return k;
+ }
+}
diff --git a/challenge-180/mohammad-anwar/java/theweeklychallenge/TrimList.java b/challenge-180/mohammad-anwar/java/theweeklychallenge/TrimList.java
new file mode 100644
index 0000000000..711ab8ec74
--- /dev/null
+++ b/challenge-180/mohammad-anwar/java/theweeklychallenge/TrimList.java
@@ -0,0 +1,63 @@
+package theweeklychallenge;
+
+/*
+
+Week 180:
+
+ https://theweeklychallenge.org/blog/perl-weekly-challenge-180
+
+Task #2: Trim List
+
+ You are given list of numbers, @n and an integer $i.
+
+ Write a script to trim the given list where element is less than
+ or equal to the given integer.
+
+Compile and Run:
+
+ mohammad-anwar/java$ javac theweeklychallenge/TrimList.java
+ mohammad-anwar/java$ java theweeklychallenge.TrimList
+
+*/
+
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.Arrays;
+import java.util.ArrayList;
+import junit.framework.TestCase;
+import static junit.framework.Assert.*;
+
+public class TrimList extends TestCase {
+
+ public static void main(String[] args) {
+ junit.textui.TestRunner.run(
+ theweeklychallenge.TrimList.class);
+ }
+
+ public void testTrimListExample1() {
+ int i = 3;
+ Integer[] n = {1, 4, 2, 3, 5};
+ Integer[] got = trimList(i, n);
+ Integer[] exp = {4, 5};
+ assertEquals(Arrays.toString(exp), Arrays.toString(got));
+ }
+
+ public void testTrimListExample2() {
+ int i = 4;
+ Integer[] n = {9, 0, 6, 2, 3, 8, 5};
+ Integer[] got = trimList(i, n);
+ Integer[] exp = {9, 6, 8, 5};
+ assertEquals(Arrays.toString(exp), Arrays.toString(got));
+ }
+
+ public static Integer[] trimList(int i, Integer[] n) {
+ ArrayList<Integer> list = new ArrayList<Integer>();
+ for (int j : n) {
+ if (j > i) {
+ list.add(j);
+ }
+ }
+
+ return list.toArray(new Integer[list.size()]);
+ }
+}
diff --git a/challenge-180/mohammad-anwar/perl/ch-1.pl b/challenge-180/mohammad-anwar/perl/ch-1.pl
new file mode 100644
index 0000000000..4dfb6f2dc9
--- /dev/null
+++ b/challenge-180/mohammad-anwar/perl/ch-1.pl
@@ -0,0 +1,52 @@
+#!/usr/bin/perl
+
+=head1
+
+Week 180:
+
+ https://theweeklychallenge.org/blog/perl-weekly-challenge-180
+
+Task #1: First Unique Character
+
+ You are given a string, $s.
+
+ Write a script to find out the first unique character in the
+ given string and print its index (0-based).
+
+=cut
+
+use v5.36;
+use Test2::V0;
+
+is first_unique_character('Perl Weekly Challenge'), 0, 'Example 1';
+is first_unique_character('Long Live Perl'), 1, 'Example 2';
+
+done_testing;
+
+#
+#
+# METHOD
+
+sub first_unique_character($str) {
+ my @c = ();
+ my %c = ();
+ foreach my $c (split //, $str) {
+ next if $c eq ' ';
+ $c = lc $c;
+ if (exists $c{$c}) {
+ $c{$c}++;
+ }
+ else {
+ push @c, $c;
+ $c{$c} = 1;
+ }
+ }
+
+ my $i = 0;
+ foreach my $c (@c) {
+ if ($c{$c} == 1) {
+ return $i;
+ }
+ $i++;
+ }
+}
diff --git a/challenge-180/mohammad-anwar/perl/ch-2.pl b/challenge-180/mohammad-anwar/perl/ch-2.pl
new file mode 100644
index 0000000000..b0008e98e5
--- /dev/null
+++ b/challenge-180/mohammad-anwar/perl/ch-2.pl
@@ -0,0 +1,37 @@
+#!/usr/bin/perl
+
+=head1
+
+Week 180:
+
+ https://theweeklychallenge.org/blog/perl-weekly-challenge-180
+
+Task #1: Trim List
+
+ You are given list of numbers, @n and an integer $i.
+
+ Write a script to trim the given list where element is less than
+ or equal to the given integer.
+
+=cut
+
+use v5.36;
+use Test2::V0;
+
+is trim_list(3, [1, 4, 2, 3, 5]), [4, 5], 'Example 1';
+is trim_list(4, [9, 0, 6, 2, 3, 8, 5]), [9, 6, 8, 5], 'Example 2';
+
+done_testing;
+
+#
+#
+# METHOD
+
+sub trim_list($i, $n) {
+ my @l = ();
+ foreach (@$n) {
+ push @l, $_ if $_ > $i;
+ }
+
+ return \@l;
+}
diff --git a/challenge-180/mohammad-anwar/python/ch-1.py b/challenge-180/mohammad-anwar/python/ch-1.py
new file mode 100644
index 0000000000..5ce058ecf5
--- /dev/null
+++ b/challenge-180/mohammad-anwar/python/ch-1.py
@@ -0,0 +1,52 @@
+#!/usr/bin/python3
+
+'''
+
+Week 180:
+
+ https://theweeklychallenge.org/blog/perl-weekly-challenge-180
+
+Task #1: First Unique Character
+
+ You are given a string, $s.
+
+ Write a script to find out the first unique character in the
+ given string and print its index (0-based).
+
+'''
+
+import unittest
+
+def firstUniqueCharacter(str) -> int:
+ char_list = []
+ char_hash = {}
+ for c in list(str):
+ if c == ' ':
+ next
+ c = c.lower()
+
+ if c in char_hash:
+ char_hash[c] += 1
+ else:
+ char_list.append(c)
+ char_hash[c] = 1
+
+ i = 0
+ for c in char_list:
+ if char_hash[c] == 1:
+ return i
+
+ i = i + 1
+
+ return i
+
+#
+#
+# Unit test class
+
+class TestFirstUniqueCharacter(unittest.TestCase):
+ def test_FirstUniqueCharacter(self):
+ self.assertEqual(firstUniqueCharacter('Perl Weekly Challenge'), 0)
+ self.assertEqual(firstUniqueCharacter('Long Live Perl'), 1)
+
+unittest.main()
diff --git a/challenge-180/mohammad-anwar/python/ch-2.py b/challenge-180/mohammad-anwar/python/ch-2.py
new file mode 100644
index 0000000000..127805093f
--- /dev/null
+++ b/challenge-180/mohammad-anwar/python/ch-2.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python3
+
+'''
+
+Week 180:
+
+ https://theweeklychallenge.org/blog/perl-weekly-challenge-180
+
+Task #2: Trim List
+
+ You are given list of numbers, @n and an integer $i.
+
+ Write a script to trim the given list where element is less than
+ or equal to the given integer.
+
+'''
+
+import unittest
+
+def trimList(i, n):
+ trim_list = []
+ for j in n:
+ if j > i:
+ trim_list.append(j)
+
+ return trim_list
+
+#
+#
+# Unit test class
+
+class TestTrimList(unittest.TestCase):
+ def test_TrimList(self):
+ self.assertEqual(trimList(3, [1, 4, 2, 3, 5]), [4, 5])
+ self.assertEqual(trimList(4, [9, 0, 6, 2, 3, 8, 5]), [9, 6, 8, 5])
+
+unittest.main()
diff --git a/challenge-180/mohammad-anwar/raku/ch-1.raku b/challenge-180/mohammad-anwar/raku/ch-1.raku
new file mode 100644
index 0000000000..d7cacedc0b
--- /dev/null
+++ b/challenge-180/mohammad-anwar/raku/ch-1.raku
@@ -0,0 +1,52 @@
+#!/usr/bin/env raku
+
+=begin pod
+
+Week 180:
+
+ https://theweeklychallenge.org/blog/perl-weekly-challenge-180
+
+Task #1: First Unique Character
+
+ You are given a string, $s.
+
+ Write a script to find out the first unique character in the
+ given string and print its index (0-based).
+
+=end pod
+
+use Test;
+
+is first-unique-character('Perl Weekly Challenge'), 0, 'Example 1';
+is first-unique-character('Long Live Perl'), 1, 'Example 2';
+
+done-testing;
+
+#
+#
+# METHOD
+
+sub first-unique-character(Str $str --> Int) {
+ my Str @c = ();
+ my %c = ();
+ for $str.comb {
+ my $c = $_;
+ next if $c eq ' ';
+ $c = $c.lc;
+ if %c{$c}:exists {
+ %c{$c}++;
+ }
+ else {
+ @c.push: $c;
+ %c{$c} = 1;
+ }
+ }
+
+ my Int $i = 0;
+ for @c -> $c {
+ if %c{$c} == 1 {
+ return $i;
+ }
+ $i++;
+ }
+}
diff --git a/challenge-180/mohammad-anwar/raku/ch-2.raku b/challenge-180/mohammad-anwar/raku/ch-2.raku
new file mode 100644
index 0000000000..9e0b047792
--- /dev/null
+++ b/challenge-180/mohammad-anwar/raku/ch-2.raku
@@ -0,0 +1,36 @@
+#!/usr/bin/env raku
+
+=begin pod
+
+Week 180:
+
+ https://theweeklychallenge.org/blog/perl-weekly-challenge-180
+
+Task #2: Trim List
+
+ You are given list of numbers, @n and an integer $i.
+
+ Write a script to trim the given list where element is less than
+ or equal to the given integer.
+
+=end pod
+
+use Test;
+
+is trim-list(3, [1, 4, 2, 3, 5]), [4, 5], 'Example 1';
+is trim-list(4, [9, 0, 6, 2, 3, 8, 5]), [9, 6, 8, 5], 'Example 2';
+
+done-testing;
+
+#
+#
+# METHOD
+
+sub trim-list(Int $i, @n --> Array[Int]) {
+ my Int @l = ();
+ for @n -> $l {
+ @l.push: $l if $l > $i;
+ }
+
+ return @l;
+}
diff --git a/challenge-180/mohammad-anwar/swift/ch-1.swift b/challenge-180/mohammad-anwar/swift/ch-1.swift
new file mode 100644
index 0000000000..180f2f0d5b
--- /dev/null
+++ b/challenge-180/mohammad-anwar/swift/ch-1.swift
@@ -0,0 +1,70 @@
+import Foundation
+
+/*
+
+Week 180:
+
+ https://theweeklychallenge.org/blog/perl-weekly-challenge-180
+
+Task #1: First Unique Character
+
+ You are given a string, $s.
+
+ Write a script to find out the first unique character in the
+ given string and print its index (0-based).
+
+ACTION:
+
+ $ swift ch-1.swift 'Perl Weekly Challenge'
+ $ swift ch-1.swift 'Long Live Perl'
+
+*/
+
+enum ParamError: Error {
+ case missingString
+}
+do {
+ let paramCount:Int = Int(CommandLine.argc)
+
+ if paramCount <= 1 {
+ throw ParamError.missingString
+ }
+
+ let str: String = CommandLine.arguments[1]
+ var chars: [Character] = [Character]()
+ var dicts = [Character:Int]()
+ for var char: Character in Array(str) {
+ if char == " " {
+ continue
+ }
+ char = char.toLower()
+ if let _: Int = dicts[char] {
+ dicts[char]! += 1
+ }
+ else {
+ chars.append(char)
+ dicts[char] = 1
+ }
+ }
+
+ var i:Int = 0;
+ for char in chars {
+ if dicts[char]! == 1 {
+ print(i)
+ break
+ }
+ i += 1
+ }
+}
+catch ParamError.missingString {
+ print("Missing string.")
+}
+catch let error {
+ print(error)
+}
+
+extension Character {
+ func toLower() -> Character {
+ return String(self).lowercased().first!
+ }
+}
diff --git a/challenge-180/mohammad-anwar/swift/ch-2.swift b/challenge-180/mohammad-anwar/swift/ch-2.swift
new file mode 100644
index 0000000000..4855d93f1b
--- /dev/null
+++ b/challenge-180/mohammad-anwar/swift/ch-2.swift
@@ -0,0 +1,84 @@
+import Foundation
+
+/*
+
+Week 180:
+
+ https://theweeklychallenge.org/blog/perl-weekly-challenge-180
+
+Task #1: Trim List
+
+ You are given list of numbers, @n and an integer $i.
+
+ Write a script to trim the given list where element is less than
+ or equal to the given integer.
+
+ACTION:
+
+ $ swift ch-2.swift 3 "1, 4, 2, 3, 5"
+ $ swift ch-2.swift 4 "9, 0, 6, 2, 3, 8, 5"
+
+*/
+
+enum ParamError: Error {
+ case missingNumber
+ case missingList
+ case invalidList
+}
+do {
+ let paramCount:Int = Int(CommandLine.argc)
+
+ if paramCount <= 2 {
+ throw ParamError.missingNumber
+ }
+
+ if paramCount <= 1 {
+ throw ParamError.missingList
+ }
+
+ let num: Int = Int(CommandLine.arguments[1])!
+ let list: String = CommandLine.arguments[2]
+
+ if isValidList(list) {
+ let array = list.components(separatedBy: ", ")
+ var trimList = [Int]()
+ for i in array {
+ if (Int(i)! > num) {
+ trimList.append(Int(i)!)
+ }
+ }
+ print(trimList)
+ }
+ else {
+ throw ParamError.invalidList;
+ }
+}
+catch ParamError.missingNumber {
+ print("Missing number.")
+}
+catch ParamError.missingList {
+ print("Missing list.")
+}
+catch ParamError.invalidList {
+ print("Invalid list.")
+}
+catch let error {
+ print(error)
+}
+
+//
+//
+// Function
+
+func isValidList(_ list:String) -> Bool {
+ let pattern = "^[\\-?\\d\\,?\\s?]+$"
+ let regex = try! NSRegularExpression(pattern: pattern)
+ let range = NSRange(location: 0, length: list.utf16.count)
+
+ if regex.firstMatch(in: list, options: [], range: range) != nil {
+ return true
+ }
+ else {
+ return false
+ }
+}