Reverse Game in seven lines

Markus Gaelli gaelli at emergent.de
Tue Jul 11 19:53:32 UTC 2006


Hey Chris,

thanks! (blush)
I actually did not realize the keyboard-interface - you can actually  
type in the number to which you want to revert and then enter.
Thanks for pointing this out... :-)

Here is a slightly improved version, that keeps the "playfield" ;-)  
at the same place...

steps := 0.
numbers := (1 to: 9) asArray shuffled.
[numbers isSorted] whileFalse:
	[flipCount:= numbers indexOf: ((SelectionMenu selections: numbers)  
startUpWithCaption: 'Revert up to which number?' at: Display center  ).
	1 to: flipCount//2 do: [:i | numbers swap: i with: flipCount-i+1].
	steps := steps + 1].
PopUpMenu inform: 'You needed ', steps asString,' steps to sort the  
list.'

Cheers,

Markus

p.s. I am wondering what it would take to write a version by  
scripting some morphs - and not exploiting the poor SelectionMenu...

On Jul 11, 2006, at 9:16 PM, Chris Muller wrote:

> That is great!  Not only is the program more stable because you can't
> make bad input, but you also have a visual interface with both  
> keyboard
> AND mouse support.  We should get extra credit.
>
> What other language/environment can touch that?!
>
> :)
>
>
> --- Markus Gaelli <gaelli at emergent.de> wrote:
>
>>
>>>>
>>>> p.p.s. inspired by Paul Bissex - a guy who once wrote a small
>> article
>>>> about squeak for Wired - challenge on:
>>>> http://e-scribe.com/news/193
>>>> I wrote an Etoys version of this "reverse"-game.
>>>> It can be found on
>>>> http://www.squeakland.org/project.jsp?http://www.emergent.de/pub/
>>>> smalltalk/squeak/projects/reverse.pr
>>>>
>>>> (I hope you all have the squeakland plugin installed... ;-) )
>>>>
>>>> It has only a few lines more than the smalltalk (I  included a
>>>> smalltalk version), python, ruby,... version but comes with a much
>>>> more sophisticated user interface.
>>>> So I do think that Etoys are the way to go... no matter what the
>>>> language is underneath - be it smalltalk/python/ruby/etc...
>>
>> On Jul 7, 2006, at 8:09 PM, Chris Muller wrote:
>>>>
>>>
>>> Hi Markus, I didn't see any Smalltalk on that page.  Just for fun I
>>> coded up that reverse game and posted it, we'll see if it shows
>>> up.  It
>>> was 8 lines "beating" Ruby by 2 lines and Python by 1.
>>>
>>> Here's the code I ended up with:
>>>
>>> numbers := (1 to: 9) asArray shuffled.
>>> steps := 0.
>>>
>>> [ Transcript cr; show: numbers.
>>> numbers isSorted ] whileFalse:
>>> 	[ flipCount := (FillInTheBlank request: 'reverse how many?')
>>> asNumber.
>>> 	1 to: flipCount//2 do: [ :n | numbers swap: n with: flipCount-n+1
>> ].
>>> 	steps := steps + 1 ].
>>>
>>> Transcript cr; show: 'done, that took you ', steps printString, '
>>> steps.'
>>>
>>> Strange, I'm not sure why there are ~20 languages (including
>> "REBOL")
>>> represented but no mention of Smalltalk anywhere, especially if you
>>> had
>>> submitted it..
>>
>> Hi Chris,
>>
>> thanks! Using your swap and isSorted methods and our extreme naked
>> objects approach ;-)
>> I came up with a version of 7 lines:
>>
>> steps := 0.
>> numbers := (1 to: 9) asArray shuffled.
>> [numbers isSorted ] whileFalse:
>> 	[flipCount:= numbers indexOf: ((SelectionMenu selections: numbers)
>> startUpWithCaption: 'Revert up to which number?') .
>> 	1 to: flipCount//2 do: [ :n | numbers swap: n with: flipCount-n+1 ].
>> 	steps := steps + 1].
>> PopUpMenu inform: 'You needed ', steps asString,' steps.'
>>
>> Don't know, why it did not show up, Paul sent me a mail that he liked
>> squeak and wanted to add it...so I added him here on the bcc.
>>
>> Anyone tried the Etoys-Version? Someone told me that it was not
>> working for him, but I did not investigate...
>>
>> http://www.squeakland.org/project.jsp?http://www.emergent.de/pub/
>> smalltalk/squeak/projects/reverse.pr
>>
>> Cheers,
>>
>> Markus
>>
>> p.s. The following Python script does not work for me under OS-X.
>> Maybe sorted() and reversed() need some library here?
>>
>> import random
>>
>> numbers = random.sample(range(1,10), 9)
>> steps = 0
>>
>> while numbers != sorted(numbers):
>>      print " ".join(map(str, numbers))
>>      flipcount = int(raw_input("Reverse how many? "))
>>      numbers[:flipcount] = reversed(numbers[:flipcount])
>>      steps += 1
>>
>> print "Done! That took you %d steps." % steps
>>
>>
>>
>>
>>
>
>




More information about the Squeak-dev mailing list