Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Задача, минимизация ошибок кэша на основе частоты доступа

Есть кэш, элементы в нем запрашиваются с разной частотой, и элементы устаревают.
Например по ключу "А" идет 100 запросов в минуту, а по ключу "Б" всего 2.
Каждый раз когда кэш возвращает устаревшее (неверное) значение - мы засчитываем ему ошибку.
Поэтому если оба ключа устареют - по "А" будет засчитано 100 ошибок в минуту, а по ключу "Б"
всего 2 ошибки.

Как придумать алгоритм обновления значений в кэше который будет учитывать частоту обращения
и минимизирует ошибки?

Нужно также учитывать что ресурсы ограничены и мы можем обновлять всего 10
значений кэша в минуту. Как нам распределить ресурсы оптимально - нужно ли обновлять "А" 9 раз а "Б" 1 раз?
Или 7 и 3 раза соответсвенно? Как расчитать это?

Нам нужна функция которая примет на вход статистику обращений кэша и выдаст индивидуальный
TTL для каждого значения в кэше.

П.С.

Интересно как практическое / эмпирическое решение так и теоретическое. К какому классу алгоритмов
относится эта задача? Например поиск зависимости относится к классу алгоритмов работы с графами.
А эта задача какого типа?

Спрашиваю в Java потому-что в Java много задач на алгоритмы :)
Ответ:
private
Есть кэш, элементы в нем запрашиваются с разной частотой, и элементы устаревают.
Например по ключу "А" идет 100 запросов в минуту, а по ключу "Б" всего 2.
Каждый раз когда кэш возвращает устаревшее (неверное) значение - мы засчитываем ему ошибку.
Поэтому если оба ключа устареют - по "А" будет засчитано 100 ошибок в минуту, а по ключу "Б"
всего 2 ошибки.

Как придумать алгоритм обновления значений в кэше который будет учитывать частоту обращения
и минимизирует ошибки?


Обычно кеш строится на базе LRU.

Что такое LRU? Это как игра змейка в телефоне. Попадание нового элемента в кеш - рост
змейки с головы (добавление нового элемента). И отсекание хвоста (eviction старого элемента).
Что такое повторное чтение элемента в кеш? Здесь альтернатива змейки ломается и
физически это выглядит как поднятие вверх середины сегмента змейки. Благодаря
linked-list все эти операции имеют стоимость примерно o(1). Вобщем в классической
реализации кеша нет никакого места подсчетам и любым другим долгоиграющим
процессам. Кеш принимает решение мгновенно.

Что такое с точки зрения LRU 100 запросов с ключом "A" ? Это значит что элемент A
постоянно стоит в голове змейки. А все прочие элементы которые читаются реже -
располагаются тем ближе к хвосту, чем реже к ним был доступ. Даже правильнее
сказать не располагаются а "дрейфуют" в сторону хвоста в обратном порядке своей
частоты попадания в кеш.

Если нужно завязаться на TTL то алгоритм остается тот-же самый. То в каждый элемент
мы добавляем поле lastUpdateTime и делаем змейку бесконечной по длине. Но в политику
eviction добавляем правило что режем с хвоста только тот элемент, время которого
истекло. Опять-же этот action можно привязать синхронно к другим операциям.
Например к событию добавления нового элемента.

Нам нужна функция которая примет на вход статистику обращений кэша и выдаст индивидуальный
TTL для каждого значения в кэше.

Интересно как практическое / эмпирическое решение так и теоретическое. К какому классу алгоритмов
относится эта задача? Например поиск зависимости относится к классу алгоритмов работы с графами.
А эта задача какого типа?

Можно посмотреть на исходники EhCache


Возможно там есть такая формула. Но я сомневаюсь. Скорее всего быстрые структуры данных
и простые и гениальные линейные правила, и алгоритмы типа tocken bucket algorithm, linked-list,
hash-table или стохастичные структуры такие как bloom-filter позволяют решать такие задачи.

Спрашиваю в Java потому-что в Java много задач на алгоритмы :)

