powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничный pwdgen
25 сообщений из 188, страница 3 из 8
Тяпничный pwdgen
    #38808612
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, SashaMercury

Согласно стандарту, указатель может указывать либо в аллоцированный объект, либо сразу за (в следующий за объектом байт).
(Если платформа не позволяет хранить указатели за пределы выделенной памяти, то имплементация должна выделять на 1 байт больше)

Все операции, в результате которых получаются указатели за пределами какого либо выделенного объекта (перед либо более 1 байта после) - это UB. Как и сравнение <, > с такими указателями



SashaMercuryВы можете проверить его на скорость пожалуйста ?
Не, мне уже некогда. Разрешаю вам
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38808650
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВообщем ладно, не хватало чтобы мы ещё тут поругались.
Не будем мы ругаться, не переживай :)

Я тебя к другому пытаюсь подвести. У меня такое впечатление что ты сам себе поставил ограничение "указатель = массив" и пользуешься указателями только как альтернативным синтаксисом массивов. Но указатель это больше чем массив.
Например твой код выше
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
char* set_next_string(char* cur, size_t p)
{
	while (*(cur + p - 1) == 'z')
		*(cur + p-- - 1) = 'a';
	if (p == 0)
		return NULL;
	
	*(cur + p - 1) += 1;
	return cur;
}


По сути нормально писать так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
char* set_next_string(char* start, size_t size)
{
	while (start[size - 1] == 'z')
		start[size-- - 1] = 'a';
	if (size == 0)
		return NULL;
	
	start[size - 1] += 1;
	return start;
}


Согласись что так лучше читается. Дополнительно заменил cur на start, т.к. название должно соответствовать смыслу. cur от current.
Это уже так, придирки, суть в том что этот код и твой скомпилируются в одно и тоже, т.е. с кучей лишних вычислений.

С указателями можно сделать тоже самое, но меньшим количеством операций:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
char* set_next_string(char* start, size_t size)
{
	char* cur = start + size - 1;
	while (*cur == 'z') 
		*cur-- = 'a';

	if (cur < start) 
		return NULL;
	
	(*cur)++;
	return start;
}


заметь на сколько меньше разных + - по сравнению с твоим кодом. Можно еще переделать чтобы в параметрах был указатель на конец строки (start + size - 1), тогда его не надо будет считать каждый раз.



В данном случае еще нет лишних умножений, т.к. sizeof(char) = 1, если тип будет не char, а, например, int, то в реальности будет следующее, например код:
Код: plaintext
1.
2.
3.
4.
int a[10];
for(int i = 10 - 1; i >= 0; i--) {
    printf("%d\n", *(a + i));
}


Реальные вычисления на каждом проходе цикла:
1. уменьшение i
2. вычисление адреса (a + i). Происходит так: адрес a + i * 4 байта (4 это sizeof(int))

если переписать указателями, то будет так
Код: plaintext
1.
2.
3.
for(int* i = a + 10 - 1; i >= a; i--) {
    printf("%d\n", *i);
}


тут только i-- что в реале произойдет как i -= 4 байта

Вот в чем одно из основных преимуществ указателей над массивами.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38808755
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury, у тебя ошибка в коде set_next_string(), в т.ч. в моих реинкарнациях.
Запусти этот код и подумай как исправить.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
int main(int argc, char* argv[])
{
	char buf[] = "zzz";
	printf("%c\n", buf[0]);
	set_next_string(&buf[1], 2);
	printf("%c\n", buf[0]);
	system("pause");
	return 0;
}


Нехорошая ошибка, т.к. будет происходить очень редко, поэтому ловить такие ошибки очень тяжело.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38808932
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фух бротва. Сори что задержался. Пока неасилил свои пожелания по диапазонам n-m.

Вот что есть на данный момент. Можете править Just For Fun.

Код: plaintext
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.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* 17.11.2014 (Mayton) - added stuped startup. WTF? Pwd generator! Just for fun. */
/*                       TODO: Add capital Alpha, and Numeric support            */
/*                       TODO: Make marginal tests. Overflow. Plattform compatibility */


