powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перебор 500 000 строк
25 сообщений из 89, страница 2 из 4
Перебор 500 000 строк
    #38032139
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиAbstraction,
понял, если автор под цифрой имеет ввиду число а их в билете 6 чисел, то почему он везде в примерах оперирует
таким видом . "Комбинация номеров должна быть уникальна, причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11, т.е. порядок не имеет значения" тут же везде по семь чисел? и второе, имхо было бы правильно делать выравнивание нулем, ну а так параллели и словарь.

Я ж говорю - сильно похоже на 6 из 49 + доп.число + суперчисло(но оно выбирается системой а не игроком)
Допчисло играет только тогда когда угаданы не менее 3 чисел.
Тогда 3 угаданных числа дают выигрыш допустим 10 нерублей,
а 3 угаданных числа + доп.число дают выигрыш допустим 20 нерублей.
Так "размазывается" призовой фонд по большему числу классов.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032157
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234,
а понял, автор хочет купить 500 000 билетов, и ему надо заполнить 6 из 49 плюс 1 итого семь в массиве..
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032176
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234,
Я то грешным делом подумал что лотерея это образное понятие, 6 цифр это ID билета,( были всякие лотереи Досаф, госзаймы( мсу должен помнить - рожденный в СССР)), а оказывается у поколения некс, лотерея - это однозначно лотто..
зы печалька..
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032186
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиM234,
Я то грешным делом подумал что лотерея это образное понятие, 6 цифр это ID билета,( были всякие лотереи Досаф, госзаймы( мсу должен помнить - рожденный в СССР)), а оказывается у поколения некс, лотерея - это однозначно лотто..
зы печалька..

Я вообще смысл затеи не понимаю. Все это "лотто" просчитываются на такие вот "хаки" математически.
То есть выиграть ты выиграешь, но выигрыш будет меньше или равен вложенному, ну разве что тебе повезёт и заполнив грубо говоря четверь возможных комбинаций ты возьмёшь "потного джека" ;)
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032194
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234,
я и назвал все это печалькой, то что вы сказали, это туда входит.
( песенка котэ Базилио) а еще плюс не играть в эти игры,( посмотреть кто хозяин этой игры)
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032425
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, какая разница, зачем и почему, надо быстро сгенерить 500 000 комбинаций из 6 чисел каждая, причем чтобы соблюдалась уникальность вне зависимости от порядка чисел внутри одной комбинации.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032502
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
izoldov-roskiniКомбинация номеров должна быть уникальна, причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11
Значит, комбинация не уникальна
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032518
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Количество вариантов из 6 цифр - 1 000 000. Что уже выше заявленных 500 000.
Количество их перестановок - 6! = 720

Таким образом, количество возможных вариантов равно 1 000 000 * 720. Я полагаю, что после исключения повторов все равно не будет меньше миллиона.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032609
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Количество вариантов из 6 цифр - 1 000 000. Что уже выше заявленных 500 000.
Количество их перестановок - 6! = 720???????
Я тоже хочу так считать...
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032632
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
izoldov-roskiniпричем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11, т.е. порядок не имеет значения. Если ехать простым for или через linq по массивам, получается очень долго, т.к. каждый раз надо проверять, есть ли совпадения в комбинациях или нет и если есть, комбинацию надо перегенерировать.
Для каждой комбинации сразу делать отсортированный "Хеш"
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032636
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AbstractionCat2Количество вариантов из 6 цифр - 1 000 000. Что уже выше заявленных 500 000.
Количество их перестановок - 6! = 720???????
Я тоже хочу так считать...
Надо было математику в ВУЗе учить

Правда, я неправильно посчитал.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032657
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь кто скажет, как быстро посчитать хеш набора чисел или строки?
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032669
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так. Обещанное решение за линейное время.