Вы сильно ошибаетесь. В Java не больше задач на алгоритмы чем в любых
других ЯП. Просто сам по себе хештег #Java мы чаще гуглим и поэтому складывается
такая иллюзия. Почитайте Кнута, Седжвика и Кормана.
Вопрос: Программирования случайных чисел с равномерным законом распределения

Нужно написать словесный алгоритм и блок-схему для решения такой задачи: программирования случайных чисел с равномерным законом распределения, на интервале [32768..32767], помогите пожалуйста.
Ответ: Так рендом вроде дает от 0 до 1. Действительно как же перевести в -32768 32767 это непосильная математическая задача…
Вопрос: Задачи Стефана - Ошибка сегментации

Здравствуйте уважаемые Форумчане!
Написал программу для задачи Стефана:
Код C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <math.h>
#include <stdio.h>
#include <stdlib.h> 
#define Pi 3.14159265358979
#define q_w 3.34*100000
#define ro_w 1000
#define n 10
#define N 100
#define lambda2 0.58
#define lambda1 0.5
#define delta 0.01
#define h 0.1
#define c_s 700
#define ro_s 4000
#define c_w 4190
#define ro_w 1000
#define c_ice 2000
#define ro_ice 900
#define lambda_s 900
#define lambda_w 900
#define lambda_ice 900
#define m 0.4
#define Tfaza 0
#define Tnach -3
double c_ro(double S_w, double M)
{
        double temp;
        temp = (1-M)*c_s*ro_s+c_w*ro_w*S_w*M+c_ice*ro_ice*(1-S_w)*M;
        return temp;
}
double _lambda(double S_w , double M)
{
        double temp;
        temp = (1 - M)*lambda_s + lambda_w*S_w*M + lambda_ice*(1 - S_w)*M;
        return temp;
}
double Tgran(double a,double t)
{
        return sin(Pi*a*t);
}
int main()
{
    FILE *f = fopen("1.txt", "w");
    int k,i,j;
        double tau = 1, t = 0, maxy = 1, alpha[n+1], beta[n+1], lambda, cro, y[n+1], yj[n+1],a , b, c, d, e;
        for (j = 0; j <= N; j++)
    { 
            y[j] = Tnach;
            yj[j] = y[j]; 
    }
    for (j = 1; j < 100; j++)
    {
        tau = tau*1.1;
        if (tau>1e6) tau = 1e6;
        t = t + tau;
        k = 0;
        while ((maxy > 1e-4) && (k < 20))
        {
            k = k + 1;
            alpha[0] = 0; beta[0] = Tgran(1,t);
            for (i = 1; i < n; i++)
            {
                if (y[i] < Tfaza) lambda = _lambda(0.0, m);
                else lambda = _lambda(1.0, m);
                if (y[i] < (Tfaza - delta)) cro = c_ro(0.0, m);
                else if (y[i] > (Tfaza + delta)) cro = c_ro(1.0, m);
                else cro = c_ro(0.0, m) + m*q_w*ro_w / (2 * delta);
                a = lambda / (h * h);
                b = a;
                c = cro / tau;
                d = c*yj[i];
                e = a + b + c;
                alpha[i] = b / (e - a*alpha[i - 1]);
                beta[i] = (d + a*beta[i - 1]) / (e - a*alpha[i - 1]);
            }
//          y[n] = Tnach; //1 rod
            y[n] = beta[n - 1] / (1 - alpha[n - 1]); //2 rod
            maxy = y[n];
            for (i = n - 1; i >= 0; i--)
            {
                a = y[i];
                y[i] = y[i + 1] * alpha[i] + beta[i];
                if (maxy < fabs(y[i] - a)) maxy = fabs(y[i] - a);
            }
//          printf("%d::",k);
            for (int i = 1; i <= n; i++) fprintf(f,"%.5f |",y[i]);
            fprintf(f,"\n\n");
            yj[j] = y[j];
        }
    }
}
Все нормально компилирует
Код Bash
1
2
gcc 1.c -std=c99 -lm
./a.out
Однако выводит ошибку сегментации. Как это можно исправить?
Ответ:
Сообщение от ILKarina
Код C
1
2
3
4
5
6
double tau = 1, t = 0, maxy = 1, alpha[n+1], beta[n+1], lambda, cro, y[n+1], yj[n+1],a , b, c, d, e;
   for (j = 0; j <= N; j++)
   { 
       y[j] = Tnach;
    yj[j] = y[j]; 
   }
