1. C# / Говнокод #12014

    +137

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    static /*public*/ string GenerateRandomJpegName()
            {
                return GenerateRandomString() + ".jpg";
            }
     
            static string GenerateRandomString()
            {
                bool UseSigns = true;
                bool UseUpperLetters = true;
                bool UseLetters = true;
                int Length;
            NewLabel:
                try
                {
                    Length = new Random(DateTime.Now.Millisecond - DateTime.Now.Second + new Random(DateTime.Now.Millisecond).Next(0, 100) / new Random(DateTime.Now.Millisecond - DateTime.Now.Second).Next(0, 10)).Next(0, 100);
                }
                catch { goto NewLabel; }
                string result = "C:/";
                try
                {
                    int Seed = 0;
                    char[] letters = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
                    char[] signs = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
                    List<char> keyWords = new List<char>();
                    List<char> upperLetters = new List<char>();
                    foreach (char c in letters)
                        upperLetters.Add(Convert.ToChar(c.ToString().ToUpper()));
                    if (UseLetters)
                        foreach (char c in letters)
                            keyWords.Add(c);
                    if (UseSigns)
                        foreach (char c in signs)
                            keyWords.Add(c);
                    if (UseUpperLetters)
                        foreach (char c in upperLetters)
                            keyWords.Add(c);
                    int MaxValue = keyWords.Count;
                    for (int i = 0; i <= Length; i++)
                    {
                        try
                        {
                            Random mainrand = new Random(Seed);
                            char RandChar = keyWords[mainrand.Next(0, MaxValue)];
                            result += RandChar;
                            Seed += DateTime.Now.Millisecond + Seed - new Random().Next(10) + new Random(DateTime.Now.Millisecond + 800 * 989 / 3).Next(10);
                        }
                        catch { continue; }
                    }
                }
                catch { }
                return result;
            }

    Вместо одного вызова Path.GetRandomFileName

    Запостил: psina-from-ua, 28 Октября 2012

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

    • Господа, расскажите, какой смысл в манипулировании seed-ом в обоих местах?
      Ответить
      • В первом месте, чтобы каждый раз поиск начинался с одного и того же значения.
        Во втором месте — автор думает, что так результат будет более рандомным.
        Ответить
        • Как это «с одного значения», если там текущее время подставляется?
          Ответить
          • Я написал про строку
            int Seed = 0;
            , а 15-ю строку прозевал. Туплю.

            В итоге вместо ожидаемого равномерного распределения будет трудно предсказуемое. Не факт, что все значения теперь будут выдаваться с равной вероятностью.
            Ответить
        • Автор кода попросту не знает Random, и учиться ни по книгам ни по электронной справке не хочет.
          Методом тыка он записал new Random.Next() - и естественно, он получил одно и то же число в каждой итерации. Перебрав много безуспешных попыток, и отказываясь прочитать-таки MSDN, отчаявшись заставить Random работать "правильно", он взял и вставил миллисекунды текущего времени вместо псевдослучайного числа.
          Ответить
    • > static /*public*/ string GenerateRandomJpegName()
      Зачем? Так долго набрать public, если он когда-нибудь понадобится?

      > C:/
      Идеальное место для хранения рисунков.

      > Length = new Random(...).Next(0,100)
      Зачем? Если длина строки распределена равномерно, мы получим достаточно хреновое распределение результатов. Если уж распределять - так пропорционально числу вариантов при каждой длине строки. К примеру, если составляем строку из 1-3 цифр, то у одной цифры вероятность 1/111, у двух 10/111, у трех 100/111. А еще лучше вообще зафиксировать длину в районе 30-40 и не ипать моск.

      > char[] signs = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
      signs? *facepalm.jpg*

      > Seed += DateTime.Now.Millisecond + Seed - ...
      Процы сейчас работают быстро, поэтому в пределах данной функции DateTime.Now.Millisecond является константой, что не особо улучшает свойства генератора.

      > try { ... } catch { }
      Автор не уверен в себе? Я не вижу тут функций, которые могут вбросить исключение (ну разве если память кончится), равно как и повода молча генерить при этом чпег с именем c:\.jpg.

      > try { ... } catch { continue; }
      Не получилось придумать букву? Ну и хер с ней, никто не заметит.
      Ответить
      • Ответить
      • >> C:/
        > Идеальное место для хранения рисунков.
        Для прона лучше /usr/bin
        Ответить
        • Ага, и пометить исполняемыми, чтобы автодополнение их показывало :)
          Ответить
          • не забывайте RO атрибут
            Ответить
          • >чтобы автодополнение
            Чтоб из консоли смотреть?
            Ответить
            • Кстати, есть прикольный плагин к VLC, позволяющий это делать.
              Ответить
              • Смотрел без иксов в нем Матрицу, Призрак в Доспехах и Звездные Войны. Думаю ещё какой-нибудь ужастик или прон посмотреть.
                Рекомендуется поставить цветной текстовой режим выокого разрешения типа 132×60. Вообщем я ценитель.
                Ответить
              • А mplayer тоже умеет видео играть в консоли, но жаль что звук через спикер не умеет.
                Ответить
                • Media Player Classic или линуксячий mplayer?
                  Ответить
                  • Линуксячий mplayer. Кстати единственный плеер из тех, что я пробовал, который сумел вменяемо пристегнуть .ass субтитры (ой не зря их так назвали, ой не зря...).
                    Ответить
                    • Ну это среди линуксячих. Среди виндовых и макос, я слышал, проблем нет.
                      Ответить

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