1. Формулировка задачи.
Поскольку исходная задача особой ясностью не отличилась, я буду иметь наглость додумать детали удобным мне образом. Итак, пусть требуется создать 500 000 (N) разных нумерованных лотерейных билетов. Каждый билет - это шесть (k) неповторяющихся чисел от 1 до 90 (m). Билеты, отличающиеся только порядком чисел, разными не считаются. Требуется, чтобы нельзя было угадать числа на билете, зная его номер и vice versa. Требуется, чтобы для любого билета любые две возможные комбинации номеров встречались с примерно равной вероятностью; желательно, чтобы это не менялось в результате знакомства с любыми иными билетами.

2. Анализ билетов. Сжатие содержания билета до одного числа.
Сколько всего может быть разных билетов? Очевидно, столько, сколько существует способов неупорядоченным образом выбрать k чисел из m без возвращения (т.е. каждое число выбирается не более одного раза):

Таким образом, 500 000 билетов мы наберём без проблем. Теперь вопрос: какова вероятность, что конкретное число (скажем, m) окажется на конкретном билете P(m)? Это отношение числа билетов, на которых оно есть, к числу всех билетов. Но если про билет известно только, что он содержит m, таких билетов столько, сколько было бы билетов с k-1 числом от 1 до m-1; а если билет не содержит m - это то же самое, как если бы мы с самого начала выбирали только числа от 1 до m-1:

Что подводит нас к методу "сжатия" билета до одного числа. Пусть у нас есть одно случайное натуральное число, равномерно распределённое от 1 до C m k . Если оно не больше C m-1 k-1 , добавим к билету m и для последующих расчётов уменьшим k на 1; иначе же уменьшим само число на количество "несбывшихся" вариантов C m-1 k-1 и получим число, равномерно распределённое уже от 1 до C m-1 k . Код:
Код: 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.
    static class Combination {
        private static uint[,] m_C;
        
        static Combination() {
            m_C = new uint[Program.MaxValue+1, Program.NumValues+1];
            m_C[0, 0] = 1;
            for (int i = 1; i <= Program.NumValues; ++i) m_C[0, i] = 0;
            for (int n = 1; n <= Program.MaxValue; ++n) {
                m_C[n, 0] = 1;
                for (int k = 1; k <= Program.NumValues; ++k) {
                    m_C[n, k] = m_C[n - 1, k - 1] + m_C[n - 1, k];
                }
            }
        }

        public static List<int> GetList(uint seed) {
            List<int> ret = new List<int>();
            for(int remained = Program.NumValues, current = Program.MaxValue; remained>0; --current) {
                if (seed < m_C[current - 1, remained - 1]) {
                    ret.Add(current);
                    --remained;
                } else {
                    seed -= m_C[current - 1, remained - 1];
                }
            }

            return ret;
        }

        public static uint C(int n, int k) { return m_C[n, k]; }
    }