А как же иначе-то? объявленный y[n+1] содержит 11 значений (от 0 до 10 включительно), а N задефайнин как 100, вот и вылезли за пределы массива => segmentation fault. Дальше текст проги не смотрел, уверен что подобных косяков море.
Вопрос: Нужны задания по программированию на C#

Всем доброго времени суток. Изучаю C# по книге Шилдта, но не хватает практических задач, а из головы придумывать фантазии не хватает, да и вообще нужны рациональные задачи ведущие к практическому пониманию особенностей языка и алгоритмов. А так же задания на проекты от простых до сложных, может практикум какой нибудь. Понятное дело, что google знает всё, но я обращаюсь с конкретной просьбой, т.к. самому ничего адекватного найти не получается. Благодарю заранее
Ответ:

И куча подобных сайтов.
Ну и читать книги. Например, "Языки программирования и методы трансляции" Свердлова, если задание - написать компилятор. Если интересует что попроще, т.е. "алгоритмы вообще", то можно начать с "Грокаем алгоритмы" Бхаргава.
Книги с интересными задачами: Программирование игр и головоломок (Ж.Арсак), Этюды для программистов (Ч.Уэзерелл).
Вопрос: Спартакиада Тур I, задача 2

В ближайшее время в г. Бресте планируется провести школьную городскую спартакиаду. Каждая средняя школа города должна выставить на спартакиаду команду в составе трех человек. Программа спартакиады включает в себя следующие виды упражнений: подтягивание на перекладине, отжимание от пола, приседания. Спартакиада проводится в три тура: в первом туре участники будут подтягиваться на перекладине, во втором – отжиматься от пола, в третьем – приседать.
Жюри спартакиады приняло решение применить в судействе рейтинговую систему. После каждого тура подводится промежуточный рейтинг команды, который определяется суммой баллов, набранных тремя участниками команды в данном виде упражнений. После проведения трех туров спартакиады жюри определяет общий рейтинг команды, равный сумме промежуточных рейтингов команды в каждом из трех туров. Команда с максимальным общим рейтингом объявляется победителем спартакиады.
Так как не все виды упражнений являются равнозначными результаты каждого из них жюри оценивает особым образом. За каждое подтягивание участнику идет в зачет X баллов, за каждое отжимание – Y баллов, за каждое приседание – Z баллов. Эти критерии достаточно объективно отражают сложность выполняемых упражнений.
Однако, при формировании команды руководство средней школы № 14 г. Бреста столкнулось с некоторыми трудностями. В школе учатся N учащихся, известны спортивные данные каждого из них: Ai – число подтягиваний на перекладине, Bi – число отжиманий от пола и Ci – число приседаний. Но имея даже такие данные о каждом учащемся, достаточно сложно определить состав команды. Так как одни учащиеся, например, хорошо подтягиваются на перекладине, но плохо отжимаются, а другие наоборот. Ваша задача помочь руководству средней школы сформировать состав команды из трех человек так, чтобы общий рейтинг команды на спартакиаде был максимален.
Входные данные
Первая строка входного файла содержит три целых числа X, Y и Z (1 ≤ X, Y, Z ≤ 104), разделенных одиночными пробелами.
Вторая строка содержит целое число N (3 ≤ N ≤ 105) – число учащихся в школе.
Каждая из последующих N строк описывает спортивные данные каждого учащегося школы и содержит три целых числа Ai, Bi и Ci (1 ≤ Ai, Bi, Ci ≤ 104), разделенных одиночными пробелами.
Выходные данные
Выходной файл должен содержать три целых числа, разделенные одиночными пробелами – номера учащихся, которые должны войти в команду. Учащиеся нумеруются последовательно, начиная с единицы в порядке ввода их данных. Если вариантов решения несколько, то выведете любой из них.
input.txt
10 10 10
4
1 1 1
10 1 1
1 10 1
output.txt
2 3 4
Пояснения
Общий рейтинг 360
input.txt
5 3 4
7
2 7 12
13 10 5
6 7 5
1 1 20
8 2 14
3 21 4
7 9 8
1 1 10
output.txt
7 2 5
Пояснения
Общий рейтинг 311

