[squeak-dev] Ulam spiral

Bert Freudenberg bert at freudenbergs.de
Thu Dec 6 23:45:27 UTC 2012


On 2012-12-07, at 00:03, "H. Hirzel" <hannes.hirzel at gmail.com> wrote:

> I propose to add something like the following to the 'welcome workspace'.
> 
> At the bottom, 'call to action  :-)  ,
> 
> cf Squeak web site discussion thread.
> 
> --Hannes
> /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
> 
> The desktop background shows an prime spiral. Natural numbers are
> arranged in a spiral in a rectangular grid. The 1 is at the center.
> Primes are marked with a dot.
> 
> To see how this is done in Squeak Smalltalk
> a) select the following code,
> b) bring up the context menu and
> c) choose 'do it'.
> 
>   Display restoreAfter: [
>                size := 400 squared.
>                primes := (Integer primesUpTo: size) asSet.
>                step := 1.
>                length := 1.
>                pen := Pen new turn: 90.
>                [step < size] whileTrue: [
>                        2 timesRepeat: [
>                                length timesRepeat: [
>                                        pen fillColor: ((primes includes: step)
>                                                ifTrue: [Color black]
>                                                ifFalse: [Color white]).
>                                        pen go: 1.
>                                        step := step + 1].
>                                pen turn: -90].
>                        length := length + 1]].
> 
> Ref:  http://en.wikipedia.org/wiki/Ulam_spiral



This version would be even less complex and one line shorter. But maybe a bit too sneaky? OTOH it demos fractional arithmetic, not a bad idea either:

Display restoreAfter: [
	size := 400 squared.
	primes := (Integer primesUpTo: size) asSet.
	step := 1.
	length := 1.
	pen := Pen new turn: 90.
	[step < size] whileTrue: [
		length timesRepeat: [
			pen fillColor: ((primes includes: step)
				ifTrue: [Color black]
				ifFalse: [Color white]).
			pen go: 1.
			step := step + 1].
		pen turn: -90.
		length := length + (1/2)]].

- Bert -




More information about the Squeak-dev mailing list