3. Обеспечение уникальности и случайности.
Очевидно, различным числам GetList сопоставит различные билеты, но работу мы себе не слишком упростили: теперь надо быть уверенным, что числа будут уникальными. Проще всего, конечно, использовать в качестве числа номер билета, но тогда мы не удовлетворим условиям из пункта 1. Можно начать со случайного 32-разрядного числа seed, в цикле прибавлять к нему некоторое другое случайное нечётное число и генерировать билет, только если seed меньше C m k . Несложно доказать, что при этом seed повторит своё значение только через 2 32 итераций, сгенерировав в процессе все возможные билеты. Также, любой один конкретный билет при этом будет совершенно случайным... но уже три билета подряд по-прежнему будут находится в чёткой зависимости.
Симметричный шифр переводит открытый текст (набор байт) в шифртекст такого же размера, причём это преобразование обратимо. То есть, если мы будем шифровать seed некоторым симметричным шифром (со случайным ключом), разным значениям seed всегда будут соответствовать разные результаты шифрования - и, по цепочке, разные билеты. Достаточно хороший шифр также гарантирует практический "разрыв" видимой зависимости между выходным значением и любыми косвенными данными о входном значении. Вот пример шифра, "достаточно хорошего" для этого примера (но не для реальной лотереи!):
Код: 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.
    class Encryptor {
        private UInt64 m_key;

        private const int NumRounds = 32;

        public Encryptor(UInt64 key) {
            m_key = key;
        }

        private UInt16 KeyPart(int i) {
            return (UInt16)((m_key >> ((17*i)%48)) & 0xFFFF);
        }

        private static UInt16[] permutation1 = { 2, 12, 7, 5, 11, 1, 10, 15, 0, 13, 14, 9, 4, 6, 3, 8 };
        private static UInt16[] permutation2 = { 9, 3, 0, 4, 12, 13, 15, 11, 6, 5, 7, 14, 8, 10, 2, 1 };

        private UInt16 EncryptionBlock(UInt16 left, UInt16 keyPart) {
            UInt16 l = (UInt16)(((left & 0xFF00) + 0x7500) + (keyPart & 0xFF00));
            UInt16 r = (UInt16)(((permutation1[(left&0x01E0)>>5]) ^ left) & 0xFF);
            l ^= (UInt16)((r<<8)^permutation2[(l&0x3C00)>>10]);
            r += (UInt16)(keyPart & 0xFF);
            return (UInt16)((l>>8) ^ (r<<8));
        }

        public UInt32 Encrypt(UInt32 message) {
            UInt16 left, right;
            left = (UInt16)((message & 0xFFFF0000) >> 16);
            right = (UInt16)(message & 0xFFFF);
            left ^= KeyPart(0);
            right ^= KeyPart(1);
            for (int i = 2; i < (NumRounds+2); ++i) {
                right ^= EncryptionBlock(left, KeyPart(i));
                right ^= left; left ^= right; right ^= left;
            }
            right ^= left; left ^= right; right ^= left;
            left ^= KeyPart(NumRounds+2);
            right ^= KeyPart(NumRounds+3);
            return ((UInt32)(left) << 16) ^ right;
        }
    }

4. Складывая всё вместе.
Окончательно, пишем саму программу. Чисто косметическая добавка: поскольку список чисел билета у нас строится от больших к меньшим, его можно бы развернуть перед выводом на печать. Код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    class Program {
        public const int NumValues = 6;

        public const int MaxValue = 90;

        private const int NumOfTickets = 500000;

        static void Main(string[] args) {
            int number=1;
            Random r = new Random();
            Encryptor e = new Encryptor(((ulong)(r.Next())<<32)^((ulong)(r.Next())));
            uint seedLimit = Combination.C(MaxValue, NumValues);
            for (uint seed = (uint)r.Next(), step = (uint)(r.Next()|1); number <= NumOfTickets; seed += step) {
                uint rSeed = e.Encrypt(seed);
                if (rSeed >= seedLimit) continue;
                List<int> values = Combination.GetList(rSeed);
                values.Reverse();
                Console.WriteLine(number.ToString("D6") + " - ( " 
                    + values.Aggregate(string.Empty, (s, i) => s += i.ToString() + " " ) + ")");
                ++number;
            }
        }
    }
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032710
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskiniИсходя из этого вопрос, есть ли какой-то более быстрый способ проверки наличия набора значений в массиве данных? Используйте множества (HashSet/SortedSet):
Код: 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.
public static void Main (string[] args)
{
	HashSet<String> db = new HashSet<String>();
	SortedSet<int> nums = new SortedSet<int>();
	Random rnd = new Random();
	for (int i = 0; db.Count < 500000; i++)
	{
		for (int j = 0; nums.Count < 6; j++)
		{
			nums.Add(rnd.Next (1, 100));
		}
		StringBuilder sb = new StringBuilder();
		foreach (int num in nums)
		{
			sb.AppendFormat("{0:D2} ", num);
		}
		db.Add(sb.ToString());
		nums.Clear();
	}
	foreach (String s in db)
	{
		Console.WriteLine (s); // вывод долгий и лучше перенаправить в файл
	}
}
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032740
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbstractionТак. Обещанное решение за линейное время.

1. Формулировка задачи.
Поскольку исходная задача особой ясностью не отличилась, я буду иметь наглость додумать детали удобным мне образом. Итак, пусть требуется создать 500 000 (N) разных нумерованных лотерейных билетов. Каждый билет - это шесть (k) неповторяющихся чисел от 1 до 90 (m). Билеты, отличающиеся только порядком чисел, разными не считаются. Требуется, чтобы нельзя было угадать числа на билете, зная его номер и vice versa. Требуется, чтобы для любого билета любые две возможные комбинации номеров встречались с примерно равной вероятностью; желательно, чтобы это не менялось в результате знакомства с любыми иными билетами.

