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-us...@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