Looks like I did it:

mki=: {&0 1 1 2@(2&<.@-&1@(1&{))
s0=: (0#0&[)
s12=: (-&1@<.@(1&{))#%&2@({.+{:)
s3=: (-&1@<.@(1&{))#{.
f=: ((1}.]),~[,s0`s12`s3@.(mki)@({:@[ , 2&{.@]))
norm=: ((}.@(f/@,.~0,(}.-}:)) ) <.)~

it is just foldr
   t,:v
1.26 3.78 6.3 10.08 11.34 12.6 13.86 15.12 16.38 17.64
   0   20  40    60    80  100   525   321   248   259
   t norm v
0 10 20 30 30 40 50 50 50 60 80 100 525 423 321 248 259

But too many strings :(

On Thu, Nov 22, 2012 at 5:21 PM, Alexander Epifanov <[email protected]> wrote:
> For more than 3, then every missed second should be filled with the last 
> number.
>
> t=: 1 2 7 8
> v=: 10 20 90 100
>
> newv: 10 20 [20 20 20 20] 90 10
>
> On Thu, Nov 22, 2012 at 12:34 AM, Raul Miller <[email protected]> wrote:
>> Yes?
>>
>> I was asking what the behavior should be for cases when <: 2 -~/\ t
>> contained values other than 0, 1, 2 or 3.
>>
>> Thanks,
>>
>> --
>> Raul
>>
>> On Tue, Nov 20, 2012 at 4:07 PM, Alexander Epifanov <[email protected]> 
>> wrote:
>>>    t,:v
>>> 1.26 3.78 6.3 10.08 11.34 12.6 13.86 15.12 16.38 17.64
>>>    0   20  40    60    80  100   525   321   248   259
>>>
>>>    wat
>>> 4 : 0
>>>   ctl=. 0,~ _1+(}.-}:) x
>>>   avg=. 0,~ 0.5 * (}.+}:) y
>>>   ins=. ctl #&.> (2 < ctl) {"_1 avg,.y
>>>   ;}:,y;"0 ins
>>> )
>>>    t wat v
>>> |domain error: wat
>>> |   ins=.ctl    #&.>(2<ctl){"_1 avg,.y
>>>
>>> On Tue, Nov 20, 2012 at 9:06 PM, Raul Miller <[email protected]> wrote:
>>>> On Mon, Nov 19, 2012 at 5:38 PM, Alexander Epifanov <[email protected]> 
>>>> wrote:
>>>>> Unfortunately cannot resolve problem, which could be easy resolved with 
>>>>> loop:
>>>>> t=: 1 3 6 10 11 12
>>>>> v=: 0 20 40 60 80 100
>>>>>
>>>>> i=:   _1+(}.-}:) t
>>>>> i NB. its just distance between numbers
>>>>> 1 2 3 0 0 0
>>>>>
>>>>> And now the main problem for me, because I have to modify v array:
>>>>> if i = 0 then nothing
>>>>> if i = 1 or i = 2 then insert average value (for 1) and two values for 2
>>>>> if i = 3 then insert previous value
>>>>
>>>> This specification seems odd.  What if i contains some other value?  I
>>>> am going to assume that values greater than 3 will be given the same
>>>> treatment as values where you need 3 copies, and that negative values
>>>> will not appear in i
>>>>
>>>>> so, we have to fill missed values in t and v:
>>>>> t=: 1   3   6 10 11  12
>>>>> v=: 0 20 40 60 80 100
>>>>>
>>>>> should be:
>>>>> t2: 1   2   3   4  5   6   7  8   9 10 11 12 (ok, its just full index now)
>>>>> v2: 0 10 20 30 30 40 40 40 40 60 80 100
>>>>> ^ inserted by condition: 10; 30 30; 40 40 40
>>>>>
>>>>> Could you please help how to resolve it better? I suppose I can rotate
>>>>> |:t,:v and then fold it one-by-one, but I think it is not good
>>>>> solution.
>>>>
>>>> I am not sure if this is better, but it meets the specifications you
>>>> have provided:
>>>>
>>>> wat=:  4 :0
>>>>   ctl=. 0,~ _1+(}.-}:) x
>>>>   avg=. 0,~ 0.5 * (}.+}:) y
>>>>   ins=. ctl #&.> (2 < ctl) {"_1 avg,.y
>>>>   ;}:,y;"0 ins
>>>> )
>>>>
>>>>    t wat v
>>>> 0 10 20 30 30 40 40 40 40 60 80 100
>>>>
>>>> --
>>>> Raul
>>>> ----------------------------------------------------------------------
>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>
>>>
>>>
>>> --
>>> Regards,
>>>   Alexander.
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>
>
>
> --
> Regards,
>   Alexander.



-- 
Regards,
  Alexander.
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to