Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.06;
Скачать: CL | DM;

Вниз

Получить все возможные комбинации символов :(   Найти похожие ветки 

 
TIF ©   (2008-05-25 19:00) [0]

Есть множество символов (словарик в виде массива или строки с заданными символами). Нужно получить все возможные их комбинации длиной от M до N символов...
С виду задача простая, но я запутался в ней по уши. Примеры в интернете есть, но для сочетаний цифр, а у меня символы могут быть абсолютно любыми

Есть ли у кого-нибудь функция (процедурка) для решения такой задачи?
Заранее спасибо


 
Kerk ©   (2008-05-25 19:02) [1]

А чем сочетания цифр отличается от сочетания символов? Цифры - это такие же символы.


 
TIF ©   (2008-05-25 19:06) [2]

В тех примерах например к массиву, состоящему из чисел от 0 до 9, прибавляется 1

a[i]:=a[i]+1

Что-то вроде того... Ну а символы так прибавлять не получится. Даже если использовать коды символов, это тоже бесполезно: символы идут не попорядку... Короче способ не подходит, к тому же, как я понял по отзывам, он работает с глюками :)


 
Kerk ©   (2008-05-25 19:08) [3]


> TIF ©   (25.05.08 19:06) [2]
> Даже если использовать коды символов, это тоже бесполезно:
>  символы идут не попорядку

Ну даже если так, то ничто тебе не мешает положить символы в массив и обращаться к ним по порядку.


 
_mirage   (2008-05-25 19:09) [4]

да купи ты метлу наконец! займись тем, где ничего особо испортить нельзя и мозг не нужен.

---
Understanding is not required. Only obedience.


 
TIF ©   (2008-05-25 19:13) [5]

> и обращаться к ним по порядку.
Ну вот именно, а как? Гуглл вообще молчит, ерунду всякую выдаёт... Может я неправилные запросы пишу к поисковикам, но реального примера для моей ситуации найти не могу :(

> да купи ты метлу наконец!
И буду летать по ночам...


 
Kerk ©   (2008-05-25 19:15) [6]


> TIF ©   (25.05.08 19:13) [5]
>
> > и обращаться к ним по порядку.
> Ну вот именно, а как?

Как по порядку обращаться к элементам массива? Мощно.


 
Ping-Pong   (2008-05-25 19:16) [7]

Примеры в интернете есть, но для сочетаний цифр, а у меня символы могут быть абсолютно любыми

А у тебя символы в памяти каким шрифтом отображаются: Tahoma или Arial? А то у меня знакомый пытался работать со шрифтом Times New Roman - так у него тоже ничего не получалось. Ты посмотри, может у тебя такая же ситуация - так ты шрифт смени. А то только время потратишь впустую..


 
No_Dead ©   (2008-05-25 19:16) [8]

> Гуглл вообще молчит, ерунду всякую выдаёт

книги! книги! книги читать надо!


 
Правдолюб   (2008-05-25 19:17) [9]

>TIF
Поищи здесь:

http://delphimaster.net/view/2-1211620887/
http://delphimaster.net/view/2-1211620887/
http://delphimaster.net/view/2-1211620887/
http://delphimaster.net/view/2-1211620887/


дальше было лень собирать...


 
TIF ©   (2008-05-25 19:21) [10]

> Как по порядку обращаться к элементам массива? Мощно.
Не ту мысль выразил :))) Обращаться-то по индексу надо %)

Вот что я имел в виду:

for M to N do
begin
 {А вот тут надо делать какие-то операции... Вот как я себе это представляю в общих чертах:}
 for j:=1 to 66 do //66 - кол-во символов в массиве-словаре
 begin
   s:="";
   for n:=M to N do//
   begin
     s:=s+symbols[j];
     ListBox1.Items.Add(s);
   end;
end;

Нужно как-то вложить циклы друг в друга, чтобы выводилась последовательность вида:

a
b
...
y
z
aa
ab
...

А вот сообразить, как нужно эти циклы-матрёшки вкладывать друг в друга, не могу


 
Умище   (2008-05-25 19:23) [11]


> TIF ©   (25.05.08 19:13) [5]
> > и обращаться к ним по порядку.Ну вот именно, а как?


