Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

product with repeats as an argument #78

Open
simonzack opened this issue Jul 18, 2020 · 5 comments
Open

product with repeats as an argument #78

simonzack opened this issue Jul 18, 2020 · 5 comments

Comments

@simonzack
Copy link

Hi, I came here from doing Project Euler in C++.

I was googling for a library for doing product() and found this one, but it only allows a template argument.

My use-case is to have seq be the digits {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, and repeats be the number of them. This is required for some problems.

Having repeats would be great!

@ryanhaining
Copy link
Owner

Sorry for the delayed response. You're not the first person to ask for something similar (see #41). The issue is that product is able to handle different types, and so must compute a lot at compile time. The flexibility you'd need would require a totally different product implementation that did work at runtime unless you know the repeat value that you need at compile time. Is that the case? So that something like product_repeat<3>(digits) could work for you?

@simonzack
Copy link
Author

simonzack commented Jul 28, 2020

Oh I basically need the same type but repeated different times, but the repeat value is not known at compile time.

A couple days ago I just did this manually by representing each possibility as a number, and extracting the digits. My set of digits were {1, 3, 7, 9}, and 1 encoded as 0, 3 encoded as 1, 7 encoded as 2, 9 encoded as 3, 11 encoded as 4 and so on. But some product() like Python's itertools I think will be more flexible.

The number of repeats is in a loop, so product_repeat<3>(digits) wouldn't work too well. It would if the loop was templated in some way, but that's not very nice.

Is it hard to make this a real parameter or would it slow things down lots? I'm guessing it'll be slower than the encoding scheme I had above, but hopefully not too much.

@ryanhaining
Copy link
Owner

ryanhaining commented Jul 29, 2020 via email

@simonzack
Copy link
Author

simonzack commented Jul 29, 2020

Well I know the lower bound but not the upper bound.

And yes consteval & template stuff is not very elegant and seems like it's hard-coded. I barely know how to code template meta-programming stuff anyway.

I think the ideal form is something like Python and making it an argument. I think that's perfect if there's not a massive decrease in performance compared to just using a loop, encoding the indexes as numbers, and decoding it. That works but is rather tedious to code.

@ryanhaining
Copy link
Owner

ryanhaining commented Jul 29, 2020 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants