[squeak-dev] Ulam spiral

H. Hirzel hannes.hirzel at gmail.com
Wed Oct 3 12:45:45 UTC 2012


On 10/3/12, Frank Shearar <frank.shearar at gmail.com> wrote:
> On 3 October 2012 09:24, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>> This is very nice indeed.
>>
>> What about adding this as an example of good code to the help menu?
>>
>> Just a workspace like the one 'extending the system'. It would contain
>> the code to rebuild the background from scratch.  The menu might be
>> called 'Create Ulam spiral background'. The  would be an adapted
>> version of Bert's code.
>
> I guess it's as good a time as any to state that the background of 4.4
> _will_ be some variation of the Ulam spiral. If you take a standard
> gritty one and gently fuzz it, you get a light grey slightly textured
> background that will tile nicely. But I was going to turn the mutated
> spiral into a PNG and figure out how to set the background at some
> point in the very near future.
>
>> 1) It is short an easy to understand
>> 2) The speed is just fine to watch it progressing.
>
> +1. It also has the same kind of look as a Logo program.
>
> frank

Yes, I can imagine that some people might want to download a Squeak
4.4 all-in-one just for the sake of playing around with this spiral. A
good class-room demonstration of Squeak (for 20...40 minutes).

Things which it illustrates are
1) The compactness of the Smalltalk language
2) How to modify code in a Workspace and execute it with 'do it'.
3) The fact that you do not need to have 'deep' knowledge of Smalltalk
in order to adapt a piece of code.
4) It is like a 'poem'. A short self contained nice piece of code.


--Hannes

>> And maybe  Franks solution in addition to illustrate another point.
>>
>> Bert's code
>>
>>  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]].
>>
>>
>> It should be adapted to do the following:
>>
>> 1) set the background to blank
>> 2) build the spiral
>>
>> --Hannes
>>
>> On 10/1/12, Frank Shearar <frank.shearar at gmail.com> wrote:
>>> On 1 October 2012 16:55, Bert Freudenberg <bert at freudenbergs.de> wrote:
>>>> Frank posted some nice code on his blog:
>>>> http://www.lshift.net/blog/2012/09/27/decomposing-the-ulam-spiral
>>>>
>>>> Couldn't help myself coming up with a simpler (admittedly less
>>>> efficient)
>>>> version:
>>>>
>>>>         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]].
>>>
>>> I bow before your image-fu. The main thing I wanted to show was the
>>> decomposition of the problem into various bits. Also, I hadn't
>>> considered the idea of wrapping up the number line before, so needed
>>> to share that tiny moment of mathematical insight.
>>>
>>> For origin-centred parts of the Ulam spiral, you might well have
>>> something more efficient. Splitting up the problem into a (random
>>> access!) traversal only comes into its own when you can't use the
>>> intuition of a turtle going round and round in a square spiral. (But I
>>> did use that intuition in figuring out the offsets from the corners.)
>>>
>>> frank
>>>
>>>> - Bert -
>>>>
>>>>
>>>>
>>>
>>>
>>
>
>


More information about the Squeak-dev mailing list