1 (изменено: Жмопель, 2017-06-11 06:10:02)

Тема: AHK: генератор Gmail адресов с точками [Решено]

Доброго времени суток!

Испробовал несколько различных генераторов. Ни один из них не справился с задачей генерации вариаций адресов с точками из одного длинного email-адреса (например из "abcdefghijklmnopqrstuvwxyz" – 26 символов). По этой причине захотел написать свой генератор на AHK, но совершенно не представляю с чего начать, по какому алгоритму реализовать подобное. Прошу вас натолкнуть меня на мысль

P.S.
На всякий случай поясню, что подразумеваю. Есть email-адрес, например "12345@gmail.com". Генератор адресов с точкой, например как этот, из "12345" создаёт список:

+ открыть спойлер

12345@gmail.com
1234.5@gmail.com
123.45@gmail.com
123.4.5@gmail.com
12.345@gmail.com
12.34.5@gmail.com
12.3.45@gmail.com
12.3.4.5@gmail.com
1.2345@gmail.com
1.234.5@gmail.com
1.23.45@gmail.com
1.23.4.5@gmail.com
1.2.345@gmail.com
1.2.34.5@gmail.com
1.2.3.45@gmail.com
1.2.3.4.5@gmail.com

2 (изменено: stealzy, 2017-06-10 20:18:07)

Re: AHK: генератор Gmail адресов с точками [Решено]

В каких целях хотите использовать?
И зачем вам 33 тысячи адресов?

3 (изменено: Жмопель, 2017-06-10 21:23:20)

Re: AHK: генератор Gmail адресов с точками [Решено]

В личных, разумеется

stealzy пишет:

И зачем вам 33 тысячи адресов?

33 миллиона. Но после отсеивания "лишних" их получится совсем немного. Лишние – с тремя и более точками в адресе, которые могут не приниматься в качестве валидного email-адреса.

Добавлено позже...
Взял JS-исходник генератора с того сайта по ссылке в первом посте. Сразу не подумал, что так можно
Пример реализации отличный, хоть и на неизвестном мне языке, буду изучать.

+ открыть спойлер
self.addEventListener('message', function(e) {
    var data = e.data;
    generateEmails(data); }, false);

function generateEmails(username) {
    var username_length = username.length;
    var combinations = Math.pow(2, username_length - 1);
    for (i = 0; i < combinations; i++) {
        var bin = decbin(i, username_length - 1);
        var full_email = "";
        for (j = 0; j < (username_length - 1); j++) { full_email += username[j];
            if (bin[j] == 1) { full_email += "."; } }
        full_email += username[j] + "@gmail.com\n";
        self.postMessage(full_email);
    }
}

function decbin(dec, length) {
    var out = "";
    while (length--)
        out += (dec >> length) & 1;
    return out;
}

4 (изменено: stealzy, 2017-06-10 23:33:08)

Re: AHK: генератор Gmail адресов с точками [Решено]

Да, я попутал порядок, цифру посчитал как раз из js исходника.
Перевести алгоритм на ahk получилось .
Файлик кстати получается немаленький: 3 гига в utf или полтора в CP кодировке.
В архиве может занимать до 50 раз меньше места, но ждать придется огого .
AHK обрабатывает около 60 тысяч комбинаций в секунду, но уверен исполнение оригинального кода на node.js будет на порядок быстрее.

5 (изменено: stealzy, 2017-06-10 23:43:23)

Re: AHK: генератор Gmail адресов с точками [Решено]

При ограничени в 2 точки алгоритм можно наверно упростить, но я просто добавил условие в оригинальный.
Ваш список из 26*(26-1)/2+1 адресов:

