Here's another freebie!! I signed up for a programming problem of the day. I got my first one today, rated "easy".
Here's the description of the problem.
https://git.qoto.org/Absinthe/sum-of-number-in-list/blob/master/README.md
My code to solve it, though not clean and delicious, is in that same repo, but certainly give it a crack before peeking. :)
@Absinthe this one was actually "easy", just translated the description and mercury solved it for me (no squinting required), so I decided to throw in some input handling and that was the painful part as usual.
https://git.sr.ht/~namark/mercury_stuff/tree/master/toys/pairs_add_up_to.m
But of course the real challenge is doing it in one pass... in a language that might not have a concept of a pass...
@namark I really do wish I could run the code :(
I usually try not to involve I/O in the problems as that can just add an unnecessary layer of complexity to most things.
So, let me ask, the line that says
A + B = K ... does that generate a whole bunch of things like (1 + K-1) (2 + K-2) (3 + K-3) and so on?
If that is the case, what does it feel like if your list of numbers are large? Like 1,234,567,890?
@Absinthe How it works? I'm not sure myself.
The idea is that you just write rules/goals, and then the program(I guess) comes along and tries to satisfy those goals. If it manages to do so the predicate as a whole succeeds(becomes true), otherwise it fails(becomes false).
Tat specific predicate is something like:
The sum of A and B must be equal to K and
A must be in the List and
B must be in the List.
@Absinthe It probably does generate(or just go through) all the pairs under the hood, but I'm not sure exactly how. If it's really smart and aware of associativity of addition, it might even skip the equivalent pairs.
@Absinthe One fun thing is that order of goals usually doesn't matter, so could arrange the 3 lines in that predicate however you want, they are just rules/constraints and the program will read them all and try to satisfy them all together. In abstract terms that is, not sure what's really going on under the hood.
@namark Thanks! It still doesn't feel intuitive yet. If I came across such a line I would have to work it out to see what it did. But hey, it does work and with all the corner cases I could think of.
@Absinthe true, I don't think I would be able to understand that, if I didn't already know what it was trying to do.
Then again I don't know python, and can still kind of make sense of it given the context. Definitely much more readable than an equivalent Mercury version I'm about to push :D
@namark I have not had a chance to try to compile mercury yet. I don't do much with procedural languages. I guess there is no time like the present.
@Absinthe nice, and the "one line" version seems quite optimal too.