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

  • Автор темы Автор темы isaacfks
  • Дата начала Дата начала

isaacfks

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

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

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

Вложения

Последнее редактирование:
Это я удачно зашел на форум и попал на интересную задачку.

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

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

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

В настройках указываем почту и количество точек. Рядом с проектом создается файл со всеми вариантами генерации, или отсортированный по заданному количеству точек.
Шаблон открытый. Минимальная версия 7.1.3.0
правда трудно даётся ему, при обработке 25 символов)
107860
 
Обратился к 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 = "somemail@gmail.com";
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
Надо думать немножечко и представлять объем возможных комбинаций при логине в 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 = "somemail@gmail.com";
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
Надо думать немножечко и представлять объем возможных комбинаций при логине в 25 символов. 16КК вариантов не хотели получить при таком раскладе весом Посмотреть вложение 107870?
Естественно, оно повиснет при недостаточном объеме памяти. И я скажу больше: ни один сервис не вывезет столько.
Таким количеством почт можно всю жизнь работать и не все не истратить. Даже в голову не пришло, что кто-то станет такие длинные почты размножать)

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

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

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

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

PS: С удовольствием гляну код, который будет делать это намного лучше. Позову-ка я @BAZAg.. может, еще @Radzhab и @RoyalBank. Простите, если кого не позвал, это не значит, что можно пройти мимо ;-)
Может, если не хранить список этих емайлов в памяти, писать в файлик построчно - будет меньше нагрузки?
 
Попробовать так, может быть?
C#:
Развернуть Свернуть Копировать
var st = System.Diagnostics.Stopwatch.StartNew();
var email = "somemailsomemailsomemail@gmail.com";
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 секунд заняло, память не ело.
 

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