static char *buf;

int pa(char *a,int asize,int m,int M){
	if (m<M){
		int i;
		for(i=0;i<asize;i++){
			buf[m]=a[i];
			pa(a,asize,m + 1, M);
		}
	} else {
		buf[M]='\0';
		// TODO: Remove slowpok printf! Improove speed! 
		printf("%s\n",buf);
        }
}

int paLaunch(char *a,int m){
	pa(a,strlen(a),0,m);
}


// TODO: Support Unicde. Support National codepages.

char *alpha        = "abcdefghijklmnopqrstuvwxyz";

char *capitalAlpha = "ABCDEFGHIJLKMNOPQRSTUVWXWY";

char *num          = "0123456789";




int main(int argc,char **arg, char **env){
                                                                                                a
	if (argc==1) {
		fprintf(stderr,"\nPassword Generation 1.0 (c) Mayton and SQL.RU. Written in 'C' :)\n");
		fprintf(stderr,"Special thnx to: Sasha Mercury, Anatoly Moskovsky, Dima T.\n");
		fprintf(stderr,"\nUsage: pwdgen [m] \n\n");
		return -1;
	} else {
		int m = atoi(arg[1]);
		if (m>0){
			buf=malloc(22);
			paLaunch(alpha,m);
			free(buf);
			return 0;
		} else {
			fprintf(stderr,"\nArgument cannot be less than 0 or NaN!\n");
			return -2;
		}
		
	}

}                                                       
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38808945
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

а чё ты с юникодом задумал?
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38808946
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некоторые пассажиры колотят национальные буквочки.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38808954
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНекоторые пассажиры колотят национальные буквочки.
не беспокоит, что их несколько десятков тысяч?
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38808958
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно бох с ним. Не надо Юникод. Прошу потестить у кого под рукой есть Пингвин и Чорт в кедах.

А я пока на Windows7+GCC на ноуте.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809033
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

