"PHP" / Говнокод #9245 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
<?php
function randomizer($min, $max, $maxn)
{
    // $max = максимальное
    // $min = минимально
    // $maxn = сколько выдать
    $random = array(); // здесь будет массив наших чисел
    $tmp    = array(); // временный массив
    for ($i = 0; $i < $maxn; $i++) {
        do {
            $a = rand($min, $max);
        } while (isset($tmp[$a]));
        $tmp[$a]  = 1;
        $random[] = $a;
    }
    unset($tmp);
    return $random;
}

http://forum.ixbt.com/topic.cgi?id=24:33676#16

Запостил: Unknown Unknown, (Updated )

Комментарии (18) RSS

  • Шикарная защита от повтора. А ведь можно получить тоже самое с линейной трудоемкостью, если уж автор не доверяет rand().

    А при max - min < maxn, будет вечный цикл.
    Ответить
      • Если это чисто мужской вопрос - презервативами. Своих повторов не получите.
        Ответить
      • использовать алгоритмы, дающие заданный период. К.О.
        Ответить
      • Если нябольшой интервал - нагенерить его числами от min до max и идти слева направо. На каждой итерации свопить i-ый элемент с j-ым который выбран рандомно.

        Если интервал достаточно большой то генерить с помощью отсортированного связного списка, у которого голова - минимальный элемент (включительно), а хвост - максимальный (не включается в множество). На каждой итерации pick-ать элемент из интервалов которые образуются 2-мя нодами, и добавлять ноду с выбранным элементом в список.
        Ответить
        • Хотя вставка все равно даст O(n). Лучше во втором варианте использовать массив - по нему бинарный поиск сделать ризонно.
          Ответить
          • Я этот код публиковал почти 10 лет назад. Как Вы тут оказались???
            Ответить
    • > вечный цикл

      В этом кейсе вообще надо исключение кидать, имхо. Т.к. задача не имеет решений. Ну нельзя из 2 элементов выбрать три без повторов.
      Ответить
  • for -> while -> foreach -> goto, в конце-то, блять, концов!!111
    Ответить
    • foreach это как раз самое высокоуровневое. Т.е. надо так:
      foreach -> for -> while -> goto
      Ответить
  • а)V$G$M"H.O"N,KO(B:U.ZC$D K,V.Y"Q,G,Q N)B(T)M,C?J R.J(T"U)BQ)G!R(WM)T,V(H?P)L I:G PE.L!Z:L$I.W)W,H)P.G$V H$R:H.I.M)A)C$Z?J!ES,Y!T)A)Q"K:E$SU:S$P!C.O:T?B K?II)Q,W!A B(L(U?M?I.U,DPS.F!K?S,U A.P,U"Q,L)I(Y(P"V"A)X:AYC.E)XO:W!L,C!I!G"P"J,E(E(G,E)B.L.U$Z"L.B?X"O!M.QI"B$W$Q,Y$O F$M$G:S.T,R"C:G.J)L?S)K:C$D:F:Y!X.M"Y?Z$C(W,F$K(N!A(Y,B$T!A,J:O"M,H"V.Z)M(K(D"Q:S!O:AМVFTTCNLCNNJGJPCIUAWVLTMNKWDBLINGJWDMKAKYWHCWWDOQWSPVTFOOMTPQMAJCJRLVMUELRJNHLTWBIIZWQKEZICMYHIOWVJROGYSHMXENXTGGLEHAKJGTBCVBIELRJCWFHSOYVLRXDFHSREDIYVRUTEFNVOQKMDZQUZYFYCFKEUCVBOEQJPGIOZJKYBQDQBRJFWCBBVQFDZIKTIWRIHSHSHFBZMMRHOYRJTBJEWLUKUHUCXUZLOBKEJR
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8