Hello,
I try to solve a adventofcode challenge where I must
find out when santa
is first at the basement. the floor is there -1.
So I thought I use a while loop like this :
santaFloorOnBasement
�������� "calculates which step take Santa to the basement"
���������� | index|
���������� index := 1.
���������� ??? when: (floor >=0 ) do:
���������������� [ floor := (input at: index = '(' )
�������������������������������� ifTrue: [ floor + 1 ]
�������������������������������� ifFalse: [ floor - 1 ].
������������������ index := index + 1 ].
but I cannot find out what must be instead of the ??
I've never used #when:do: so I can't comment on that.
I'd be using #whileTrue: which looks like this...�� [
condition block ] whileTrue: [ action block ]
�� ����
<<<�� �� ��??? when: (floor >=0 ) do:
>>>�� �� [floor>=0] whileTrue:��
For further examples review the "senders" of
#whileTrue:
i.e. highlight then press <CTRL-N> on MS Windows��
��
index is the index of
the string which has to start with a 1.
floor�� and input are both instance variables. floor
contains the current
floor and input the input of the challenge.
Can someone help me figure this out so the next time I
can do this on my
own.
btw you have a problem here...
�� �� ��floor := (input at: index = '(' )��
Its not doing what you think and you'll get "Error:
only integers should be used as indices"
Consider you that two messages are being sent:
�� ��* the keyword message...�� #at:
�� ��* the binary message....�� #=
Homework :)... what is the third type of message and
the evaluation priority of all three.
Homework 2...�� Review the "implementors" of message
#=
<CTRL-M> on MS Windows
cheers -ben
P.S. As it current stands,�� you'll get a
"SubscriptOutOfBounds" error if the input ends before
Santa gets to the basement.��
An exercise, fix that using the existing loop.
Then consider using an iterator...
�� �� input do: [ :bracket |��
�� �� �� �� ��(bracket = $( ) ifTrue:��
[ floor := floor + 1 ]�� .
�� �� �� �� ��(bracket = $( ) ifTrue:��
[ floor := floor + 1 ]��������].
and maybe something else for you to experiment
with...
�� �� movement := Dictionary new.
�� ����movement����at: $( put: 1.
�� ����movement����at: $) put: -1.
�� �� input do: [ :char |�� floor := floor��+ (movement
at: char ifAbsent: [0]) ].��
cheers -ben