Reverse Game in seven lines

Chris Muller chris at funkyobjects.org
Tue Jul 11 19:16:36 UTC 2006


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