Raku / problem-solving

🦋 Problem Solving, a repo for handling problems that require review, deliberation and possibly debate
Artistic License 2.0
70 stars 16 forks source link

roundrobin needs a metaoperator #447

Open lizmat opened 1 month ago

lizmat commented 1 month ago

This seems obvious, but I did not see another issue relating to it.

zip's infix and metaoperator, Z is tremendously valuable, but it is extremely common to run up against the need to drop down to using roundrobin because the input does not contain equally sized lists. One such example came up today on reddit here:

https://old.reddit.com/r/perl6/comments/c2hw1u/some_code_golf_help_requested/erkzbh1/

The obvious approach in that case would be to reverse the lists of digits, roundrobin add them and then re-join them in a single number.

Assuming we had a roundrobin infix and metaoperator , this would change the code:

+ [~] [Zmax] context-pad(@nums).map: {.comb }

to:

+ flip [~] [➿max] @nums.map: {.flip.comb }

Which isn't simply code-golfing, but actually obviates the need for the context-pad step that zero-pads all of the input numbers.

Expected Behavior

zip and roundrobin are equal peers.

Actual Behavior

They are not.

lizmat commented 1 month ago

Lifted from https://github.com/rakudo/rakudo/issues/3002

librasteve commented 1 month ago

I really like this idea.

I am not sure of the loopy unicode symbol. Other metas are capital Latin letters R and Z. Since R is taken maybe O would be good (Since O is round)

Would you be able to combine eg RO? What would be the effect of combining this with Z?

jubilatious1 commented 1 week ago

Roundrobin is simply Z that pads.

So the real question is whether a metaoperators can be re-jiggered to accept named arguments, such as:


[Z:pad("right"),:char("NA")]   @arrayA, @arrayB