You quickly find it’s a more interesting exercise than just a “point and dictionary”, particularly if you want to do it in an elegant Smalltalk way (but not over do it either).
The interesting bit is that when facing a new direction, you need to know how to advance in that direction , and also what “left” and “right” of that direction are too. So it teases out having some objects and techniques for this. For those interested - join exercism-Pharo (https://exercism.io/tracks/pharo-smalltalk/installation) in non mentor mode and you can easily download it with the tests and try it out yourself (without running through the other exercises). Tim Sent from my iPhone > On 18 Apr 2019, at 21:41, Richard Sargent > <richard.sarg...@gemtalksystems.com> wrote: > > Your system would have instance variables holding the cardinal directions and > another holding the current direction vector. > e.g. > north := DirectionVector x: 0 y: 1 name: 'north'. > > Your robot would implement e.g. #faceNorth to assign the "north" direction > vector to the current direction vector instance variable. > > > >> On Thu, Apr 18, 2019 at 12:17 PM Roelof Wobben <r.wob...@home.nl> wrote: >> oke, and how must I see those classes and elemating the need for a lookup. >> >> it may be explained in pseudo-code. >> >> Roelof >> >> >> >> Op 18-4-2019 om 20:28 schreef Richard Sargent: >>>> On Thu, Apr 18, 2019 at 10:33 AM Roelof Wobben <r.wob...@home.nl> wrote: >>>> oke >>>> >>>> Maybe I understand something not right, >>>> >>>> Lets say we have this scenario. >>>> >>>> Robot is on position (0,0) >>>> now it turns left so the robot faces East >>> >>> I don't understand what position has to do with direction nor why that >>> would be a problem. They are two distinct attributes. >>> Point and Dictionary are sufficient classes to model the limited >>> requirements of this exercise. >>> You could model a new class DirectionVector which internalizes the Point >>> used to provide the direction and provides its own name, eliminating the >>> need for a look up of any kind. >>> >>>> >>>> or this scenario >>>> >>>> Robot is on position (0,0) >>>> now it turns right so the robot faces west. >>>> >>>> it looks that dictionary cannot provide this answer. >>>> or do I overlook something >>>> >>>> Roelof >>>> >>>> >>>> >>>> Op 18-4-2019 om 19:17 schreef Richard Sargent: >>>>>> On Thu, Apr 18, 2019 at 10:01 AM Roelof Wobben <r.wob...@home.nl> wrote: >>>>>> yep, I have read that one >>>>>> but I never gets a answer how I can "convert" a point to something like >>>>>> north, east >>>>>> >>>>>> because the challenge wants this to be the answer : >>>>>> >>>>>> (Dictionary new >>>>>> add: 'direction' -> 'north'; >>>>>> add: >>>>>> 'position' >>>>>> -> >>>>>> (Dictionary new >>>>>> add: 'x' -> 0; >>>>>> add: 'y' -> 0; >>>>>> yourself); >>>>>> yourself) >>>>> >>>>> If you have previously defined a "representation map", you would be >>>>> golden. >>>>> >>>>> e.g. >>>>> Dictionary new >>>>> at: self northDirectionVector put: 'north'; >>>>> at: self eastDirectionVector put: 'east'; >>>>> at: self southDirectionVector put: 'south'; >>>>> at: self westDirectionVector put: 'west'; >>>>> yourself. >>>>> >>>>> Then: >>>>> (Dictionary new >>>>> add: 'direction' -> (self directionRepresentationMap at: >>>>> self directionVector); >>>>> ... >>>>> >>>>>> >>>>>> >>>>>> and I think I need then to use if then , which I try to avoid as much as >>>>>> possible. >>>>>> >>>>>> Roelof >>>>>> >>>>>> >>>>>> >>>>>> Op 18-4-2019 om 18:33 schreef Richard Sargent: >>>>>>>> On Thu, Apr 18, 2019 at 8:57 AM Roelof Wobben <r.wob...@home.nl> wrote: >>>>>>>> Hello, >>>>>>>> >>>>>>>> I know I have asked earlier but im still stuck on this one : >>>>>>>> https://github.com/exercism/problem-specifications/blob/master/exercises/robot-simulator/description.md >>>>>>>> >>>>>>>> I tried with all double dispatch but that will be a lot of duplicate >>>>>>>> classes >>>>>>>> >>>>>>>> The problem I cannot solve right is that a robot can move or turn. >>>>>>>> when a robot turns only the direction the robot is facing changes and >>>>>>>> the position not. when a robot moves the facing direction stays the >>>>>>>> same but the position changes. but the change is dependend on the >>>>>>>> facing. Also the new facing direction is dependend on the old facing >>>>>>>> direction/ >>>>>>>> How can I model this the best. >>>>>>>> >>>>>>>> I already have a object Robot that contains the facing direction and >>>>>>>> the current position >>>>>>>> or tried without it but then I use a lot of if then's >>>>>>>> >>>>>>>> >>>>>>>> so it there a better way to model this problem so it will be all >>>>>>>> nice and readable code. >>>>>>> >>>>>>> If I remember correctly, Richard O'Keefe gave you a viable design. 1) >>>>>>> Use a Point for your direction vector. 2) Use a second Point for your >>>>>>> position. >>>>>>> >>>>>>> e.g. if you align the compass with a Cartesian plane, 0@1 is North, >>>>>>> 0@-1 is South, 1@0 is East, and -1@0 is West. When you move, you add >>>>>>> the direction vector to your current position. If you allow movements >>>>>>> of greater than a single unit, you multiply the direction vector by the >>>>>>> distance before adding that product to the position. >>>>>>> >>>>>>>> >>>>>>>> Roelof >>>>>>>> >>>>>> >>>> >>