gmail dot trick generator но с ограниченным кол-во точек до 4

isaacfks

Пользователь
Регистрация
29.05.2023
Сообщения
90
Благодарностей
11
Баллы
8
всем привет. Скажу сразу, тут дело не в зенке но частично к её задачам это относится, но я знаю что здесь есть люди которые могут с этим помочь
Дело в том, что, все генераторы точек подобные gmail dot trick generator генерируют количество точек в зависимости от количества символов, сколько точек влезет столько и генерирует. Мне такой вариант не подходит, из-за особенности сайта в котором регистрируюсь, и поэтому, мне очень нужен генератор который будет генерировать в логине почты, независимо от количества символов, конкретно до 4 точек и не больше. Подскажите, пожалуйста, чем можете, как можно решить эту проблему? Кто разбирается, может переделает этот генератор под эти критерии, или скинет любой другой способ. Мне уже предлагали один вариант, и он выглядит так
Можно получить все логины, который сгенерирует генератор, а потом отобрать только те, которые содержат не более 4 точек
этот вариант вполне подходит, но какими способами это можно реализовать? я пока не нашел прямого решения проблемы, может кто-нибудь это сделает быстрее
 
  • Спасибо
Реакции: Alexmd

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
этот вариант вполне подходит, но какими способами это можно реализовать? я пока не нашел прямого решения проблемы, может кто-нибудь это сделает быстрее
Например так:
C#:
string email = project.Variables["test"].Value;

int dotsLimit = 4;
int dotsCounter = 0;

for (int i = 0;; i++) {
    if (email[i] == '.') {
        dotsCounter++;
    } else if (email[i] == '@') {
        if (dotsCounter > dotsLimit) {
            throw new Exception("Превышен лимит точек.");
        }
        break;
    }
    if (i == email.Length - 1) {
        throw new Exception("Символ '@' не найден в строке email'а.");
    }
}
return dotsCounter;
test - переменная в PM.
 
  • Спасибо
Реакции: Alexmd и isaacfks

isaacfks

Пользователь
Регистрация
29.05.2023
Сообщения
90
Благодарностей
11
Баллы
8
Например так:
C#:
string email = project.Variables["test"].Value;

int dotsLimit = 4;
int dotsCounter = 0;

for (int i = 0;; i++) {
    if (email[i] == '.') {
        dotsCounter++;
    } else if (email[i] == '@') {
        if (dotsCounter > dotsLimit) {
            throw new Exception("Превышен лимит точек.");
        }
        break;
    }
    if (i == email.Length - 1) {
        throw new Exception("Символ '@' не найден в строке email'а.");
    }
}
return dotsCounter;
test - переменная в PM.
сорян, но я не догоняю, как этот код можно реализовать? надо, чтобы я вводил в какое то окошко логин своей почты и мне выбивало все варианты проставления точек, но чтобы не больше 4 одновременно. примерно такое.
что-то вроде этого
107845
 

isaacfks

Пользователь
Регистрация
29.05.2023
Сообщения
90
Благодарностей
11
Баллы
8
Например так:
C#:
string email = project.Variables["test"].Value;

int dotsLimit = 4;
int dotsCounter = 0;

for (int i = 0;; i++) {
    if (email[i] == '.') {
        dotsCounter++;
    } else if (email[i] == '@') {
        if (dotsCounter > dotsLimit) {
            throw new Exception("Превышен лимит точек.");
        }
        break;
    }
    if (i == email.Length - 1) {
        throw new Exception("Символ '@' не найден в строке email'а.");
    }
}
return dotsCounter;
test - переменная в PM.
всё, в этом разобрался. как теперь удалить полученный результат из документа? пока не разобрался, может кто подскажет. за код отдельное, огромнейшее спасибо
107857
 
Последнее редактирование:

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
Это я удачно зашел на форум и попал на интересную задачку.

Набросал шаблон.

В настройках указываем почту и количество точек. Рядом с проектом создается файл со всеми вариантами генерации, или отсортированный по заданному количеству точек.
Шаблон открытый. Минимальная версия 7.1.3.0
 

Вложения

Последнее редактирование:

isaacfks

Пользователь
Регистрация
29.05.2023
Сообщения
90
Благодарностей
11
Баллы
8
Это я удачно зашел на форум и попал на интересную задачку.

Набросал шаблон.

В настройках указываем почту и количество точек. Рядом с проектом создается файл со всеми вариантами генерации, или отсортированный по заданному количеству точек.
Шаблон открытый. Минимальная версия 7.1.3.0
вот решение. проблема больше неактуальна. спасибо
 

isaacfks

Пользователь
Регистрация
29.05.2023
Сообщения
90
Благодарностей
11
Баллы
8
Это я удачно зашел на форум и попал на интересную задачку.

Набросал шаблон.

В настройках указываем почту и количество точек. Рядом с проектом создается файл со всеми вариантами генерации, или отсортированный по заданному количеству точек.
Шаблон открытый. Минимальная версия 7.1.3.0
правда трудно даётся ему, при обработке 25 символов)
107860
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 237
Благодарностей
573
Баллы
113
Обратился к ChatGpt, тоже накидал решение.

В общий код:
C#:
public static void GenerateCombinations(string remaining, string current, int dots, int maxDots, List<string> combinations)
        {
               if (remaining.Length == 0)
                {
                    combinations.Add(current);
                    return;
                }
                
                GenerateCombinations(remaining.Substring(1), current + remaining[0], dots, maxDots, combinations);
        
                // Добавляем точку только в случае, если это не последний символ перед @ и количество точек не превышает лимит
                if (dots < maxDots && remaining.Length > 1)
                {
                    GenerateCombinations(remaining.Substring(1), current + remaining[0] + ".", dots + 1, maxDots, combinations);
                }
        }
