# Pastebin mOXSCriu my @words = ("Matt", "Tomm M", "Ben", "Omar G.", "Wildcard", "Devilshakerz", "JordanMussi", "Starpaul20", "Justin", "katos", "Euan T", "noyle", "Tom K.", "Chris Boulton", "andrewjs18", ".m.", "effone", "kawaii"); sub qgram (\a, \b, \q = (a.chars + b.chars) div 4 ) { my &ngrams = -> \t, \n { my \s = ~ (' ' x n - 1) ~ t ~ (' ' x n - 1); do for ^(t.chars + n) { s.substr: $_, n } } my \aₙ = &ngrams(a,q).BagHash; my \bₙ = &ngrams(b,q).BagHash; (aₙ ∩ bₙ) / (aₙ ∪ bₙ) } my &i = method ($i) {$i ?? self.fc !! self} my &m = method ($i) {$i ?? self.samemark(' ') !! self} my &ws = method ($i) {$i ?? self !! self.words.join } my &p = method ($i) {$i ?? self !! self.split(/<:P>/).join } my $subject = 'omar'; my @results = @words .map({ $^word, qgram $^word.&i(True), $subject }) .sort( *.tail ); my %r = @results.sort( -*.[1] ).head(1).kv; say %r;