2. Анализ билетов. Сжатие содержания билета до одного числа.
Сколько всего может быть разных билетов? Очевидно, столько, сколько существует способов неупорядоченным образом выбрать k чисел из m без возвращения (т.е. каждое число выбирается не более одного раза):

Таким образом, 500 000 билетов мы наберём без проблем. Теперь вопрос: какова вероятность, что конкретное число (скажем, m) окажется на конкретном билете P(m)? Это отношение числа билетов, на которых оно есть, к числу всех билетов. Но если про билет известно только, что он содержит m, таких билетов столько, сколько было бы билетов с k-1 числом от 1 до m-1; а если билет не содержит m - это то же самое, как если бы мы с самого начала выбирали только числа от 1 до m-1:

Что подводит нас к методу "сжатия" билета до одного числа. Пусть у нас есть одно случайное натуральное число, равномерно распределённое от 1 до C m k . Если оно не больше C m-1 k-1 , добавим к билету m и для последующих расчётов уменьшим k на 1; иначе же уменьшим само число на количество "несбывшихся" вариантов C m-1 k-1 и получим число, равномерно распределённое уже от 1 до C m-1 k . Код:+
Код: 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.
    static class Combination {
        private static uint[,] m_C;
        
        static Combination() {
            m_C = new uint[Program.MaxValue+1, Program.NumValues+1];
            m_C[0, 0] = 1;
            for (int i = 1; i <= Program.NumValues; ++i) m_C[0, i] = 0;
            for (int n = 1; n <= Program.MaxValue; ++n) {
                m_C[n, 0] = 1;
                for (int k = 1; k <= Program.NumValues; ++k) {
                    m_C[n, k] = m_C[n - 1, k - 1] + m_C[n - 1, k];
                }
            }
        }

        public static List<int> GetList(uint seed) {
            List<int> ret = new List<int>();
            for(int remained = Program.NumValues, current = Program.MaxValue; remained>0; --current) {
                if (seed < m_C[current - 1, remained - 1]) {
                    ret.Add(current);
                    --remained;
                } else {
                    seed -= m_C[current - 1, remained - 1];
                }
            }

            return ret;
        }

        public static uint C(int n, int k) { return m_C[n, k]; }
    }


