Главная страница
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.7 MB
Время: 0.021 c
2-1213000469
Alex
2008-06-09 12:34
2008.07.06
216 ошибка


15-1211460509
Tirael
2008-05-22 16:48
2008.07.06
чем грозит невключение шифрации в wi-fi сети?


2-1212753119
Инна
2008-06-06 15:51
2008.07.06
отображение в РичЕдите хтмл-страницы


2-1212912443
rena
2008-06-08 12:07
2008.07.06
Действия при открытии формы


15-1211314606
NewZ
2008-05-21 00:16
2008.07.06
Разработка сайта.