aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlavio Poletti <flavio@polettix.it>2023-03-10 19:34:25 +0100
committerFlavio Poletti <flavio@polettix.it>2023-03-10 19:34:25 +0100
commit8b27af0a436d34a7b5dec719ecbb7ccf5a8bd6e4 (patch)
tree8427bbc0b3b2e819f7072b130e6a6e2d4cee6230
parentf2e33c0038917ad43651d0c4e8b0bb310eaed541 (diff)
downloadperlweeklychallenge-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.txt1
-rw-r--r--challenge-207/polettix/blog1.txt1
-rw-r--r--challenge-207/polettix/perl/ch-1.pl29
-rw-r--r--challenge-207/polettix/perl/ch-2.pl12
-rw-r--r--challenge-207/polettix/raku/ch-1.raku21
-rw-r--r--challenge-207/polettix/raku/ch-2.raku9
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;
+}