That's for the first part.

The values in part 2 grow much faster, which was what I thought Roger
was reminding me of.

Thanks,

-- 
Raul


On Tue, Dec 5, 2017 at 7:18 PM, Rob Hodgkinson <[email protected]> wrote:
> Brief note Daniel, to work out the size of spiral that will contain your 
> input, remember the spiral is a square matrix.
>
> So if input is 91, you need to go to a 10x10, which is simply ">. *: 91” (as 
> in ceiling squareroot 91, which is 10).
>
> Rob
>
>> On 6 Dec 2017, at 9:16 am, Daniel Lyons <[email protected]> wrote:
>>
>>
>>> On Dec 3, 2017, at 9:33 PM, Daniel Lyons <[email protected]> wrote:
>>>
>>>
>>>
>>>> On Dec 3, 2017, at 7:01 PM, Jimmy Gauvin <[email protected]> wrote:
>>>>
>>>> has anybody found something better than a "do. while." to calculate the
>>>> spiral neighborhood count?
>>>
>>>
>>> Amusingly, someone made a video about a cool trick for doing this in J, 
>>> it's about 1/3rd of y'all's Youtube presence:
>>>
>>> https://www.youtube.com/watch?v=dBC5vnwf6Zw&t=282s 
>>> <https://www.youtube.com/watch?v=dBC5vnwf6Zw&t=282s>
>>>
>>> That said, I didn't see how to solve this one even with the spiral 
>>> generated until this morning in the shower and haven't had time to work on 
>>> it until now.
>>>
>>> My approach would basically be to generate the spiral of the right size and 
>>> then do the index-decode trick from this S.O. answer:
>>>
>>> https://stackoverflow.com/questions/39686977/j-coordinates-with-specific-value
>>>  
>>> <https://stackoverflow.com/questions/39686977/j-coordinates-with-specific-value>
>>>
>>> Once you have the coordinates, the sum of absolute value of the x- and 
>>> y-coordinate should be the solution, but you'll have to do some kind of 
>>> offset fiddling to compensate for 0,0 being in the middle rather than the 
>>> lower-left.
>>
>> This turned out to be an adequate approach for part A. I just kept 
>> increasing the iteration count until my number wound up in the spiral:
>>
>>   a =. (|.@|: ,~ >./@, + 1 + i.@#)^:300 (1 1 $ 1)
>>> ./>./a
>> 22801
>>
>> 300 iterations wasn’t quite big enough, so I made it bigger. Once I had a 
>> large enough array, I used the sum/decode trick, but subtracted the location 
>> of 1:
>>
>> +/ ,(| (($a) #: (I. input=,a)) - (($a) #: (I. 1=,a)))
>>
>> I’m not in love with this and need to study some of the other replies.
>>
>> For part B, I just looked up the sequence in the OEIS and found the right 
>> value and plugged it in. *shrug* :)
>>
>> …
>>
>> Now I’m curious about what Roger said, that you don’t need to generate a big 
>> spiral. Part of me thinks that you could do something like compute the polar 
>> coordinate and convert to rectangular. One of the diagonals winds up being 
>> squares of odd numbers: 1, 9, 25, 49. If your number is between (x-2)^2 and 
>> x^2, you know it’s on the ((x+1) / 2) ring; so because 45 is between 25 and 
>> 49, it’s on the 4th ring. That tells you the radius (4); all the solutions 
>> will have “carrying distance” of 3 or more. From here I got stuck trying to 
>> figure out the “angle” (I suspect knowing the distance to the next “middle 
>> of a side” is sufficient) but I have to get back to work for now so it’ll 
>> have to wait until later.
>>
>> --
>> Daniel Lyons
>>
>>
>>
>>
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>
> ----------------------------------------------------------------------
> 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