I'm looking for a cutesy way to express the following:
(<. + 0 2 {~ 0 0.5 i. 1&|)
The input is a vector of non-negative real numbers, which are either integers
or whose fractional part is one-half. Equivalently, the input is -: V where
V is a vector of non-negative integers.
The output is a vector of non-negative integers, similar to the input, but
where each non-integer scalar S has been replaced with 2+S (the integer
scalars have been left alone).
-Dan
PS: The application is in the context of the iterated batrachion function
(hcs n) - n%2 where hcs is the "Hofstadter-Conway $10,000 Sequence". See
the right graphic in the first figure at
http://mathworld.wolfram.com/Hofstadter-Conway10000-DollarSequence.html
You can plot it in J with:
require 'plot'
hcs =: 1:`((] +&:$: -) $:@:<:)@.(2&<) M. NB.
Hofstadter-Conway $10,000 Sequence
batrachion =: hcs - -:
plot batrachion"0 i. 1000
While investigating this function, I noticed that hcs was in the OEIS (it's
A004001 [1]), but (hcs n) - n%2 is not. I decided to add it (and evangelize
J a bit, because I think the verb hcs shows J off well), but then I realized
why it wasn't in there in the first place: it contains non-integers.
So I need to convert the non-integers to integers. The first thing that popped
into my head was to take the sum of the denominators of the egyptian fraction
expansion of each scalar. Adapting Roger's ef verb [2] a bit, I came up with:
ef =: ( ((] , $:@:(- %)) >:)^:((~: %)~) <.@:% ) M. NB.
Egyptian fraction denominators
ib =: +/@:ef@:batrachion"0 NB.
Integer batrachion
plot _&=`(,:&0)} ib i. 1000
But then I realized this was overkill, because each scalar is either an integer
(and N = +/@:ef N is a tautology for integer N ), or halfway between two
integers, which means all the denominators but the last are 1 , and the last
is always 2 .
So now we have:
lef =: (<. + 0 2 {~ 0 0.5 i. 1&|) NB.
"Limited" egyptian fraction
ib2 =: +/@:lef@:batrachion"0
plot ib2"0 i. 1000
But I would really like to show off J, and I feel that lef is just too "brute
force" (imperative). Further, OEIS has a very mathematical emphasis, and les
has a programming bent. So I would really like a cuter, more mathematical
replacement.
If you provide one, the bonus is you get your name immortalized in the OEIS (as
a reference and a link to your message).
[1] http://www.research.att.com/~njas/sequences/A004001
[2] http://www.jsoftware.com/pipermail/programming/2005-November/000064.html
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm