Текущий архив: 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