# User:Dan Bron/Snippets/VerbMetrics

Compare different, theoretically identical verbs. Good for running contests or discovering which algorithm best suits the data. No documentation, poor style.

Specifically slapped together for the 2 f 3 f 4 f m thread on the forum .

```require 'strings numeric'

NB.  Mesaure time of execution of a sentence
time          =:  6!:2
NB.  Measure memory usage of execution of a sentence
space         =:  7!:2
NB.  Give time & spece measurements for execution of a sentence.
ts            =:  time , space@:]

TIME_TEMPLATE =: verb define
z=.\$~0
q =. count__ ts :: ((13!:11 ,&:< 13!:12) bind '') 'z =. NAME__ y'
z ,&<  q
:
z=.\$~0
q =. count__ ts :: ((13!:11 ,&:< 13!:12) bind '') 'z =. x NAME__ y'
z ,&:<  q
)

9!:41 0: retain =. 9!:40 ''
EXPL_VERB_TEMPLATE =: (verb define) (adverb define)
5!:1{.;:'u'
)
SMURF__  NB.  Will be replaced with TIME_TEMPLATE
)
9!:41 retain

H       =:  conjunction define
verb_bodies =. LF >@:}:@:}.@:cut each (<'count__';'(',(5!:5{.;:'m'),')') stringreplace each ('NAME__' <@;"1 0 n) stringreplace&.> <5!:5 {.;:'TIME_TEMPLATE'
(EXPL_VERB_TEMPLATE  [^:((,:'SMURF__') -: ]) L: 0 ~ verb_bodies ) `: 0

)

nvtxt     =:  (,. '   '&,"1)&.>/ @: ((;:'alg time space') (<1 0)&C.@:('-'&,)@:, each ])
rnd       =:  (',' (8!:1) 0.01 round  (%"1 <./)@:>@:({:"1))
nvrnd     =:  nvtxt@:(, rnd)

9!:7' ' #~# BOXDRAW =. 9!:6''
9!:17 (1 1) [ BOXPOSN =. 0 0[9!:16''

Q =. (<<<2) { ":  (;:'set alg time space') , (,~ \$&'-'@:(1 , {:)@:\$&.>@:{.)>,.&.>/ <"_1 each ,1 ]`]`(rjust&.>)`(rjust&.>);.1 <@:>"1 |:  x ,. (<<@:>b1) (, rnd) &> y

9!:7 BOXDRAW
9!:17 BOXPOSN

Q
)

'a1 b1'=:4!:5&.> i.2  NB.  Local and global assigment can't happen for the same name under 'load'

recf    =. 1 : 0
:
s =. y
r =. ,:y
for_i.
i. # x
do. s =. (i{x) u s
r =. r,s
end.
r
)

jackson0=:  + recf f.

seq     =.  ((&.>) /) (@:((|.@:[) , (<@:]))) (>@:)  NB.  Due to Quintana
bron0   =:  (+ seq f.~ <"_1)~  NB.  No intermediate results

seq     =.  <"_1@|.@[ , <@]
update  =.  (] ,(+&.> {:))/
phil0   =:  [: > update@seq f.  NB.  Doesn't meet spec

reboss0 =:  [: > [: +&.>/\.&.|. <@],<"_1@[

ug      =.  2 : '[: >@:({."1) (2&(u&.>/@:{. , }.)^:(1 < #)^:n @: (; <"_1@:|.)~)'
bron1   =:  + ug a: f.

gu      =.  1 : '(u/~ u/\@:|.@:({.~ >:@:#))~'
bron2   =:  + gu f.

enshape =.  ] , (\$"_ _1~ \$)
oleg0   =:  +/\@enshape f.

oleg1   =:  (+"_ 0 (0 , +/\))~

'a1 b1' =:  4!:5&.> i._2
b1      =:  (;:'a1 b1') -.~(#~ =&({.;:'_base_'))/ |: (split~ i:&2@:(* +/\.)@:=&'_')&> a1

small   =:  (+: i. 5  ) 1000 H b1 i. 2 2
medium  =:  (+: i. 500)   10 H b1 i. 2 2
large   =:  (+: i. 5000)   1 H b1 i. 2 2

]A      =: (time_rpt ".&.>) ;: 'small medium large'
```