function ip2n( $ip ) { // строку ip перевести в целое
$ipa = explode('.', $ip);
return $ipa[0]<<24 | $ipa[1] << 16 | $ipa[2] << 8 | $ipa[3];
}
function n2ip( $n ) { // целое перевести в строку ip
return implode('.', array(
$n >> 24 & 0xFF,
$n >> 16 & 0xFF,
$n >> 8 & 0xFF,
$n & 0xFF
));
}
function bitreverse( $n ) { // развернуть порядок бит в 32-битном целом
return bindec( strrev( sprintf( '%032b', $n)));
}
$ips = array(
'192.168.1.15',
'192.168.1.16',
'192.168.1.17',
'95.181.217.91',
'95.181.217.96',
'95.181.217.97',
'91.216.3.90',
'91.216.3.91',
'91.216.3.99',
'5.62.157.78',
'5.62.157.84',
'5.62.157.87',
);
$ips = array_map( 'ip2n', $ips);
$ips = array_map( 'bitreverse', $ips);
sort( $ips, SORT_NUMERIC);
$ips = array_map( 'bitreverse', $ips);
$ips = array_map( 'n2ip', $ips);
print_r($ips);
/* Array
(
[0] => 95.181.217.96
[1] => 192.168.1.16
[2] => 5.62.157.84
[3] => 91.216.3.90
[4] => 5.62.157.78
[5] => 95.181.217.97
[6] => 192.168.1.17
[7] => 91.216.3.99
[8] => 95.181.217.91
[9] => 91.216.3.91
[10] => 5.62.157.87
[11] => 192.168.1.15
) */
У Остапа Бендера в мешке 100 слонов, из которых k разноцветных, и он раздает их m детям по слону в руки (k < m < 100
). Сколькими способами может состояться раздача слонов?
m
способами.m – 1
способом.N = 100 * m * 99 * (m-1) * ... * (100 - m) * 1
N = 100! / m! * m! = 100!
100!
(100 факториал)while()
из этого зоопарка присутствует только условие.for( i = 0; i < 2; i = i + 1) {
console.log( i ); // выводит значение i в консоль
}
i = 0
.i < 2
.0
.i = i + 1
.i < 2
и если всё ок, снова ныряем.1
.i = i + 1
, но условие уже не проходит проверку, т.к. i
стало равно 2
.while()
выглядел бы так:i = 0;
while( i < 2 ) {
console.log( i );
i = i + 1;
}
for()
это просто более компактная запись довольно типичного цикла. var dt = new Date();
var date = dt.getDate();
if( date < 15) dt.setDate(1); // до 15-го числа будет 1-е
else dt.setDate(15); // после 15-го – 15-е
// Display the month, day, and year. getMonth() returns a 0-based number.
var day = dt.getDate();
var month = dt.getMonth()+1;
var year = dt.getFullYear();
document.write(day + '-' + month + '-' + year);
*/14
означает «каждые 14 минут», вернее, когда остаток от деления минут на 14 равен 0.0, 14, 28, 42, 56
минут каждого часа.*/
:14 * * * * python3 /home/G/script.py
14,28,42,56 * * * * python3 /home/G/script.py
// суммы – где сумма координат X + Y = N, для каждой диагонали N постоянно
var side = 5,
sum = Array.apply(null, Array(side * 2 - 1)).map(Number.prototype.valueOf,0),
row, col
;
for( row = 0; row < side; row++) {
for( col = 0; col < side; col++) {
sum[row + col] += arr[row][col];
}
}
result.innerHTML += '<pre>' + JSON.stringify(sum) + '</pre>';
// выборка всех под-элементов в блоке:
var $el = $('#block_id').children();
// какой-то один случайный из них:
var $random = $el[ Math.floor( Math.random() * $el.length)];
// вставить его куда-то ещё
$("#suda").append( $random);
/var/www/Project/
.secret_data.php
public_html/
index.php <-- отсюда подключается "../.secret_data.php"
$_ENV
и $_SERVER
при выполнении, и оттуда берут при необходимости. Грубо пример .secret_data.php:$params = array(
'API_KEY' => '3pyWtP7KYVheJWkftdchJLWhwUcK8Rdw',
'DB_HOST' => '127.0.0.1',
'DB_USER' => 'root',
'DB_PASS' => 'secret',
);
$_ENV = array_merge( $_ENV, $params);
$_SERVER = array_merge( $_SERVER, $params);
.env
function rangeSum(a,b) {return (b*b-a*a+a+b)/2}
console.log( rangeSum( 1, 3)); // 6
console.log( rangeSum( 20, 220)); // 24120
function rangeSum( from, to) {
var i, sum = 0;
for( i = from; i <= to; i++) {
sum = sum + i;
}
return sum;
}
console.log( rangeSum( 1, 3)); // 6
console.log( rangeSum( 20, 220)); // 24120
function rangeSum2( from, to) {
var m = to - from + 1;
return from * m + ( m * m - m) / 2;
}
console.log( rangeSum2( 1, 3)); // 6
console.log( rangeSum2( 20, 220)); // 24120
var arr = [ 1, 3, 2, 3, 6, 2 ];
var maxIndex = arr.indexOf( Math.max.apply(null, arr)); // 4, считается от 0
var arr = [ 1, 3, 2, 3, 6, 2 ];
function index_max(arr) {
var i, maxV, maxP;
for( i = 0; i < arr.length; i++) {
if( typeof maxV === "undefined" || arr[i] > maxV ) {
maxV = arr[i];
maxP = i;
}
}
return maxP;
}
index_max(arr) // 4
var data = [{x:0,y:1}, {x:1,y:1}, {x:4,y:1}, {x:5, y:7}]
, pairs = []
, i
;
for( i = 0; i < data.length; i++) { // перебираем входные элементы
if( i % 2 === 0) pairs.push([]); // четный – добавляем новую пустую «пару»
pairs[ pairs.length - 1].push( data[i]); // в последнюю пару добавляем элемент
}
JSON.stringify( pairs ) // [[{"x":0,"y":1},{"x":1,"y":1}],[{"x":4,"y":1},{"x":5,"y":7}]]
$params = array(
'user_id' => $uid,
'message' => $long_message,
'random_id' => rand(1E9, 9E9)
'access_token' => $token,
'v' => 5.64,
);
$ch = curl_init( 'https://api.vk.com/method/messages.send');
curl_setopt_array( $ch, array(
CURLOPT_POST => TRUE,
CURLOPT_POSTFIELDS => $params,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_SSL_VERIFYHOST => FALSE,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 10,
));
$result = curl_exec( $ch);
$data = json_decode( $result);
$message_id = $data['response'];
var
, где бы вы его ни написали, «поднимается» наверх при интерпретации кода – это называется var hoisting. Поэтому ваши варианты 1) и 2) не имеют разницы. Возможно, во 2-м варианте вы имели в виду let вместо var
?/**
* @param array hits - массив данных об ударах.
* @param int start - начало интервала (включён), число миллисекунд с 1 января 1970 UTC
* @param int finish - конец интервала (исключён), число миллисекунд с 1 января 1970 UTC
*
* @return возвращает объект, где ключи – моменты начала 15-минуток, а значения – число событий
*/
function bins( hits, start, finish) {
var i
,step = 15 * 60 * 1000 // 15 минут в миллисекундах
,bins = {}
;
// заполнить ячейки нулями
i = start;
do { bins[i] = 0 } while( i += step < finish);
// перебрать все сэмплы
for(i = 0; i < hits.length; i++) {
hitTime = hits[i].ts; // считаем, что значение времени лежит в свойстве "ts"
if( hitTime < start || hitTime >= finish) continue; // вне диапазона
binTime = start + Math.floor( (hitTime - start) / step) * step; // в какое ведёрко попадает
bins[ binTime]++;
}
return bins;
}