не могу понять почему в данной задаче второй цикл проходит до n/i.
// можно обойтись и без этого массива, но для демки делаю с ним
var hexchar = [0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F"].map(v=>v.toString());
function decToHex(num){
let out = num&15;
num = num>>>4;
return num?decToHex(num)+hexchar[out]:hexchar[out];
}
/* тестируем */
for(var i=0; i<100; i++){
console.log(i,"=",decToHex(i));
}
0 = 0
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
7 = 7
8 = 8
9 = 9
10 = A
11 = B
12 = C
13 = D
14 = E
15 = F
16 = 10
17 = 11
18 = 12
19 = 13
20 = 14
21 = 15
22 = 16
23 = 17
24 = 18
25 = 19
26 = 1A
27 = 1B
28 = 1C
29 = 1D
30 = 1E
31 = 1F
32 = 20
33 = 21
34 = 22
35 = 23
36 = 24
37 = 25
38 = 26
39 = 27
40 = 28
41 = 29
42 = 2A
43 = 2B
44 = 2C
45 = 2D
46 = 2E
47 = 2F
48 = 30
49 = 31
50 = 32
51 = 33
52 = 34
53 = 35
54 = 36
55 = 37
56 = 38
57 = 39
58 = 3A
59 = 3B
60 = 3C
61 = 3D
62 = 3E
63 = 3F
64 = 40
65 = 41
66 = 42
67 = 43
68 = 44
69 = 45
70 = 46
71 = 47
72 = 48
73 = 49
74 = 4A
75 = 4B
76 = 4C
77 = 4D
78 = 4E
79 = 4F
80 = 50
81 = 51
82 = 52
83 = 53
84 = 54
85 = 55
86 = 56
87 = 57
88 = 58
89 = 59
90 = 5A
91 = 5B
92 = 5C
93 = 5D
94 = 5E
95 = 5F
96 = 60
97 = 61
98 = 62
99 = 63
var arr1 = [1487, 1847, 4817, 4871, 7481, 7841, 8147, 8741];
var res1 = search(arr1);
console.log(res1);
// найдена 1 прогрессия. выведет:
// [
// [ 1487, 4817, 8147 ]
// ]
var arr2 = [1487, 1847, 4817, 4871, 7481, 7841, 8147, 8741, 10001];
var res2 = search(arr2);
console.log(res2);
// найдено 2 прогрессии. выведет:
// [
// [ 1487, 4817, 8147 ],
// [ 7481, 8741, 10001 ]
// ]
function search(a){
// создадим массив, в который будем заносить данные о найденых прогрессиях
var result = [];
// проверяем в цикле все числа
for(var start=0; start<a.length; start++){
for(var i=start+1; i<a.length; i++){
// вычисляем предпологаемый шаг прогрессии
var step = a[i]-a[start];
// и проверяем его.
// создаем массив, в который складываем
// числа предполагаемой прогрессии
var list = [ a[start], a[i] ];
// смотрим в цикле следующие числа
for(var j = i+1; j< a.length; j++){
// если следующее число - шаг прогрессии равно
// последнему занесенному в массив list
// то добавляем его в массив list
if( a[j]-step == list[list.length-1]){
list.push(a[j]);
}
}
// если в массиве 3 элемента или более, то считаем что
// еще одна прогрессия найдена и запоминаем ее в
// массиве с результатами
if( list.length>2){
result.push(list);
}
console.log(start, i, step, list)
}
}
// возвращаем массив результатов
return result;
}
def smallest(arr):
smallest = arr[0]
smallest_index = 0
for i in range(1,len(arr)):
if arr[i] < smallest:
smallest = arr[i]
smallest_index = i
return smallest_index
d = [4,15,6,2,7,9,9]
print(smallest(d)) # 3
print(d[smallest(d)]) # 2
// пишу на js, на php уже забыл как писать:)
// исходный массив данных
var data = {
1555349065: 3,
1555349059: 10,
1555349057: 4,
1555349047: 12,
1555349037: 8,
1555349027: 11,
1555349017: 2
};
// далее понадобится некий интервал, внутри которого мы будем вычислять значения с обпределенным шагом
// для этих целей возмем таймштамп из первой и последней ячеек, вы же можете указать любой, удобный вам
// получим массив ключей (специфика js) и навсякий случай отсортируем его:)
var times = Object.keys(data).sort();
// начальное значение интервала времени
var start = +times.shift();
// следующее за начальным значение интервала времени
var next = +times.shift();
// конечное значение интервала времени
var stop = +times[times.length-1];
// зададим шаг вычислений (поставил равным 3 чтобы было интересней)
var step = 3;
// все готово для вычисления средних значений. Тут есть несколько особенностей, по сути данная задачя является интерполяцией
// а интерполяции бывают разными. Общей особенностью любой интерполяции является то, то они не дают точный результат
// далее для вычисления средних значений я буду использовать самую простую интерполяцию - линейную
// создадим ассоциативный массив, в который будем складывать результаты вычислений
var result = {};
for(var i=start; i<stop; i+=step ){
console.log(i);
// если долши до следующего значения
if(i>=next){
start = next;
next = +times.shift();
}
// вычисляем промежуточное хначение (тут вся соль, и при этом это простая пропорция)))
var dx = next-start;
var dy = data[next]-data[start];
var dt = i-start;
result[i] = data[start] + dt*dy/dx;
}
// выводим результат
console.log(result);
{
'1555349017': 2,
'1555349020': 4.7,
'1555349023': 7.4,
'1555349026': 10.1,
'1555349029': 10.4,
'1555349032': 9.5,
'1555349035': 8.6,
'1555349038': 8.4,
'1555349041': 9.6,
'1555349044': 10.8,
'1555349047': 12,
'1555349050': 9.6,
'1555349053': 7.2,
'1555349056': 4.8,
'1555349059': 10,
'1555349062': 6.5
}