AngularJS: Динамический диапазон для select
С сервера приходит максимальное и минимальное значение в выпадающем списке. Нам нужно построить по этим значениям сам список.
Делаем фильтр
angular.module('app').filter('range', function() {
return function(input, min, max) {
min = parseInt(min, 10);
max = parseInt(max, 10);
for (var i = min; i < max; i++)
input.push(i);
return input;
};
});
И делаем динамический селект.
<select ng-model="value" ng-options="item for item in [] | range:min:max"></select>
Центрировать абсолютный div
Горизонтально:
margin-left:-<half width>px; left:50%;
Вертикально и горизонтально (только если задана ширина и высота)
.Absolute-Center { margin: auto; position: absolute; top: 0; left: 0; bottom: 0; right: 0; }
Числа с произвольным законом распределения
Иногда бывает ну очень нужно сгенерировать какое-то число с вероятностью его появления, к примеру, 0.1. Или любым другим законом распределения.
Как поступать в таком случае?
Нам известно, что генераторы случайных и псевдослучайных чисел плются значениями, которые распределены по случайному закону. Но нам-то что до этого?
Нам нужно генерировать X с указанной вероятностью (0.1)
Вспоминаем, что сумма вероятностей всех событий - 1. Отлично. Теперь нам нужно задать вектор значений (среди которых будет и X), где сумма вероятностей появления элементов равна 1.
И дальше нам нужно отобразить этот вектор на некоторый интервал [1, 10^k].
Посмотрим на примере, зачем это надо.
Если вероятность появления числа X := 0.1, а Y := 0.9 (сумма = 1), то нам нужно два вектора значений: от 1 до 1 и от 2 до 10.
Зачем? Мы будем генерировать числа с диапазоне от 1 до 10. С вероятностью 0,1 числа попадут в интервал от 1 до 1 :) и с вероятностью 0,9 - от 2 до 10.
С таким де успехом мы можем взять интервалы [1, 10] и [11, 100] и генерировать числа в диапазоне 1:100. Главное, чтобы максимальное число равнялось 10^k и k было больше или равно максимальному количеству десятичных цифр в вероятностях.
Python: Backreferences в re
Вот все время забываю, что обратные ссылки в регулярных выражениях надо либо писать экранируя слеш.
>>> import re
>>> re.sub('(d)\1*', '\1', '111112222233333')
'123'
Либо писать в raw-строках
>>> import re
>>> re.sub(r'(d)1*', r'1', '111112222233333')
'123'