abcdefghijklmnopqrstuvwxyz@gmail.com
a.bcdefghijklmnopqrstuvwxyz@gmail.com
abcdefghijklmnopqrstuvwxy.z@gmail.com
a.bcdefghijklmnopqrstuvwxy.z@gmail.com
abcdefghijklmnopqrstuvwx.yz@gmail.com
a.bcdefghijklmnopqrstuvwx.yz@gmail.com
abcdefghijklmnopqrstuvwx.y.z@gmail.com
abcdefghijklmnopqrstuvw.xyz@gmail.com
a.bcdefghijklmnopqrstuvw.xyz@gmail.com
abcdefghijklmnopqrstuvw.xy.z@gmail.com
abcdefghijklmnopqrstuvw.x.yz@gmail.com
abcdefghijklmnopqrstuv.wxyz@gmail.com
a.bcdefghijklmnopqrstuv.wxyz@gmail.com
abcdefghijklmnopqrstuv.wxy.z@gmail.com
abcdefghijklmnopqrstuv.wx.yz@gmail.com
abcdefghijklmnopqrstuv.w.xyz@gmail.com
abcdefghijklmnopqrstu.vwxyz@gmail.com
a.bcdefghijklmnopqrstu.vwxyz@gmail.com
abcdefghijklmnopqrstu.vwxy.z@gmail.com
abcdefghijklmnopqrstu.vwx.yz@gmail.com
abcdefghijklmnopqrstu.vw.xyz@gmail.com
abcdefghijklmnopqrstu.v.wxyz@gmail.com
abcdefghijklmnopqrst.uvwxyz@gmail.com
a.bcdefghijklmnopqrst.uvwxyz@gmail.com
abcdefghijklmnopqrst.uvwxy.z@gmail.com
abcdefghijklmnopqrst.uvwx.yz@gmail.com
abcdefghijklmnopqrst.uvw.xyz@gmail.com
abcdefghijklmnopqrst.uv.wxyz@gmail.com
abcdefghijklmnopqrst.u.vwxyz@gmail.com
abcdefghijklmnopqrs.tuvwxyz@gmail.com
a.bcdefghijklmnopqrs.tuvwxyz@gmail.com
abcdefghijklmnopqrs.tuvwxy.z@gmail.com
abcdefghijklmnopqrs.tuvwx.yz@gmail.com
abcdefghijklmnopqrs.tuvw.xyz@gmail.com
abcdefghijklmnopqrs.tuv.wxyz@gmail.com
abcdefghijklmnopqrs.tu.vwxyz@gmail.com
abcdefghijklmnopqrs.t.uvwxyz@gmail.com
abcdefghijklmnopqr.stuvwxyz@gmail.com
a.bcdefghijklmnopqr.stuvwxyz@gmail.com
abcdefghijklmnopqr.stuvwxy.z@gmail.com
abcdefghijklmnopqr.stuvwx.yz@gmail.com
abcdefghijklmnopqr.stuvw.xyz@gmail.com
abcdefghijklmnopqr.stuv.wxyz@gmail.com
abcdefghijklmnopqr.stu.vwxyz@gmail.com
abcdefghijklmnopqr.st.uvwxyz@gmail.com
abcdefghijklmnopqr.s.tuvwxyz@gmail.com
abcdefghijklmnopq.rstuvwxyz@gmail.com
a.bcdefghijklmnopq.rstuvwxyz@gmail.com
abcdefghijklmnopq.rstuvwxy.z@gmail.com
abcdefghijklmnopq.rstuvwx.yz@gmail.com
abcdefghijklmnopq.rstuvw.xyz@gmail.com
abcdefghijklmnopq.rstuv.wxyz@gmail.com
abcdefghijklmnopq.rstu.vwxyz@gmail.com
abcdefghijklmnopq.rst.uvwxyz@gmail.com
abcdefghijklmnopq.rs.tuvwxyz@gmail.com
abcdefghijklmnopq.r.stuvwxyz@gmail.com
abcdefghijklmnop.qrstuvwxyz@gmail.com
a.bcdefghijklmnop.qrstuvwxyz@gmail.com
abcdefghijklmnop.qrstuvwxy.z@gmail.com
abcdefghijklmnop.qrstuvwx.yz@gmail.com
abcdefghijklmnop.qrstuvw.xyz@gmail.com
abcdefghijklmnop.qrstuv.wxyz@gmail.com
abcdefghijklmnop.qrstu.vwxyz@gmail.com
abcdefghijklmnop.qrst.uvwxyz@gmail.com
abcdefghijklmnop.qrs.tuvwxyz@gmail.com
abcdefghijklmnop.qr.stuvwxyz@gmail.com
abcdefghijklmnop.q.rstuvwxyz@gmail.com
abcdefghijklmno.pqrstuvwxyz@gmail.com
a.bcdefghijklmno.pqrstuvwxyz@gmail.com
abcdefghijklmno.pqrstuvwxy.z@gmail.com
abcdefghijklmno.pqrstuvwx.yz@gmail.com
abcdefghijklmno.pqrstuvw.xyz@gmail.com
abcdefghijklmno.pqrstuv.wxyz@gmail.com
abcdefghijklmno.pqrstu.vwxyz@gmail.com
abcdefghijklmno.pqrst.uvwxyz@gmail.com
abcdefghijklmno.pqrs.tuvwxyz@gmail.com
abcdefghijklmno.pqr.stuvwxyz@gmail.com
abcdefghijklmno.pq.rstuvwxyz@gmail.com
abcdefghijklmno.p.qrstuvwxyz@gmail.com
abcdefghijklmn.opqrstuvwxyz@gmail.com
a.bcdefghijklmn.opqrstuvwxyz@gmail.com
abcdefghijklmn.opqrstuvwxy.z@gmail.com
abcdefghijklmn.opqrstuvwx.yz@gmail.com
abcdefghijklmn.opqrstuvw.xyz@gmail.com
abcdefghijklmn.opqrstuv.wxyz@gmail.com
abcdefghijklmn.opqrstu.vwxyz@gmail.com
abcdefghijklmn.opqrst.uvwxyz@gmail.com
abcdefghijklmn.opqrs.tuvwxyz@gmail.com
abcdefghijklmn.opqr.stuvwxyz@gmail.com
abcdefghijklmn.opq.rstuvwxyz@gmail.com
abcdefghijklmn.op.qrstuvwxyz@gmail.com
abcdefghijklmn.o.pqrstuvwxyz@gmail.com
abcdefghijklm.nopqrstuvwxyz@gmail.com
a.bcdefghijklm.nopqrstuvwxyz@gmail.com
abcdefghijklm.nopqrstuvwxy.z@gmail.com
abcdefghijklm.nopqrstuvwx.yz@gmail.com
abcdefghijklm.nopqrstuvw.xyz@gmail.com
abcdefghijklm.nopqrstuv.wxyz@gmail.com
abcdefghijklm.nopqrstu.vwxyz@gmail.com
abcdefghijklm.nopqrst.uvwxyz@gmail.com
abcdefghijklm.nopqrs.tuvwxyz@gmail.com
abcdefghijklm.nopqr.stuvwxyz@gmail.com
abcdefghijklm.nopq.rstuvwxyz@gmail.com
abcdefghijklm.nop.qrstuvwxyz@gmail.com
abcdefghijklm.no.pqrstuvwxyz@gmail.com
abcdefghijklm.n.opqrstuvwxyz@gmail.com
abcdefghijkl.mnopqrstuvwxyz@gmail.com
a.bcdefghijkl.mnopqrstuvwxyz@gmail.com
abcdefghijkl.mnopqrstuvwxy.z@gmail.com
abcdefghijkl.mnopqrstuvwx.yz@gmail.com
abcdefghijkl.mnopqrstuvw.xyz@gmail.com
abcdefghijkl.mnopqrstuv.wxyz@gmail.com
abcdefghijkl.mnopqrstu.vwxyz@gmail.com
abcdefghijkl.mnopqrst.uvwxyz@gmail.com
abcdefghijkl.mnopqrs.tuvwxyz@gmail.com
abcdefghijkl.mnopqr.stuvwxyz@gmail.com
abcdefghijkl.mnopq.rstuvwxyz@gmail.com
abcdefghijkl.mnop.qrstuvwxyz@gmail.com
abcdefghijkl.mno.pqrstuvwxyz@gmail.com
abcdefghijkl.mn.opqrstuvwxyz@gmail.com
abcdefghijkl.m.nopqrstuvwxyz@gmail.com
abcdefghijk.lmnopqrstuvwxyz@gmail.com
a.bcdefghijk.lmnopqrstuvwxyz@gmail.com
abcdefghijk.lmnopqrstuvwxy.z@gmail.com
abcdefghijk.lmnopqrstuvwx.yz@gmail.com
abcdefghijk.lmnopqrstuvw.xyz@gmail.com
abcdefghijk.lmnopqrstuv.wxyz@gmail.com
abcdefghijk.lmnopqrstu.vwxyz@gmail.com
abcdefghijk.lmnopqrst.uvwxyz@gmail.com
abcdefghijk.lmnopqrs.tuvwxyz@gmail.com
abcdefghijk.lmnopqr.stuvwxyz@gmail.com
abcdefghijk.lmnopq.rstuvwxyz@gmail.com
abcdefghijk.lmnop.qrstuvwxyz@gmail.com
abcdefghijk.lmno.pqrstuvwxyz@gmail.com
abcdefghijk.lmn.opqrstuvwxyz@gmail.com
abcdefghijk.lm.nopqrstuvwxyz@gmail.com
abcdefghijk.l.mnopqrstuvwxyz@gmail.com
abcdefghij.klmnopqrstuvwxyz@gmail.com
a.bcdefghij.klmnopqrstuvwxyz@gmail.com
abcdefghij.klmnopqrstuvwxy.z@gmail.com
abcdefghij.klmnopqrstuvwx.yz@gmail.com
abcdefghij.klmnopqrstuvw.xyz@gmail.com
abcdefghij.klmnopqrstuv.wxyz@gmail.com
abcdefghij.klmnopqrstu.vwxyz@gmail.com
abcdefghij.klmnopqrst.uvwxyz@gmail.com
abcdefghij.klmnopqrs.tuvwxyz@gmail.com
abcdefghij.klmnopqr.stuvwxyz@gmail.com
abcdefghij.klmnopq.rstuvwxyz@gmail.com
abcdefghij.klmnop.qrstuvwxyz@gmail.com
abcdefghij.klmno.pqrstuvwxyz@gmail.com
abcdefghij.klmn.opqrstuvwxyz@gmail.com
abcdefghij.klm.nopqrstuvwxyz@gmail.com
abcdefghij.kl.mnopqrstuvwxyz@gmail.com
abcdefghij.k.lmnopqrstuvwxyz@gmail.com
abcdefghi.jklmnopqrstuvwxyz@gmail.com
a.bcdefghi.jklmnopqrstuvwxyz@gmail.com
abcdefghi.jklmnopqrstuvwxy.z@gmail.com
abcdefghi.jklmnopqrstuvwx.yz@gmail.com
abcdefghi.jklmnopqrstuvw.xyz@gmail.com
abcdefghi.jklmnopqrstuv.wxyz@gmail.com
abcdefghi.jklmnopqrstu.vwxyz@gmail.com
abcdefghi.jklmnopqrst.uvwxyz@gmail.com
abcdefghi.jklmnopqrs.tuvwxyz@gmail.com
abcdefghi.jklmnopqr.stuvwxyz@gmail.com
abcdefghi.jklmnopq.rstuvwxyz@gmail.com
abcdefghi.jklmnop.qrstuvwxyz@gmail.com
abcdefghi.jklmno.pqrstuvwxyz@gmail.com
abcdefghi.jklmn.opqrstuvwxyz@gmail.com
abcdefghi.jklm.nopqrstuvwxyz@gmail.com
abcdefghi.jkl.mnopqrstuvwxyz@gmail.com
abcdefghi.jk.lmnopqrstuvwxyz@gmail.com
abcdefghi.j.klmnopqrstuvwxyz@gmail.com
abcdefgh.ijklmnopqrstuvwxyz@gmail.com
a.bcdefgh.ijklmnopqrstuvwxyz@gmail.com
abcdefgh.ijklmnopqrstuvwxy.z@gmail.com
abcdefgh.ijklmnopqrstuvwx.yz@gmail.com
abcdefgh.ijklmnopqrstuvw.xyz@gmail.com
abcdefgh.ijklmnopqrstuv.wxyz@gmail.com
abcdefgh.ijklmnopqrstu.vwxyz@gmail.com
abcdefgh.ijklmnopqrst.uvwxyz@gmail.com
abcdefgh.ijklmnopqrs.tuvwxyz@gmail.com
abcdefgh.ijklmnopqr.stuvwxyz@gmail.com
abcdefgh.ijklmnopq.rstuvwxyz@gmail.com
abcdefgh.ijklmnop.qrstuvwxyz@gmail.com
abcdefgh.ijklmno.pqrstuvwxyz@gmail.com
abcdefgh.ijklmn.opqrstuvwxyz@gmail.com
abcdefgh.ijklm.nopqrstuvwxyz@gmail.com
abcdefgh.ijkl.mnopqrstuvwxyz@gmail.com
abcdefgh.ijk.lmnopqrstuvwxyz@gmail.com
abcdefgh.ij.klmnopqrstuvwxyz@gmail.com
abcdefgh.i.jklmnopqrstuvwxyz@gmail.com
abcdefg.hijklmnopqrstuvwxyz@gmail.com
a.bcdefg.hijklmnopqrstuvwxyz@gmail.com
abcdefg.hijklmnopqrstuvwxy.z@gmail.com
abcdefg.hijklmnopqrstuvwx.yz@gmail.com
abcdefg.hijklmnopqrstuvw.xyz@gmail.com
abcdefg.hijklmnopqrstuv.wxyz@gmail.com
abcdefg.hijklmnopqrstu.vwxyz@gmail.com
abcdefg.hijklmnopqrst.uvwxyz@gmail.com
abcdefg.hijklmnopqrs.tuvwxyz@gmail.com
abcdefg.hijklmnopqr.stuvwxyz@gmail.com
abcdefg.hijklmnopq.rstuvwxyz@gmail.com
abcdefg.hijklmnop.qrstuvwxyz@gmail.com
abcdefg.hijklmno.pqrstuvwxyz@gmail.com
abcdefg.hijklmn.opqrstuvwxyz@gmail.com
abcdefg.hijklm.nopqrstuvwxyz@gmail.com
abcdefg.hijkl.mnopqrstuvwxyz@gmail.com
abcdefg.hijk.lmnopqrstuvwxyz@gmail.com
abcdefg.hij.klmnopqrstuvwxyz@gmail.com
abcdefg.hi.jklmnopqrstuvwxyz@gmail.com
abcdefg.h.ijklmnopqrstuvwxyz@gmail.com
abcdef.ghijklmnopqrstuvwxyz@gmail.com
a.bcdef.ghijklmnopqrstuvwxyz@gmail.com
abcdef.ghijklmnopqrstuvwxy.z@gmail.com
abcdef.ghijklmnopqrstuvwx.yz@gmail.com
abcdef.ghijklmnopqrstuvw.xyz@gmail.com
abcdef.ghijklmnopqrstuv.wxyz@gmail.com
abcdef.ghijklmnopqrstu.vwxyz@gmail.com
abcdef.ghijklmnopqrst.uvwxyz@gmail.com
abcdef.ghijklmnopqrs.tuvwxyz@gmail.com
abcdef.ghijklmnopqr.stuvwxyz@gmail.com
abcdef.ghijklmnopq.rstuvwxyz@gmail.com
abcdef.ghijklmnop.qrstuvwxyz@gmail.com
abcdef.ghijklmno.pqrstuvwxyz@gmail.com
abcdef.ghijklmn.opqrstuvwxyz@gmail.com
abcdef.ghijklm.nopqrstuvwxyz@gmail.com
abcdef.ghijkl.mnopqrstuvwxyz@gmail.com
abcdef.ghijk.lmnopqrstuvwxyz@gmail.com
abcdef.ghij.klmnopqrstuvwxyz@gmail.com
abcdef.ghi.jklmnopqrstuvwxyz@gmail.com
abcdef.gh.ijklmnopqrstuvwxyz@gmail.com
abcdef.g.hijklmnopqrstuvwxyz@gmail.com
abcde.fghijklmnopqrstuvwxyz@gmail.com
a.bcde.fghijklmnopqrstuvwxyz@gmail.com
abcde.fghijklmnopqrstuvwxy.z@gmail.com
abcde.fghijklmnopqrstuvwx.yz@gmail.com
abcde.fghijklmnopqrstuvw.xyz@gmail.com
abcde.fghijklmnopqrstuv.wxyz@gmail.com
abcde.fghijklmnopqrstu.vwxyz@gmail.com
abcde.fghijklmnopqrst.uvwxyz@gmail.com
abcde.fghijklmnopqrs.tuvwxyz@gmail.com
abcde.fghijklmnopqr.stuvwxyz@gmail.com
abcde.fghijklmnopq.rstuvwxyz@gmail.com
abcde.fghijklmnop.qrstuvwxyz@gmail.com
abcde.fghijklmno.pqrstuvwxyz@gmail.com
abcde.fghijklmn.opqrstuvwxyz@gmail.com
abcde.fghijklm.nopqrstuvwxyz@gmail.com
abcde.fghijkl.mnopqrstuvwxyz@gmail.com
abcde.fghijk.lmnopqrstuvwxyz@gmail.com
abcde.fghij.klmnopqrstuvwxyz@gmail.com
abcde.fghi.jklmnopqrstuvwxyz@gmail.com
abcde.fgh.ijklmnopqrstuvwxyz@gmail.com
abcde.fg.hijklmnopqrstuvwxyz@gmail.com
abcde.f.ghijklmnopqrstuvwxyz@gmail.com
abcd.efghijklmnopqrstuvwxyz@gmail.com
a.bcd.efghijklmnopqrstuvwxyz@gmail.com
abcd.efghijklmnopqrstuvwxy.z@gmail.com
abcd.efghijklmnopqrstuvwx.yz@gmail.com
abcd.efghijklmnopqrstuvw.xyz@gmail.com
abcd.efghijklmnopqrstuv.wxyz@gmail.com
abcd.efghijklmnopqrstu.vwxyz@gmail.com
abcd.efghijklmnopqrst.uvwxyz@gmail.com
abcd.efghijklmnopqrs.tuvwxyz@gmail.com
abcd.efghijklmnopqr.stuvwxyz@gmail.com
abcd.efghijklmnopq.rstuvwxyz@gmail.com
abcd.efghijklmnop.qrstuvwxyz@gmail.com
abcd.efghijklmno.pqrstuvwxyz@gmail.com
abcd.efghijklmn.opqrstuvwxyz@gmail.com
abcd.efghijklm.nopqrstuvwxyz@gmail.com
abcd.efghijkl.mnopqrstuvwxyz@gmail.com
abcd.efghijk.lmnopqrstuvwxyz@gmail.com
abcd.efghij.klmnopqrstuvwxyz@gmail.com
abcd.efghi.jklmnopqrstuvwxyz@gmail.com
abcd.efgh.ijklmnopqrstuvwxyz@gmail.com
abcd.efg.hijklmnopqrstuvwxyz@gmail.com
abcd.ef.ghijklmnopqrstuvwxyz@gmail.com
abcd.e.fghijklmnopqrstuvwxyz@gmail.com
abc.defghijklmnopqrstuvwxyz@gmail.com
a.bc.defghijklmnopqrstuvwxyz@gmail.com
abc.defghijklmnopqrstuvwxy.z@gmail.com
abc.defghijklmnopqrstuvwx.yz@gmail.com
abc.defghijklmnopqrstuvw.xyz@gmail.com
abc.defghijklmnopqrstuv.wxyz@gmail.com
abc.defghijklmnopqrstu.vwxyz@gmail.com
abc.defghijklmnopqrst.uvwxyz@gmail.com
abc.defghijklmnopqrs.tuvwxyz@gmail.com
abc.defghijklmnopqr.stuvwxyz@gmail.com
abc.defghijklmnopq.rstuvwxyz@gmail.com
abc.defghijklmnop.qrstuvwxyz@gmail.com
abc.defghijklmno.pqrstuvwxyz@gmail.com
abc.defghijklmn.opqrstuvwxyz@gmail.com
abc.defghijklm.nopqrstuvwxyz@gmail.com
abc.defghijkl.mnopqrstuvwxyz@gmail.com
abc.defghijk.lmnopqrstuvwxyz@gmail.com
abc.defghij.klmnopqrstuvwxyz@gmail.com
abc.defghi.jklmnopqrstuvwxyz@gmail.com
abc.defgh.ijklmnopqrstuvwxyz@gmail.com
abc.defg.hijklmnopqrstuvwxyz@gmail.com
abc.def.ghijklmnopqrstuvwxyz@gmail.com
abc.de.fghijklmnopqrstuvwxyz@gmail.com
abc.d.efghijklmnopqrstuvwxyz@gmail.com
ab.cdefghijklmnopqrstuvwxyz@gmail.com
a.b.cdefghijklmnopqrstuvwxyz@gmail.com
ab.cdefghijklmnopqrstuvwxy.z@gmail.com
ab.cdefghijklmnopqrstuvwx.yz@gmail.com
ab.cdefghijklmnopqrstuvw.xyz@gmail.com
ab.cdefghijklmnopqrstuv.wxyz@gmail.com
ab.cdefghijklmnopqrstu.vwxyz@gmail.com
ab.cdefghijklmnopqrst.uvwxyz@gmail.com
ab.cdefghijklmnopqrs.tuvwxyz@gmail.com
ab.cdefghijklmnopqr.stuvwxyz@gmail.com
ab.cdefghijklmnopq.rstuvwxyz@gmail.com
ab.cdefghijklmnop.qrstuvwxyz@gmail.com
ab.cdefghijklmno.pqrstuvwxyz@gmail.com
ab.cdefghijklmn.opqrstuvwxyz@gmail.com
ab.cdefghijklm.nopqrstuvwxyz@gmail.com
ab.cdefghijkl.mnopqrstuvwxyz@gmail.com
ab.cdefghijk.lmnopqrstuvwxyz@gmail.com
ab.cdefghij.klmnopqrstuvwxyz@gmail.com
ab.cdefghi.jklmnopqrstuvwxyz@gmail.com
ab.cdefgh.ijklmnopqrstuvwxyz@gmail.com
ab.cdefg.hijklmnopqrstuvwxyz@gmail.com
ab.cdef.ghijklmnopqrstuvwxyz@gmail.com
ab.cde.fghijklmnopqrstuvwxyz@gmail.com
ab.cd.efghijklmnopqrstuvwxyz@gmail.com
ab.c.defghijklmnopqrstuvwxyz@gmail.com