В кубик C#:
C#:
var email = "[email protected]";
var username = email.Split('@')[0];
var domain = email.Split('@')[1];

int maxDots = 3;

var combinations = new List<string>();
ZennoLab.OwnCode.CommonCode.GenerateCombinations(username, "", 0, maxDots, combinations);

foreach (var comb in combinations)
{
    project.Lists["All"].Add(comb + "@" + domain);
}
В итоге в списке "All" будут комбинации. Вроде генерирует нормально. И не грузит проц...
 
  • Спасибо
Реакции: isaacfks и Alexmd

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
Надо думать немножечко и представлять объем возможных комбинаций при логине в 25 символов. 16КК вариантов не хотели получить при таком раскладе весом
107870
?
Естественно, оно повиснет при недостаточном объеме памяти. И я скажу больше: ни один сервис не вывезет столько.
Таким количеством почт можно всю жизнь работать и не все не истратить. Даже в голову не пришло, что кто-то станет такие длинные почты размножать)
Обратился к ChatGpt, тоже накидал решение.

В общий код:
C#:
public static void GenerateCombinations(string remaining, string current, int dots, int maxDots, List<string> combinations)
        {
               if (remaining.Length == 0)
                {
                    combinations.Add(current);
                    return;
                }
           
                GenerateCombinations(remaining.Substring(1), current + remaining[0], dots, maxDots, combinations);
   
                // Добавляем точку только в случае, если это не последний символ перед @ и количество точек не превышает лимит
                if (dots < maxDots && remaining.Length > 1)
                {
                    GenerateCombinations(remaining.Substring(1), current + remaining[0] + ".", dots + 1, maxDots, combinations);
                }
        }
В кубик C#:
C#:
var email = "[email protected]";
var username = email.Split('@')[0];
var domain = email.Split('@')[1];

int maxDots = 3;

var combinations = new List<string>();
ZennoLab.OwnCode.CommonCode.GenerateCombinations(username, "", 0, maxDots, combinations);

foreach (var comb in combinations)
{
    project.Lists["All"].Add(comb + "@" + domain);
}
В итоге в списке "All" будут комбинации. Вроде генерирует нормально. И не грузит проц...
Этот код генерирует далеко не все комбинации. Запустил, получил всего 64 варианта. А должно быть 128. Это легко высчитывается по формуле Math.Pow(2, "somemail".Length-1)

Специально замерил скорость генерации списка.
На адекватных почтах работает адекватно

107868

107871

Шаблон проц не грузит. Ему нужна память.

Однако, логин из 31 символа повесил и мою машину. Памяти не хватило.
1685739237067.png

PS: С удовольствием гляну код, который будет делать это намного лучше. Позову-ка я @BAZAg.. может, еще @Radzhab и @RoyalBank. Простите, если кого не позвал, это не значит, что можно пройти мимо ;-)
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: isaacfks

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 237
Благодарностей
573
Баллы
113
Надо думать немножечко и представлять объем возможных комбинаций при логине в 25 символов. 16КК вариантов не хотели получить при таком раскладе весом Посмотреть вложение 107870?
Естественно, оно повиснет при недостаточном объеме памяти. И я скажу больше: ни один сервис не вывезет столько.
Таким количеством почт можно всю жизнь работать и не все не истратить. Даже в голову не пришло, что кто-то станет такие длинные почты размножать)

Этот код генерирует далеко не все комбинации. Запустил, получил всего 64 варианта. А должно быть 128. Это легко высчитывается по формуле Math.Pow(2, "somemail".Length-1)

Специально замерил скорость генерации списка.
На адекватных почтах работает адекватно

Посмотреть вложение 107868
Посмотреть вложение 107871
Шаблон проц не грузит. Ему нужна память.

Однако, логин из 31 символа повесил и мою машину. Памяти не хватило.
Посмотреть вложение 107866

PS: С удовольствием гляну код, который будет делать это намного лучше. Позову-ка я @BAZAg.. может, еще @Radzhab и @RoyalBank. Простите, если кого не позвал, это не значит, что можно пройти мимо ;-)
Может, если не хранить список этих емайлов в памяти, писать в файлик построчно - будет меньше нагрузки?
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 237
Благодарностей
573
Баллы
113
Попробовать так, может быть?
C#:
var st = System.Diagnostics.Stopwatch.StartNew();
var email = "[email protected]";
var username = email.Split('@')[0];
var domain = email.Split('@')[1];
var maxDots = 4;
string path = @"C:\file.txt";
using (StreamWriter sw = new StreamWriter(path, true))
    {
        for (int i = 0; i < (1 << (username.Length - 1)); i++)
        {
            var newUsername = "";
            for (int j = 0; j < username.Length; j++)
            {
                newUsername += username[j];
                if (j < username.Length - 1 && (i & (1 << j)) != 0)
                {
                    newUsername += ".";
                }
            }
            if (newUsername.Count(c => c == '.') <= maxDots)
            sw.WriteLine(newUsername + "@" + domain);
        }
        sw.Flush();
        sw.Close();
    }
project.SendInfoToLog("Time Elapsed: " + st.Elapsed.ToString(), true);
У меня порядка 18 секунд заняло, память не ело.
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)