3. Обеспечение уникальности и случайности.
Очевидно, различным числам GetList сопоставит различные билеты, но работу мы себе не слишком упростили: теперь надо быть уверенным, что числа будут уникальными. Проще всего, конечно, использовать в качестве числа номер билета, но тогда мы не удовлетворим условиям из пункта 1. Можно начать со случайного 32-разрядного числа seed, в цикле прибавлять к нему некоторое другое случайное нечётное число и генерировать билет, только если seed меньше C m k . Несложно доказать, что при этом seed повторит своё значение только через 2 32 итераций, сгенерировав в процессе все возможные билеты. Также, любой один конкретный билет при этом будет совершенно случайным... но уже три билета подряд по-прежнему будут находится в чёткой зависимости.
Симметричный шифр переводит открытый текст (набор байт) в шифртекст такого же размера, причём это преобразование обратимо. То есть, если мы будем шифровать seed некоторым симметричным шифром (со случайным ключом), разным значениям seed всегда будут соответствовать разные результаты шифрования - и, по цепочке, разные билеты. Достаточно хороший шифр также гарантирует практический "разрыв" видимой зависимости между выходным значением и любыми косвенными данными о входном значении. Вот пример шифра, "достаточно хорошего" для этого примера (но не для реальной лотереи!):+
Код: 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.
    class Encryptor {
        private UInt64 m_key;

        private const int NumRounds = 32;

        public Encryptor(UInt64 key) {
            m_key = key;
        }

        private UInt16 KeyPart(int i) {
            return (UInt16)((m_key >> ((17*i)%48)) & 0xFFFF);
        }

        private static UInt16[] permutation1 = { 2, 12, 7, 5, 11, 1, 10, 15, 0, 13, 14, 9, 4, 6, 3, 8 };
        private static UInt16[] permutation2 = { 9, 3, 0, 4, 12, 13, 15, 11, 6, 5, 7, 14, 8, 10, 2, 1 };

        private UInt16 EncryptionBlock(UInt16 left, UInt16 keyPart) {
            UInt16 l = (UInt16)(((left & 0xFF00) + 0x7500) + (keyPart & 0xFF00));
            UInt16 r = (UInt16)(((permutation1[(left&0x01E0)>>5]) ^ left) & 0xFF);
            l ^= (UInt16)((r<<8)^permutation2[(l&0x3C00)>>10]);
            r += (UInt16)(keyPart & 0xFF);
            return (UInt16)((l>>8) ^ (r<<8));
        }

        public UInt32 Encrypt(UInt32 message) {
            UInt16 left, right;
            left = (UInt16)((message & 0xFFFF0000) >> 16);
            right = (UInt16)(message & 0xFFFF);
            left ^= KeyPart(0);
            right ^= KeyPart(1);
            for (int i = 2; i < (NumRounds+2); ++i) {
                right ^= EncryptionBlock(left, KeyPart(i));
                right ^= left; left ^= right; right ^= left;
            }
            right ^= left; left ^= right; right ^= left;
            left ^= KeyPart(NumRounds+2);
            right ^= KeyPart(NumRounds+3);
            return ((UInt32)(left) << 16) ^ right;
        }
    }

4. Складывая всё вместе.
Окончательно, пишем саму программу. Чисто косметическая добавка: поскольку список чисел билета у нас строится от больших к меньшим, его можно бы развернуть перед выводом на печать. Код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    class Program {
        public const int NumValues = 6;

        public const int MaxValue = 90;

        private const int NumOfTickets = 500000;

        static void Main(string[] args) {
            int number=1;
            Random r = new Random();
            Encryptor e = new Encryptor(((ulong)(r.Next())<<32)^((ulong)(r.Next())));
            uint seedLimit = Combination.C(MaxValue, NumValues);
            for (uint seed = (uint)r.Next(), step = (uint)(r.Next()|1); number <= NumOfTickets; seed += step) {
                uint rSeed = e.Encrypt(seed);
                if (rSeed >= seedLimit) continue;
                List<int> values = Combination.GetList(rSeed);
                values.Reverse();
                Console.WriteLine(number.ToString("D6") + " - ( " 
                    + values.Aggregate(string.Empty, (s, i) => s += i.ToString() + " " ) + ")");
                ++number;
            }
        }
    }



Спасибо за исчерпывающий ответ, НО, у вас написано
Код: sql
1.
Билеты, отличающиеся только порядком чисел, разными не считаются. 


А у меня ситуация наоборот, ОНИ БУДУТ считаться РАВНЫМИ
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032753
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskini
Спасибо за исчерпывающий ответ, НО, у вас написано
Код: sql
1.
Билеты, отличающиеся только порядком чисел, разными не считаются. 


А у меня ситуация наоборот, ОНИ БУДУТ считаться РАВНЫМИ
Разными не считаются = считаются равными, вам нельзя в программисты

Уникальность 500 тыс билетов из 6 чисел получается простым последовательным перебором от 1 до 500000, могу предположить, что каждое число может быть двузначным или даже трехзначным, так как об это не сказано в первом сообщении, то в постановщики задач вам тоже нельзя
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032776
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор топика жжёт )))