6 (изменено: Жмопель, 2017-06-11 00:40:10)

Re: AHK: генератор Gmail адресов с точками [Решено]

stealzy пишет:

Ваш список

Спасибо, конечно, но это был придуманный email-адрес чисто для примера. Очень хотелось бы научиться подобное делать самому. Возьмусь за разбор кода завтра.

stealzy пишет:

таки зачем вам все эти адреса?

Для использования по прямому назначению. Это не относится к данной теме.

7

Re: AHK: генератор Gmail адресов с точками [Решено]

Жмопель, если тяжело или лень вникать в алгоритм и переделывать его на автохотки, то вы можете запускать немного исправленный джаваскрипт напрямую из автохотки (35000 комбинаций в секунду):

email := "abcdefgh"

#MaxMem 4095
setbatchlines -1

jsCode = 
(
function generateEmails(username) {
    var username_length = username.length;
    var combinations = Math.pow(2, username_length - 1);
    var full_email = "";
    for (i = 0; i < combinations; i++) {
        var bin = decbin(i, username_length - 1);
        for (j = 0; j < (username_length - 1); j++) { full_email += username[j];
            if (bin[j] == 1) { full_email += "."; } }
        full_email += username[j] + "@gmail.com\n";
    }
    return full_email;
}

function decbin(dec, length) {
    var out = "";
    while (length--)
        out += (dec >> length) & 1;
    return out;
}
)

