Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   поиск значения по номеру (https://forum.antichat.xyz/showthread.php?t=194065)

Byte_ 06.04.2010 20:53

поиск значения по номеру
 
Добрый всем вечер!
Есть интересная мысль, но не получается один алгоритм, прошу помощи.
Задача такая:
есть некоторый словарь A=['a','s','d','f','g','h''j','k','l',';'] - это массив любой длинны (длина массива L) и любого содержания, есть комбинация из N элементов этого массива.
и того у нас есть N^L комбинаций
если длина комбинации, например, 2 то:
Код:

aa
as
ad
af
ag
ah
aj
ak
al
a;
sa
ss
sd
sf
.....

И нужно по номеру комбинации (например 15) найти саму комбинацию.

Для такого числа это на глаз понятно, но речь идёт о дине комбинации > 20, а массива A > 40.

Нужна формула...

cheater_man 06.04.2010 21:09

Соурс давай, тут тебе не экстрасенсы :D

Byte_ 06.04.2010 21:33

cheater_man, =) к сожалению, что-бы начинать писать данный код мне нужна формула. без неё вся идея коту под хвост. прям загадка - второй день голову ломаю.

M_script_ 06.04.2010 22:17

Byte_, все не так сложно как кажется
_http://ru.wikipedia.org/wiki/Позиционная_система_счисле ния

cheater_man 06.04.2010 22:24

Типо этого что-ли?
яп С#.net
Код:

using System;
using System.Collections.Generic;
using System.Text;

namespace brute1
{
    class Program
    {
        public char[] mass ={'a','b','c','d' };
        static void Main(string[] args)
        {
            Program pr = new Program();
            for (int i = 0; i<pr.mass.Length; i++)
            {
                for (int j = 0; j <pr.mass.Length; j++)
                {
                    Console.WriteLine("->" + pr.mass[i] + pr.mass[j]);
                }
            }
            Console.ReadLine();
        }
    }
}


0kt0ber 07.04.2010 00:13

C#
Код:

...
Dictionary<int, string> myDict = new Dictionary<int, string>();
...
myDict.add(1,"Первый");
myDict.add(2,"Второй");
...
myDict.add(100,"Сотый");
...

Console.WriteLine(myDict[3]);

Выведет на консоль "Третий".

cheater_man 07.04.2010 00:18

Да вот правильно говорит 0kt0ber ArrayList нужно создавать! С ним попроще будет ;)

M_script_ 07.04.2010 00:44

cheater_man, 0kt0ber, вы хотите все возможные комбинации сначала сгенерировать и пронумеровать, чтобы потом получить нужную комбинацию по номеру? )

cheater_man 07.04.2010 00:52

Цитата:

Сообщение от M_script_
cheater_man, 0kt0ber, вы хотите все возможные комбинации сначала сгенерировать и пронумеровать, чтобы потом получить нужную комбинацию по номеру? )

нет нумеровать не обязательно, если через ArrayList делать, он сам пронумерует.Просто генерим комбинацию и записываем в массив ;)

M_script_ 07.04.2010 01:17

Цитата:

Сообщение от cheater_man
Просто генерим комбинацию и записываем в массив ;)

Цитата:

речь идёт о дине комбинации > 20, а массива A > 40.
А ничего, что 20^40 == 1,099511627776e+52 ? :D

sn0w 07.04.2010 01:30

а есть какаято проблема привести формулу теорвера к алгоритму?

зы мысль твоя чето ассоциируется у меня с генерацией радуг для мд5 хешей) но тут вопрос в ресурсах

M_script_ 07.04.2010 01:55

Пример реализации на билдере (на форму кидаем 3 едита и баттон):
PHP код:

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    
TStringListlst = new TStringList;
    
lst->CommaText Edit1->Text// записываем словарь в стринглист
    
unsigned int iBase lst->Count// основание системы счисления
    
unsigned int iNum Edit2->Text.ToInt(); // число, которое надо преобразовать
    
unsigned int iLen Edit3->Text.ToInt(); // длина комбинации
    
String sRes ""// результат
    
--iNum// так, как комбинации начинаются с 0 (кобминация состоящая из первого символ словаря), уменьшаем число на 1
    // преобразование числа в систему счисления с основанием iBase 
    
while(iNum
    {
        
sRes.Insert(lst->Strings[iNum%iBase], 0);
        
iNum /= iBase;
    }
    
// дописываем нули(первый символ словаря),  если длина результата меньше длины комбинации
    
for(int i sRes.Length(); iLen; ++i)
        
sRes.Insert(lst->Strings[0], 0);
    
lst->Clear();
    
delete lst;
    
Edit4->Text sRes// выводим результат
}
//--------------------------------------------------------------------------- 

в Edit1 пишем элементы словаря через запятую - a,b,c,d,f,g..... (если в словаре есть запятая, то пишем ее в кавычках)
Edit2 - номер комбинации
Edit3 - длина комбинации
Edit4 - результат

Byte_ 07.04.2010 08:40

Цитата:

А ничего, что 20^40 == 1,099511627776e+52 ?
Во-во! =)
Цитата:

Пример реализации на билдере (на форму кидаем 3 едита и баттон)
M_script_, +
Большое спасибо! Дома проверю)))))

cheater_man 07.04.2010 11:44

Цитата:

Сообщение от M_script_
А ничего, что 20^40 == 1,099511627776e+52 ? :D

Тут все проблема в ресурсы упирается :)
Ну тогда например генерируем например 20к записываем в файл.
Темболее ему скорее всего для брута надо ;)

W!z@rD 07.04.2010 11:49

Цитата:

Сообщение от cheater_man
Да вот правильно говорит 0kt0ber ArrayList нужно создавать! С ним попроще будет ;)

какой в баню стремный ArrayList? там Dictionary если что.

cheater_man 07.04.2010 12:04

Цитата:

Сообщение от W!z@rD
какой в баню стремный ArrayList? там Dictionary если что.

Ты что думаешь , что он сгенерит эти 1,099511627776e+52, потом запишет в файл :D
Да ну в файл то он запишет, вот только открывать придется на mainfram'е :D

W!z@rD 07.04.2010 13:00

ты вообще соображаешь что печатаешь?

я тебя спрашиваю какой там ArrayList, в примере был использован Dictionary.

>>Dictionary<int, string> myDict = new Dictionary<int, string>();

cheater_man 07.04.2010 13:05

Цитата:

Сообщение от W!z@rD
ты вообще соображаешь что печатаешь?

я тебя спрашиваю какой там ArrayList, в примере был использован Dictionary.

>>Dictionary<int, string> myDict = new Dictionary<int, string>();

Да видел это, только вот я тебе пытаюсь вдолбить что тут без разницы что использовать.

W!z@rD 07.04.2010 17:30

долбиться в другом месте будешь.
ОЛОЛО.
иди книжки читай. Разница как раз таки есть.
ты вообще знаешь в чем различие Collection от GenericCollection ????

б**ть вы задолбали смешно вы**ываться

M_script_ 07.04.2010 17:47

W!z@rD, какая разница какой контейнер использовать, все равно памяти не хватит, чтобы хранить все комбинации.


Время: 04:14