Элементы массива имеют порядковый номер в массиве(индекс).
a[1],a[2]..a[n].

Увеличивая значение индекса на единицу можно последовательно получать элементы массива.


 
TIF ©   (2008-05-25 19:23) [12]

> дальше было лень собирать...
Коллекция красных буковок?


 
Anatoly Podgoretsky ©   (2008-05-25 19:23) [13]

> TIF  (25.05.2008 19:13:05)  [5]

Не понял, ты не умеешь работать с массивами? Тогда что же ты делаешь в программирование?


 
Умище   (2008-05-25 19:24) [14]


> Anatoly Podgoretsky ©   (25.05.08 19:23) [13]
> > TIF  (25.05.2008 19:13:05)  [5]Не понял, ты не умеешь
> работать с массивами? Тогда что же ты делаешь в программирование?
>


А разве здесь программирование? Здесь же потрепаловка?


 
_mirage   (2008-05-25 19:25) [15]

>[11] Умище (2008-05-25 19:23:00)
забыл добавить «так-то!».

---
Understanding is not required. Only obedience.


 
Ping-Pong   (2008-05-25 19:25) [16]

А вот сообразить, как нужно эти циклы-матрёшки вкладывать друг в друга, не могу

Типа так:

for i := 0 to 9 do
 for k := 0 to i do


 
TIF ©   (2008-05-25 19:25) [17]

> Увеличивая значение индекса на единицу можно последовательно
> получать элементы массива.

Ну хоть это я знаю :) Уже хорошо

Ну, прогнал я от первого до последнего все элементы, получил все строки длиной в 1 символ... А теперь надо прогнать для 2-х, 3-х итд символов... Я не могу врубиться, как это зациклить?


 
_mirage   (2008-05-25 19:26) [18]

>[17] TIF © (2008-05-25 19:25:00)
я поторопился с метлой. ты ж не сообразишь, что с ней делать.

---
Understanding is not required. Only obedience.


 
Anatoly Podgoretsky ©   (2008-05-25 19:27) [19]

> Умище  (25.05.2008 19:24:14)  [14]

Ну так и трепемся.


 
TIF ©   (2008-05-25 19:27) [20]

> for i := 0 to 9 do
> for k := 0 to i do


Что за i, что за k и от чего они зависят? Если правильно понял, эта штука будет работать для 2-х символьной комбинации... А если N=200? мне что, 200 переменных заволить...


 
Умище   (2008-05-25 19:32) [21]


> _mirage   (25.05.08 19:26) [18]
> >[17] TIF © (2008-05-25 19:25:00)я поторопился с метлой.
>  ты ж не сообразишь, что с ней делать.


Вспомни высказывания про троллинг в соседней ветке...
Щаз тоже везде тыкать начну, испытаю оргазм от стадного чувства причастности...


 
TIF ©   (2008-05-25 19:35) [22]

> Умище   (25.05.08 19:32) [21]

Так, извращенец, ты это испытывать будешь не в этой ветке. Твой способ вообще только для 9 символов работает и вообще не в тему...


 
_mirage   (2008-05-25 19:37) [23]

>[21] Умище (2008-05-25 19:32:00)
а яя её не читал, там многабукав.

---
Understanding is not required. Only obedience.


 
Kerk ©   (2008-05-25 19:39) [24]


> _mirage   (25.05.08 19:37) [23]

Ты не отвечаешь на мой ответ! То, что с ноября прошло года...


 
Умище   (2008-05-25 19:41) [25]


> TIF ©   (25.05.08 19:35) [22]
> > Умище   (25.05.08 19:32) [21]Так, извращенец, ты это испытывать
> будешь не в этой ветке. Твой способ вообще только для 9
> символов работает и вообще не в тему...


Я вообще не приводил способа.
ТЗ у тебя неполное и задача неоднозначна.


 
Рамиль ©   (2008-05-25 19:42) [26]


> А если N=200? мне что, 200 переменных заволить...

А рекурсию для кого придумали?


 
TIF ©   (2008-05-25 19:44) [27]

