diff options
| author | chirvasitua <stuart-little@users.noreply.github.com> | 2020-12-07 17:26:38 -0500 |
|---|---|---|
| committer | chirvasitua <stuart-little@users.noreply.github.com> | 2020-12-07 17:26:38 -0500 |
| commit | c2aa40d34e14a9c86305621a7b9dae01114d12c9 (patch) | |
| tree | ba380cc6a3236615e996cda6256d4590fcaa2ed6 | |
| parent | 7e70292e4dd5aa113f599defb30acecd0d5cf7a1 (diff) | |
| download | perlweeklychallenge-club-c2aa40d34e14a9c86305621a7b9dae01114d12c9.tar.gz perlweeklychallenge-club-c2aa40d34e14a9c86305621a7b9dae01114d12c9.tar.bz2 perlweeklychallenge-club-c2aa40d34e14a9c86305621a7b9dae01114d12c9.zip | |
1st commit on 010
| -rw-r--r-- | challenge-010/stuart-little/README | 1 | ||||
| -rwxr-xr-x | challenge-010/stuart-little/raku/ch-1.p6 | 7 | ||||
| -rwxr-xr-x | challenge-010/stuart-little/raku/ch-2.p6 | 34 |
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) |