Код: plaintext
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.
char sym_set[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJLKMNOPQRSTUVWXWY0123456789";

char num[256];
size_t len;

size_t sym_set_size;
size_t min_len = 8;
size_t max_len = 8;

//////////////////////////////////////////
void add_num()
{
    size_t i = 0;
    bool carry = false;

    do{
        num[i]++;
        if(num[i] > sym_set_size)
        {
            num[i] = 1;
            carry = true;
        }
        else
        {
            carry = false;
        }

        i++;
    }while(carry);


    if(i > len) len=i;
}
//////////////////////////////////////////
void print_num()
{
    size_t i = 0;
    while(num[i])
        cout<<sym_set[ num[i++] - 1 ];

    cout<<endl;
}
//////////////////////////////////////////
int main()
{
    memset(num, 0, sizeof(num));
    memset(num, 1, min_len);
    len = min_len;
    sym_set_size = strlen(sym_set);

    while(len <= max_len)
    {
            print_num();
            add_num();
    }

    return 0;
}
//////////////////////////////////////////


...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809191
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВот что есть на данный момент. Можете править Just For Fun.
Сам правь, не компилируется.

ИМХУ Рекурсия тут хорошо подходит, но накладных расходов у нее много, не производительно это.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809244
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу под "main" лишняя буковка. Ладно хрен с ним. Допилю еще два alphabet - выложу.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809401
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хех... запилил алфавиты. Взял названия из POSIX-like шаблонов регулярок. Теперь мысль - комбинировать наборы.
Пунктуации + Цифирки. Или наоборот. Или обеспечить начало с альфа-символа а потом цифирки.

Вобщем тестируйте. Предлагайте.

Код: plaintext
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.
119.
120.
121.
122.
123.
124.
125.
126.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* 17.11.2014 (Mayton) - added stuped startup. WTF? Pwd generator! Just for fun. */
/*                       TODO: Make marginal tests. Overflow. Plattform compatibility */
/* 18.11.2014 (Mayton) - added POSIX-like Character classes. Fixed some bugs. Improoved code design */
/*                       TODO: Add aility to Make multiple choose of charsets. Make charsets unique */
/*                       TODO: Add interval of length like m-n */


static char *buf;

static char *alphabet;

int pa(char *a,int asize,int m,int M){
	if (m<M){
		int i;
		for(i=0;i<asize;i++){
			buf[m]=a[i];
			pa(a,asize,m + 1, M);
		}
	} else {
		buf[M]='\0';
		puts(buf);
        }
}

int paLaunch(char *a,int m){
	pa(a,strlen(a),0,m);
}


char *alpha        = "abcdefghijklmnopqrstuvwxyz";

char *upper        = "ABCDEFGHIJLKMNOPQRSTUVWXWY";

char *xdigit       = "0123456789ABCDEF";

char *digit        = "0123456789";

char *punct        = "!@#$%^&*()-=_+,./?~`\\|";

// TODO: Make unique. For ex: ALPHA is union of LOWER and UPPER.

/*#define ALNUM 0x0
#define ALPHA 0x1
#define LOWER 0x2
#define PUNCT 0x3
#define UPPER 0x4
#define XDIGIT 0x5
#define DIGIT 0x6*/

int main(int argc,char **arg, char **env){
                                                                                                
	if (argc==1) {
		fprintf(stderr,"\nPassword Generation 1.1 (c) Mayton and SQL.RU. Written in 'C' :)\n");
		fprintf(stderr,"Special thnx to: Sasha Mercury, Anatoly Moskovsky, Dima T.\n");
		fprintf(stderr,"\nUsage: pwdgen [m] [options..] \n");
		fprintf(stderr,"\nWhere: options:\n");
		fprintf(stderr,"\n       alnum  - Alphanumeric characters [A..z] and [a..z] and [0..9]");
		fprintf(stderr,"\n       alpha  - Alphabetic characters [A..z] and [a..z]");
		fprintf(stderr,"\n       lower  - Lowercase alphabetic characters [a..z]");
		fprintf(stderr,"\n       punct  - Punctuation characters [,!?..]");
		fprintf(stderr,"\n       upper  - Uppercase alphabetic characters [A..Z]");
		fprintf(stderr,"\n       xdigit - Hexidecimal characters");
		fprintf(stderr,"\n       digit  - Numeric digits [0..9]");
		fprintf(stderr,"\n");
		return -1;
	} else {
		int m = 0;
		m = atoi(arg[1]);
		if (m > 0){ 
			if (argc==2) {
		        	buf = malloc(m + 1);
				paLaunch(alpha,m);
				free(buf);
				return 0;
                        } else {
				int optionDetect=0;
				alphabet = malloc(strlen(alpha)+strlen(upper)+strlen(xdigit)+strlen(digit)+strlen(punct)+1);
				alphabet[0]='\0';
				if (0==strcmp(arg[2],"lower")){
					strcat(alphabet,alpha);
					optionDetect=1;
				} else if (0==strcmp(arg[2],"alnum")){
					strcat(alphabet,alpha);
					strcat(alphabet,upper);
					strcat(alphabet,digit);
					optionDetect=1;
				} else if (0==strcmp(arg[2],"punct")){
					strcat(alphabet,punct);
					optionDetect=1;
				} else if (0==strcmp(arg[2],"alpha")){
					strcat(alphabet,alpha);
					strcat(alphabet,upper);
					optionDetect=1;
				} else if (0==strcmp(arg[2],"digit")){
					strcat(alphabet,digit);
					optionDetect=1;
				} else if (0==strcmp(arg[2],"upper")){
					strcat(alphabet,upper);
					optionDetect=1;
				} else if (0==strcmp(arg[2],"xdigit")){
					strcat(alphabet,xdigit);
					optionDetect=1;
				}

				if (!optionDetect) {
					fprintf(stderr,"Unrecognized option!");
					return -3;
				}
		        	buf = malloc(m + 1);
				paLaunch(alphabet,m);
				free(buf);
				free(alphabet);
				return 0;
			}
		} else {
			fprintf(stderr,"\nArgument cannot be less than 0 or not a number!\n");
			return -2;
		}
		
	}

}                            
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809450
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyDima T, SashaMercury

Согласно стандарту, указатель может указывать либо в аллоцированный объект, либо сразу за (в следующий за объектом байт).
(Если платформа не позволяет хранить указатели за пределы выделенной памяти, то имплементация должна выделять на 1 байт больше)

Все операции, в результате которых получаются указатели за пределами какого либо выделенного объекта (перед либо более 1 байта после) - это UB. Как и сравнение <, > с такими указателями



SashaMercuryВы можете проверить его на скорость пожалуйста ?
Не, мне уже некогда. Разрешаю вам

по сути, то что я и говорил. Сегодня думал, а возможно ли вообще написать функцию, которая определяет принадлежит ли данный адрес, адресам выделенного участка памяти. Вероятно нельзя(возможно только полным перебором всех адресов, и то не факт)
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809469
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryвозможно ли вообще написать функцию, которая определяет принадлежит ли данный адрес, адресам выделенного участка памятипамять линейна, вообще то. Берёшь в руки операторы сравнения, начало и конец выделенного участка и тестируемый указатель, и вуаля! - функция написана за 4 секунды )))
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809475
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSashaMercuryВообщем ладно, не хватало чтобы мы ещё тут поругались.
Не будем мы ругаться, не переживай :)