> А рекурсию для кого придумали?
:((( Как я хотел, чтобы про неё не вспоминали. Ненавижу рекурсию...

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


 
Умище   (2008-05-25 19:50) [28]


> TIF ©   (25.05.08 19:44) [27]


У тебя в массиве есть повторяющиеся символы? Их повторно надо использовать? Комбинации неповторяющиеся должны быть?


 
TIF ©   (2008-05-25 19:53) [29]

> У тебя в массиве есть повторяющиеся символы? Их повторно
> надо использовать? Комбинации неповторяющиеся должны быть?


Повторяющихся нет, комбинации должны быть НЕповторяющиеся...
В крайнем случае можно и с повторами, потом просто отфильтрую лишнее


 
Рамиль ©   (2008-05-25 19:58) [30]

function NComb(n): string
var
 i: integer;
begin
 if n > 1 then
   for i := 0 to High(SymbArray) do
     Result = SymbArray[i] + NComb(n-1);
 else
       for i := 0 to High(SymbArray) do
     Result = SymbArray[i];
end;


Вызвать функцию и сделать от M домашнее задание.


 
ага   (2008-05-25 20:00) [31]


> TIF ©   (25.05.08 19:53) [29]


> потом просто отфильтрую лишнее

Для русского алфавита (33 буквы) будет 8,68331761881188649551819440128e+36 комбинаций.


 
TIF ©   (2008-05-25 20:03) [32]

> Для русского алфавита (33 буквы) будет 8,68331761881188649551819440128e+3
> 6 комбинаций.


Это для комбинаций какой максимальной длины? Я нигде точное число не называл, оно фигуриет как N


 
TIF ©   (2008-05-25 20:10) [33]

> Рамиль ©   (25.05.08 19:58) [30]
> function NComb(n): string

Invalid pointer operation

?! Что-то не работает


 
Anatoly Podgoretsky ©   (2008-05-25 20:37) [34]

> Рамиль  (25.05.2008 19:42:26)  [26]

Да какая тут к черту рекурсия, тут даже дисков не хватит, это же  !200^N


 
TIF ©   (2008-05-25 20:44) [35]

> Да какая тут к черту рекурсия, тут даже дисков не хватит,
> это же  !200^N


Да что такое... Не то вы мне дали... Откуда какие-то странные огромные факториалы?! У меня может максимальная длина комбинации будет 10 символов...

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

Неужели ни у кого нет реально работающего тотового примера? Хоть на паскале...


 
Рамиль_   (2008-05-25 20:47) [36]


> Anatoly Podgoretsky ©   (25.05.08 20:37) [34]

Так он вроде про 200 не говорил, в любом случае не моя проблема:)


> TIF ©   (25.05.08 20:10) [33]

Тебе точно метлу дать что ли.. Подправь что бы работало. Ты же просил алгоритм.


 
TIF ©   (2008-05-25 20:51) [37]

> Ты же просил алгоритм.
Проблема в том, что я его не вижу. Вместо него вижу код

Короч, никто никогда именно такими делами не занимался. Ясно


 
Умище   (2008-05-25 20:54) [38]


> TIF ©   (25.05.08 20:51) [37]
> > Ты же просил алгоритм.Проблема в том, что я его не вижу.
>  Вместо него вижу кодКороч, никто никогда именно такими
> делами не занимался. Ясно


Алгоритм разрабатывается в течение 10 минут, что я сейчас и сделал...
Словами его описывать лень. Если подождешь минут 20 - пример сделаю.


 
TIF ©   (2008-05-25 21:00) [39]

> Если подождешь минут 20 - пример сделаю.
Могу подождать, не проблема


 
Рамиль_   (2008-05-25 21:14) [40]

Код не работает.. Ну есть там ошибка логическая.. Думалка в выходные не работает)


 
Zeqfreed ©   (2008-05-25 21:16) [41]


> Короч, никто никогда именно такими делами не занимался.
> Ясно

Ы!

#!/usr/bin/python

def generator(list):
           c = 0
           list.reverse()
           while True:
                   c = c + 1
                   el = list.pop()
                   list.insert(0, el)
                   yield el, ((c + len(list) - 1) % len(list) == 0)

gens = []
for i in range(0, 10):
           gens.append(generator([0, 1, 2, 3, 4]));
           gens[i].next()

comb = [0] * 10;

def update(idx):
           global comb
           if idx == -1:
                   return False

           val, t = gens[idx].next()
           if idx == 9:
                   print comb

           comb[idx] = val

           if t:
                   print "yep"
                   return update(idx - 1)

           return True

go = True

while go:
           go = update(9)


 
No_Dead ©   (2008-05-25 21:18) [42]

> [41] Zeqfreed ©   (25.05.08 21:16)

извращенец:)))


 
TIF ©   (2008-05-25 21:25) [43]