JS := new ActiveScript("JScript")
JS.Exec(jsCode)
msgbox % JS.generateEmails(email)



/*
 *  ActiveScript for AutoHotkey v1.1
 *
 *  Provides an interface to Active Scripting languages like VBScript and JScript,
 *  without relying on Microsoft's ScriptControl, which is not available to 64-bit
 *  programs.
 *
 *  License: Use, modify and redistribute without limitation, but at your own risk.
 */
class ActiveScript extends ActiveScript._base
{
    __New(Language)
    {
        if this._script := ComObjCreate(Language, ActiveScript.IID)
            this._scriptParse := ComObjQuery(this._script, ActiveScript.IID_Parse)
        if !this._scriptParse
            throw Exception("Invalid language", -1, Language)
        this._site := new ActiveScriptSite(this)
        this._SetScriptSite(this._site.ptr)
        this._InitNew()
        this._objects := {}
        this.Error := ""
        this._dsp := this._GetScriptDispatch()  ; Must be done last.
        try
            if this.ScriptEngine() = "JScript"
                this.SetJScript58()
    }

    SetJScript58()
    {
        static IID_IActiveScriptProperty := "{4954E0D0-FBC7-11D1-8410-006008C3FBFC}"
        if !prop := ComObjQuery(this._script, IID_IActiveScriptProperty)
            return false
        VarSetCapacity(var, 24, 0), NumPut(2, NumPut(3, var, "short") + 6)
        hr := DllCall(NumGet(NumGet(prop+0)+4*A_PtrSize), "ptr", prop, "uint", 0x4000
            , "ptr", 0, "ptr", &var), ObjRelease(prop)
        return hr >= 0
    }
    
