Code we're not proud of is all too often needed and necessary.

(Not always with the best consequences, but... room for improvement...)

-- 
Raul

On Sat, Dec 23, 2023 at 6:43 AM Ewart Shaw <[email protected]> wrote:
>
> See also this post from September:
> http://jsoftware.com/pipermail/chat/2023-September/009287.html
> outlining how I used J to create the new covers for UK Maths Trust books,
> e.g.
> https://ukmt.org.uk/textbooks/a-mathematical-olympiad-primer-ll
>
> I had difficulty implementing a recursive algorithm for the turtle tiling,
> and was on a tight schedule, so produced the book cover tiling 'by hand'. I
> was also a judge for the Hat Competition, which had many wonderful entries;
> see the NY Times article for a summary: https://archive.is/fp84g
>
> Here's the relevant J code, though I'm not particularly proud of it.
> [See  https://code.jsoftware.com/wiki/User:Ewart_Shaw/Utils  for ~ESutils]
> ====================================================
>
> NB. Ewart Shaw Turtle tiling
>
> NB. -----------------------------------------
>
> NB. Created 26-Aug-2023
>
> NB. Last modified 1-Sept-2023
>
> NB. ================================================
>
> NB.* FDIR n directory to contain figures
> NB.
>
>
> require '~ESutils'
>
> mkdir FDIR=: jpath '~ESDoutput/UKMT/' NB. home
>
>
> NB. ================================================
> NB. Utilities
>
> NB.
>
>
> fappendslf=: {{ (x,LF) fappends y }}
>
> fwriteslf=: {{ (x,LF) fwrites y }}
>
>
> textfpt=: ('(', (":@{.), ',', ')',~ (":@{:))
>
>
> NB. ================================================
>
> NB. Turtle node coordinates
>
> NB.
>
>
> M1=: -: (S3,1) ,: _1,S3=: %:3 NB. rotate 30 degrees
>
> M=: tidyreals _1 |. (+/ . *)/\ 12#,:M1 NB. rotate 30*i. 12 degrees
>
>
> X=: 0 2 4 5 5 5 4 2 2 2 1 _1 _1 _1 + 0 0 0 0 1 2 2 2 2 1 1 1 1 0*S3
>
> Y=: 0 0 0 0 _1 0 0 0 2 3 3 3 1 0 + 0 0 0 1 1 1 2 2 2 2 1 1 1 1*S3
>
> T=: tidyreals X,.Y NB. Nodes of turtle
>
>
> TM=: tidyreals T (+/ . *)"2 M NB. All 12 orientations of turtle
>
>
> NB. ================================================
> NB. Turtle paths for cover
>
> NB.
>
>
> addtile=: {{
>
> (,: T) addtile y
>
> :
>
> 'oldtile oldnode newnode orientation'=. y
>
> newtile=. orientation { TM
>
> x, newtile +"1 (oldnode { oldtile { x) - newnode { newtile
>
> }}
>
>
> setsupertile=: {{
>
> a=. addtile 0 1 13 11
>
> a=. a addtile 0 5 11 4
>
> a=. a addtile 1 5 13 2
>
> a=. a addtile 3 1 11 2
>
> a=. a addtile 3 0 10 0
>
> a=. a addtile 1 1 13 10
>
> a=. a addtile 6 1 11 10
>
> a=. a addtile 0 1 13 8
>
> b=. 11 12 13 0 { 0 { a
>
> b=. b, 1 2 3 4 5 6 { 8 { a
>
> b=. b, 1 2 3 4 5 6 7 8 { 7 { a
>
> b=. b, 5 6 { 6 { a
>
> b=. b, 1 2 3 4 5 6 { 5 { a
>
> b=. b, 1 2 3 4 5 6 7 8 { 4 { a
>
> b=. b, 5 6 { 3 { a
>
> b=. b, 1 2 3 4 5 6 7 8 { 2 { a
>
> b=. b, 9 10 { 0 { a
>
> SUPERTILE=: tidyreals a
>
> SUPERBDRY=: tidyreals b
>
> STM=: tidyreals SUPERTILE (+/ . *)"_ 2/ M NB. All 12 orientations
>
> SBM=: tidyreals SUPERBDRY (+/ . *)"_ 2/ M NB. All 12 orientations
>
> 'SUPERTILE, SUPERBDRY, STM, STB created'
>
> }}
>
>
> addst=: {{
>
> (,: 4 { STM) addst y
>
> :
>
> 'oldst oldtile oldnode newtile newnode orientation'=. y
>
> newst=. orientation { STM
>
> NB. NEWBDRY=: orientation { SBM NB. currently not needed
>
> x, newst +"1 (oldnode { oldtile { oldst {x) - newnode { newtile { newst
>
> }}
>
>
> settiling=: {{
>
> a=. addst 0 0 11 2 5 2
>
> a=. a addst 0 7 1 0 11 2
>
> a=. a addst 0 7 6 4 6 8
>
> NB. ...
>
> NB. 72 similar addst lines omitted
>
> NB. ...
>
> a=. a addst 63 0 9 2 3 8
>
> TILING=: a +/ . * ((2&o. , 1&o.@-),: 1&o. , 2&o.) o. 5%12
>
> TILING=: TILING ([ + $@[ $ ]) 35 30 NB. NEW
>
> 'TILING created'
>
> }}
>
>
> NB. code to create TikZ etc. omitted.
>
> 🙂
>
>
>
> --
> Ewart Shaw [J.E.H.Shaw]     www.instagram.com/ewartshaw/
> www.facebook.com/ewart.shaw     www.ewartshaw.com [WIP]
> 3  ((4&({*.(=+/))++/=3:)@([:,/0&,^:(i.3)@|:"2^:2))&.>@]^:(i.@[)  <#:3 6 2
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to