> Zeqfreed ©   (25.05.08 21:16) [41]
Кхе, бфу, кжагхххр... фх... Мне плохо :(

Не, алгоритмический язык проще... Я даже определить не могу, что это такое, то ли C, то ли php... Я теперь вообще завис, после такого поста :-(


 
Zeqfreed ©   (2008-05-25 21:31) [44]

> что это такое, то ли C, то ли php

То ли там написано :)

Куда более алгоритмически? :)

Основная фишка, которая тут используется это генератор, который позволяет как раз таки не заморачиваться переключением цифр (они же символы, они же все что угодно), он возвращает следующее значение циклически и флаг, прокрутился ли до конца список.


 
TIF ©   (2008-05-25 21:33) [45]

> Основная фишка
Мне бы ещё догадаться, куда это чудо засунуть и где компилить (если вообще нужно это делать) %)))


 
Рамиль_   (2008-05-25 21:39) [46]

Ну смотри, если еще и это не заработает...

program Project2;

{$APPTYPE CONSOLE}

uses
 SysUtils;
var
 SymbArray: array [0..4] of string = ("a", "b", "c", "d", "e");
 i: integer;

function NComb(Symb: string; n: integer): string;
var
i: integer;
begin
if n > 1 then
  for i := 0 to High(SymbArray) do
  begin
    Result := NComb(Symb + SymbArray[i], n-1);
    Writeln(Result);
  end
else
  begin
      for i := 0 to High(SymbArray) do
      begin
        Result := Symb + SymbArray[i];
        Writeln(Result);
      end;
  end;
end;

begin
 { TODO -oUser -cConsole Main : Insert code here }
 for i := 0 to High(SymbArray) do
  NComb(SymbArray[i], 3);
  ReadLn;
end.


 
Zeqfreed ©   (2008-05-25 21:39) [47]

#!/usr/bin/python

def generator(list):
         c = 0
         list.reverse()

         while True:
                 el = list.pop()
                 list.insert(0, el)
                 yield el, (c % len(list) == 0)
                 c = c + 1

gens = []
comb = [None] * 10

for i in range(0, 10):
         gens.append(generator([0, 1, 2, 3, 4]));
         comb[i], x = gens[i].next()

def update(idx):
         if idx == -1:
                 return False

         val, t = gens[idx].next()
         comb[idx] = val

         if t:
                 return update(idx - 1)

         return True

while True:
         print comb
         if not update(9):
                 break


Так. Я немного отошел после учебы, теперь вроде покрасивее выглядит и пологичнее :)


 
Zeqfreed ©   (2008-05-25 21:41) [48]

> TIF ©   (25.05.08 21:33) [45]

Питон это. Великий и всемогущий.


 
TIF ©   (2008-05-25 21:44) [49]

> Ну смотри, если еще и это не заработает...
>
> program Project2;


Работает, но там комбинации повторяются... Сейчас попытаюсь разобраться с кодом поподробнее


 
TIF ©   (2008-05-25 21:44) [50]

> Питон это. Великий и всемогущий.
Python?


 
Zeqfreed ©   (2008-05-25 21:50) [51]

> TIF ©   (25.05.08 21:44) [50]

Именно.


 
Умище   (2008-05-25 22:07) [52]

