Essays/Nonincreasing Odometer
Recursive Definition
A Nonincreasing Odometer is an odometer whose every index is less or equal to the index on the left.
The verb niod defines a nonincreasing odometer with origin 0, for x. number of indices and y.-1 highest value of the left-most index. The lowest index value is 0.
niod=: ;@:(<:@[ (] <@,. ($: >:))"0 ])`(,.@])@.(1:=[) i.
Slower explicit version for clarity:
niod1=: 4 : 0 NB. cols niod N if. x.=1 do. ,.i.y. return. end. ;(x.-1) (] <@,. (niod1 >:))"0 i.y. )
For example, in origin 0 and 1:
(; >:) 4 niod 3 +-------+-------+ |0 0 0 0|1 1 1 1| |1 0 0 0|2 1 1 1| |1 1 0 0|2 2 1 1| |1 1 1 0|2 2 2 1| |1 1 1 1|2 2 2 2| |2 0 0 0|3 1 1 1| |2 1 0 0|3 2 1 1| |2 1 1 0|3 2 2 1| |2 1 1 1|3 2 2 2| |2 2 0 0|3 3 1 1| |2 2 1 0|3 3 2 1| |2 2 1 1|3 3 2 2| |2 2 2 0|3 3 3 1| |2 2 2 1|3 3 3 2| |2 2 2 2|3 3 3 3| +-------+-------+
The spectrum of origin 0 nonincreasing odometer demonstrates self-similar property used in the recursive verb niod.
load 'viewmat' viewmat (;~ ".) '|: 8 niod 4'
Base Representation
Nonincreasing odometer can be obtained directly from base-y. representation of the i.y.^x. sequence.
od=: # #: i.@^~ NB. full homogeneous odometer ni=: #~ 2: *./@(>:/\)"1 ] NB. nonincreasing filter 4 (niod -: ni@od) 3 1
Size
The size of Nonincreasing Odometer is x. ([ ! <:@+) y.
<"2|:( #@niod , [ ! <:@+ )"0/~ 2+i.4 +------------+------------+ | 3 4 5 6| 3 4 5 6| | 6 10 15 21| 6 10 15 21| |10 20 35 56|10 20 35 56| |15 35 70 126|15 35 70 126| +------------+------------+
Nialpdromes
The numbers obtained as y.#.x.niod y. are base-y. x.-digit nialpdromes (with 0 attached), that is their digits in the given base are in nonincreasing order.
Index plot of 4#.4 niod 4
Cumulative plot of 4#.4 niod 4
load 'plot' 'stick' plot 4 (i.@^~ e. ] #. niod) 4 'area' plot +/\ 4 (i.@^~ e. ] #. niod) 4
See Also
- Odometer
- Highly Composite Number, Mathworld
- MathWorld:Digit, ibid.
- OEIS:A023758, base 3 OEIS:A023759, base 4 OEIS:A023760, etc., Sloane
Contributed by Oleg Kobchenko