hello everyone and thanks Bruce and William for help,

On Sat, Aug 27, 2022 at 01:25:32PM -0700, William Michels wrote:
> ~$ raku -e '++(my %digraphs){$_} for slurp.lc.match(:global, :exhaustive,
> /<[a..z]>**2/); .say for %digraphs.sort(-*.value);' richard3.txt

I don't see a huge difference with the code Bruce posted previously. Did
I miss something?

On Sat, Aug 27, 2022 at 12:24:50PM -0500, Bruce Gray wrote:
>> I do *not* think you can ("move the cursor backward in the comb
>> regex"); See https://docs.raku.org/routine/comb : ... "returns a Seq
>> of non-overlapping matches" ...

I was diging in the regex syntax part of the doc but indeed: the comb part
is clear, its name is too and I realize I was abusing it: match is the
good thing to do.

>> The "non-overlapping" nature is the problem.
>> (Please let me know if this turns out to be incorrect!)

If the cursor can be manipulated from the regex itself (:exhaustive is
the thing I failed to find) but I try to be idiomatic so your answer
fits!

I noticed the usage of the hyperoperator » and wanted to know if we
could take advantage if parallelism I found it a bit faster.

It also shows that slurp.split('\n') is faster than lines by far (see
below).

Thanks again for helping me!

slurp              :  15.89s user 0.37s system 105% cpu 15.373 total
slurp, split, race :  15.10s user 0.11s system 104% cpu 14.502 total
line,         race :  24.96s user 0.19s system 314% cpu  7.991 total


set vi.macros vi.macros vi.macros vi.macros vi.macros \
  vi.macros vi.macros vi.macros vi.macros vi.macros \
  vi.macros vi.macros vi.macros vi.macros vi.macros \
  vi.macros vi.macros vi.macros vi.macros vi.macros \
  vi.macros vi.macros vi.macros vi.macros vi.macros \
  vi.macros vi.macros vi.macros vi.macros vi.macros \
  vi.macros vi.macros vi.macros vi.macros vi.macros \
  vi.macros vi.macros vi.macros vi.macros vi.macros
time raku -e 'slurp.lc.match(:exhaustive, /(<[a..z]> ** 2)/)».Str.Bag
                .sort({ -.value, ~.key })' "$@"
time raku -e 'slurp.split("\n").map({
                |map ~*, .lc.match(:exhaustive, /(<[a..z]> ** 2)/)
                }).flat.Bag.sort({-.value, .key})' "$@"
time raku -e 'lines.race.map({
                |map ~*, .lc.match(:exhaustive, /(<[a..z]> ** 2)/)
                }).flat.Bag.sort({-.value, .key})' "$@"

raku -e '
        lines.race.map({
                |map ~*, .lc.match(:exhaustive, /(<[a..z]> ** 2)/)
        }).flat.Bag.sort({-.value, .key}).map: &say
'

-- 
Marc Chantreux
Pôle de Calcul et Services Avancés à la Recherche (CESAR)
http://annuaire.unistra.fr/p/20200

Reply via email to