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

    +2

    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
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace Lens.Stdlib
    {
    	/// <summary>
    	/// Standard library randomizer methods.
    	/// </summary>
    	public static class Randomizer
    	{
    		#region Fields
    
    		/// <summary>
    		/// Random seed.
    		/// </summary>
    		public static readonly Random m_Random = new Random();
    
    		#endregion
    
    		#region Methods
    
    		/// <summary>
    		/// Gets a random floating point value between 0.0 and 1.0.
    		/// </summary>
    		/// <returns></returns>
    		public static double Random()
    		{
    			return m_Random.NextDouble();
    		}
    
    		/// <summary>
    		/// Gets a random integer value between 0 and MAX.
    		/// </summary>
    		public static int Random(int max)
    		{
    			return m_Random.Next(max);
    		}
    
    		/// <summary>
    		/// Gets a random integer value between MIN and MAX.
    		/// </summary>
    		public static int Random(int min, int max)
    		{
    			return m_Random.Next(min, max);
    		}
    
    		/// <summary>
    		/// Gets a random element from the list.
    		/// </summary>
    		public static T Random<T>(IList<T> src)
    		{
    			var max = src.Count - 1;
    			return src[Random(max)];
    		}
    
    		/// <summary>
    		/// Gets a random element from the list using a weighter function.
    		/// </summary>
    		public static T Random<T>(IList<T> src, Func<T, double> weighter)
    		{
    			var rnd = m_Random.NextDouble();
    			var weight = src.Sum(weighter);
    			if (weight < 0.000001)
    				throw new ArgumentException("src");
    
    			var delta = 1.0/weight;
    			var prob = 0.0;
    			foreach (var curr in src)
    			{
    				prob += weighter(curr) * delta;
    				if (rnd <= prob)
    					return curr;
    			}
    
    			throw new ArgumentException("src");
    		}
    
    		#endregion
    	}
    }

    Ну что сказать, 3,4-Метилендиоксиамфетамин

    Запостил: dm_fomenok, 26 Мая 2016

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

    • Ну и что тут не так?
      Ответить
      • лисапед
        Ответить
        • не лисапед, а статическая обертка
          без контекста откуда это выдрано, обсуждать бессмысленно
          Ответить
          • Ну да, это очень нужный код, я уверен

            // <summary>
            /// Gets a random integer value between 0 and MAX.
            /// </summary>
            public static int Random(int max)
            {
            return m_Random.Next(max);
            }
            Ответить
            • static же..
              Ответить
              • Т.е. мало того, что велосипед, так ещё и непотокобезопасный...
                Ответить
                • потокобезопасный велосипед называется катамаран
                  Ответить
                • это не баг, а фича
                  гонки данных превращают псевдорандомный генератор в истинно рандомный
                  Ответить
                  • нет, потому что поведение шедулера не зависит от внешних факторов

                    для истинного рэндома нужна температура, бел шум или что-то, что нельзя расчитать

                    а поведение шедулера (равно как и опорожнение буферов в кеш) посчитать можно

                    правда современные ОС грузят программы по рендомному адресу, и это сильно усложняет задачу
                    Ответить
                    • >> для истинного рэндома нужна температура, бел шум или что-то, что нельзя расчитать

                      Молодой человек, компьютеры не могут работать с тем, что нельзя рассчитать.
                      Ответить
                      • Даже как с входными данными?
                        Ответить
                        • Вот именно. И с бесконечностями они не работают. Понимаешь?
                          Ответить
                          • То есть вот беру я квантовую двухщелевую пепяку, получаю с неё поток невычислимых (потому что недетерминированных) ноликов и единичек, подаю через UART какой-нибудь на комп, и он сгорает синим пламенем?

                            Блин, надо спасать наш родной спектрометр, а то сожгут его квантовые шумы.
                            Ответить
                            • > беру я квантовую двухщелевую пепяку

                              Главное - не при детях.
                              Ответить
                            • Нолик и единичка - вполне детерминированы, а квантовую пепяку ЭВМ напрямую не поймет
                              Ответить
                              • Мне кажется, у нас определения детерминированности разные. Априорно я не могу сказать, нолик машине не вход придёт или единичка. Вот вообще никак.
                                Ответить
                              • Появление нолика и единички детерминировано? Т. е. ты можешь предсказать, когда с внешнего порта придёт нолик или единичка?
                                Ответить
                    • Зависит от внешних факторов же - пакетов из сети, ответов диска, действий юзера. Из-за этого разные потоки просыпаются...
                      Ответить
    • //Gets a random element from the list.
      можно было сделать как extension method для List
      Ответить
    • Дольфа Лундгрена на такое не хватает...
      Ответить
    • /// <summary>
      /// Как же меня бесит этот майкрософтовский формат инлайн доков...
      /// Такое ощущение, что код на XML пишешь...
      /// </summary>
      /// <param name="hui">Вон, автору даже влом было параметры описывать</param>
      /// <param name="pizda">Не удивлюсь, что именно из-за синтаксиса</param>
      Ответить

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