Вот задача. Выдаёт ошибку "Error 29: Ordinal type expected."
Нашёл что это за ошибка, но не понимаю как исправить.
А сделать массив меньше нельзя.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var
aa : array[1..100000,1..2] of longint;
i,j,n,z,x,y,a,b,c,max,k,k2 : longint;
begin
assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);
readln(x,y,z);
readln(n);
for i:=1 to n do            
begin
readln(a,b,c);
aa[i,1]:=a*x+b*y+c*z;    
aa[i,2]:=i;             
end;
for i:=1 to 3 do            
begin
max:=aa[i,1];
k:=i;
k2:=aa[i,2];
for j:=i+1 to n do        
if (max<aa[j,1]) then
begin
max:=aa[j,1];      
k:=j;            
k2:=aa[j,2];      
end;
aa[k,1]:=aa[i,1];        
aa[k,2]:=aa[i,2];       
aa[i,1]:=max;           
aa[i,2]:=k2;             
end;
for i:=1 to 3 do write(aa[i,2],' ');   
close(input); close(output);
end.
Как исправить? Можно не через массив.


Заранее спасибо!!!
Ответ:
Сообщение от Отман
А сделать массив меньше нельзя.
можно:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
type
   rec=record
     n,r:longint;
   end;
var
  a,b,c,x,y,z,n,i,j:longint;
  r:array[1..4] of rec;
  t:rec;
begin
  readln(a,b,c,n);
  for n:=1 to n do begin
    readln(x,y,z);
    r[4].r:=x*a+y*b+z*c;
    r[4].n:=n;
    for i:=1 to 3 do
      for j:=i+1 to 4 do
        if r[i].r<r[j].r then begin
          t:=r[j];
          r[j]:=r[i];
          r[i]:=t;
        end;
    end;
    for i:=1 to 3 do write(r[i].n,' ');
end.
Вопрос: задача по функциям

Условие таково:

Создать программу, которая выполняет действия из задания 1 и задания 2. По запросу с клавиатуры, программа выполняет следующие действия:
1) Ввести новый массив (динамический);
2) Задание 1;
3) Вывод массива;
4) Задание 2;
5) Выход.
В программе должно быть реализовано меню, каждое действие должно быть реализовано в отдельной функции.

Задание 1: Дан двумерный массив состоящий из различных элементов. В каждой строке выбирается минимальный элемент, а среди них максимальный элемент. Напечатать номер строки в которой расположен этот элемент
Задание 2: Напишите программу, которая вводит несколько строк текста и символ поиска и использует функцию strchr, чтобы определить суммарное число вхождений символа в текст.

