exercism / x86-64-assembly

Exercism exercises in x86-64 Assembly.
https://exercism.org/tracks/x86-64-assembly
MIT License
22 stars 18 forks source link

Potential cheese using libc #151

Closed cafce25 closed 2 years ago

cafce25 commented 2 years ago

Because the tests are written in C the final binary has to be linked against libc, it is therefore possible to use C-functions like bsearch etc to 'solve' the exercises see iteration 1 of my binary-search solutions.

I'm not at all sure how this should be handled here is the ways I can think of:

SleeplessByte commented 2 years ago

In general, for practice exercises, if people want to cheat, we let them cheat :). In the end you only diminish your own experience/self with this.

ErikSchierboom commented 2 years ago

☝️ Unfortunately, it is not doable to prevent people from cheating (e.g. they could look up an example solution online anyway if they want to). So I'd also argue that: just let them cheat. They don't gain anything from it but that's their choice.

kotp commented 2 years ago

I am not even convinced it is "cheating" if it solves the problem. Learning how to solve problems with the tools available, even if that solution is unexpected, gives experience in problem solving. Hopefully it leads to also knowing when that is the better solution, why it may be sub-optimal, etc.

So "cheating" may not even be applicable here. I do not believe that the OP suggested it was cheating though. Only that a tooling that is provided, perhaps unintentionally, may be used to solve the problem outside of what might be the expected bounds of the exercise.

kotp commented 2 years ago

I did find it interesting that the word solve is quoted. If it does not solve the problem, then the tests should indicate that through a failure reporting. Otherwise it really is solving the problem presented.

cafce25 commented 2 years ago

@kotp That's precisely the point the instructions state: "Implement a binary search algorithm.", which my iteration 1 does not, it is merely using one already implemented in libc which then in turn would indicate missing tests.

That being said I agree with the overall sentiment of let everybody use whatever solution they can come up with. To be honest hearing everyones opinion on this was my main motivation to raise this.

kotp commented 2 years ago

"implement" defined as "put to use". If it said "write" then I would fully agree with that. Yet, we understand that the intention is to write it yourself. I bring this up during mentoring, while allowing that we have "put to use" what was needed to solve the problem.

Implement: "A means of achieving an end; an instrument"