    Eval(Code)
    {
        pvar := NumGet(ComObjValue(arr:=ComObjArray(0xC,1)) + 8+A_PtrSize)
        this._ParseScriptText(Code, 0x20, pvar)  ; SCRIPTTEXT_ISEXPRESSION := 0x20
        return arr[0]
    }
    
    Exec(Code)
    {
        this._ParseScriptText(Code, 0x42, 0)  ; SCRIPTTEXT_ISVISIBLE := 2, SCRIPTTEXT_ISPERSISTENT := 0x40
        this._SetScriptState(2)  ; SCRIPTSTATE_CONNECTED := 2
    }
    
    AddObject(Name, DispObj, AddMembers := false)
    {
        static a, supports_dispatch ; Test for built-in IDispatch support.
            := a := ((a:=ComObjArray(0xC,1))[0]:=[42]) && a[0][1]=42
        if IsObject(DispObj) && !(supports_dispatch || ComObjType(DispObj))
            throw Exception("Adding a non-COM object requires AutoHotkey v1.1.17+", -1)
        this._objects[Name] := DispObj
        this._AddNamedItem(Name, AddMembers ? 8 : 2)  ; SCRIPTITEM_ISVISIBLE := 2, SCRIPTITEM_GLOBALMEMBERS := 8
    }
    
