aboutsummaryrefslogtreecommitdiff
path: root/challenge-014
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2019-06-30 17:10:23 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2019-06-30 17:10:23 +0100
commit167bffb88aacd78e446d7803a9855fda47a95c23 (patch)
tree6b856436edca12817e9d166f4f40170bba8d61bc /challenge-014
parentf9de765c49dc1c3b7da271eef2478a8f1e2a3a04 (diff)
downloadperlweeklychallenge-club-167bffb88aacd78e446d7803a9855fda47a95c23.tar.gz
perlweeklychallenge-club-167bffb88aacd78e446d7803a9855fda47a95c23.tar.bz2
perlweeklychallenge-club-167bffb88aacd78e446d7803a9855fda47a95c23.zip
- Added solutions by Arne Sommer.
Diffstat (limited to 'challenge-014')
-rw-r--r--challenge-014/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-014/arne-sommer/perl6/ch-1.p660
-rwxr-xr-xchallenge-014/arne-sommer/perl6/ch-2.p653
-rwxr-xr-xchallenge-014/arne-sommer/perl6/dictionary-list-by-length10
-rwxr-xr-xchallenge-014/arne-sommer/perl6/us-states23
-rwxr-xr-xchallenge-014/arne-sommer/perl6/van-eck-list24
-rwxr-xr-xchallenge-014/arne-sommer/perl6/van-eck-verbose32
7 files changed, 203 insertions, 0 deletions
diff --git a/challenge-014/arne-sommer/blog.txt b/challenge-014/arne-sommer/blog.txt
new file mode 100644
index 0000000000..1a6fc2ea08
--- /dev/null
+++ b/challenge-014/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://perl6.eu/van-eck-state.html
diff --git a/challenge-014/arne-sommer/perl6/ch-1.p6 b/challenge-014/arne-sommer/perl6/ch-1.p6
new file mode 100755
index 0000000000..0a454685d1
--- /dev/null
+++ b/challenge-014/arne-sommer/perl6/ch-1.p6
@@ -0,0 +1,60 @@
+#! /usr/bin/env perl6
+
+unit sub MAIN (Int $limit where 2 <= $limit <= 100000 = 10, :$verbose = False, :$test = False);
+
+my @van-eck = (0);
+
+my %seen;
+
+for ^($limit -1) -> $pos
+{
+ %seen{@van-eck[*-1]}.defined
+ ?? @van-eck.push: $pos - %seen{@van-eck[*-1]}
+ !! @van-eck.push: 0;
+
+ %seen{@van-eck[*-2]} = $pos;
+}
+
+if $test
+{
+ use LWP::Simple;
+
+ my $ok = 0;
+ my $error = 0;
+ my $index = 1;
+
+ for LWP::Simple.get('https://oeis.org/A181391/b181391.txt').lines -> $line
+ {
+ last if $index > $limit;
+
+ my $my = @van-eck[$index -1];
+ my $def = $line.words[1];
+
+ if $my == $def
+ {
+ say "$index: $my == $def (OK)";
+ $ok++;
+ }
+ else
+ {
+ say "$index: $my != $def (Error)";
+ $error++;
+ }
+
+ $index++;
+ }
+
+ say "\nOK: $ok";
+ say "Error: $error";
+}
+
+elsif $verbose
+{
+ my $count = 1;
+ say "{ $count++ }: $_" for @van-eck;
+}
+
+else
+{
+ say @van-eck.join(", ");
+}
diff --git a/challenge-014/arne-sommer/perl6/ch-2.p6 b/challenge-014/arne-sommer/perl6/ch-2.p6
new file mode 100755
index 0000000000..d8ebda41fe
--- /dev/null
+++ b/challenge-014/arne-sommer/perl6/ch-2.p6
@@ -0,0 +1,53 @@
+#! /usr/bin/env perl6
+
+unit sub MAIN ($dictionary where $dictionary.IO.e && $dictionary.IO.r = "/usr/share/dict/british-english", :$all);
+
+my %states =
+ "AK Alaska LA Louisiana OH Ohio
+ AL Alabama MA Massachusetts OK Oklahoma
+ AR Arkansas MD Maryland OR Oregon
+ AZ Arizona ME Maine PA Pennsylvania
+ CA California MI Michigan RI Rhode Island
+ CO Colorado MN Minnesota SC South Carolina
+ CT Connecticut MO Missouri SD South Dakota
+ DE Delaware MS Mississippi TN Tennessee
+ FL Florida MT Montana TX Texas
+ GA Georgia NC North Carolina UT Utah
+ HI Hawaii ND North Dakota VA Virginia
+ IA Iowa NE Nebraska VT Vermont
+ ID Idaho NH New Hampshire WA Washington
+ IL Illinois NJ New Jersey WI Wisconsin
+ IN Indiana NM New Mexico WV West Virginia
+ KS Kansas NV Nevada WY Wyoming
+ KY Kentucky NY New York".split(/\s\s+/).hash;
+
+sub get-dictionary ($file where $file.IO.r)
+{
+ return $file.IO.lines>>.uc.grep({ .chars %% 2 }).grep(* !~~ /\W/).unique.sort({ $^b.chars cmp $^a.chars }); # As "aß" -> "ASS"
+}
+
+my $found = 0;
+
+for get-dictionary($dictionary) -> $word
+{
+ last if $word.chars < $found;
+
+ check-word($word);
+
+ last if $found && !$all;
+}
+
+say "\nWord length: $found.";
+
+sub check-word ($word)
+{
+ my @parts = $word.comb(2);
+
+ return unless %states{$_} for @parts;
+
+ say "{ @parts.map({ %states{$_} }).join(" + ") } = $word";
+
+ $found = $word.chars;
+}
+
+
diff --git a/challenge-014/arne-sommer/perl6/dictionary-list-by-length b/challenge-014/arne-sommer/perl6/dictionary-list-by-length
new file mode 100755
index 0000000000..4b629793e1
--- /dev/null
+++ b/challenge-014/arne-sommer/perl6/dictionary-list-by-length
@@ -0,0 +1,10 @@
+#! /usr/bin/env perl6
+
+my $dictionary = "/usr/share/dict/british-english";
+
+.say for get-dictionary($dictionary);
+
+sub get-dictionary ($file where $file.IO.r)
+{
+ return $file.IO.lines.grep(* !~~ /\W/)>>.uc.sort({ $^b.chars cmp $^a.chars });
+}
diff --git a/challenge-014/arne-sommer/perl6/us-states b/challenge-014/arne-sommer/perl6/us-states
new file mode 100755
index 0000000000..14abc8b987
--- /dev/null
+++ b/challenge-014/arne-sommer/perl6/us-states
@@ -0,0 +1,23 @@
+#! /usr/bin/env perl6
+
+my %states =
+ "AK Alaska LA Louisiana OH Ohio
+ AL Alabama MA Massachusetts OK Oklahoma
+ AR Arkansas MD Maryland OR Oregon
+ AZ Arizona ME Maine PA Pennsylvania
+ CA California MI Michigan RI Rhode Island
+ CO Colorado MN Minnesota SC South Carolina
+ CT Connecticut MO Missouri SD South Dakota
+ DE Delaware MS Mississippi TN Tennessee
+ FL Florida MT Montana TX Texas
+ GA Georgia NC North Carolina UT Utah
+ HI Hawaii ND North Dakota VA Virginia
+ IA Iowa NE Nebraska VT Vermont
+ ID Idaho NH New Hampshire WA Washington
+ IL Illinois NJ New Jersey WI Wisconsin
+ IN Indiana NM New Mexico WV West Virginia
+ KS Kansas NV Nevada WY Wyoming
+ KY Kentucky NY New York".split(/\s\s+/).hash;
+
+say %states.keys.sort;
+
diff --git a/challenge-014/arne-sommer/perl6/van-eck-list b/challenge-014/arne-sommer/perl6/van-eck-list
new file mode 100755
index 0000000000..22d831458e
--- /dev/null
+++ b/challenge-014/arne-sommer/perl6/van-eck-list
@@ -0,0 +1,24 @@
+#! /usr/bin/env perl6
+
+unit sub MAIN (Int $limit = 10);
+
+my @van-eck = (0);
+
+@van-eck.push(van-help(@van-eck)) for ^($limit -1);
+
+say @van-eck.join(", ");
+
+sub van-help(@array is copy)
+{
+ my $last = @array.pop;
+
+ if any(@array) == $last
+ {
+ for @array.reverse
+ {
+ state $delta++;
+ return $delta if $_ == $last;
+ }
+ }
+ return 0;
+} \ No newline at end of file
diff --git a/challenge-014/arne-sommer/perl6/van-eck-verbose b/challenge-014/arne-sommer/perl6/van-eck-verbose
new file mode 100755
index 0000000000..00cde75024
--- /dev/null
+++ b/challenge-014/arne-sommer/perl6/van-eck-verbose
@@ -0,0 +1,32 @@
+#! /usr/bin/env perl6
+
+unit sub MAIN (Int $limit = 10, :$verbose = False);
+
+my @van-eck = (0);
+
+@van-eck.push(van-help(@van-eck)) for ^($limit -1);
+
+if $verbose
+{
+ my $count = 1;
+ say "{ $count++ }: $_" for @van-eck;
+}
+else
+{
+ say @van-eck.join(", ");
+}
+
+sub van-help(@array is copy)
+{
+ my $last = @array.pop;
+
+ if any(@array) == $last
+ {
+ for @array.reverse
+ {
+ state $delta++;
+ return $delta if $_ == $last;
+ }
+ }
+ return 0;
+} \ No newline at end of file