Я тебя к другому пытаюсь подвести. У меня такое впечатление что ты сам себе поставил ограничение "указатель = массив" и пользуешься указателями только как альтернативным синтаксисом массивов. Но указатель это больше чем массив.
Например твой код выше
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
char* set_next_string(char* cur, size_t p)
{
	while (*(cur + p - 1) == 'z')
		*(cur + p-- - 1) = 'a';
	if (p == 0)
		return NULL;
	
	*(cur + p - 1) += 1;
	return cur;
}


По сути нормально писать так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
char* set_next_string(char* start, size_t size)
{
	while (start[size - 1] == 'z')
		start[size-- - 1] = 'a';
	if (size == 0)
		return NULL;
	
	start[size - 1] += 1;
	return start;
}


Согласись что так лучше читается. Дополнительно заменил cur на start, т.к. название должно соответствовать смыслу. cur от current.
Это уже так, придирки, суть в том что этот код и твой скомпилируются в одно и тоже, т.е. с кучей лишних вычислений.

мне мой вариант больше нравится. Тем более size не самое хорошее название, ибо у нас сливается указатель(длинный идентификатор) и его длина. Длину лучше обозначать одним символом (это я для себя решил)

Dima TС указателями можно сделать тоже самое, но меньшим количеством операций:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
char* set_next_string(char* start, size_t size)
{
	char* cur = start + size - 1;
	while (*cur == 'z') 
		*cur-- = 'a';

	if (cur < start) 
		return NULL;
	
	(*cur)++;
	return start;
}


заметь на сколько меньше разных + - по сравнению с твоим кодом. Можно еще переделать чтобы в параметрах был указатель на конец строки (start + size - 1), тогда его не надо будет считать каждый раз.

Согласен, тут ваш код лучше. Спасибо :)
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809483
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych,

не думаю так. Вы же видели, что Anatoly Moskovsky подтвердил мои рассуждения, причём сослался на стандарт. Если адрес не принадлежит тем адресам, по которым выделена память, то мы получаем undefined behaviour, потому, если мы получаем истинный результат, не факт что он действительно истинный. Хотя если получаем ложный, то наверняка знаем что он ложный. Интересное свойство. Как оно правильно называется в IT ?
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809507
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSashaMercury, у тебя ошибка в коде set_next_string(), в т.ч. в моих реинкарнациях.
Запусти этот код и подумай как исправить.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
int main(int argc, char* argv[])
{
	char buf[] = "zzz";
	printf("%c\n", buf[0]);
	set_next_string(&buf[1], 2);
	printf("%c\n", buf[0]);
	system("pause");
	return 0;
}


Нехорошая ошибка, т.к. будет происходить очень редко, поэтому ловить такие ошибки очень тяжело.

завтра на нормальном мониторе проверю уже.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809550
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryegorych,

