Ще приема отговор на всеки език... дори псевдокод... дори само идея или концепция как да се направи това. (Аз самият работя с VB.NET.)
Ще ви дам 3 стойности:
- W = 20141231
- X = 100
- Y = 200
- Z = ?
Трябва да намалите математически W... така че да попадне в диапазона между X и Y (включително). Ще нарека резултата ви Z.
Ако изпълнявате този код отново и отново... W винаги ще се редуцира до една и съща стойност Z.
Ако утре ви дам нова стойност за W... тя също ще бъде намалена, но до различна стойност за Z. (Направих W въз основа на текущата дата, само за да опростя нещата и генерирам различна стойност за Z всеки ден.)
Нищо не може да бъде случайно.
И никой няма да може да предскаже какво ще бъде Z само като погледне W. (Без да крадат копие от кода, разбира се.) Те дори няма да могат да познаят, че Z случайно ще бъде 190-200 повече често от 100-110. Вместо това Z ще бъде приблизително равномерно разпределено между 100-200 през цялото време.
Какъв алгоритъм бихте използвали? Не можете просто да намалите W до Y. (Това би било предвидимо.)
Не можете просто да изберете произволно число като 147. (Тук не се допускат произволни числа.)
Опитах неща като многократно вземане на W и разделяне на 2... докато беше между X и Y. (Но получавам много повече 180-200 стойности за Z, отколкото 100-120 стойности.... не "приблизително равномерно разпределени “ по желание.)
Няма големи дискусии за "истински произволни числа" или "псевдослучайни" числа. Или точни дефиниции на "равномерно разпределени" или "приблизително равномерно разпределени". Случаен потребител ще разгледа 1000 примера на Z и просто ще почувства, че е „достатъчно близо“, за да се счита за „приблизително равномерно разпределено“.