unit ufMain;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm8 = class(TForm)
   Button1: TButton;
   edNum: TEdit;
   Label1: TLabel;
   Label2: TLabel;
   EdM: TEdit;
   Label3: TLabel;
   EdN: TEdit;
   procedure FormDestroy(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
 end;

 PComb=^TCOmb;
 TComb=record
   n: Integer;
   arr: array of String;
 end;

var
 Form8: TForm8;
 SrcSym: String;
 Num: Integer;
 M: Integer;
 N: Integer;
 LResult: TList;

implementation

{$R *.dfm}

procedure TForm8.Button1Click(Sender: TObject);
var
 i,j,k: Integer;
 p,pCurr: PComb;
 s: String;
 L: TStringList;
begin
 LResult.Clear;
 Num := StrToInt(EdNum.Text);
 M := StrToInt(EdM.Text);
 N := StrToInt(EdN.Text);
 SetLength(SrcSym,Num);
 for i :=1 to Num do SrcSym[i] := Chr(96+i);
 New(p);
 LResult.Add(p);
 p^.n := 1;
 s :="";
 SetLength(p^.arr,Num);

 for i := 1 to Num do p^.arr[i-1] := SrcSym[i];
 for i := 2 to N do
 begin
   New(pCurr);
   LResult.Add(pCurr);
   p := LResult[i-2];
   for j := 1 to Num do
   begin
     for k := 1 to Length(p^.arr) do
     begin
       if Pos(SrcSym[j],p^.arr[k-1])>0 then Continue;
       SetLength(pCurr^.arr,Length(pCurr^.arr)+1);
       pCurr^.arr[High(pCurr^.arr)] := SrcSym[j]+p^.arr[k-1];
     end;
   end;
 end;

 L := TStringList.Create;
 try
   for i := 0 to LResult.Count - 1 do
   begin
     s :="";
     for j := 0 to High(PComb(LResult[i])^.arr) do
     begin
       s := s+PComb(LResult[i])^.arr[j]+",";
     end;
     L.Add(s);
   end;
   L.SaveToFile("c:\comb.txt");
 finally
   L.Free;

 end;
end;

procedure TForm8.FormCreate(Sender: TObject);
begin
 LResult := TList.Create;
end;

procedure TForm8.FormDestroy(Sender: TObject);
var
 i: Integer;
begin
 for i := LResult.Count-1 downto 0 do
 begin
   Dispose(PComb(LResult[i]));
   LResult.Delete(i);
 end;
 LResult.Free;
end;

end.


 
Умище   (2008-05-25 22:10) [53]

Единственное не сделано - не удвлены коминации менее чем из M символов.

Вот исправление:

 L := TStringList.Create;
 try
   for i := m-1 to LResult.Count - 1 do
   begin
     s :="";
     for j := 0 to High(PComb(LResult[i])^.arr) do
     begin
       s := s+PComb(LResult[i])^.arr[j]+",";
     end;
     L.Add(s);
   end;
   L.SaveToFile("c:\comb.txt");
 finally
   L.Free;
 end;


 
TIF ©   (2008-05-25 22:11) [54]

Спасибо огромное, сейчас проверю, с чем это едят...


 
Умище   (2008-05-25 22:16) [55]

PComb=^TCOmb;
TComb=record
  n: Integer;
  arr: array of String;
end;

Думал, что n: Integer понадобится в расчетах... Не понадобилось. Удалять не стал.
Естественно, для больших значение Numb и N не хватит ОП...


 
Anatoly Podgoretsky ©   (2008-05-25 22:21) [56]


> TIF ©   (25.05.08 20:44) [35]
> > Да какая тут к черту рекурсия, тут даже дисков не хватит,
>
> > это же  !200^N
>
> Да что такое... Не то вы мне дали... Откуда какие-то странные
> огромные факториалы?! У меня может максимальная длина комбинации
> будет 10 символов...

Да, ну, так же чем же разглогольствовал про

> А если N=200? мне что, 200 переменных заволить...


 
TIF ©   (2008-05-25 22:26) [57]

Num := StrToInt(EdNum.Text);

Этим мы задаём кол-во символов? Конечно, не очень мне это нравится, например, у меня будет символ точка, так он идёт не по-порядку за латиницей, Chr тут вряд ли поможет...

a,b,c,
ab,ac,ba,bc,ca,cb,


При выводе результатов последний элемент обрезается

PS: сейчас мозги потихоньку включаются. попробую поработать над своим вариантом


 
ага   (2008-05-25 22:31) [58]


> TIF ©   (25.05.08 22:26) [57]


> ab,ac,ba,bc,ca,cb,

Никто так и не задал самый главный вотпрс: ЗАЧЕМ это надо?


 
Умище   (2008-05-25 22:32) [59]


> TIF ©   (25.05.08 22:26) [57]
> Num := StrToInt(EdNum.Text);Этим мы задаём кол-во символов?
>  Конечно, не очень мне это нравится, например, у меня будет
> символ точка, так он идёт не по-порядку за латиницей, Chr
> тут вряд ли поможет...a,b,c,ab,ac,ba,bc,ca,cb,При выводе
> результатов последний элемент обрезаетсяPS: сейчас мозги
> потихоньку включаются. попробую поработать над своим вариантом


Ну я просто последовательно взял буквы. Конечно это совершенно не обязательно...

У меня вроде не обрезается последний элемент...


 
Умище   (2008-05-25 22:32) [60]


> ага   (25.05.08 22:31) [58]
> > TIF ©   (25.05.08 22:26) [57]> ab,ac,ba,bc,ca,cb,Никто
> так и не задал самый главный вотпрс: ЗАЧЕМ это надо?


А какая разница?


 
TIF ©   (2008-05-25 22:34) [61]

Хм, так и не получилось реализовать такую последовательность:

aaaa
baaa
caaa
...
cccb
cccc


 
Умище   (2008-05-25 22:37) [62]

См. ниже


> Умище   (25.05.08 19:50) [28]
> > TIF ©   (25.05.08 19:44) [27]У тебя в массиве есть повторяющиеся
> символы? Их повторно надо использовать? Комбинации неповторяющиеся
> должны быть?


> TIF ©   (25.05.08 19:53) [29]
> > У тебя в массиве есть повторяющиеся символы? Их повторно
> > надо использовать? Комбинации неповторяющиеся должны быть?
> Повторяющихся нет, комбинации должны быть НЕповторяющиеся.
> ..В крайнем случае можно и с повторами, потом просто отфильтрую
> лишнее



 
Умище   (2008-05-25 22:38) [63]


> TIF ©   (25.05.08 22:34) [61]
> Хм, так и не получилось реализовать такую последовательность:
> aaaabaaacaaa...cccbcccc


А это уже другой алгоритм...


 
ага   (2008-05-25 22:38) [64]


> Умище   (25.05.08 22:32) [60]
>
>
> > ага   (25.05.08 22:31) [58]
> > > TIF ©   (25.05.08 22:26) [57]> ab,ac,ba,bc,ca,cb,Никто
> > так и не задал самый главный вотпрс: ЗАЧЕМ это надо?
>
>
> А какая разница?

Зачастую подобные желания вызваны незнанием или непониманием и решать их
можно более правильно. Так что хотелось бы все-таки узнать - зачем :)
Если действительно нужен перебор всех комбинаций (брутфорс там какой-
нибудь) - нет проблем.


 
Умище   (2008-05-25 22:39) [65]


