поиск значения по номеру

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Byte_, 6 Apr 2010.

  1. Byte_

    Byte_ Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    Добрый всем вечер!
    Есть интересная мысль, но не получается один алгоритм, прошу помощи.
    Задача такая:
    есть некоторый словарь A=['a','s','d','f','g','h''j','k','l',';'] - это массив любой длинны (длина массива L) и любого содержания, есть комбинация из N элементов этого массива.
    и того у нас есть N^L комбинаций
    если длина комбинации, например, 2 то:
    Code:
    aa
    as
    ad
    af
    ag
    ah
    aj
    ak
    al
    a;
    sa
    ss
    sd
    sf
    .....
    И нужно по номеру комбинации (например 15) найти саму комбинацию.

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

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

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Соурс давай, тут тебе не экстрасенсы :D
     
  3. Byte_

    Byte_ Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    cheater_man, =) к сожалению, что-бы начинать писать данный код мне нужна формула. без неё вся идея коту под хвост. прям загадка - второй день голову ломаю.
     
  4. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Byte_, все не так сложно как кажется
    _http://ru.wikipedia.org/wiki/Позиционная_система_счисления
     
  5. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Типо этого что-ли?
    яп С#.net
    Code:
    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();
            }
        }
    }
    
    
     
  6. 0kt0ber

    0kt0ber Member

    Joined:
    28 Jan 2010
    Messages:
    15
    Likes Received:
    5
    Reputations:
    0
    C#
    Code:
    ...
    Dictionary<int, string> myDict = new Dictionary<int, string>();
    ...
    myDict.add(1,"Первый");
    myDict.add(2,"Второй");
    ...
    myDict.add(100,"Сотый");
    ...
    
    Console.WriteLine(myDict[3]);
    Выведет на консоль "Третий".
     
  7. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Да вот правильно говорит 0kt0ber ArrayList нужно создавать! С ним попроще будет ;)
     
  8. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    cheater_man, 0kt0ber, вы хотите все возможные комбинации сначала сгенерировать и пронумеровать, чтобы потом получить нужную комбинацию по номеру? )
     
  9. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    нет нумеровать не обязательно, если через ArrayList делать, он сам пронумерует.Просто генерим комбинацию и записываем в массив ;)
     
  10. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    А ничего, что 20^40 == 1,099511627776e+52 ? :D
     
  11. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,284
    Reputations:
    327
    а есть какаято проблема привести формулу теорвера к алгоритму?

    зы мысль твоя чето ассоциируется у меня с генерацией радуг для мд5 хешей) но тут вопрос в ресурсах
     
    #11 sn0w, 7 Apr 2010
    Last edited: 7 Apr 2010
  12. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Пример реализации на билдере (на форму кидаем 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 - результат
     
    #12 Meecript_, 7 Apr 2010
    Last edited: 7 Apr 2010
    1 person likes this.
  13. Byte_

    Byte_ Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    Во-во! =)
    M_script_, +
    Большое спасибо! Дома проверю)))))
     
  14. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Тут все проблема в ресурсы упирается :)
    Ну тогда например генерируем например 20к записываем в файл.
    Темболее ему скорее всего для брута надо ;)
     
    #14 cheater_man, 7 Apr 2010
    Last edited: 7 Apr 2010
  15. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    какой в баню стремный ArrayList? там Dictionary если что.
     
  16. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Ты что думаешь , что он сгенерит эти 1,099511627776e+52, потом запишет в файл :D
    Да ну в файл то он запишет, вот только открывать придется на mainfram'е :D
     
  17. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    ты вообще соображаешь что печатаешь?

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

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

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Да видел это, только вот я тебе пытаюсь вдолбить что тут без разницы что использовать.
     
  19. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    долбиться в другом месте будешь.
    ОЛОЛО.
    иди книжки читай. Разница как раз таки есть.
    ты вообще знаешь в чем различие Collection от GenericCollection ????

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

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    W!z@rD, какая разница какой контейнер использовать, все равно памяти не хватит, чтобы хранить все комбинации.