не думаю так. Вы же видели, что Anatoly Moskovsky подтвердил мои рассуждения, причём сослался на стандарт. Если адрес не принадлежит тем адресам, по которым выделена память, то мы получаем undefined behaviour, потому, если мы получаем истинный результат, не факт что он действительно истинный. Хотя если получаем ложный, то наверняка знаем что он ложный. Интересное свойство. Как оно правильно называется в IT ?
Наука есть такая. Fuzzy logic. Нечёткая логика. В ней обычно оперируют понятиями истин с вероятностью.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809570
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИМХУ Рекурсия тут хорошо подходит, но накладных расходов у нее много, не производительно это.
Два дня думаю над сохранением состояния. В случае если юзер нажал Ctrl+C или тикнул таймер (раз
в минуту) приложение должно писать состояние своей FSM в какой-нить файл типа
/var/run/pwdgen.fsm.

При следующем старте с указанием опции --continue процесс должен возобновиться не с нуля
а с этого состояния. Причём небольшой "нахлёст" допускается. Для pwdgen это не страшно.
Главное - поскипать миллиарды уже отработанных состояний и не потерять работу двух-трех
суток.

Для варианта с рукотворным Stack или Queue я знаю как это сделать. Правда придётся полностью
переколбасить алгоритм и рекуррентную процедуру pa(processAlphabet) развернуть в FSM.
Мне это не улыбается. Мне нравится рекурсия и скорость работы пока устраивает. Другое
дело что инстанциировать "рекурсию в определённом" состоянии я пока не знаю как.

Вобщем это пока предмет основных моих размышлений.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809645
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, изучил немного ваш код. А где перебор то ?) или пока ещё нет
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809651
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima TИМХУ Рекурсия тут хорошо подходит, но накладных расходов у нее много, не производительно это.
Два дня думаю над сохранением состояния. В случае если юзер нажал Ctrl+C или тикнул таймер (раз
в минуту) приложение должно писать состояние своей FSM в какой-нить файл типа
/var/run/pwdgen.fsm.


речь идёт о том что варианты будут генерироваться не все сразу, а за несколько запусков ?
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809661
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurymaytonпропущено...

Два дня думаю над сохранением состояния. В случае если юзер нажал Ctrl+C или тикнул таймер (раз
в минуту) приложение должно писать состояние своей FSM в какой-нить файл типа
/var/run/pwdgen.fsm.


речь идёт о том что варианты будут генерироваться не все сразу, а за несколько запусков ?
Речь в том что это не просто утилита. А это скорее всего процесс. Который будет
работать долго. Не один день. И не неделю. Вот я и думаю наперёд о сохранении
расчётов.

Такой уж у меня пунктик. Думаю наперёд.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809662
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurymayton, изучил немного ваш код. А где перебор то ?) или пока ещё нет
Там всё уже есть. Это рабочий код.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809687
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значить любилям гонять бенчмарки и прочим кто в танке.

Первое. Не запускать вывод на экран. Он физически тормозит.

Второе . Запускать с выводом в файл или с выводом в пустое устройство NULL.
Счастливые обладатели Толтого Тукса или Чёрта в кедах юзают /dev/null.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38809702
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если задача сводится к тому что надо гонять генератор по кругу и иногда получать от него текущее состояние, то можно так
Код: plaintext
1.
2.
3.
4.
int64 i = START_VALUE;
while(true) {
  i++;
}



Далее при выводе считаем что i это N-ричное число, где N это количество символов в алфавите отображения, далее переводим значение в нужную систему счисления и выводим. Например: при алфавите a-z это 26-ричная система счисления, тогда значение 1234 будет "avm"

Как вариант: можно снимать текущее значение другим потоком. Можно несколько потоков запустить, а результат склеивать.

По поводу промежуточного хранения: может не заморачиваться и брать для старта какой-нибудь хэш от текущей даты/времени?

PS Только паузу надо добавить чтоб проц не спалить такой считалкой
...
Рейтинг: 0 / 0
25 сообщений из 188, страница 3 из 8
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничный pwdgen
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]