aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-12-07 22:34:51 +0000
committerGitHub <noreply@github.com>2020-12-07 22:34:51 +0000
commit75da785cd2170f643cfb2ef54ae626ebcfbc06d2 (patch)
tree18738847b033031892ddaf814e948a8097b64d0a
parent11b8a89713e5271db8d4b10782712d1fb620641e (diff)
parentc2aa40d34e14a9c86305621a7b9dae01114d12c9 (diff)
downloadperlweeklychallenge-club-75da785cd2170f643cfb2ef54ae626ebcfbc06d2.tar.gz
perlweeklychallenge-club-75da785cd2170f643cfb2ef54ae626ebcfbc06d2.tar.bz2
perlweeklychallenge-club-75da785cd2170f643cfb2ef54ae626ebcfbc06d2.zip
Merge pull request #2944 from stuart-little/stuart-little_010
1st commit on 010
-rw-r--r--challenge-010/stuart-little/README1
-rwxr-xr-xchallenge-010/stuart-little/raku/ch-1.p67
-rwxr-xr-xchallenge-010/stuart-little/raku/ch-2.p634
3 files changed, 42 insertions, 0 deletions
diff --git a/challenge-010/stuart-little/README b/challenge-010/stuart-little/README
new file mode 100644
index 0000000000..78439907de
--- /dev/null
+++ b/challenge-010/stuart-little/README
@@ -0,0 +1 @@
+Solutions by Stuart Little
diff --git a/challenge-010/stuart-little/raku/ch-1.p6 b/challenge-010/stuart-little/raku/ch-1.p6
new file mode 100755
index 0000000000..78c634754c
--- /dev/null
+++ b/challenge-010/stuart-little/raku/ch-1.p6
@@ -0,0 +1,7 @@
+#!/usr/bin/env perl6
+use v6;
+use Roman:from<Perl5>;
+
+# run as <script> <number to convert, roman or arabic; the script will detect which conversion to make>
+
+say (@*ARGS[0].&isroman) ?? (arabic(@*ARGS[0])) !! (roman(@*ARGS[0]))
diff --git a/challenge-010/stuart-little/raku/ch-2.p6 b/challenge-010/stuart-little/raku/ch-2.p6
new file mode 100755
index 0000000000..db54e375e2
--- /dev/null
+++ b/challenge-010/stuart-little/raku/ch-2.p6
@@ -0,0 +1,34 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub matching($s1,$s2) {
+ my $d=floor(max($s1.chars,$s2.chars)/2)-1;
+ ($s1.comb.pairs X $s2.comb.pairs).grep({ (abs($_[0].key.Int-$_[1].key.Int) <= $d) && ($_[0].value eq $_[1].value) }).map(*.[0]).unique.map(*.value)
+}
+
+sub trnsp($s1,$s2) { (matching($s1,$s2) Z matching($s2,$s1)).map({ $_[0] ne $_[1] }).sum/2 }
+
+sub jaro_sim($s1,$s2) {
+ given my $m=matching($s1,$s2).[0].chars {
+ when 0 { 0 }
+ default { ($m/$s1.chars+$m/$s2.chars+($m - trnsp($s1,$s2))/($m))/3 }
+ }
+}
+
+sub jw_sim($s1,$s2,$p,$max_pref) {
+ my $pref_len=min($max_pref, ((0..^$s1.chars).first({ $s1.substr(0..$_) ne $s2.substr(0..$_) }) // $s1.chars));
+ my $js=jaro_sim($s1,$s2);
+ $js+$pref_len*$p*(1-$js)
+}
+
+sub jw_dist($s1,$s2,$p,$max_pref) {1-jw_sim($s1,$s2,$p,$max_pref)}
+
+say jw_dist(|@*ARGS[0,1], .1, 4)
+
+=finish
+run as <script> <string1> <string2>
+see
+
+https://files.eric.ed.gov/fulltext/ED325505.pdf
+
+for a clearer description of matching/transpositions by Winkler (clearer than Wikipedia's, that is)