#32&b@N;@W;k,b@N;@E;k+1,b@S;@E;k,b@S;@W;k+1 :A,A~@b~B,B~@b~A,A~Z,A~B,A~Z,B~Y,X~@b~B,B
Try it online!
Have some other ideas, but they're starting to get pretty wacky so I'll call it a night here :D
Output:
N,NbE,S,SbW,NbW,EbN,SbE,WbS,WbN,NEbN,EbS,SWbS,NWbN,NE,SEbS,SW,NW,NNE,SE,SSW,NNW,ENE,SSE,WSW,WNW,NEbE,ESE,SWbW,NWbW,E,SEbE,W
Verify output: Try it online!
Explanation
I tried a few patterns, but the pattern I ended up with was:
X, XbY, YbX, XYbX, XY, XXY, YXY, XYbY, Y
This can be repeated 4 times to generate all 32 points. However, the X term must always be the N/S side of the compass. Additionally, it will over-generate the cardinal directions, so I have to ensure I pull X from the front twice, and Y from the back twice, to correctly generate N/S/E/W all once.
The order is also relevant - string literals are a bit expensive in cQuents, so YbX and XY are positioned so that the follow-up terms can back-reference instead of building the term from scratch.
Mapped to the corresponding X,Y pairs 4 times, this pattern leads to:
N, NbE, NNE, NEbN, NE, NEbE, ENE, EbN, E N, NbW, NNW, NWbN, NW, NWbW, WNW, WbN, W S, SbW, SSW, SWbS, SW, SWbW, WSW, WbS, W S, SbE, SSE, SEbS, SE, SEbE, ESE, EbS, E
Below is the code explanation. The second line implements the pattern above. The first line is the main sequence, which will have 32 terms. For every k = 1 to 8, it will call the second line (the X/Y pattern) for each set of cardinal X/Y pairs (N,W, N,E, S,E, S,W), but for the second and fourth pairs, it offsets the k by 1, to get the other cardinal direction.
#32&b@N;@W;k,b@N;@E;k+1,b@S;@E;k,b@S;@W;k+1 line 1 #32 n = 32, k = 1 & , , , mode sequence 2 - given input n, output first n terms b ; ; next term = line 2 ( , , ) @N "N" @W "W" k k b@N;@E;k+1 next term = line 2 ( "N" , "E" , k+1 ) b@S;@E;k next term = line 2 ( "S" , "E" , k ) b@S;@W;k+1 next term = line 2 ( "S" , "W" , k+1 ) reset to first term, k += 1 :A,A~@b~B,B~@b~A,A~Z,A~B,A~Z,B~Y,X~@b~B,B line 2 : , , , , , , , , mode sequence 1 - given input n, output nth term inputs = A, B, n A next term = first input A next term = first input ~ concat @b "b" ~ concat B second input B~@b~A next term = second input concat "b" concat first input A~Z next term = first input concat previous term A~B next term = first input concat second input A~Z next term = first input concat previous term B~Y next term = second input concat 2 terms previous X~@b~B next term = 3 terms previous concat "b" concat second input B next term = second input
100 bytes
#32&b@W;@N;'NW';k,b@N;@E;'NE';k,b@E;@S;'SE';k,b@S;@W;'SW';k :A,B~C,A~C,A~@b~B,C,C~@b~A,C~@b~B,B~@b~A
Try it online!
puts("N,NbE,NNE,NEbN,NE,NEbE,ENE,EbN,E,EbS,ESE,SEbE SE,SebS,SSE,SbE,S,SbW,SSW,SwbS,SW,SwbW,WSW,WbS,W,WbN,WNW,NwbW,NW,NwbN,NNW,NbW");too trivial? \$\endgroup\$