Вот мой код. В первой задаче не получается найти максимальный из минимальных элементов, а при выполнении функций вывода и обеих задач выдает ошибки. Подскажите, что не так


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale>
int menu();
float *massiv;
void vvod (float *massiv, int n1, int m1);
int vivod (float *massiv, int n1, int m1);
int zadanie1 (float *massiv, int n1, int m1);
int zadanie2 (char *stroka, char symbol);
int main () {
    setlocale(LC_ALL,"russian"); 
    while (1) {
        switch (menu()) {
            case 1:
                int n, m;
                printf ("Введите число строк\n");
                    scanf ("%d", &n);
                printf ("Введите число столбцов\n");
                    scanf ("%d", &m);
                vvod (massiv, n, m);
                break;
            case 2:
                zadanie1 (massiv, n, m);
                break;
            case 3: 
                vivod (massiv, n, m);
                break;
            case 4:
                char stroka[1024];
                printf ("Введите строку\n");
                scanf ("%s", &stroka);
                char symbol;
                printf ("Введите символ для поиска\n");
                scanf ("%c", &symbol);
                zadanie2 (stroka, symbol);
                break;
            case 5: 
                return 0;
        }
    }
}
int menu () {
    setlocale(LC_ALL,"russian"); 
    int a;
    do {
    printf("\n   Меню: \n");
        printf("1. Ввести новый массив (динамический) \n");
        printf("2. Задание 1 \n");
        printf("3. Вывод массива\n");
        printf("4. Задание 2 \n");
        printf("5. Выход  \n");
        printf("\t Ваш выбор: ");
        scanf("%d",&a);  
} while (a>5);
return a;
}
void vvod (float *massiv, int n1, int m1) {
    int i, j;
    massiv = (float*) malloc(n1*m1*sizeof(float));
    for (i=0;i<n1;i++)
        for (j=0;j<m1;j++){
            printf("Введите элемент [%d,%d]:\n", i+1, j+1);
            scanf("%f", (massiv+i*m1+j));
        }
}
int zadanie1 (float *massiv, int n1, int m1) {
    int i, j;
    float min;
    for (i=0; i<n1; i++) {
    min=*(massiv+i*m1+0);
        for (j=0; j<m1; j++) {
            if (*(massiv+i*m1+j)<min) {
                min = *massiv;
            }
        }
          printf("Минимальный элемент %i-й строки равен %0.2f\n", i+1, min);
    }
    max = min;
    for (i = 0; i < n1; i++) {
        min = *(massiv+i*m1+0);
        for (j = 0; j < n; j++) {
            if (*massiv < min) {
                min = *massiv;
            }
        }
        if (max < min) {
            max = min;
        }
    }
 
    return 0;
}
 
int vivod (float *massiv, int n1, int m1) {
    int i, j;
    printf("\n");
    for (i=0;i<n1;i++){
        for (j=0;j<m1;j++) {
        printf("%0.2f\t", (massiv+i*m1+j));
        }
            printf("\n");
            free(massiv);
    }
    return 0;
    getch ();
}
int zadanie2 (char *stroka, char symbol) {
    int chislo = 0; 
    char *ptr = NULL;
    ptr = strchr(stroka, symbol);
  while (ptr!=NULL)
  {
    chislo++;
  }
    printf("\n Число вхождений символа '%c' в текст равно %d\n", symbol, chislo);
    return 0;
}
Ответ:
C
1
void vvod (float *massiv, int n1, int m1);
замените на
C
1
void vvod (float *&massiv, int n1, int m1);
Только в прототипе и самой функции.
Вопрос: Применение RadioButton. Ошибка

