diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-06-30 17:10:23 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-06-30 17:10:23 +0100 |
| commit | 167bffb88aacd78e446d7803a9855fda47a95c23 (patch) | |
| tree | 6b856436edca12817e9d166f4f40170bba8d61bc /challenge-014 | |
| parent | f9de765c49dc1c3b7da271eef2478a8f1e2a3a04 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-014/arne-sommer/perl6/ch-1.p6 | 60 | ||||
| -rwxr-xr-x | challenge-014/arne-sommer/perl6/ch-2.p6 | 53 | ||||
| -rwxr-xr-x | challenge-014/arne-sommer/perl6/dictionary-list-by-length | 10 | ||||
| -rwxr-xr-x | challenge-014/arne-sommer/perl6/us-states | 23 | ||||
| -rwxr-xr-x | challenge-014/arne-sommer/perl6/van-eck-list | 24 | ||||
| -rwxr-xr-x | challenge-014/arne-sommer/perl6/van-eck-verbose | 32 |
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 |
