Для получения полного доступа
зарегистрируйтесь.
RSS

Все сниппеты с тэгом «random»



Gravatar image
Archakov06
  • Репутация: 1
  • Сниппеты: 0
  • Ревизии: 1

ES6:

const randomColor = () => {
  return `#${((1<<24)*Math.random()|0).toString(16)}`;
}
console.log(randomColor());

ES5:

var randomColor = function() {
  return '#' + ((1<<24)*Math.random()|0).toString(16);
}
console.log(randomColor());
FullZero
  • Репутация: 7
  • Сниппеты: 6
  • Ревизии: 0
const randomColor = () => {
  return `#${((1<<24)*Math.random()|0).toString(16)}`;
}
console.log(randomColor());
FullZero
  • Репутация: 7
  • Сниппеты: 6
  • Ревизии: 0
(function($) {
    $.rand = (arg)=>{
        return ($.isArray(arg))?arg[$.rand(arg.length)]:(typeof arg == "number")?Math.floor(Math.random() * arg):11;
    };
})(jQuery);
var items = [523,3452,334,31,57,5346];
console.log($.rand(10));
console.log($.rand(items));
console.log($.rand());
Gravatar image
a4teach
  • Репутация: 1
  • Сниппеты: 1
  • Ревизии: 0

Как известно shuffle очень медленный, засирает память и очень медленен. Когда надо получить рандомный кусок из массива, лучше нежели перебор массива (основываясь на моих замерах) юзать нечто вроде этой функции.

class Helpers{
	public static function arrayShuffle($arr, $limit = 10)
		{
    		$slice = array_rand($arr, $limit);
    		$arr   = !is_array($slice) ? array($slice) : $slice;
    		foreach($arr as $key => $val)
    		{
        		yield $val => $arr[$key];
    		}
		}
}

print_R(iterator_to_array(Helpers::arrayShuffle(range(1,100),5)));
Gravatar image
id1453989
  • Репутация: 1
  • Сниппеты: 1
  • Ревизии: 0

Генерирует псевдо-уникально-последовательную строку. Можно использовать, например, как номер заказа. Предназначен для ситуаций когда нельзя показывать пользователю id элемента в базе (защита от конкурентной разведки, или от перебора), а вместо этого нужна случайная строка, с гарантией уникальности. Уникальсность обеспечивает часть строки, привязанной ко времени, а случайность остальная часть строки от генератора случайных чисел. RandomLen = 5 в данном случае выставлен так, что сгенерированные в течении секунды 100000 значений будут уникальны. Позволяет найти баланс между скоростью и объёмом данных (длинной строки).

Фактическую уникальность может обеспечить только база данных, этот алгоритм генерирует строку, которая при нормальной работе сервиса будет достаточно уникальной, что бы избавиться от цикл из generate-check-generate-check-save

(В оригинале тут строчек 100, но я показал ключевую часть. методы Truncate, GenRandomStrings, ConvertToBase гуглятся и скорее всего у вас уже есть)

        private const int MinDateLen = 4; 
        private const int MaxDateLen = 6; 
        private const int RandomLen = 5; //100 000 values/second
        private const int MinLengthSeqId = MinDateLen + RandomLen;
        public const int MaxLengthSeqId = MaxDateLen + RandomLen;

        public static string GenerateSeqId(){
            var sequenceString = ConvertToBase( (DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds - BaseUnixTime );
            var sequenceFixedLength = (sequenceString + GenRandomStrings(MaxLengthSeqId - MinDateLen)).Truncate(MaxDateLen);
            var randomString = GenRandomStrings(MinLengthSeqId / 2) + sequenceFixedLength + GenRandomStrings(MinLengthSeqId / 2);
            return ClearReadability(randomString).Truncate(MaxLengthSeqId);
        }        
Сниппет,  C#

Random decimal

Gravatar image
burningLEGION
  • Репутация: 2
  • Сниппеты: 3
  • Ревизии: 0

create random decimal from a range

		public decimal Randomize(decimal from, decimal to)
		{
			var rnd = new Random();
			var fromScale = (byte)(decimal.GetBits(from)[3] >> 16);
			var toScale = (byte)(decimal.GetBits(to)[3] >> 16);
			var scale = (byte)(fromScale + toScale);
			if (scale > 28)
			{
				scale = 28;
			}

			var r = new decimal(rnd.Next(), rnd.Next(), rnd.Next(), false, scale);
			if (Math.Sign(from) == Math.Sign(to) || from == 0 || to == 0)
			{
				return decimal.Remainder(r, to - from) + from;
			}

			var getFromNegativeRange = (double)from + rnd.NextDouble() * ((double)to - (double)from) < 0;
			return getFromNegativeRange ? decimal.Remainder(r, -from) + from : decimal.Remainder(r, to);
		}