Why does it dont return ordered for neither of those lists?
I mean:

my $u = "24680";
my @s = $u.comb.unique;
say @s ; # [2 4 6 8 0]

sub matching_chars(Str $a, Str $b) {
   my @c = $a.comb.unique;
   my @d = $b.comb.unique;
   return ~[@c (&) @d];
}

say matching_chars("24680", "1234567890"); # says 2 0 8 4

On Mon, Sep 2, 2019 at 1:20 AM William Michels via perl6-users <
perl6-users@perl.org> wrote:

> Thanks Simon, good point. I ran into the same trouble as others trying
> to get the answer via regex, and switched over to sets as an
> alternative. I'll confess I completely missed that Yary's Perl5 code
> returned the substring "8420" present in his test "19584203" string,
> and that was the answer he was going for.
>
> Simon and Eirik, I still think there might be some value in calling
> the .unique method on $chars.comb as in "$chars.comb.unique". But I
> haven't had the opportunity to check code efficiency  +/-  the
> ".unique" method call.
>
> For those interested in using Sets as a solution, you can stringifying
> the 'return' line (below). Still working on using "join()" to
> concatenate!
>
> sub matching_chars(Str $a, Str $b) {
>    my @c = $a.comb.unique;
>    my @d = $b.comb.unique;
>    #return (~[@c (&) @d]).^name;
>    return ~[@c (&) @d];
> }
>
> say matching_chars("24680", "19584203"); # says 2 0 8 4
> say matching_chars('+\/\]\[', 'Apple ][+//e'); # says [ + ] /
> say matching_chars("Lorem ipsum dolor sit amet, consectetuer
> adipiscing elit.", "abcdef"); # says c a d e
>
>
> HTH, Bill.
>
> PS. Simon, thanks for all the great Youtube videos you've done from
> LondonPM!
>
> https://youtu.be/yt8SrZ_V_50
> https://youtu.be/9M1xZQ0_Skw
>
>
>
>
>
>
>
>
> On Sun, Sep 1, 2019 at 9:59 AM Simon Proctor <simon.proc...@gmail.com>
> wrote:
> >
> > Using a set would be good but it doesn't give you the matching string
> from the original (which is what I thought was required) otherwise Sets
> would be my first thought.
> >
> > On Sun, 1 Sep 2019, 17:57 William Michels, <w...@caa.columbia.edu>
> wrote:
> >>
> >> Hi Yary and Paul and Simon,
> >>
> >> I ran into the same difficulties as Yary with repeated characters, so
> >> I tried the .unique method. Then after a while, I realized that
> >> problems like this might best be treated as "Set" problems in Perl6.
> >> Note the Set Intersection operator "(&)" below:
> >>
> >> sub matching_chars(Str $a, Str $b) {
> >>    my @c = $a.comb.unique;
> >>    my @d = $b.comb.unique;
> >>    #say @c; say @d;
> >>    return @c (&) @d;
> >> }
> >>
> >> say matching_chars("24680", "19584203"); #RETURNS set(0 2 4 8)
> >> say matching_chars('+\/\]\[', 'Apple ][+//e'); #RETURNS set(+ / [ ])
> >>
> >>
> >> https://docs.perl6.org/routine/Set
> >> https://docs.perl6.org/language/operators#infix_(&),_infix_∩
> >>
> >> HTH, Bill.
> >>
> >>
> >> On Sat, Aug 31, 2019 at 8:59 PM Paul Procacci <pproca...@gmail.com>
> wrote:
> >> >
> >> > I'm not entirely sure if this is the correct answer, but if you
> define your own custom character class
> >> > with a 'regex' object, you can use that in the grouping.
> >> >
> >> > sub matching_chars(Str $chars_to_match, Str $_) {
> >> >     my regex x { $chars_to_match ** 1 };
> >> >     m/<[<x>]>/;
> >> > }
> >> >
> >> > The above worked for me in the very small testing I did.
> >> >
> >> > ~Paul
> >> >
> >> > On Sat, Aug 31, 2019 at 9:54 PM yary <not....@gmail.com> wrote:
> >> >>
> >> >> I found something easy in Perl 5 that's puzzling me in Perl 6-
> specifying a character class via a variable.
> >> >>
> >> >> Perl 5:
> >> >> sub matching_chars {
> >> >>   (my $chars_to_match, local $_) = @_;
> >> >>   /([$chars_to_match]+)/
> >> >> }
> >> >>
> >> >> say matching_chars('24680', '19584203'); # says 8420
> >> >> say matching_chars('+\/\]\[', 'Apple ][+//e'); # says ][+//
> >> >>
> >> >> Perl 6:
> >> >> sub matching_chars(Str $chars_to_match, Str $_) {
> >> >>     # warnings, treats as string not variable
> >> >>     m/<[$chars_to_match]>/;
> >> >> }
> >> >>
> >> >> How do I get Perl 6 to interpret a variable in the contents of a
> character class?
> >> >> From http://docs.perl6.org/language/regexes#Regex_interpolation I'd
> think that  Rakudo would use the literal contents of $chars_to_match,
> instead it's using the literal chars "$ c h a r s _ t o _ m a t c h" and
> warning about repeated c, underscore, etc.
> >> >>
> >> >> -y
> >> >
> >> >
> >> >
> >> > --
> >> > __________________
> >> >
> >> > :(){ :|:& };:
>


-- 
Aureliano Guedes
skype: aureliano.guedes
contato:  (11) 94292-6110
whatsapp +5511942926110

Reply via email to