aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-03-07 11:09:58 +0000
committerGitHub <noreply@github.com>2020-03-07 11:09:58 +0000
commite2904ae2fd59faa2c7d217e2b650e474d60f2059 (patch)
tree9e5e53cdb6ebe0a3bc35a595fc97f323f6dd6c78
parent8b73fa22f41ecdea36f52a49441b901b94094dfa (diff)
parent0d04d1169e7ac95141d71d42e11891b3b18c96b5 (diff)
downloadperlweeklychallenge-club-e2904ae2fd59faa2c7d217e2b650e474d60f2059.tar.gz
perlweeklychallenge-club-e2904ae2fd59faa2c7d217e2b650e474d60f2059.tar.bz2
perlweeklychallenge-club-e2904ae2fd59faa2c7d217e2b650e474d60f2059.zip
Merge pull request #1362 from kevincolyer/branch-050
Branch 050
-rw-r--r--challenge-049/kevin-colyer/raku/ch-1.p66
-rw-r--r--challenge-050/kevin-colyer/raku/ch-1.p645
-rw-r--r--challenge-050/kevin-colyer/raku/ch-2.p654
l---------challenge-050/kevincolyer1
4 files changed, 103 insertions, 3 deletions
diff --git a/challenge-049/kevin-colyer/raku/ch-1.p6 b/challenge-049/kevin-colyer/raku/ch-1.p6
index 8acb119abb..2f8c7b2822 100644
--- a/challenge-049/kevin-colyer/raku/ch-1.p6
+++ b/challenge-049/kevin-colyer/raku/ch-1.p6
@@ -8,11 +8,11 @@
# For given number 55, the smallest multiple is 110 consisting of
# digits 0 and 1.
-
+my Int $z10;
sub MAIN(Int $number where * > 1) {
- for 1..Inf -> $zero-ones {
+ for 1..Inf -> Int $zero-ones {
# calculate all numbers with 0 or 1's in them (i.e. binary!)
- my $z10=$zero-ones.base(2);
+ $z10=+$zero-ones.base(2);
# use the binary string as a decimal value in trial division
if $z10 %% $number {
say "Smallest multiple of $number that consists of 0's and 1's is {$z10 / $number} gives {$z10} (found in $zero-ones iterations)";
diff --git a/challenge-050/kevin-colyer/raku/ch-1.p6 b/challenge-050/kevin-colyer/raku/ch-1.p6
new file mode 100644
index 0000000000..7b59cd1596
--- /dev/null
+++ b/challenge-050/kevin-colyer/raku/ch-1.p6
@@ -0,0 +1,45 @@
+#!perl6
+# Task 1 Challenge 050 Solution by kevincolyer
+# Merge Intervals
+# Write a script to merge the given intervals where ever possible.
+# [2,7], [3,9], [10,12], [15,19], [18,22]
+# The script should merge [2, 7] and [3, 9] together to return [2,
+# 9].
+# Similarly it should also merge [15, 19] and [18, 22] together
+# to return [15, 22].
+# The final result should be something like below:
+# [2, 9], [10, 12], [15, 22]
+
+use Test;
+
+sub mergeRanges(@ranges,:$verbose=False) {
+ my @merged;
+ # sort
+ my @unmerged=@ranges.sort({ $^a[0] <=> $^b[0] });
+ # iterate array
+ @merged.push(@unmerged.shift);
+ while @unmerged.elems {
+ say "un: {@unmerged} merged: {@merged}" if $verbose;
+ if @merged[*-1][1] >= @unmerged[0][0] {
+ say " merging a range" if $verbose;
+ # extend range upwards
+ @merged[*-1][1] = @unmerged[0][1];
+ # remove as now merged
+ @unmerged.shift;
+ } else {
+ say " copying a range" if $verbose;
+ @merged.push(@unmerged.shift)
+ }
+ }
+ return @merged;
+}
+
+
+my @ranges=[2,7], [3,9], [10,12], [15,19], [18,22];
+
+is mergeRanges([[2,7],[3,9]]),[2,9],"test merging range works";
+is mergeRanges([[2,5],[6,9]]),([2,5],[6,9]),"test merging range does not works";
+is mergeRanges([[3,9],[2,7]]),[2,9],"test merging range works in wrong order";
+is mergeRanges(@ranges),([2, 9], [10, 12], [15, 22]),"Merges multiple ranges";
+
+done-testing;
diff --git a/challenge-050/kevin-colyer/raku/ch-2.p6 b/challenge-050/kevin-colyer/raku/ch-2.p6
new file mode 100644
index 0000000000..475a9ed980
--- /dev/null
+++ b/challenge-050/kevin-colyer/raku/ch-2.p6
@@ -0,0 +1,54 @@
+#!perl6
+# Task 2 Challenge 050 Solution by kevincolyer
+# Contributed by Ryan Thompson.Noble Integer
+# You are given a list, @L, of three or more random integers between
+# 1 and 50. A Noble Integer is an integer N in @L, such that there
+# are exactly N integers greater than N in @L. Output any Noble
+# Integer found in @L, or an empty list if none were found.
+# An interesting question is whether or not there can be multiple
+# Noble Integers in a list.
+# For example,
+# Suppose we have list of 4 integers [2, 6, 1, 3].
+# Here we have 2 in the above list, known as Noble Integer, since
+# there are exactly 2 integers in the list i.e.3 and 6, which are
+# greater than 2.
+# Therefore the script would print 2.
+
+use Test;
+
+# helper sub
+sub generateIntegerLists() {
+ my @list = (1..50).roll xx (3+(0..17).roll);
+}
+
+
+sub filterNobelIntegers(@set) {
+ return if @set.elems < 3;
+ # reverse the list because if there are two items greater than N then N must == 2 to be a nobel number
+ # which is the index of the array item becing checked
+ # for once zero indexed arrays work for us!
+ my @ordered = @set.sort.reverse;
+ my @ni;
+ for 1..^@set.elems -> $i {
+ if @ordered[$i]==$i { @ni.append: @ordered[$i] };
+ }
+ return @ni;
+}
+
+# Tests
+is filterNobelIntegers([2, 6, 1, 3]),(2),"Nobel int found in example";
+is filterNobelIntegers([5, 6, 8, 3]),(3),"Nobel int found";
+is filterNobelIntegers([5, 6, 8, 3,3]),(3),"Nobel int found";
+is filterNobelIntegers([5, 6, 8, 3,3,3]),(3),"Nobel int found";
+done-testing;
+
+# take 20 random sets and search for Nobel Integers
+for ^20 {
+ my @a = generateIntegerLists();
+ my @ni=filterNobelIntegers(@a);
+
+ print @ni.elems > 0 ?? "* " !! " ";
+ print "[{@a.sort}] does ";
+ print "not " if @ni.elems==0;
+ say "have a nobel integer(s) [{@ni}]";
+}
diff --git a/challenge-050/kevincolyer b/challenge-050/kevincolyer
new file mode 120000
index 0000000000..4e094c2213
--- /dev/null
+++ b/challenge-050/kevincolyer
@@ -0,0 +1 @@
+/home/kevin/PerlChallenges/perlweeklychallenge-club/challenge-050/kevin-colyer/ \ No newline at end of file