    _GetObjectUnk(Name)
    {
        return !IsObject(dsp := this._objects[Name]) ? dsp  ; Pointer
            : ComObjValue(dsp) ? ComObjValue(dsp)  ; ComObject
            : &dsp  ; AutoHotkey object
    }
    
    class _base
    {
        __Call(Method, Params*)
        {
            if ObjHasKey(this, "_dsp")
                try
                    return (this._dsp)[Method](Params*)
                catch e
                    throw Exception(e.Message, -1, e.Extra)
        }
        
        __Get(Property, Params*)
        {
            if ObjHasKey(this, "_dsp")
                try
                    return (this._dsp)[Property, Params*]
                catch e
                    throw Exception(e.Message, -1, e.Extra)
        }
        
        __Set(Property, Params*)
        {
            if ObjHasKey(this, "_dsp")
            {
                Value := Params.Pop()
                try
                    return (this._dsp)[Property, Params*] := Value
                catch e
                    throw Exception(e.Message, -1, e.Extra)
            }
        }
    }
    
    _SetScriptSite(Site)
    {
        hr := DllCall(NumGet(NumGet((p:=this._script)+0)+3*A_PtrSize), "ptr", p, "ptr", Site)
        if (hr < 0)
            this._HRFail(hr, "IActiveScript::SetScriptSite")
    }
    