10 минут и код готов. минус его только метод Рандом. а так шустро работает. меньше секунды
Код: 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.
 class loto
    {
        public int MAX = 49;
        public int NN = 6;
        public int NUMBERS = 500000;
        Random RAN = new Random();
        public Dictionary<long, int[]> RESULT = new Dictionary<long, int[]>();
        public int MISMATCH = 0;
        public void Generate_Super_puper_Random_Numbers_from_1_to_Max()
        {
            int _MAX=MAX;
            MISMATCH = 0;
            for (int Q = 0; Q < NUMBERS; Q++)
            {
            RESTART0:
                //ПОЛУЧИМ 6 ЧИСЕЛ
                List<int> ARR = new List<int>();
                for (int N = 0; N < NN; N++)
                {
                RESTART:
                    int T = RAN.Next(1, _MAX);
                    if (ARR.Contains(T)) 
                        //НУ ЕСЛИ ОНО УЖЕ ЕСТЬ В НАБОРЕ , ТО ПОВТОРИМ
                        goto RESTART;
                    ARR.Add(T);
                }
                //ОТСОРТИРУЕМ ПОЛУЧЕННЫЙ МАССИВ  2,6,14,34,37,41
                ARR.Sort();
                //ПОЛУЧИМ "СВЁРТКУ" ЧИСЕЛ
                long Z = MUX(ARR.ToArray());
                if (RESULT.ContainsKey(Z))
                //ЕСЛИ СИЕ ЧИСЛО УЖЕ В КОЛЛЕКЦИИ , ТО ПОВТОРИМ СНАЧАЛА
                {
                    MISMATCH++; //ПОСЧИТАЕМ ДЛЯ СЕБЯ ЧИСЛО ПРОМАХОВ
                    goto RESTART0;
                }
                RESULT.Add(Z, ARR.ToArray());
            }
            //ПРОФФИТ!!!
        }
        long MUX(int[] ARR)
        {    //ТИПА ТАК БЫСТРЕЕ
             long N= ARR[0]+
                     ARR[1] * 100+
                     ARR[2] * 10000+
                     ARR[3] * 1000000+
                     ARR[4] * 100000000+
                     ARR[5] * 10000000000;
             return N;
        }
    }



ЗЫ. число повторений (MISMATCH) на 500.000 около 10.000 штук
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032777
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
типа с утречка , взамен зарядки.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032832
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erтипа с утречка , взамен зарядки.
За "goto" нужно отстреливать из винтореза на месте.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032847
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЗа "goto" нужно отстреливать из винтореза на месте.
МСУ, ты это детям рассказывай, что goto это есть плёхо.
а мне лично влом писать лишние строчки с while , break ...etc
утяжеляют код и ограничивают в возможностях.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033017
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erМСУ, ты это детям рассказывай, что goto это есть плёхо
Вот тебе и рассказываю же.

beg-in-erа мне лично влом писать лишние строчки с while , break ...etc
утяжеляют код и ограничивают в возможностях.
Хрень эту в яслях коллегам расскажи, недоросль. Goto - признак идиотизма.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033023
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er, таким как ты посвещается:
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033051
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ Goto - признак идиотизма.авторпрограммисты делятся на три группы:
-кто знает, что такое goto и используют его по назначению
-кто не знают этого оператора, но хотят узнать
-кто вообще отрицают его существование...простим МСУ его заносчивость и жырное тролление.

goto всего лишь инструмент. и как любой инструмент, в нормальных руках он будет работать как надо.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033060
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-ergoto всего лишь инструмент. и как любой инструмент, в нормальных руках он будет работать как надо.
goto - пережитки прошлого, этим лохмотьям не место в языках высокого уровня.
P.S. Почитай, что такое структурное программирование (последовательное исполнение, ветвление и цикл). Операторам безусловного перехода место только в воспаленном сознании кодирующих обезьянок, не более того.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033161
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУbeg-in-ergoto всего лишь инструмент. и как любой инструмент, в нормальных руках он будет работать как надо.
goto - пережитки прошлого, этим лохмотьям не место в языках высокого уровня.
P.S. Почитай, что такое структурное программирование (последовательное исполнение, ветвление и цикл). Операторам безусловного перехода место только в воспаленном сознании кодирующих обезьянок, не более того.
Ну, со своими "сугуботеоретическими" познаниями МСУ бы нас еще объектно-ориентированному программированию начал учить...
...
Рейтинг: 0 / 0
25 сообщений из 89, страница 2 из 4
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перебор 500 000 строк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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