> ага   (25.05.08 22:38) [64]


Да иногда просто размять мозг полезно;)


 
TIF ©   (2008-05-25 22:41) [66]

> А это уже другой алгоритм...
Так вроде мне его и надо было :) Ой, запутали вы меня. Буду думать


> Зачастую подобные желания вызваны незнанием или непониманием
> и решать их
> можно более правильно. Так что хотелось бы все-таки узнать
> - зачем :)
> Если действительно нужен перебор всех комбинаций (брутфорс
> там какой-
> нибудь) - нет проблем.


Да, что-то вроде этого


 
Zeqfreed ©   (2008-05-25 22:43) [67]

Чего тут думать-то?


 
Игорь Шевченко ©   (2008-05-25 23:06) [68]

пароли подбирает, <слово нехорошее>


 
TIF ©   (2008-05-25 23:10) [69]

> пароли подбирает, <слово нехорошее>
Не совсем. Тут ещё смотря к чему...

Сейчас представлю своё видение проблемы и принцип решения... Вам, наверное, любопытно будет взглянуть :)


 
Игорь Шевченко ©   (2008-05-25 23:14) [70]

TIF ©   (25.05.08 23:10) [69]


> Не совсем.


А пофиг. Все равно, кандидат


 
TIF ©   (2008-05-25 23:25) [71]

Так, кажется вышел на нужный путь
Разобрал всё по пунктам :)

Получилась некая "символьная" система счисления, складывание идёт справа налево... %-)

