4 kyu
Anakin's Colorful Protocol Droids
20deckar01
Loading description...
Puzzles
Riddles
View
This comment has been reported as {{ abuseKindText }}.
Show
This comment has been hidden. You can view it now .
This comment can not be viewed.
- |
- Reply
- Edit
- View Solution
- Expand 1 Reply Expand {{ comments?.length }} replies
- Collapse
- Spoiler
- Remove
- Remove comment & replies
- Report
{{ fetchSolutionsError }}
-
-
Your rendered github-flavored markdown will appear here.
-
Label this discussion...
-
No Label
Keep the comment unlabeled if none of the below applies.
-
Issue
Use the issue label when reporting problems with the kata.
Be sure to explain the problem clearly and include the steps to reproduce. -
Suggestion
Use the suggestion label if you have feedback on how this kata can be improved.
-
Question
Use the question label if you have questions and/or need help solving the kata.
Don't forget to mention the language you're using, and mark as having spoiler if you include your solution.
-
No Label
- Cancel
Commenting is not allowed on this discussion
You cannot view this solution
There is no solution to show
Please sign in or sign up to leave a comment.
This comment has been hidden.
No clue why that solution passes:
See https://www.codewars.com/kata/562086bbaacc2b4d13000047/discuss/javascript#657d1ac4dc8017ba924dd64e
This comment has been hidden.
See my comment on your solution and the issue raised in the discussion board - yes, this passes the tests, but I'd argue that this just means that the tests aren't doing what they should ;)
The migration from the old expect utility to chai introduced this regression. I'm surprised there aren't any safeguards for expect calls that are never completed. There were a few other no-op expect calls that this report uncovered. Thank you.
P.S. I initally reported this comment, because it read like a person just copying their solution into chat. In the future please mark the comment as an issue and reference the submission without publicly pasting the code.
Before approving this kata, let's see if these kata's are potential duplicates of this one:
Different enough, I guess. Approved at lowest rank available. Votes were really all over the place this time.
Is there a list of possible color values somewhere? Or do our solutions have to be able work with arbitrary strings for color names?
This comment has been hidden.
This comment has been hidden.
The droids don't seem to have that information stored in their databanks.
The method signatures do indicate that colors can be arbitrary strings. You never know what strange languages you might encounter on Tatooine.
This comment has been hidden.
The security measures are too overblown: it's even suppressing
console.log
. How're we supposed to debug the steps with this?Either
console.log
should be piped back to the main process, or there should be some non-sandboxed fixed tests that can actually be debugged. Random tests could also show what colors are assigned to each bot.console.log
works fine while testing and is not intended to be available during an attempt. I don't think this is uncommon for sandboxed kata, and it does not appear to violate any of the authoring guidelines.Errors provide messages and reference the offending line. Combined with the test titles, the information should be sufficient for users to build their own test cases to reproduce any failures.
If you disable console.log, you should provide an additional sample test with more than 2 colors.
@dfhwze What purpose would that serve? Logging works for user tests.
How do you suggest users write tests if they don't know (yet) which are correct test cases? This kata is a total black box.
Any test case you choose is valid as long as there are two of each color, as mentioned in the description. The example tests are trivial to modify, run, and log/debug.
In the real world you don't always have logging for a production system, and I'm ok with this kata being difficult if that teaches people how to think critically and learn how to write repro tests.
Oh I see, sample test does not check on valid "hint" given by Anakin. Then it would be easy for users to write own test cases.
I don't believe this is necissary. The example test is just for developing the algorithm. Everything else in the full test suite (like hint validation) is for cheat prevention and has clear error messages.
There are a lot of testing code and security features but no actual descriptions mentioning how the process is actually done, so it's very hard to know what is even being tested.
Thank you for taking the time to review this kata.
Coming back to this with fresh eyes, I agree that the description is light on specifics. I put a most of the technical details in the comments of the solution template.
Do you think it would help if I inlcuded pseudo code in the description that outlined the testing procedure and provided an example to demonstrate the event API?
Yeah, It's really needed. I don't even know how the 3 functions are called in sequence, and it's all really confusing.
I added an example to help demonstrate the order of events and API documentation for the class interfaces. I hope that helps. Let me know if you run into any issues. Thanks again for your feedback.
Resolving due to inactivity.
I think my solution is probably not what you had in mind. I'll leave it up to you to decide if this is something you want to prevent or not. Otherwise, nice use of sandbox!
I previously commented that I am planning to add randomized tests which should thwart attempts to hard code the answers in the solution.
Do you think randomized tests are sufficient?
Probably. I'll see if I can still cheat after you've added them ;)
The tests get shuffled randomly now. Thanks for the feedback!
I really like this kata, but there are a few things that can be improved:
Thanks for your feedback.
Thanks again! Let me know if you think of anything else.
I added a section to the description that explains how the sanbox works. I also fixed the way that the Droid class is serialized so that its static properties are available in the sandbox.
The tests now execute synchronously since I switched to using the vm module instead of a cluster.
I have not cracked the ES6 support yet. The issue is that the Droid class has already been parsed by Babel in the test code, but the sandbox does not have access to the global polyfill functions that Babel injects. Some ES6 features work because they are transformed to pure javascript and don't require polyfills. My attempts to use
require('babel/polyfill');
do not seem to inject the global functions properly.I tried to pass the Droid class using the vm sandbox, which allowed ES6 features again, but for the same reason global state was shared and cheating became trivial.
Instead I inspected the
GLOBAL
object for functions injected by Babel and passed those into the sandbox. It's super hacky, but it seems to work.I beleive I have resolved all of your issues. Let me know if you think of anything else.
Thanks for your feedback!
Much better this way. Nice work!
This is my first kata. Any advice would be greatly appreciated.
I am planning to add some randomized tests.