1. ActionScript / Говнокод #12060

    −100

    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
    //.....
        public final class Random
        {
            static public function _int(min: int, max: int):int
            {
                return min + Math.round( Math.random()*(max - min));
            }
            //.....
            static public function _Bool():Boolean
            {
                return (_int(0, 1) == 1);
            }
    
            //подброс монеты: орёл
            static public function coinSideEagle(): Boolean
            {
                return _Bool();
            }
    
            //всё по-честному: решка
            static public function coinSideTail(): Boolean
            {
                return !coinSideEagle();
            }
         }

    Запостил: d9k, 05 Ноября 2012

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

    • Говнокласс и говнометоды. Говно-ориентированное программирование в действии!
      Ответить
    • Нужно было сделать RandomFactory
      Ответить
    • а кроме Math.random() во флеше более мощных либ нет? (сравниваю с джавой)
      Ответить
      • А тебе ещё нужен RandomFactory и RandomManager?
        Ответить
        • http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html
          Ответить
          • Coin coin = CoinFactory.getDefaultInstance().produceCoin(
                Coin.Currency.SUR, // Soviet Rubles
                Coin.Subtype.Fractional, // Kopecks
                Coin.Media.Copper,
                null, // default variant
                1975,
                5); // "Pyatachok"
            bool swap_ok_and_cancel = coin.toss().getUpperSide() == Coin.Side.Tail;
            Ответить
            • Больше похоже на C#
              Ответить
            • гениально
              Ответить
            • > coin.toss()
              А как же CoinTosser и его Factory? ;)

              P.S. А вообще - шедевр.
              Ответить
            • а вдруг в воздухе повиснет или на ребро встанет? надо энум вместо буля, ну и exception handling не помешает :)
              Ответить
              • http://ideone.com/vQWqO9
                Ответить
                • в воздухе повиснет, это когда в конструкторе класса Coin будет выброшено исключение другого типа?

                  Кстати, пусть конструктор кости принимает массив значений, которые могут выпасть, тогда монетка станет часным случаем кости с двумя гранями.
                  Ответить
                  • if (r < 0.5)
                      return Tail;
                    else if (r > 0.5)
                      return Head;
                    else
                      throw new Coin.EdgeException();
                    Ответить
                • Это божественно...
                  Я даже не догадывался, что в жабе есть EDSL для описания вероятностных экспериментов!
                  Ответить
                • Masterpiece!
                  Ответить
      • http://haxe.org/forum/thread/3395#nabble-td6160117

        Но в стандартную библиотеку это не попало. Есть несколько криптографических библиотек, там наверное свои велики.
        Ответить
        • Там не велики. Там мопеды и тракторы.
          Ответить
    • Неужели никто не заметил мега-багу? Судя по-тому как написан код, человек собирается проверять сторону монеты так:

      if ( r.coinSideEagle() )
         //Ура! Выпал орёл!
      else if ( r.coinSideTail() )
         //Ура! Выпала решка!
      else
        //Ебанный в рот! Это ребро!


      Т.к. методы coinSideEagle и coinSideTail генерируют новые рандомные булёны, то на ребро монета будет становиться очень часто.
      Ответить
      • Там все не так плохо. Там все _значительно_ хуже.

        Из доки на AS'овский Math.random(): "Returns a pseudo-random number n, where 0 <= n < 1."
        Из кода, строка 11: return (_int(0, 1) == 1);

        Видно, что _Bool() всегда возвращает "ложь" или 0. Т.е. на монете всегда выпадает "решка". На ребро она никогда не упадет.
        Ответить
        • > Видно, что _Bool() всегда возвращает "ложь" или 0.
          Так там же Math.round() есть. Так что ничего подобного.
          Ответить
      • нет. человек загадывает "или орёл или решка" и метод вызывается соответственно один раз. но вообще это бред всё и только для узкого класса эмуляторов настольных игр. так что я написал и удалил. и лучше просто проверять на true и false для орла и решки соответственно
        Ответить

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