Символы: A, B и C
Правила:
 1) A + A = B
 2) B + A = C
 3) C + A = AA

Процесс реализации:
| __A
| __B
| __C
| _AA << C + A = AA (переходим в следующий разряд)
| _AB << A + A = B
| _AC
| _BA << C + A = AA | A + A = B
| _BB
| _BC
| _CA
| _CB
| _CC << C + A = AA | C + A = AA
| AAA
| AAB
| AAC
| ABA << A + A = B
| ABB
| ABC << C + A = AA | B + A = C
| ACA
| ACB
| ACC
| BAA << C + A =AA | C + A = AA | A + A = B
| ... и так далее

Мда, конечно выглядит ужасно, но главное в том, что всё совершенно логично и теоретически работает! %-)


 
Дмитрий С   (2008-05-25 23:30) [72]

Система счисления без нуля :)


 
TIF ©   (2008-05-25 23:31) [73]

> Система счисления без нуля :)
Хе... точно :D


 
Умище   (2008-05-25 23:42) [74]

С повторами еще проще реализовать...


 
Дмитрий С   (2008-05-26 00:25) [75]

Накидал тут за полчасика:

program Project1;

{$APPTYPE CONSOLE}

const
 ABCLength=3;
 ABC: array[0..ABCLength-1] of char = ("A","B","C");

function IntToABC(n: Integer):string;
begin
 Result := "";
 while n>0 do
 begin
   Result := ABC[(n-1) mod ABCLength] + Result;
   n := (n-1) div ABCLength;
 end;
end;

function ABCToInt(str: string):Integer;

 function GetCharIndex(C:Char):Integer;
 var
   I: Integer;
 begin
   Result := -1;
   for I := 0 to ABCLength-1 do
   if ABC[I] = C then
   begin
     Result := I;
     Break;
   end;
 end;

var
 I, N:Integer;
begin
 Result := 0;
 I := 1;
 while I <= Length(str) do
 begin
   N := GetCharIndex(str[I]);
   Result := Result * ABCLength + N + 1;
   Inc(I);
 end;
end;

function MaxForLength(Len: Integer): Integer;
var
 E: Integer;
begin
 Result := 0;
 E := 1;
 while Len > 0 do
 begin
   E := E * ABCLength;
   Result := Result + E;
   Dec(Len);
 end;
end;

function MinForLength(Len: Integer): Integer;
var
 E: Integer;
begin
 if Len = 1 then
   Result := 1
 else
   Result := MaxForLength(Len - 1) + 1;
end;

var
 I, J: Integer;
begin
 // Все комбинации алфавита из 6 букв по порядку
 for I := MinForLength(6) to MaxForLength(6) do
   Write(IntToABC(I):8);

 Writeln;

 // Таблица сложения чисел

 Write("|":4);
 for I := MinForLength(1) to MaxForLength(2) do
 begin
   Write(IntToABC(I):5, "|");
 end;
 Writeln;

 for I := MinForLength(1) to MaxForLength(2) do
 begin
   Write(IntToABC(I):3, "|");
   for J := MinForLength(1) to MaxForLength(2) do
   begin
     Write(IntToABC(I+J):5, "|");
   end;
   Writeln;
 end;
 Readln;
end.


 
Дмитрий С   (2008-05-26 00:37) [76]

Если за алфавит взять мой ник V i d, то получается, что
Vid = id+id :)

