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 >>>> >>>> >>> >> >