    _SetScriptState(State)
    {
        hr := DllCall(NumGet(NumGet((p:=this._script)+0)+5*A_PtrSize), "ptr", p, "int", State)
        if (hr < 0)
            this._HRFail(hr, "IActiveScript::SetScriptState")
    }
    
    _AddNamedItem(Name, Flags)
    {
        hr := DllCall(NumGet(NumGet((p:=this._script)+0)+8*A_PtrSize), "ptr", p, "wstr", Name, "uint", Flags)
        if (hr < 0)
            this._HRFail(hr, "IActiveScript::AddNamedItem")
    }
    
    _GetScriptDispatch()
    {
        hr := DllCall(NumGet(NumGet((p:=this._script)+0)+10*A_PtrSize), "ptr", p, "ptr", 0, "ptr*", pdsp)
        if (hr < 0)
            this._HRFail(hr, "IActiveScript::GetScriptDispatch")
        return ComObject(9, pdsp, 1)
    }
    
    _InitNew()
    {
        hr := DllCall(NumGet(NumGet((p:=this._scriptParse)+0)+3*A_PtrSize), "ptr", p)
        if (hr < 0)
            this._HRFail(hr, "IActiveScriptParse::InitNew")
    }
    
    _ParseScriptText(Code, Flags, pvarResult)
    {
        VarSetCapacity(excp, 8 * A_PtrSize, 0)
        hr := DllCall(NumGet(NumGet((p:=this._scriptParse)+0)+5*A_PtrSize), "ptr", p
            , "wstr", Code, "ptr", 0, "ptr", 0, "ptr", 0, "uptr", 0, "uint", 1
            , "uint", Flags, "ptr", pvarResult, "ptr", 0)
        if (hr < 0)
            this._HRFail(hr, "IActiveScriptParse::ParseScriptText")
    }
    
    _HRFail(hr, what)
    {
        if e := this.Error
        {
            this.Error := ""
            throw Exception("`nError code:`t" this._HRFormat(e.HRESULT)
                . "`nSource:`t`t" e.Source "`nDescription:`t" e.Description
                . "`nLine:`t`t" e.Line "`nColumn:`t`t" e.Column
                . "`nLine text:`t`t" e.LineText, -3)
        }
        throw Exception(what " failed with code " this._HRFormat(hr), -2)
    }
    
    _HRFormat(hr)
    {
        return Format("0x{1:X}", hr & 0xFFFFFFFF)
    }
    
