We’re hiring Java and .NET Craftspeople in London & Barcelona. Come and meet us at our Career Open House on 31st January to learn more.
While working on katas to test the functional calisthenics I realized that some of the rules were not going to be covered by the rules for the katas that I had choosen. Therefore, some additional rules/premises/requirements to the katas were needed. Here I have three of the katas that we have used in the past for OOP and one kata that came out of the HN discussion on the post.
The easiest kata in this post (on its original form), but still difficult enough to pose a bit of a challenge. The main point of the changes revolves around the interactivity of the system. Probably this change makes it the more difficult of the lot to handle using the rules.
Of the katas on this post is the one on which more concepts are present. Which makes it interesting when comparing the solution with OOP. Use of the side effects at the boundaries is explicit with the changes introduced to the rules.
The kata itself is interesting because of the already present dependency on date. The change added is to reflect the rule of side effects at the boundaries. Also, because of the use of an external file/database is easy to think about the use of infinite sequences.
The objective is to place 8 chess queens on a standard chess board without the queens checking each other.
None
The idea of doing this kata as part of the list of katas to use for functional calisthenics came out of the discussion on Hacker News linked above. One of the solutions to the kata, and the one I used the only time I have completed it, uses recursion with backtracking. But one of our rules says no use of explicit recursion. I am currently working on it, so a pointer for you is the use of reduce in which the accumulator is a collection of boards with the state after placing a queen. I have also to look into Philip's Wadler paper regarding the List of successes method (paywall)
Original Photo by Jason Briscoe on Unsplash
Software is our passion.
We are software craftspeople. We build well-crafted software for our clients, we help developers to get better at their craft through training, coaching and mentoring, and we help companies get better at delivering software.