diff options
| author | Flavio Poletti <flavio@polettix.it> | 2023-03-10 19:34:25 +0100 |
|---|---|---|
| committer | Flavio Poletti <flavio@polettix.it> | 2023-03-10 19:34:25 +0100 |
| commit | 8b27af0a436d34a7b5dec719ecbb7ccf5a8bd6e4 (patch) | |
| tree | 8427bbc0b3b2e819f7072b130e6a6e2d4cee6230 | |
| parent | f2e33c0038917ad43651d0c4e8b0bb310eaed541 (diff) | |
| download | perlweeklychallenge-club-8b27af0a436d34a7b5dec719ecbb7ccf5a8bd6e4.tar.gz perlweeklychallenge-club-8b27af0a436d34a7b5dec719ecbb7ccf5a8bd6e4.tar.bz2 perlweeklychallenge-club-8b27af0a436d34a7b5dec719ecbb7ccf5a8bd6e4.zip | |
Add polettix's solution to challenge-207
| -rw-r--r-- | challenge-207/polettix/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-207/polettix/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-207/polettix/perl/ch-1.pl | 29 | ||||
| -rw-r--r-- | challenge-207/polettix/perl/ch-2.pl | 12 | ||||
| -rw-r--r-- | challenge-207/polettix/raku/ch-1.raku | 21 | ||||
| -rw-r--r-- | challenge-207/polettix/raku/ch-2.raku | 9 |
6 files changed, 73 insertions, 0 deletions
diff --git a/challenge-207/polettix/blog.txt b/challenge-207/polettix/blog.txt new file mode 100644 index 0000000000..b369194a1b --- /dev/null +++ b/challenge-207/polettix/blog.txt @@ -0,0 +1 @@ +https://etoobusy.polettix.it/2023/03/09/pwc207-keyboard-word/ diff --git a/challenge-207/polettix/blog1.txt b/challenge-207/polettix/blog1.txt new file mode 100644 index 0000000000..e87c0ccd73 --- /dev/null +++ b/challenge-207/polettix/blog1.txt @@ -0,0 +1 @@ +https://etoobusy.polettix.it/2023/03/10/pwc207-h-index/ diff --git a/challenge-207/polettix/perl/ch-1.pl b/challenge-207/polettix/perl/ch-1.pl new file mode 100644 index 0000000000..48a40aa5ee --- /dev/null +++ b/challenge-207/polettix/perl/ch-1.pl @@ -0,0 +1,29 @@ +#!/usr/bin/env perl +use v5.24; +use warnings; +use experimental 'signatures'; +no warnings 'experimental::signatures'; + +say join ' ', grep { is_keyboard_word($_) } @ARGV; + +sub is_keyboard_word ($word) { + state $rows = [qw< qwertyuiop asdfghjkl zxcvbnm >]; + state $letter_sets = [ + map { + +{ map { $_ => 1 } split m{}mxs } + } $rows->@* + ]; + state $set_idx_for = { + map { + my $idx = $_; + map { $_ => $idx } split m{}mxs, $rows->[$idx]; + } 0 .. $rows->$#* + }; + my @letters = split m{}mxs, lc($word); + my $set_idx = $set_idx_for->{$letters[0]}; + my $set = $letter_sets->[$set_idx]; + for my $letter (@letters) { + return '' unless exists($set->{$letter}); + } + return 1; +} diff --git a/challenge-207/polettix/perl/ch-2.pl b/challenge-207/polettix/perl/ch-2.pl new file mode 100644 index 0000000000..ed3e934f48 --- /dev/null +++ b/challenge-207/polettix/perl/ch-2.pl @@ -0,0 +1,12 @@ +#!/usr/bin/env perl +use v5.24; +use warnings; +use experimental 'signatures'; + +say h_index(@ARGV); + +sub h_index (@citations) { + @citations = reverse sort { $a <=> $b } grep { $_ } @citations; + $_ < $citations[$_] || return $_ for 0 .. $#citations; + return scalar(@citations); +} diff --git a/challenge-207/polettix/raku/ch-1.raku b/challenge-207/polettix/raku/ch-1.raku new file mode 100644 index 0000000000..0d6ae5a11d --- /dev/null +++ b/challenge-207/polettix/raku/ch-1.raku @@ -0,0 +1,21 @@ +#!/usr/bin/env raku +use v6; +sub MAIN (*@args) { @args.grep(&is-keyboard-word).put } + +sub is-keyboard-word ($word) { + state @rows = < qwertyuiop asdfghjkl zxcvbnm >; + state @letter-sets = @rows.map({ .comb.Set }); + state %set-idx-for = + @rows.kv + .map(-> $idx, $row { + $row.comb.map(-> $char { $char => $idx }) }) + .flat; + + my @letters = $word.lc.comb; + my $set-idx = %set-idx-for{@letters[0]}; + my $set = @letter-sets[$set-idx]; + for @letters -> $letter { + return False if $letter ∉ $set; + } + return True; +} diff --git a/challenge-207/polettix/raku/ch-2.raku b/challenge-207/polettix/raku/ch-2.raku new file mode 100644 index 0000000000..e649e5e648 --- /dev/null +++ b/challenge-207/polettix/raku/ch-2.raku @@ -0,0 +1,9 @@ +#!/usr/bin/env raku +use v6; +sub MAIN (*@args) { put h-index(@args) } + +sub h-index (@citations) { + @citations = @citations».Int.grep({.so}).sort.reverse; + $_ < @citations[$_] || return $_ for ^@citations; + return @citations.elems; +} |
