Suggestion for testlib's random functions

Revision en13, by DeadlyCritic, 2020-06-15 16:32:35

In the name of God;

Hi, here I want to suggest some random functions for Testlib.

Testlib has nice random functions, here I want to suggest some other ones. The first and the second random functions are available in testlib, but the rest are not.

1, $$$\text{rnd.next(l, r)}$$$, it will return a random number in range $$$l$$$ to $$$r$$$ with equal weights :

2, $$$\text{rnd.wnext(l, r, w)}$$$, it will return a random number in range $$$l$$$ to $$$r$$$ with monotonically increasing/decreasing weights depending on $$$w$$$ :

If $$$w = 0$$$ then it will be equal to $$$\text{rnd.next(l, r)}$$$.

If $$$w > 0$$$ :

If $$$w < 0$$$ :

3, $$$\text{rnd.cnext(l, r, c)}$$$, it will return a random number in range $$$l$$$ to $$$r$$$ :

If $$$c = 0$$$ then it will be equal to $$$\text{rnd.next(l, r)}$$$

If $$$c > 0$$$ :

If $$$c < 0$$$ :

4, $$$\text{rnd.cnext(l, r, c1, c2)}$$$, it will return a random number in range $$$l$$$ to $$$r$$$ like $$$\text{rnd.cnext(l, r, c)}$$$, but its not centered around $$$\frac {r+l} 2$$$ : ($$$c1 \ge 0$$$ and $$$c2 \ge 0$$$)

About the implementation of $$$\text{cnext(l, r, c1, c2)}$$$, its as follow :

  1. Choose $$$c1+c2+1$$$ random numbers in rage $$$l$$$ to $$$r$$$ and sort them.

  2. Return $$$c1+1$$$-th one.

As you can see if $$$c1 = c2$$$ then its equal to $$$\text{cnext(l, r, c1)}$$$.

If $$$c1 = 0$$$ then it will be equal to $$$\text{wnext(l, r, -c2)}$$$, if $$$c2 = 0$$$ then it will be equal to $$$\text{wnext(l, r, c1)}$$$.

Please share your suggestions in the comment section.

Tags random, testlib

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en13 English DeadlyCritic 2020-06-15 16:32:35 205
en12 English DeadlyCritic 2020-06-15 11:35:10 11
en11 English DeadlyCritic 2020-06-15 11:14:44 7 Tiny change: 'em.\n\n2. Print $c1+1$-th' -> 'em.\n\n2. Return $c1+1$-th'
en10 English DeadlyCritic 2020-06-15 11:10:15 166
en9 English DeadlyCritic 2020-06-15 11:04:43 476 (published)
en8 English DeadlyCritic 2020-06-15 10:47:50 83
en7 English DeadlyCritic 2020-06-15 10:46:37 188
en6 English DeadlyCritic 2020-06-15 10:38:02 331
en5 English DeadlyCritic 2020-06-15 10:07:41 82
en4 English DeadlyCritic 2020-06-15 10:07:00 183
en3 English DeadlyCritic 2020-06-15 10:04:43 96
en2 English DeadlyCritic 2020-06-15 09:57:51 23 Tiny change: 'es :\n\n![looool](/predown' -> 'es :\n\n![ ](/predown'
en1 English DeadlyCritic 2020-06-15 09:56:56 676 Initial revision (saved to drafts)