User:RE Boss/Recurringproblems/Applyinggerunds
Jump to navigation
Jump to search
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.