говнокод

emulators

Postby fk0 » 14 Jan 2017, 15:46

Почему 99% музыкальных плееров не умеют проиграть список в *случайном*, порядке? Ну т.е. функция там такая есть, но авторы, долбоёбы, не могли сделать одной из трёх вещей:

1) взять нормальный ГПСЧ таки, а не библиотечных rand(), дающий чёрти что (и проинициализировать его хоть текущим временем что ли);

2) взять числа от 1 до N, взять 2*N случайных чисел и переставить местами два числа в списке (по rand() номеру), брать числа по порядку из полученного списка и играть соответствующую числу композицию. А не играть, @#$%!, композицию по rand() номеру... который, @@#!$!!, ещё через rand()%N усекли (в мане, !@#$#!, написано, !@##$!, делить надо, а не остаток брать).

3) Взять пару взаимно простых чисел... Одно равное или большее N, второе -- любое меньшее N. Каждый раз к номеру композиции прибавлять второе (брать остаток от деления на первое). Гарантированно пробежит по всему списку, где случайность обеспечивается выбором первой композиции и выбором второго числа.

В итоге имеем список на 1000 пунктов и всегда по одному заведённому порядку играется только 20. До остальных никогда не доходит. AyEmul похоже тоже... :-(
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby lvd » 14 Jan 2017, 16:10

Замечу, что случайно переставить список -- нетривиальная задача. А просто случайно играть -- будут повторы.
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby fk0 » 14 Jan 2017, 16:37

Да пусть повторяется. Проблема-то только в том, что некоторые повторяются _существенно_ _чаще_ других, а некоторые не играют вообще. Распределение не равномерное.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby deathsoft » 15 Jan 2017, 20:25

lvd wrote:Замечу, что случайно переставить список -- нетривиальная задача.

Задача тривиальнейшая, заводится массив чисел с размером как длина списка, каждый элемент массива также имеет ссылку на элемент списка, в этот массив генерируются случайные числа от 0 до N-1 (где N длина списка), далее сортируем этот массив и играем его подряд, все! Массив является индексом к списку.
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 15 Jan 2017, 20:28

fk0 wrote:Почему 99% музыкальных плееров не умеют проиграть список в *случайном*, порядке?

Потому что авторы плееров долбоебы видимо. ГПСЧ можно взять типа Mersen Twister, привести его в диапазон 0..N-1 делением (как положено, а не модулем), инициализировать таймером или через __rdtsc().
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby lvd » 16 Jan 2017, 13:37

deathsoft wrote: в этот массив генерируются случайные числа от 0 до N-1 (где N длина списка), далее сортируем этот массив

Так как никто не гарантировал, что случайные числа в нём не повторятся, то после сортировки будут много одинаковых чисел подряд, которые, в зависимости от алго сортирвоки, или останутся в том же порядке, что были, или переставятся алгоритмом как-то, отнюдь не случайно.
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby deathsoft » 20 Jan 2017, 21:57

lvd wrote:Так как никто не гарантировал, что случайные числа в нём не повторятся, то после сортировки будут много одинаковых чисел подряд, которые, в зависимости от алго сортирвоки, или останутся в том же порядке, что были, или переставятся алгоритмом как-то, отнюдь не случайно.

При выпадении одинаковых чисел, они в исходной последовательности (до сортировки) будут идти далеко не подряд (иначе рандомогенератор говно), а после сортировки (когда одинаковые числа будут идти подряд) результат будет рандомный (т.к. указатели будут переставлены).
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users


Return to Эмуляторы

Who is online

Users browsing this forum: No registered users and 1 guest

cron