А при алфавите P i v o
Pivo = PPo +  PPPo
или вот:
Pivo =     P +  Pivv
Pivo =     i +  Pivi
Pivo =     v +  PivP
Pivo =     o +  Piio
Pivo =    PP +  Piiv
Pivo =    Pi +  Piii
Pivo =    Pv +  PiiP
Pivo =    Po +  PiPo
Pivo =    iP +  PiPv
Pivo =    ii +  PiPi
Pivo =    iv +  PiPP
Pivo =    io +  PPoo
Pivo =    vP +  PPov
Pivo =    vi +  PPoi
Pivo =    vv +  PPoP
Pivo =    vo +  PPvo
Pivo =    oP +  PPvv
Pivo =    oi +  PPvi
Pivo =    ov +  PPvP
Pivo =    oo +  PPio
Pivo =   PPP +  PPiv
Pivo =   PPi +  PPii
Pivo =   PPv +  PPiP
Pivo =   PPo +  PPPo
Pivo =   PiP +  PPPv
Pivo =   Pii +  PPPi
Pivo =   Piv +  PPPP
Pivo =   Pio +   ooo
Pivo =   PvP +   oov
Pivo =   Pvi +   ooi
Pivo =   Pvv +   ooP
Pivo =   Pvo +   ovo
Pivo =   PoP +   ovv
Pivo =   Poi +   ovi
Pivo =   Pov +   ovP
Pivo =   Poo +   oio
Pivo =   iPP +   oiv
Pivo =   iPi +   oii
Pivo =   iPv +   oiP
Pivo =   iPo +   oPo
Pivo =   iiP +   oPv
Pivo =   iii +   oPi
Pivo =   iiv +   oPP
Pivo =   iio +   voo
Pivo =   ivP +   vov
Pivo =   ivi +   voi
Pivo =   ivv +   voP
Pivo =   ivo +   vvo
Pivo =   ioP +   vvv
Pivo =   ioi +   vvi
Pivo =   iov +   vvP
Pivo =   ioo +   vio
Pivo =   vPP +   viv
Pivo =   vPi +   vii
Pivo =   vPv +   viP
Pivo =   vPo +   vPo

:)))


 
Дмитрий С   (2008-05-26 00:40) [77]

Очень интересно, автор в [61] приводит последовательность

> aaaa
> baaa
> caaa
> ...
> cccb
> cccc

т.е. увеличение происходит слева. А в примере в [71] - увеличение разрядов справа.
Наводит на мысли о назначении этого перебора....


 
TIF ©   (2008-05-26 00:53) [78]

> Дмитрий С   (26.05.08 00:25) [75]
Быстро однако :)

Хотя я тут тоже начал набрасывать свой вариант, без подобных переводов ABCToInt, всё-таки его доделаю, раз уж начал


> Дмитрий С   (26.05.08 00:37) [76]

:) Новый алфавит появился. Про пиво тоже интересно получилось


> т.е. увеличение происходит слева. А в примере в [71] - увеличение
> разрядов справа.
> Наводит на мысли о назначении этого перебора....

Интересно, что же это за мысли? Тоже хочу узнать о своих идеях то, чего не знал :) Опять про подбор паролей, наверное?
Лично тут я просто-напросто ступил, моя кривая "логика" дала знать о себе: сначала пытался делать как обычно, а потом, посидев 5 минут с листом бумаги, обнаружил, что так рассуждать гораздо легче...


 
Дмитрий С   (2008-05-26 01:13) [79]


> Лично тут я просто-напросто ступил, моя кривая "логика"
> дала знать о себе: сначала пытался делать как обычно, а
> потом, посидев 5 минут с листом бумаги, обнаружил, что так
> рассуждать гораздо легче...

Мысли о том, что тебе всеравно на порядок, главное перебрать все слова. А значит ты делаешь подбор чегото...


 
TIF ©   (2008-05-26 01:19) [80]

> А значит ты делаешь подбор чегото...
Это само собой... Хотя на порядок тоже внимание стоит обратить, а то можно подбирать до скончания века...


 
Германн ©   (2008-05-26 01:34) [81]


> Дмитрий С   (26.05.08 00:37) [76]
>
> Если за алфавит взять мой ник V i d, то получается, что

http://dev2.delphimaster.ru/anketa/1084948700
:)



Страницы: 1 2 3 вся ветка

Текущий архив: 2008.07.06;
Скачать: CL | DM;

Наверх




Память: 0.68 MB
Время: 0.034 c
15-1211704569
Kostafey
2008-05-25 12:36
2008.07.06
С днем рождения ! 24 мая


6-1189759827
horny
2007-09-14 12:50
2008.07.06
Share - ресурсы


6-1190019656
Алик
2007-09-17 13:00
2008.07.06
Хэш-коды и с чем их едят?


11-1191199661
Jon
2007-10-01 04:47
2008.07.06
GRushButton Accelerator


15-1210803414
Маэстро
2008-05-15 02:16
2008.07.06
Неужели вернутся к книгам?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский