C(10,40) * C(3,40)
– на него поделим число благоприятных вариантов. Это выбор 10 выигрышных C(10,40); из 10 надо выбрать 2 попадания C(2,10); из оставшихся 30 надо выбрать 1 промахнувшийся C(1,30) и всех их перемножить. Итого Q(40,10,3,2) = C(10,40) * C(2,10) * C(1,30) / (C(10,40) * C(3,40))
Наверняка можно неплохо сократить что-то.C(N, M) = M! / ( N! * (M-N)! )
var ts0;
function draw(ts) {
// ...
if(!ts0) ts0 = ts;
const dt = ts - ts0; // сколько прошло миллисекунд
// ...
ctx.translate(500, 180 + Math.sin(dt/352)*3);
ctx.rotate( Math.sin(dt/630) / 40 );
Тут помимо поворота ещё по вертикали слегка покачивается. Так же, плавной синусоидой, но с другим периодом, чтобы не выглядело циклично.requestAnimationFrame()
параметром передаётся текущее время, так что можно не заморачиваться с созданием нового объекта Date, а использовать этот параметр.ctx.drawImage(cloud, -350, -250);
с размерами картинки определяется центр, относительно которого получится вращение. Желательно его подобрать так, чтобы они приходился на визуальный центр масс тучи. hideContent( showContent( elements_id[position] ));
hideContent( showContent );
showContent.bind( null, elements_id[position])
null
в качестве контекст this
и elements_id[position]
в качестве первого параметра. Можно было бы назначить эту функцию переменной: var myFunc = showContent.bind( null, elements_id[position]);
callback
.hideContent( showContent.bind( null, elements_id[position] ));
entry: {
polyfills: './src/polyfills.js',
index: './src/index.js'
},
output: {
filename: '[name].bundle.js',
// создаст polyfills.bundle.js и index.bundle.js
<script>
основного бандла, вставить попытку загрузить Метрику и проверку её загрузки. В случае провала загружать полифильный бандл: <script src="https://mc.yandex.ru/metrika/watch.js"></script>
<script>
if( !(Ya in window)) {
var scriptElement = document.createElement('script');
scriptElement.async = false;
scriptElement.src = '/polyfills.bundle.js';
document.head.appendChild(scriptElement);
}
</script>
getElementById()
– только у document. См. методы Element.document.getElementById('irc_cc')
// словарь bbcode: className
const dict = {
'info': 'info-text',
'admin': 'admin-text',
};
var tds = document.getElementsByTagName("td");
for (let k = 0; k < tds.length; k++) {
let td = tds[k];
if (td.className !== 'posttdMessage') continue;
let s = td.innerHTML;
for(let bb in dict) {
let re_open = new RegExp('\\[' + bb + '\\]', 'ig');
let re_close = new RegExp('\\[/' + bb + '\\]', 'ig');
s = s.replace(re_open, '<div class="' + dict[bb] + '">').replace(re_close, '</div>');
}
td.innerHTML = s;
}
<script>
var str = "один три два три три три";
var words = str.split(" ");
var collect = {};
for (var i = 0; i < words.length; i++) {
// если в словаре еще нет свойства words[i] заводим такое свойство с значением 0
if (!collect[words[i]])
collect[words[i]] = 0;
// увеличиваем счетчик
collect[words[i]]++;
}
// вывод результатов
for(var word in collect)
console.log(word, collect[word]);
</script>
console.log()
идёт в консоль, и на странице ничего не появится:<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
owner_id
и пост опубликуется на странице авторизованного пользователя, которому принадлежит токен. См. документацию:целое число, по умолчанию идентификатор текущего пользователя
users.get()
без параметров: вернутся данные текущего пользователя. D
во время перезапуска. Там прогоните тест памяти и ещё какие-нибудь.Cmd+Opt+P+R
post — запись на стене пользователя или группы;
comment — комментарий к записи на стене;
photo — фотография;
audio — аудиозапись;
video — видеозапись;
note — заметка;
market — товар;
photo_comment — комментарий к фотографии;
video_comment — комментарий к видеозаписи;
topic_comment — комментарий в обсуждении;
market_comment — комментарий к товару;
sitepage — страница сайта, на котором установлен виджет «Мне нравится».