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]].
- Bert -
On 12-10-01 11:55 AM, Bert Freudenberg wrote:
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 like that a lot. I found myself executing it over and over.
Chris
On 1 October 2012 16:55, Bert Freudenberg bert@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 -
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. 1) It is short an easy to understand 2) The speed is just fine to watch it progressing.
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@gmail.com wrote:
On 1 October 2012 16:55, Bert Freudenberg bert@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 -
On 3 October 2012 09:24, H. Hirzel hannes.hirzel@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.
- It is short an easy to understand
- The speed is just fine to watch it progressing.
+1. It also has the same kind of hook as a Logo program.
frank
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:
- set the background to blank
- build the spiral
--Hannes
On 10/1/12, Frank Shearar frank.shearar@gmail.com wrote:
On 1 October 2012 16:55, Bert Freudenberg bert@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 -
On 10/3/12, Frank Shearar frank.shearar@gmail.com wrote:
On 3 October 2012 09:24, H. Hirzel hannes.hirzel@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.
- It is short an easy to understand
- 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:
- set the background to blank
- build the spiral
--Hannes
On 10/1/12, Frank Shearar frank.shearar@gmail.com wrote:
On 1 October 2012 16:55, Bert Freudenberg bert@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 -
Hannes. Hirzel wrote on Wed, 3 Oct 2012 14:45:45 +0200
Things which it illustrates are
- The compactness of the Smalltalk language
- How to modify code in a Workspace and execute it with 'do it'.
- 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.
5) Code can be executed directly in the mail window. Oh wait, that is just me - the last Celeste user ;-)
-- Jecel
squeak-dev@lists.squeakfoundation.org