Gerund items applied to corresponding parameter items
Problem stated by Sherlock :
fns=: ((-~ +/)"1)`((*~ +/)"1)`((+~ +/)"1)`((%~ +/)"1)
rnge=. >: i. 5
]data=. (i.5 3);(i.5 2);(i.5 4);(i.5 3)
+--------+---+-----------+--------+
| 0 1 2|0 1| 0 1 2 3| 0 1 2|
| 3 4 5|2 3| 4 5 6 7| 3 4 5|
| 6 7 8|4 5| 8 9 10 11| 6 7 8|
| 9 10 11|6 7|12 13 14 15| 9 10 11|
|12 13 14|8 9|16 17 18 19|12 13 14|
+--------+---+-----------+--------+
Given the gerund "fns" (4 dyadic verbs) and the noun "data" (4 arrays which are the desired arguments for the corresponding verbs in the gerund), how can I apply the verbs to their respective arguments such that:
rnge applyVerbs data
+-------------------+--------------+--------------+--------------+
| 3 1.5 1 0.75 0.6| 7 8 9 10 11| 1 2 3 4 5| 2 1 0 _1 _2|
|12 6 4 3 2.4|23 24 25 26 27| 5 10 15 20 25|11 10 9 8 7|
|21 10.5 7 5.25 4.2|39 40 41 42 43| 9 18 27 36 45|20 19 18 17 16|
|30 15 10 7.5 6|55 56 57 58 59|13 26 39 52 65|29 28 27 26 25|
|39 19.5 13 9.75 7.8|71 72 73 74 75|17 34 51 68 85|38 37 36 35 34|
+-------------------+--------------+--------------+--------------+
Here is a looping explicit solution, but I feel like should be a simpler/better way?
applyVerbs=: 3 : 0
(>: i. 4) applyVerbs y
:
res=. ''
for_mod. y do.
res=. res ;~ x fns@.mod_index >mod
end.
}:res
)Excellent solution by Miller :
fns 4 :'x@.0&.>/y'"_1 (<rnge),. data +-------------------+--------------+--------------+--------------+ | 3 1.5 1 0.75 0.6| 7 8 9 10 11| 1 2 3 4 5| 2 1 0 _1 _2| |12 6 4 3 2.4|23 24 25 26 27| 5 10 15 20 25|11 10 9 8 7| |21 10.5 7 5.25 4.2|39 40 41 42 43| 9 18 27 36 45|20 19 18 17 16| |30 15 10 7.5 6|55 56 57 58 59|13 26 39 52 65|29 28 27 26 25| |39 19.5 13 9.75 7.8|71 72 73 74 75|17 34 51 68 85|38 37 36 35 34| +-------------------+--------------+--------------+--------------+
which was "adverbed" by Sherlock :
eachv=: 1 : 0 m 4 :'x @.0&.>y'"_1 y : m 4 :'x @.0&.>/y'"_1 x,.y )
and further by Rich
eachunderv=: 2 : 0
m v 1 :(':';'x`:6&.u y')"_1 y
:
m v 1 :(':';'x`:6&.u&>/ y')"_1 x ,&<"_1 y
)
eachv =: eachunderv >
I prefer `:6 to @.0, but it's a matter of taste.