Добрый день, прошу прощения, помогите найти ошибки, или подскажите, что я делаю не так(У меня на форме 3 радиокнопки, выбрав одну из кнопок должно меняться решение задачи. Выдается ошибка "Использование локальной переменной u, которое не присвоено значение". Я только учусь, так что простите, если что(
Вот код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 private void button1_Click(object sender, EventArgs e)
        {
            double x = Convert.ToDouble(textBox1.Text);
            double y = Convert.ToDouble(textBox2.Text);
            
            textBox3.Text += "При X = " + textBox1.Text +
Environment.NewLine;
            textBox3.Text += "При Y = " + textBox2.Text +
Environment.NewLine;
 
            double u;
            double c = Math.Pow(Math.E, x);
            double v = Math.Pow(Math.E, -x);
            double f = (c - v) / 2;
            double b = Math.Pow(x, 2);
 
            if (radioButton1.Checked ) // f(x)=sh(x)
            {
 
                if ((x / y) > 0)
                    u = Math.Log(f) + Math.Pow((f * f + y), 1.0 / 3.0);
                else
                 if ((x / y) < 0)
                    u = Math.Log(Math.Abs(f / y)) + Math.Pow((f + y), 1.0 / 3.0);
                else
                 if (x == 0)
                    u = Math.Pow((f * f + y), 1.0 / 3.0);
                else
                if (y == 0)
                    u = 0;
               
            }
 
 
            if (radioButton2.Checked ) //f(x)=x^2
            {
                if ((x / y) > 0)
                    u = Math.Log(b) + Math.Pow((b * b + y), 1.0 / 3.0);
                else
                if ((x / y) < 0)
                    u = Math.Log(Math.Abs(b / y)) + Math.Pow((b + y), 1.0 / 3.0);
                else
                if (x == 0)
                    u = Math.Pow((b * b + y), 1.0 / 3.0);
                else
                if (y == 0)
                    u = 0;
                
            }
 
            if (radioButton3.Checked)  // f(x)=e^x
            {
                if ((x / y) > 0)
                    u = Math.Log(c) + Math.Pow((c * c + y), 1.0 / 3.0);
                else
                 if ((x / y) < 0)
                    u = Math.Log(Math.Abs(c / y)) + Math.Pow((c + y), 1.0 / 3.0);
                else
                 if (x == 0)
                    u = Math.Pow((c * c + y), 1.0 / 3.0);
                else
                 if (y == 0)
                    u = 0;
                
            }
            // Вывод результата
 
            textBox3.Text += "U = " + u.ToString() + Environment.NewLine;
 
        }
Ответ: bodynar, спасибо, извините, сразу не обратила вниманию удачи вам!
Вопрос: KeyError Content Desposition Python 27 - Не могу обойти ошибку

Доброго времени суток уважаемые профессионалы.

помогите пожалуйста разобраться что делаю не так

Представленный ниже скрипт должен скачивать файл по ссылкам, которые представлены в файле .csv и сохранять их под оригинальным расширением и именем аккуратненько в папку
но вот не задача - выскакивает ошибка "KeyError Content Desposition" как быть?
если прописать имя файла, так сказать от руки, то все качается, но создается один файлик и все время перезаписывается!

Очень нужна сторонняя помощь

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import csv, sys
import requests
import urllib2
import os
import re
 
 
 
 
user_agent = 'Mozilla 5.0 (Windows 7; Win64; x64)'
 
links = 'links.csv'
with open(links, 'rb') as f:
    reader = csv.reader(f)
    try:
        for row in reader:
            if 'http' in row[0]:
                #print row
                rev  = row[0][::-1]
                i  = rev.index('/')
                tmp = rev[0:i]
                #print tmp[::-1]
                rq = urllib2.Request(row[0], headers = {'User-Agent' : user_agent})
                
                d = rq.headers['Content-Disposition']
                fname = re.findall('filename=(.+)', d)
 
                res = urllib2.urlopen(rq)
                if not os.path.exists("./"+tmp[::-1]):                
                    pdf = open(fname, 'wb')
                    pdf.write(res.read())
                    pdf.close()
                else:
                    print "file: ", tmp[::-1], "already exist"
    except csv.Error as e:
        sys.exit('file %s, line %d: %s' % (filename, reader.line_num, e))
Ответ: попробуйте вот так (осталось обойти в цикле):

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# -*- coding: utf-8 -*-
 
import pycurl
import re
from io import BytesIO
 
buffer = BytesIO()
c = pycurl.Curl()
filename = list()
 
def header_function(header_line):
    header_line = header_line.decode('utf-8')
    if 'Content-Disposition' not in header_line: return
    _, value = header_line.split(':', 1)
    value = re.findall(r'"(.*)"', value)[0].strip()
    filename.append(value)
 
c.setopt(c.URL, 'http://zakupki.gov.ru/44fz/filestore/public/1.0/download/priz/file.html?uid=2A75C90469EA00A0E053AC110725689F')
c.setopt(c.WRITEFUNCTION, buffer.write)
c.setopt(c.USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.108 Safari/537.36Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.108 Safari/537.36')
c.setopt(c.HEADERFUNCTION, header_function)
 
c.perform()
c.close()
 
print(filename)
with open(filename[0], 'wb') as out:
    out.write(buffer.getvalue())
Вопрос: Как ускорить решение задач по программированию

Я сегодня сел решать задачу для начинающих (решил её на Java, но это неважно, я всё равно не использовал никаких библиотек, что C++, что Java в моём случае разницы почти не видно -- написал сюда, потому что здесь больше людей). Потратил на неё 4 часа. Писал код с 10 до 2 часов, причём задача элементарная. Сначала думал, потом написал код -- код не работал. Исправлял миллион ошибок. Там ошибка, здесь ошибка.

Да, я её решил, но меня беспокоит, что я решаю задачи очень медленно. Как сделать так, как думать быстрее, какие приёмы можно использовать, чтобы решать простые задачи быстрее? Как заставить себя думать быстрее?

И за сколько начинающий программист должен по времени решать задачи, на которую я потратил 4 часа? Может быть, 15 минут или 5 минут.

Просто 4 часа на такой детский сад -- это слишком-слишком много. Меня беспокоит, что я думаю слишком медленно.

Задача:

Пилообразная последовательность
(Время: 1 сек. Память: 16 Мб Сложность: 38%)

Последовательность a1, a2, a3, … , an-1, an называется пилообразной, если она удовлетворяет одному из следующих условий:
1) a1 < a2 > a3 < … > an-1 < an
2) a1 > a2 < a3 > … < an-1 > an

Дана числовая последовательность. Требуется определить длину самой длинной ее пилообразной непрерывной подпоследовательности.
Входные данные

В первой строке входного файла INPUT.TXT записано натуральное число N – количество элементов последовательности. Во второй строке файла через пробел записаны N элементов целочисленной последовательности {ai}. Ограничения: N<106, |ai| < 32000.
Выходные данные

В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — длину самой длиной непрерывной пилообразной подпоследовательности.
Примеры
№ INPUT.TXT OUTPUT.TXT
1. INPUT.TXT
3
1 2 3
OUTPUT.TXT
2
2.
INPUT.TXT
12
5 7 6 3 4 2 7 1 8 9 4 5
OUTPUT.TXT
7
3.
INPUT.TXT
5
1 -2 3 -4 5
OUTPUT.TXT
5
Ответ: Дорога возникает под ногами идущего. На данном этапе Вам нужно больше опыта, а, соответственно, больше практики.
Приведу пример. Помню, когда я еще учился в универе на 2-ом курсе, меня собирались отправить на олимпиаду по программированию, а для подготовки дали несколько задач. Первой же задачей было разложение числа на простые множители. Я убил на нее 40 минут и справился с решением только с помощью 6 переменных и оператора GOTO. Как вы догадываетесь, олимпиаду я не выиграл Мир программирования только открывался передо мной, я просто фанател от него. Степень моего отчаяния и недовольства собой была безгранична от осознания того, насколько я плох в том, что мне действительно нравилось. Но время шло, я читал книги, учился писать код, решал какие-то примеры, знакомился с новыми нюансами. Примерно через полгода я вспомнил об той задачке, нашел листок с условием и решил опробовать себя. Насколько я помню, справился минут за 5 и обошелся двумя переменными. Прогресс был на лицо. Пусть вас не пугает ваша скорость решения задач, при должном упорстве вы успеете набить в этом руку.
Вопрос: Переход назад в WebBrowser без ошибки

Доброго всем дня!
Не пользовался и нет времени разбираться, а задача стоит. Среда программирования Embarcaderro 2010.
Если был переход по ссылке, то WebBrowser1->GoBack() срабатывает на ура. Но ежели не было перехода, то при выполнении этого кода вылетает ошибка OleException. Как сделать подобную проверку - был уже переход или нет?
Ответ:
NDAleksey
Доброго всем дня!
Не пользовался и нет времени разбираться, а задача стоит. Среда программирования Embarcaderro 2010.
Если был переход по ссылке, то WebBrowser1->GoBack() срабатывает на ура. Но ежели не было перехода, то при выполнении этого кода вылетает ошибка OleException. Как сделать подобную проверку - был уже переход или нет?


Лови exception, и игнорируй, делов то...