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

Reply via email to