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
|