    _OnScriptError(err) ; IActiveScriptError err
    {
        VarSetCapacity(excp, 8 * A_PtrSize, 0)
        DllCall(NumGet(NumGet(err+0)+3*A_PtrSize), "ptr", err, "ptr", &excp) ; GetExceptionInfo
        DllCall(NumGet(NumGet(err+0)+4*A_PtrSize), "ptr", err, "uint*", srcctx, "uint*", srcline, "int*", srccol) ; GetSourcePosition
        DllCall(NumGet(NumGet(err+0)+5*A_PtrSize), "ptr", err, "ptr*", pbstrcode) ; GetSourceLineText
        code := StrGet(pbstrcode, "UTF-16"), DllCall("OleAut32\SysFreeString", "ptr", pbstrcode)
        if fn := NumGet(excp, 6 * A_PtrSize) ; pfnDeferredFillIn
            DllCall(fn, "ptr", &excp)
        wcode := NumGet(excp, 0, "ushort")
        hr := wcode ? 0x80040200 + wcode : NumGet(excp, 7 * A_PtrSize, "uint")
        this.Error := {HRESULT: hr, Line: srcline, Column: srccol, LineText: code}
        static Infos := "Source,Description,HelpFile"
        Loop Parse, % Infos, `,
            if pbstr := NumGet(excp, A_Index * A_PtrSize)
                this.Error[A_LoopField] := StrGet(pbstr, "UTF-16"), DllCall("OleAut32\SysFreeString", "ptr", pbstr)
        return 0x80004001 ; E_NOTIMPL (let Exec/Eval get a fail result)
    }
    
    __Delete()
    {
        if this._script
        {
            DllCall(NumGet(NumGet((p:=this._script)+0)+7*A_PtrSize), "ptr", p)  ; Close
            ObjRelease(this._script)
        }
        if this._scriptParse
            ObjRelease(this._scriptParse)
    }
    
    static IID := "{BB1A2AE1-A4F9-11cf-8F20-00805F2CD064}"
    static IID_Parse := A_PtrSize=8 ? "{C7EF7658-E1EE-480E-97EA-D52CB4D76D17}" : "{BB1A2AE2-A4F9-11cf-8F20-00805F2CD064}"
}

class ActiveScriptSite
{
    __New(Script)
    {
        ObjSetCapacity(this, "_site", 3 * A_PtrSize)
        NumPut(&Script
        , NumPut(ActiveScriptSite._vftable("_vft_w", "31122", 0x100)
        , NumPut(ActiveScriptSite._vftable("_vft", "31125232211", 0)
            , this.ptr := ObjGetAddress(this, "_site"))))
    }
    
    _vftable(Name, PrmCounts, EIBase)
    {
        if p := ObjGetAddress(this, Name)
            return p
        ObjSetCapacity(this, Name, StrLen(PrmCounts) * A_PtrSize)
        p := ObjGetAddress(this, Name)
        Loop Parse, % PrmCounts
        {
            cb := RegisterCallback("_ActiveScriptSite", "F", A_LoopField, A_Index + EIBase)
            NumPut(cb, p + (A_Index-1) * A_PtrSize)
        }
        return p
    }
}

_ActiveScriptSite(this, a1:=0, a2:=0, a3:=0, a4:=0, a5:=0)
{
    Method := A_EventInfo & 0xFF
    if A_EventInfo >= 0x100  ; IActiveScriptSiteWindow
    {
        if Method = 4  ; GetWindow
        {
            NumPut(0, a1+0) ; *phwnd := 0
            return 0 ; S_OK
        }
        if Method = 5  ; EnableModeless
        {
            return 0 ; S_OK
        }
        this -= A_PtrSize     ; Cast to IActiveScriptSite
    }
    ;else: IActiveScriptSite
    if Method = 1  ; QueryInterface
    {
        iid := _AS_GUIDToString(a1)
        if (iid = "{00000000-0000-0000-C000-000000000046}"  ; IUnknown
         || iid = "{DB01A1E3-A42B-11cf-8F20-00805F2CD064}") ; IActiveScriptSite
        {
            NumPut(this, a2+0)
            return 0 ; S_OK
        }
        if (iid = "{D10F6761-83E9-11cf-8F20-00805F2CD064}") ; IActiveScriptSiteWindow
        {
            NumPut(this + A_PtrSize, a2+0)
            return 0 ; S_OK
        }
        NumPut(0, a2+0)
        return 0x80004002 ; E_NOINTERFACE
    }
    if Method = 5  ; GetItemInfo
    {
        a1 := StrGet(a1, "UTF-16")
        , (a3 && NumPut(0, a3+0))  ; *ppiunkItem := NULL
        , (a4 && NumPut(0, a4+0))  ; *ppti := NULL
        if (a2 & 1) ; SCRIPTINFO_IUNKNOWN
        {
            if !(unk := Object(NumGet(this + A_PtrSize*2))._GetObjectUnk(a1))
                return 0x8002802B ; TYPE_E_ELEMENTNOTFOUND
            ObjAddRef(unk), NumPut(unk, a3+0)
        }
        return 0 ; S_OK
    }
    if Method = 9  ; OnScriptError
        return Object(NumGet(this + A_PtrSize*2))._OnScriptError(a1)
    
    ; AddRef and Release don't do anything because we want to avoid circular references.
    ; The site and IActiveScript are both released when the AHK script releases its last
    ; reference to the ActiveScript object.
    
    ; All of the other methods don't require implementations.
    return 0x80004001 ; E_NOTIMPL
}

_AS_GUIDToString(pGUID)
{
    VarSetCapacity(String, 38*2)
    DllCall("ole32\StringFromGUID2", "ptr", pGUID, "str", String, "int", 39)
    return String
} 

8

Re: AHK: генератор Gmail адресов с точками [Решено]

Malcev пишет:

джаваскрипт напрямую из автохотки

О как! Даже не знал, что так можно. Большое спасибо за помощь!

9 (изменено: Malcev, 2017-06-11 13:41:09)

Re: AHK: генератор Gmail адресов с точками [Решено]

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

10 (изменено: stealzy, 2017-06-11 17:09:38)

Re: AHK: генератор Gmail адресов с точками [Решено]

Malcev, на строке > 20 символов процесс съедает 2 гига памяти и завершается, не отработав.
На ahk процесс укладывается в 40-70 Мб памяти, по времени получается одинаково.
Видимо в JS движке от MS на выходе из ф-ии сборщик не вызывается.
Что интересно, в браузере строка в 20 символов обрабатывается в 6 раз быстрее, чем вышеуказанными способами и памяти дополнительно не отнимает, но строка в 26 символов сжирает память и рушит браузер. Все равно сохранить результаты некуда.

11 (изменено: Malcev, 2017-06-12 15:28:00)

Re: AHK: генератор Gmail адресов с точками [Решено]

Так должно работать:

email := "abcdefghijklmnopqrstuvwxyz"
path := "d:\test.txt"

setbatchlines -1

jsCode = 
(
function generateEmails(username, path) {
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var a = fso.CreateTextFile(path, true);
    var username_length = username.length;
    var combinations = Math.pow(2, username_length - 1);
    for (i = 0; i < combinations; i++) {
        var bin = decbin(i, username_length - 1);
        var full_email = "";
        for (j = 0; j < (username_length - 1); j++) { full_email += username[j];
            if (bin[j] == 1) { full_email += "."; } }
        full_email += username[j] + "@gmail.com";
        a.WriteLine(full_email);
    }
    a.Close();
    return   
}

function decbin(dec, length) {
    var out = "";
    while (length--)
        out += (dec >> length) & 1;
    return out;
}
)

JS := new ActiveScript("JScript")
JS.Exec(jsCode)
JS.generateEmails(email, path)
msgbox Done