IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Программирование и ПМК, Алгоритмы, схемы и функционал
Чацкий
сообщение 30.12.2012, 2:08
Сообщение #1


Проходивший мимо
*

Группа: Пользователи
Сообщений: 49
Регистрация: 16.2.2012
Пользователь №: 99 628
Знак Зодиака:
Страна:





Тема создаётся для всех страждущих найти исходники к Калькуляторам ПМ.



Структура Темы:
1. Цель.
2. Ресурсы.
3. Реализация.
4. Задачи и планирование.


1. Цель.
Целью является предоставление отправных данных для возможности написания "своего" ПМК = не Передвижная Механизированная Колонна (строители меня поймут), а ПМ Калькулятора.
ПМК - программа для генерации сходящегося пасьянса Марии Стюарт и его анализа, с целью дальнейшего его расклада в "реале". Вторая часть является не менее важной, чем первая, а, даже, более важной. Т.к. ваша программа будет именно для вас и должна служить только для применения на практике... а уж теоретиков, что смогут "углубиться и расширить" горизонты ПМ и без Вас будет много (ИМХО).


2. Ресурсы.
Необходимыми ресурсами для воплощения Цели в жизнь являются:
2.1. Базовые навыки программирования, среда программирования и компьютер.
2.2. Визуальный образ Цели-результата, перечень функционала программы.
2.3. Исходные коды и методы реализации аналога Цели предшественниками.


3. Реализация.
Для выполнения поставленной задачи необходимо иметь чётко определённый вид и понятие конечного результата, оформленный на материальном носителе (бумага) для исключения возможности предварительных похорон проекта и увядания в дебрях алгоритмов...
3.1. Формируем Цель.
3.2. Определяемся с ресурсами.
3.3. Составляем график жизни проекта = сроки на выполнение этапов, перечень этапов.
3.4. Составляем комментарии к этапам, где перечисляем возможные пути улучшения кода / написания альтернативных алгоритмов выполнения / включение проверок и защиты от дурака. Важной частью этого этапа является то, что это будут лишь намётки! Ни в коем случае не воплощайте данные заметки в жизнь той версии программы, что пишите, иначе рискуете не дописать ни-че-го...


Основной материал для собственных разработок был обнаружен по следующим ссылкам:
а) Смотрим сообщение = "пфьук (#170, 2005-12-16, 22:12:55 )" = практически в самом конце = http://www.aworld.ru/maska/forumsp4872a.htm = "Создание и анализ ПМ. Написание программ".
б) http://www.aworld.ru/maska/forumsp5354a.htm = "Пасьянс Медичи и магические квадраты" = "сообщение stalkerreklats (#20, 2006-04-12, 09:42:36 )" = шикарный кусок кода. Там же = "mist (#9, 2006-01-30, 16:28:43 )" = то, что я брал за базу.


--------------------
retikularnajaformacija = мой скайп. Пишите.)
Перейти в начало страницы
 
+Цитировать сообщение
Чацкий
сообщение 30.12.2012, 3:47
Сообщение #2


Проходивший мимо
*

Группа: Пользователи
Сообщений: 49
Регистрация: 16.2.2012
Пользователь №: 99 628
Знак Зодиака:
Страна:




"Использованное" программное обеспечение: Windows XP SP3, Borland Delphi Enterprise Lite Edition.


Для удобства и разграничения областей работы программный код разбит на определённые группы-библиотеки.

Библиотеки кода:
1. Глобальные постоянные.
2. Глобальные Типы переменных.
3. Глобальные переменные.
4. Функции.
5. Процедуры.
6. Основной исполняемый модуль.


1. Глобальные постоянные.
unit Constants;
NMastey = 4; { Количество мастей }
NNominalov = 9; { Количество номиналов}
KartVKolode = NMastey*NNominalov; { Количество карт в колоде}
Masti:array[1..NMastey] of string = ('ч','б','п','к'); { Массив символов обозначения Мастей }
Nominals:array[1..NNominalov] of string = ('6','7','8','9','Х','В','Д','К','Т'); { Массив символов обозначения Номиналов }


2. Глобальные Типы переменных.
unit Typs;

Тип 01.
TKarta = record{Тип Карта = объект с параметрами:}
N,M:string;{Номинал и масть}
id:Byte; {Положение в колоде}
end;

Тип 02.
TKoloda = array [1..KartVKolode]of TKarta;{Тип Колода = массив из 36ти единиц типа Карта}

Тип 03.
TIndex = array [1..KartVKolode]of Byte;{Тип "Перечень" = массив из 36ти единиц типа Число}

Тип 04.
TSvertki= array [1..KartVKolode]of string;{Тип "Свёртки" = массив из 36ти единиц типа Текст}

Тип 05.
TPMKoloda = record{Тип КолодаПМ= объект с параметрами:}
Len:Integer; {Длина цепочки }
Card:TKoloda; {Карты сходящейся ЦС}
CardLinA:string;{Для вывода на экран карт }
CardLine:string;{Для вывода на экран формулу карт }
Tran:TIndex; {Флаги транзитов }
TranLine:string;{Для вывода на экран формулу транзитов}
StMo:TIndex; {Флаги Мобилов-Стационаров }
StMoLine:string;{Для вывода на экран формулу Мобил.Стационаров}
NTransits:Byte; {Кол-во транзитов }
Number:Integer; {Номер колоды }
Svertka:Byte; {До куда сворачиваемся}
SvLine:TSvertki;{Все линии свёртки }
end;

3. Глобальные переменные.
unit Vars;
KolodaBase :TPMKoloda;{Переменная для Базовой колоды}


4. Функции.
unit Funcs;

Функция 01.
function GSCH(minimum,maximum:byte):byte;{Объявление функции генератора целых случайных чисел ГСЧ}

Функция 02.
function CheckUnikPM(Koloda1:array of TPMKoloda; s:string; num:Integer):Integer;{Проверка на уникальность цепочки}

Функция 03.
function GetKolodaLine(Koloda1: TPMKoloda):string;{Вернуть}


5. Процедуры.
unit Procs;

Процедура 01.
procedure MakeBaseKoloda(var K1:TPMKoloda);{Заполнить основную колоду}

Процедура 02.
procedure GenerateKoloda(num:Integer;var K1:TPMKoloda);{Генерируем колоду}

Процедура 03.
procedure GetShodKoloda(n,num:Integer;var Koloda1:array of TPMKoloda);{Получить сходящиеся ЦС ПМ в количестве num-штук}

Процедура 04.
procedure SvertkaSimple(var Koloda1:TPMKoloda);{Сходится ли пасьянс?}

Процедура 05.
procedure PrintKoloda(K1:TPMKoloda);{Распечатать колоду}


6. Основной исполняемый модуль.
program PMC001;

begin
ShiftX:=3;{Задали отступ по горизонтали справа}
ShiftY:=5;{Задали отступ по вертикали сверху}

ShowRussianLanguage;{Хочу текст видеть и писать по-русски}
MaximizeConsole;{Консоль на весь экран}
RenameWindow;{Задали имя окошку}

MakeBaseKoloda(KolodaBase);{Сформировали Базовую колоду}
PrintKoloda(KolodaBase);{Вывели на экран Базовую колоду}

ZaprosNumOfPM;{Запрос количества необходимых цепочек}
TextColor(10,0); Writeln(' Запрос = ок!');{Другим цветом показали, что всё Ок}

GetShodKoloda(2,KolPM,PMKoloda1); {Получение количества необходимых сходящихся цепочек}
TextColor(10,0); Writeln(' Цепочки = ок!');{Другим цветом показали, что всё Ок}
ShodResultShow;{Показали результаты}

CheckDoubles(PMKoloda1);{Проверили на наличие дубликатов}

ZaprosToShowPM;{Запрос номера цепочки для детального показа}
TextColor(10,0); Writeln(' Запрос = ок!');{Другим цветом показали, что всё Ок}

ShowKolodaData(PMKoloda1[KolPM+1]);{Показали детальный анализ расклада, чей номер ввели выше}

Readln;{Ждём нажатия Enter'а, чтоб не свернулось окно}
end.


Архив исходников для работы включая скомпеллированную программу = Прикрепленный файл  New03.zip ( 215.49 килобайт ) Кол-во скачиваний: 14


При наличии проблем с русскими шрифтами смотрите рисунок =

Алгоритм работы программы.

На данный момент могу описать Три основных программных модуля моего ПМК:
1. Распознавание строки раскладки.
2. Генерация расклада.
3. Анализ расклада.


Модуль №1. Распознавание строки расклада.

Функция модуля = распознать введённую пользователем строку (в специальное окошко) как расклад и поэлементно записать распознанное в массив данных Колоды для последующего анализа.
Необходимые предостережения = наличие защиты "от дурака" (простите мой французский) - т.е.: проверка наличия только зарегестрированных символов в качестве мастей и номиналов; проверка на соответствие количества "карт" в строке (по умолчанию = 36); проверка на наличие повторов "карт".
Результат = заполненный массив Колоды корректными символами.


Модуль №2. Генерация расклада.

Функция модуля = генерация сходящегося расклада карт = цепочки ПМ, отвечающей требованиям фильтров.
Необходимые предостережения = отсутствие алгоритма генерации и использование случайного перебора может сильно затянуть время подбора.
Результат = генерируется расклад из Базовой колоды, проверяется функцией ПростаяПроверкаНаСходимость. В случае получения числа = 2 = остаток после свёрток, расклад передаётся дальше к блоку проверки на установленные фильтры.
По умолчанию во всех имеющихся в сети автоматизированных ПМ Калькуляторах используется простой способ генерации с использованием генератора случайных чисел, т.е. не алгоритмизированный. Т.о. для получения нужного результата программа генерирует случайную колоду из имеющихся карт базовой колоды, проверяет, сходится ли расклад и, далее, проверяет на соответствие заранее заданным фильтрам - количество транзитов, максимальный обвал и т.д. Если расклад проходит все "отсевы", то вы получаете необходимый результат.


Модуль №3. Анализ расклада.

Функция модуля = детальный анализ колоды для получения данных, которые можно сравнивать с установками фильтров.
Необходимые предостережения = данных можно получить мнго, а вот для чего они нам - лучше решить заранее, иначе будет просто завал информацией.
Результат = полностью заполненные ячейки параметров Колоды.
В моём ПМК, как и в общераспространённых в сети, детально анализируется колода в процессе ДетальнойПроверкиНаСходимость. В этой процедуре определяются основные параметры - транзитные карты и их количество, мобильные карты (потом уже их антипод - стационары выводится), глубина свёртки и остаток после свёрток.
Можно (как и реализовал) добавить в Тип=Колода дополнительные переменные, что будут хранить в себе показания производных. К примеру, запись всех свёрток, номера по порядку в раскладе карт-стационаров и т.д.
После процедуры ДетальнойПроверкиНаСходимость уже идёт расчёт Гексаграмм, Вероятностей самобалансировки и т.д.

Сообщение отредактировал Чацкий - 30.12.2012, 3:13


--------------------
retikularnajaformacija = мой скайп. Пишите.)
Перейти в начало страницы
 
+Цитировать сообщение
Phil
сообщение 31.12.2012, 15:35
Сообщение #3


Любитель
**********

Группа: Пользователи
Сообщений: 7 602
Регистрация: 22.4.2008
Пользователь №: 8 917
Знак Зодиака:
Страна:




Вот это ты молодец. Потому как посте Миста не осталось никаких исходников ac.gif а программистом он был, судя по всему, просто гениальным, потому как его калькулятор пашет с совершенно немыслимой скоростью!
Перейти в начало страницы
 
+Цитировать сообщение
Чацкий
сообщение 2.1.2013, 20:13
Сообщение #4


Проходивший мимо
*

Группа: Пользователи
Сообщений: 49
Регистрация: 16.2.2012
Пользователь №: 99 628
Знак Зодиака:
Страна:




Перебор ВСЕХ возможных вариантов перестановок n-символов.


Первоначальные эксперименты базировались на попытке анализа всех возможных комбинаций перестановок заранее заданного массива колоды. Перелопатил кучу литературы по комбинаторике. Познакомился с таким интересным понятием, как Рекурсия и лексикографический порядок ))).

Сайт, с которого взят исходник = http://forum.pascalnet.ru/index.php?showtopic=3777

Исходник:

{ программа генерации перестановок N элементного множества в лексикографическом порядке }
Program perms;
var
i, j, h, n, k: integer;
a:array[0 .. 100] of integer; { массив для хранения перестановки }

[i]{процедура вывода полученной перестановки}

procedure output;
var i: integer;
begin
writeln;
for i:=1 to n do write(a,' ');
end;

begin
write('количество элементов перестановки: '); readln(n);
fillchar(a, sizeof(a), 0);

[i]{ ввод элементов начальной перестановки }

for i:=1 to n do a:=i;

repeat
output; [i]{ вывод текущей перестановки }

i:=n;
while a[i-1]>a do dec(i); [i]{ поиск скачка }
j:=i-1;
h:=a[j];
while a[i+1]>h do inc(i); { поиск первого меньшего элемента }
a[j]:=a; a[i]:=h;
i:=j+1; k:=n;
while i<k do begin [i]{ перестановка ”хвоста” }

h:=a[i]; a[i]:=a[k]; a[k]:=h;
inc(i); dec(k)
end
until j=0;
end.


Скомпилированная программа = Прикрепленный файл  Project1.zip ( 23.66 килобайт ) Кол-во скачиваний: 8


И ещё одна интересная ссылка = http://www.webdelphi.ru/2010/03/kombinatorika-v-delphi-kak-opredelit-vse-perestanovki-massive/

Вариации программы можно сделать разные. Суть не в этом.

Для программистов и тех, кто не боится сложностей могу предложить интересный эксперимент!)
В процедуру по выводу строки перестановки на экран помещаем следующие модули:
а) Распознавание чисел = например, "01" := "6п", "02" := "7п", ... , "09" := "Тп", "10" := "7б" и т.д. от "01" до "36" будут карты от "6п" до "Тч". Как-то так.
б) Создание расклада = распознанные числа загоняются в массив колоды для последующей обработки.
в) Проверка расклада на ПростуюСходимость = т.е. проверка, сходится ли расклад или нет? Нужно, чтобы после последней свёртки оставались 2 карты.
г) Если расклад сходится, то заносим его в отдельный массив или сохраняем в файл. Если нет, то, при необходимости сбора статистической информации, делаем то же самое, что и со сходимым.
д) Дожидаемся полной отработки программой всех вариантов перестановок.

Ожидаемые и наиболее вероятные проблемы:
а) Ограничение языка программирования. Пример = 24! = 620448401733239439360000 штук перестановок для колоды в 24 карты, а Max значение int64 = 9223372036854775807, т.е. для записей всех перестановок для колоды в 24 карты потребуется 67270 штук переменных только для хранения ИНДЕКСОВ (номеров) этих перестановок ab.gif. Для этого и рекомендую фиксировать ТОЛЬКО сходящиеся цепочки и их параметры.
б) Ограничение ресурсов компьютерного железа = я не разбираюсь в тонкостях распределения оперативки и других ресурсов компа, но предвижу просто падение программы/системы при подходе к критическому числу перебранных комбинаций. Решение? Не выводить на экран результаты (окно всё будет больше расти Вниз, следовательно что-то с видео-памятью будет) или выводить только в одно положение (очищать экран).

Что не так - не обессутьте) Поправьте, где не так.

Единственное, в чём я уверен, это то, что для 24х карт можно собрать ВСЕ сходимые расклады колоды. Это будет по одной карте на черту в гексе и по 6 номиналов, вместо 9ти. А там уже до анализа всех сходимых раскладов и нахождения корней - рукой подать)

Кто выскажет желание поучаствовать в эксперименте - обеспечу со своей стороны всем необходимым для компоновки программы.

Всех с наступившим НГ!))


--------------------
retikularnajaformacija = мой скайп. Пишите.)
Перейти в начало страницы
 
+Цитировать сообщение
Чацкий
сообщение 3.1.2013, 5:16
Сообщение #5


Проходивший мимо
*

Группа: Пользователи
Сообщений: 49
Регистрация: 16.2.2012
Пользователь №: 99 628
Знак Зодиака:
Страна:




Гибрид ПМК, версия 007.


Ну чтож... готов выложить для тестирования ПМ Калькулятор (версия 007), совмещающий в себе основные функции ПМ Калькуляторов: pmc 2.3.7, pmc 3.1.12, pmc 3.4.21.

Программа для скачивания и тестирования = Прикрепленный файл  ProjectPMK07.zip ( 376.22 килобайт ) Кол-во скачиваний: 25


Основные функции ab.gif :
0. Анализ введёного расклада.
1. Генерация сходящихся раскладов карт без фильтров.
2. Генерация сходящихся раскладов карт с использованием фильтров:
2.1. Фильтр по количеству транзитов.
2.2. Фильтр по EFL (максимальной свёртке транзита).
2.3. Фильтр по Положению Целевой Карты (место в раскладе Целевой Карты = карты EFL).
2.4. Фильтр по Значению Целевой Карты (масть + номинал Целевой Карты).

На рисунке приведены основные комментарии.



Алгоритм прохода фильтров до безобразия прост:

{13}{ Показать Создать ЦС ПМ }
procedure TForm1.ButtonPMGClick(Sender: TObject);

var K1:TPMKoloda;
s1,s2,s3,
ss:string;
bb,b1,b2:Byte;
i,j:Integer;

Flag,
Flag1: Boolean;

Time0,
Time1:TTime;

Hours,
Minutes,
mSeconds,
Seconds:Extended;
label Again,
GoForward, GoForward1;

begin
Form1.Edit1.Text:=FillBasicKoloda;
Form1.ButtonCheckString.Enabled := False;

Memo1.Clear;
ClearAllGrafs;

VsegoVariants := 0;

Time0:=now();

Again:

Flag := False;

repeat
s1:=GeneratePM(K1);{ Сгенерировать RANDOM цепочку, которая сходится }
inc(VsegoVariants);

Form1.Label1.Caption := 'Перебрали = ' + IntToStr(VsegoVariants) + ' вариантов';
Form1.Refresh;

if SimpleCheckKoloda(K1)=2 then Flag := True;

until Flag = True;

DetailedCheckKoloda(K1);

if CheckBox1.Checked = True then { Если включен Фильтр №1 = по Количеству транзитов }
begin
if K1.NumOfTransits <= StrToInt( ComboBox1.Items.Strings[ComboBox1.ItemIndex] ) then Flag1 := True
else Flag1 := False;

if Flag1 = False then goto Again;
end;

Flag1 := False;

if CheckBox2.Checked = True then { Если включен Фильтр №2 = по Значению EFL }
begin
if StrToInt( GetEFL(K1, ss, bb) ) >= StrToInt( ComboBox2.Items.Strings[ComboBox2.ItemIndex] ) then Flag1 := True
else Flag1 := False;

if Flag1 = False then goto Again;
end;

Flag1 := False;

s3:=GetEFL(K1, s2, b2);

if CheckBox3.Checked = True then { Если включен Фильтр №3 = по Положению EFL }
begin
for i:=1 to K1.Kol_voEFL do { Если EFL больше чем один раз встретилось }
begin
bb := StrToInt( ComboBox3.Items.Strings[ComboBox3.ItemIndex] ); { Из фильтра взяли Положение }
if (b2=bb) { Сравнили с положением i-го EFL-а }
then
begin
Flag1 := True;
goto GoForward; { При первом же выполнении условий фильтра выходим из проверки }
end
else Flag1 := False;

end;

if Flag1 = False then goto Again;
end;

GoForward:


Flag1 := False;

ss := ComboBox4.Items.Strings[ComboBox4.ItemIndex];

Form1.Refresh;

if CheckBox4.Checked = True then { Если включен Фильтр №4 = по Карте EFL }
begin
for i:=1 to K1.Kol_voEFL do { Если EFL больше чем один раз встретилось }
begin
ss := ComboBox4.Items.Strings[ComboBox4.ItemIndex]; { Из фильтра взяли Значение карты }

if ( Copy(ss,1,1)='?' ) { Если вместо Номинала = "?" }
then
if ( Copy(ss,2,1)=Copy(K1.EFLcard[i],2,1 ) ) { Сравнили со Значением Масти i-го EFL-а }
then
begin
Flag1 := True;
goto GoForward1; { При первом же выполнении условий фильтра выходим из проверки }
end
else Flag1 := False;

if (Copy(ss,2,1)='?') { Если вместо Масти = "?" }
then
if ( Copy(ss,1,1)=Copy(K1.EFLcard[i],1,1 ) ) [i]{ Сравнили со Значением Номинала i-го EFL-а }
then
begin
Flag1 := True;
goto GoForward1; { При первом же выполнении условий фильтра выходим из проверки }
end
else Flag1 := False;

if (ss=K1.EFLcard[i]) { Сравнили со Значением i-го EFL-а }
then
begin
Flag1 := True;
goto GoForward1; { При первом же выполнении условий фильтра выходим из проверки }
end
else Flag1 := False;

end;

if Flag1 = False then goto Again;
end;

GoForward1:

Form1.Edit1.Text:=s1;

ButtonCheckString.Enabled := True;

Time1:=now();

mSeconds := ( MilliSecondsBetween(Time1,Time0) );
Hours := trunc( mSeconds / (1000*60*60) );
Minutes := trunc( mSeconds / (1000*60) );
Seconds := trunc( mSeconds / 1000 );
// round(a) - до ближайшего большего
// trunc(a) - до ближайшего меньшего


mSeconds := mSeconds - Seconds*1000 - Minutes*1000*60 - Hours*1000*60*60;
Seconds := Seconds - Minutes*60 - Hours*60*60;
Minutes := Minutes - Hours*60;

Memo1.Lines.Add( 'Генерировать Начали в = ' + DateToStr(Time0) + ' ' + TimeToStr(Time0) );
Memo1.Lines.Add( 'Генерировать Закончили в = ' + DateToStr(Time1) + ' ' + TimeToStr(Time1) );
Memo1.Lines.Add( 'Времени ушло = ' + FloatToStr( Hours ) + ' часов, ' + FloatToStr( Minutes ) + ' минут, ' + FloatToStr( Seconds ) + ' секунд, ' + FloatToStr( mSeconds ) + ' миллисекунд');

end;

Цитата(Чацкий @ 3.1.2013, 4:01) *
Основные функции ab.gif :
0. Анализ введёного расклада.
1. Генерация сходящихся раскладов карт без фильтров.
2. Генерация сходящихся раскладов карт с использованием фильтров:
2.1. Фильтр по количеству транзитов.
2.2. Фильтр по EFL (максимальной свёртке транзита).
2.3. Фильтр по Положению Целевой Карты (место в раскладе Целевой Карты = карты EFL).
2.4. Фильтр по Значению Целевой Карты (масть + номинал Целевой Карты).


По пункту №2 есть существенные претензии по скорости работы. Существуют, на мой взгляд, следующие варианты увеличения скорости работы программы: алгоритмизация подбора сходящейся части кода, длинной N-карт. Для этих целей забью в прогу алгоритм экспресс-метода APRIL. Смотрим ссылку = http://aprilspirit.ru/%D0%B2%D0%BE%D0%B7%D...BB%D0%BE%D0%B5/

Что это даст?
1) При имеющемся алгоритме генерации сходящегося куска колоды мы получим всё необходимое для прохождения фильтра №2.2.
2) Перед генерацией куска колоды зададим значение последней карты (помним, что в сходящемся раскладе две последние карты являются неизменными) - это будет Целевая Карта = решение для фильтра №2.4.
3) Перед генерацией остальной колоды, кроме заранее подготовленного куска, мы этот кусок с Целевой Картой перемещаем в раскладе таким образом, чтобы положение Целевой Карты совпало с требованиями фильтра 2.3.

Требуемый Алгоритм работы программы:
а) Задаём Целевую карту (карты) = решение для фильтра №2.4.
б) Генерируем сходящийся кусок колоды с заранее определённым EFL = решение для фильтра №2.2.
в) Помещаем готовый кусок колоды в положение Целевой карты = решение для фильтра №2.3.
г) Генерируем оставшиеся куски колоды Слева и Справа от готового куска колоды и смотрим сколько получилось Транзитов в сумме = решение для фильтра №2.1.

Сообщение отредактировал Чацкий - 3.1.2013, 5:19


--------------------
retikularnajaformacija = мой скайп. Пишите.)
Перейти в начало страницы
 
+Цитировать сообщение
Чацкий
сообщение 3.1.2013, 10:32
Сообщение #6


Проходивший мимо
*

Группа: Пользователи
Сообщений: 49
Регистрация: 16.2.2012
Пользователь №: 99 628
Знак Зодиака:
Страна:




Цитата(Чацкий @ 3.1.2013, 4:16) *
По пункту №2 есть существенные претензии по скорости работы. Существуют, на мой взгляд, следующие варианты увеличения скорости работы программы: алгоритмизация подбора сходящейся части кода, длинной N-карт. Для этих целей забью в прогу алгоритм экспресс-метода APRIL. Смотрим ссылку = http://aprilspirit.ru/%D0%B2%D0%BE%D0%B7%D...BB%D0%BE%D0%B5/


Повозиться пришлось, но алгоритм от April (низкий поклон ей) работает просто чудесно!))

Цитата
Целевая Карта = 6п | EFL = 5
EFL объём = 5
EFL карта = 6п

01 02 03 04 05 06 07 № ЦС
Вч Xч Дп 6к 6б 7ч 6п # 001.
Вб 6ч 6к Xп Кп Кб 6п # 002.
Дп Кб Кч 6к Xп Кп 6п # 003.
8б 7б 9п Тп 6б Дб 6п # 004.
8к 9п Xп 6к 6б Тп 6п # 005.
Кп 9к 6к Тп 7п Дк 6п # 006.
Дп Тб Вб 9п Тп 6б 6п # 007.
Кч Вб 6б Xп Вп Кб 6п # 008.
9п 8б Xб Тп 8п 7б 6п # 009.
Дп 6ч 9ч 9п 8п Кч 6п # 010.

Генерировать Начали в = 03.01.2013 10:36:52
Генерировать Закончили в = 03.01.2013 10:36:52
Времени ушло = 0 часов, 0 минут, 0 секунд, 46 миллисекунд


Цитата
Целевая Карта = 6п | EFL = 6
EFL объём = 6
EFL карта = 6п

01 02 03 04 05 06 07 08 № ЦС
8п Дп Вб 9к 7п Тп 9б 6п # 001.
Дк Кч Xп Тк 6ч 7п Xк 6п # 002.
Тч Дп Кк 6к 6ч 9п Тк 6п # 003.
Xп Xб 6ч Вп 9п 6б Xч 6п # 004.
Xч Дп Вп Вк 6ч 7п Вб 6п # 005.
Дч 6ч Вп Тк 6к Дп Тч 6п # 006.
Дк Вп 9п 6б 6ч 7п Вк 6п # 007.
Кч 7б Тп Вп 6б 6к Вч 6п # 008.
6к Кч 7п 7к 6ч Xп Вк 6п # 009.
Xп 8п Кч 9ч 7п Дп Xч 6п # 010.

Генерировать Начали в = 03.01.2013 10:37:14
Генерировать Закончили в = 03.01.2013 10:37:14
Времени ушло = 0 часов, 0 минут, 0 секунд, 108 миллисекунд


Цитата
Целевая Карта = 6п | EFL = 7
EFL объём = 7
EFL карта = 6п

01 02 03 04 05 06 07 08 09 № ЦС
Xч Дб 9п Вч 8ч 6б Вп Кч 6п # 001.
Тк Тб Дп 6к Вк Тп Xп Кк 6п # 002.
Xп Вп 6ч 6б 9к Тп Дп 6к 6п # 003.
9п 8б 7ч Кч 6б Дп Кп Вч 6п # 004.
Вк Тк Кб Кп Тп 6ч 6к Кк 6п # 005.
9к 8п Кб Вб 6к Дп 9п 9б 6п # 006.
9п Вп 6ч 9б 8п Xп 6б 9ч 6п # 007.
7п Кч Кб Тб 6ч Дп Тп 6б 6п # 008.
6ч 9п Дп Тб 8б 7п Тп Xб 6п # 009.
Тч 8п Дп 6к 8ч Xп 9п 7ч 6п # 010.

Генерировать Начали в = 03.01.2013 10:37:35
Генерировать Закончили в = 03.01.2013 10:37:35
Времени ушло = 0 часов, 0 минут, 0 секунд, 311 миллисекунд


Цитата
Целевая Карта = 6п | EFL = 8
EFL объём = 8
EFL карта = 6п

01 02 03 04 05 06 07 08 09 10 № ЦС
6ч 9к Тп Вч 6к Тб Вп Xп Тк 6п # 001.
7к 9п 9ч Кч Вк Дк 6ч 6б Xк 6п # 002.
Тп Кч 7б Вп 8ч 6б 7п 9п 6ч 6п # 003.
9п Тк Кб Xб Тп 9ч 6б Вп Xч 6п # 004.
Вп 7к Тб Дп Дч 6б 9п Кп 7ч 6п # 005.
Вк Тп 9б 6ч Xп Кб 6б 8п Кк 6п # 006.
Тк 9к 8п 6б 7к Вк Вп Кп 8к 6п # 007.
7п 8п Кч Xч Xп Тп 6ч 6к Кп 6п # 008.
Xч 9п Дб Дк 6к 8ч Дп Xп 9ч 6п # 009.
Дч 6б 7п Xч 8ч 6к Xп Тп 6ч 6п # 010.

Генерировать Начали в = 03.01.2013 10:37:46
Генерировать Закончили в = 03.01.2013 10:37:47
Времени ушло = 0 часов, 0 минут, 0 секунд, 811 миллисекунд


Цитата
Целевая Карта = 6п | EFL = 9
EFL объём = 9
EFL карта = 6п

01 02 03 04 05 06 07 08 09 10 11 № ЦС
6б Xб Кч Тп Xп Дч 8ч Вп Кп 6ч 6п # 001.
7б Кч Дч 7к 7п 9ч 6ч 8п Вп 7ч 6п # 002.
Xп Дп Кк Кб Вп Xк 9б Кп 6к Xб 6п # 003.
6к 6ч Кч 8п 9п Дб Тч Вп 6б Дч 6п # 004.
Кп 9п Вч Кб Тп 7ч Дч Дп 6к Кч 6п # 005.
9п Вп 6ч 9ч Тп 6к Вч 7п Xп Кч 6п # 006.
8ч Кч Вп Вб Дч 6ч 8п Кп 6к Вч 6п # 007.
Тп 6к 6ч 9п Xп Дч 7ч 6б Вп Тч 6п # 008.
7ч 6ч 8п Xп Дч Вч 9б 7п Кп 9ч 6п # 009.
6ч 9б Кб Дп 7п 7б Тб Xп 9п 6б 6п # 010.

Генерировать Начали в = 03.01.2013 10:38:02
Генерировать Закончили в = 03.01.2013 10:38:04
Времени ушло = 0 часов, 0 минут, 1 секунд, 703 миллисекунд


Цитата
Целевая Карта = 6п | EFL = 10
EFL объём = 10
EFL карта = 6п

01 02 03 04 05 06 07 08 09 10 11 12 № ЦС
Дк 6б 6ч Дп 9к 8к Тп Кч 6к 9п Дч 6п # 001.
Xп 7п 6б Вч Кп 9п 8б 7б Вп Тп Xб 6п # 002.
Вп 8п 9к 7к Дп 9б 7ч Тч 9п 7п 6ч 6п # 003.
7п 9п Дк 6п Дп 9б 7ч Тч 9п 7п 6ч 6п # 004.
7п Вп Вк 6п Дп 9б 7ч Тч 9п 7п 6ч 6п # 005.
9п Вп Дч 6п Дп 9б 7ч Тч 9п 7п 6ч 6п # 006.
8п 7п Кб 6п Дп 9б 7ч Тч 9п 7п 6ч 6п # 007.
Дп Xп Кб 6п Дп 9б 7ч Тч 9п 7п 6ч 6п # 008.
Тп 9б Вб Xч Дч Дп Xб Кб Вп 7п Дб 6п # 009.
7ч Xп Xб Вк 9к 7п Дб 6б 6к 9п Тб 6п # 010.

Генерировать Начали в = 03.01.2013 10:38:26
Генерировать Закончили в = 03.01.2013 10:38:34
Времени ушло = 0 часов, 0 минут, 7 секунд, 733 миллисекунд




Как видно по времени генерации готовых микро ЦС - перспективы довольно радужные. При замедлении работы на более высоких Глубинах свёртки можно использовать уже готовые с простым приращением (я так думаю) :)
Осталось по этому алгоритму вывести побольше микро цепочек для анализа и выведения паттернов для дальнейшего использования в поисках корней ЦС ПМ и ускорении работы калькулятора.)


--------------------
retikularnajaformacija = мой скайп. Пишите.)
Перейти в начало страницы
 
+Цитировать сообщение
exorcist
сообщение 3.1.2013, 12:51
Сообщение #7


Один из многих
**

Группа: Пользователи
Сообщений: 122
Регистрация: 12.8.2010
Из: Уфа
Пользователь №: 35 502
Знак Зодиака:
Страна:




Цитата(Чацкий @ 2.1.2013, 19:14) *
б) Ограничение ресурсов компьютерного железа = я не разбираюсь в тонкостях распределения оперативки и других ресурсов компа, но предвижу просто падение программы/системы при подходе к критическому числу перебранных комбинаций. Решение? Не выводить на экран результаты (окно всё будет больше расти Вниз, следовательно что-то с видео-памятью будет) или выводить только в одно положение (очищать экран).


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

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

А что ручной подборки цепочки в нем нет? Только для целевой карты? Да и гексограмм в нем не видно, я к ним привык.
Перейти в начало страницы
 
+Цитировать сообщение
Чацкий
сообщение 3.1.2013, 13:08
Сообщение #8


Проходивший мимо
*

Группа: Пользователи
Сообщений: 49
Регистрация: 16.2.2012
Пользователь №: 99 628
Знак Зодиака:
Страна:




Цитата(exorcist @ 3.1.2013, 11:51) *
А что ручной подборки цепочки в нем нет?


Если ты про "генерацию сходящейся ЦС по произвольной маске", т.е. чтобы там руками вбивать карты, значки = "**", "?" и т.д., то это в процессе. Меня они меньше всего заботят с точки зрения построения алгоритмов, т.к. не представляют особой сложности.


Цитата(exorcist @ 3.1.2013, 11:51) *
Только для целевой карты?


В основном - да.


Цитата(exorcist @ 3.1.2013, 11:51) *
Да и гексограмм в нем не видно, я к ним привык.


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

Если есть пожелания к ПМ Калькулятору - пиши, как, что и в каком виде хотелось бы юзать.


--------------------
retikularnajaformacija = мой скайп. Пишите.)
Перейти в начало страницы
 
+Цитировать сообщение
exorcist
сообщение 3.1.2013, 16:40
Сообщение #9


Один из многих
**

Группа: Пользователи
Сообщений: 122
Регистрация: 12.8.2010
Из: Уфа
Пользователь №: 35 502
Знак Зодиака:
Страна:




Цитата(Чацкий @ 3.1.2013, 13:08) *
Ну почему же? Номера гексаграмм показывает адекватно. Потом введу какую-нибудь приятную глазу фичу для их обозначения, а пока что они в таблице по центру приложения в столбце "#g". При нажатии на номер гексаграммы выдаст в окошке её описание.


А понятно, тогда хорошо.
Перейти в начало страницы
 
+Цитировать сообщение
Чацкий
сообщение 5.1.2013, 12:38
Сообщение #10


Проходивший мимо
*

Группа: Пользователи
Сообщений: 49
Регистрация: 16.2.2012
Пользователь №: 99 628
Знак Зодиака:
Страна:




Цитата(Чацкий @ 2.1.2013, 19:14) *
Перебор ВСЕХ возможных вариантов перестановок n-символов.


Первоначальные эксперименты базировались на попытке анализа всех возможных комбинаций перестановок заранее заданного массива колоды. Перелопатил кучу литературы по комбинаторике. Познакомился с таким интересным понятием, как Рекурсия и лексикографический порядок ))).


Терзают меня смутные сомнения... такое чувство, что отыскал тот... "трикс", что поможет реализовать указанное в заголовке, т.е. создание выборки всех возможных сходящихся вариантов раскладов ПМ.
Снова отыскав у себя в архивах алгоритм получения всех возможных перестановок для N символов в лексиграфическом порядке и, что важно, без использования уважаемой мною Рекурсии, принялся за шаманские пляски с бубном. На данный момент обработано 10'000'000 перестановок. Из них 4'654'346 сходящихся цепочек. Программка работает шустренько.

Цитата
Генерировать Начали в = 05.01.2013 11:57:41
Генерировать Закончили в = 05.01.2013 12:25:46
Времени ушло = 0 часов, 28 минут, 4 секунд, миллисекунд


Т.е. 28 минут на обработку 10'000'000 перестановок. Получился файлик размером 445 МБ... А вот открыть его - уже тяжеловато)) Надо переделать...

Программка не использует ни массивы для хранения данных, ни какие другие "распухающие" в процессе наполнения переменные. Всё постарался сделать на-лету.

Цитата
Обработка 2'000'000 перестановок =
Генерировать Начали в = 05.01.2013 12:38:22
Генерировать Закончили в = 05.01.2013 12:45:58
Времени ушло = 0 часов, 7 минут, 36 секунд, миллисекунд





Сейчас попробую автоматизировать отбор цепочек и распределение по файлам, а там уже будет видно, что со всем этим хозяйством делать))


--------------------
retikularnajaformacija = мой скайп. Пишите.)
Перейти в начало страницы
 
+Цитировать сообщение
Чацкий
сообщение 5.1.2013, 12:38
Сообщение #11


Проходивший мимо
*

Группа: Пользователи
Сообщений: 49
Регистрация: 16.2.2012
Пользователь №: 99 628
Знак Зодиака:
Страна:




Цитата(Чацкий @ 2.1.2013, 19:14) *
Перебор ВСЕХ возможных вариантов перестановок n-символов.


Первоначальные эксперименты базировались на попытке анализа всех возможных комбинаций перестановок заранее заданного массива колоды. Перелопатил кучу литературы по комбинаторике. Познакомился с таким интересным понятием, как Рекурсия и лексикографический порядок ))).


Терзают меня смутные сомнения... такое чувство, что отыскал тот... "трикс", что поможет реализовать указанное в заголовке, т.е. создание выборки всех возможных сходящихся вариантов раскладов ПМ.
Снова отыскав у себя в архивах алгоритм получения всех возможных перестановок для N символов в лексиграфическом порядке и, что важно, без использования уважаемой мною Рекурсии, принялся за шаманские пляски с бубном. На данный момент обработано 10'000'000 перестановок. Из них 4'654'346 сходящихся цепочек. Программка работает шустренько.

Цитата
Генерировать Начали в = 05.01.2013 11:57:41
Генерировать Закончили в = 05.01.2013 12:25:46
Времени ушло = 0 часов, 28 минут, 4 секунд, миллисекунд


Т.е. 28 минут на обработку 10'000'000 перестановок. Получился файлик размером 445 МБ... А вот открыть его - уже тяжеловато)) Надо переделать...

Программка не использует ни массивы для хранения данных, ни какие другие "распухающие" в процессе наполнения переменные. Всё постарался сделать на-лету.

Цитата
Обработка 2'000'000 перестановок =
Генерировать Начали в = 05.01.2013 12:38:22
Генерировать Закончили в = 05.01.2013 12:45:58
Времени ушло = 0 часов, 7 минут, 36 секунд, миллисекунд





Сейчас попробую автоматизировать отбор цепочек и распределение по файлам, а там уже будет видно, что со всем этим хозяйством делать))


--------------------
retikularnajaformacija = мой скайп. Пишите.)
Перейти в начало страницы
 
+Цитировать сообщение
aaleksander
сообщение 6.1.2013, 0:58
Сообщение #12


Хранитель
*****

Группа: Пользователи
Сообщений: 691
Регистрация: 23.10.2011
Пользователь №: 93 153
Знак Зодиака:
Страна:




В свое время забросил лексиграфическую перестановку из-за того, что время перебора полной колоды просто нереально большое. А ведь еще надо пропускать через фильтры и гексаграммы.
Случайные перестановки работают куда эффективнее, но менее предсказуемо.
После праздников гляну на работе свои наработки на этот счет. Интересно сравнить скорость перебора.

Сообщение отредактировал aaleksander - 6.1.2013, 0:59


--------------------
У меня нет ЧСВ и я горжусь этим.
Перейти в начало страницы
 
+Цитировать сообщение
Чацкий
сообщение 7.1.2013, 0:14
Сообщение #13


Проходивший мимо
*

Группа: Пользователи
Сообщений: 49
Регистрация: 16.2.2012
Пользователь №: 99 628
Знак Зодиака:
Страна:




Цитата(aaleksander @ 5.1.2013, 23:58) *
В свое время забросил лексиграфическую перестановку из-за того, что время перебора полной колоды просто нереально большое. А ведь еще надо пропускать через фильтры и гексаграммы.
Случайные перестановки работают куда эффективнее, но менее предсказуемо.
После праздников гляну на работе свои наработки на этот счет. Интересно сравнить скорость перебора.


Приветствую тебя!
Буду рад сотрудничеству!))

Долго - да. Т.к. количество перестановок просто огромное.

Решение нашёл следующее:
1) Имею: расклад по порядку с номером N; количество сошедшихся цепочек M; значение k = количеству файлов сохранённых.
2) Присваиваю текстовой переменной значение расклада для получения строчки, которую можно вбить в калькулятор для анализа.
3) По результату функции SimpleCheckKoloda = 2 (т.е. сложилось до 2х карт = сходящийся пасьянс), перехожу записи в файл строки расклада и M:=M+1. Полный анализ колоды не делается и никакие другие операции, т.к. это замедляет работу программы в разы. При любом другом варианте, отличном от 2х, перехожу к следующему раскладу и N:=N+1.
4) При достижении количества рассмотренных вариантов = 1'000'000 шт сбрасываю показатель N:=0, сохраняю файл с именем k+' имя файла.txt' и k:=k+1.

Таким образом получаю возможность не зависеть от максимальных индексов переменных, что могут убить прогу и возможность начать снова с любого места. Как? Легко!)) Имея номер обрыва рассматриваемой цепочки, задаю его перед пунктом №2 в качестве фильтра и всё. Или то же самое с самой цепочкой = фильтр на сравнение строк цепочек.

Пока что нерешённым остался вопрос отсутствия необходимого дискового пространства и медленной скорости работы нетбука... По первому вопросу решил переделать всё для 6ти номиналов с 9ти, а по второму - решил не париться))

На данный момент остановился на колоде из 36ти карт на 48'000'000 обработанных вариантах. Сходящиеся цепочки = 19'858'557 штук. Может меньше на штук 15 из-за повторах начальных и конечных в сохранённых файлах. Скорость записи = 7-9 минут на каждые 2'000'000 вариантов = около 1'700 вариантов сходящихся ЦС в секунду.

Цитата

+ +
Генерировать Начали в = 05.01.2013 12:38:22
Генерировать Закончили в = 05.01.2013 12:45:58
Времени ушло = 0 часов, 7 минут, 36 секунд, -420000 миллисекунд
- -
Генерировать Начали в = 05.01.2013 12:48:09
Генерировать Закончили в = 05.01.2013 12:55:39
Времени ушло = 0 часов, 7 минут, 29 секунд, -419172 миллисекунд
+ +
Генерировать Начали в = 05.01.2013 13:02:35
Генерировать Закончили в = 05.01.2013 13:11:09
Времени ушло = 0 часов, 8 минут, 33 секунд, -479140 миллисекунд
- -
Генерировать Начали в = 05.01.2013 13:12:01
Генерировать Закончили в = 05.01.2013 13:19:58
Времени ушло = 0 часов, 7 минут, 56 секунд, -419220 миллисекунд
+ +
Генерировать Начали в = 05.01.2013 13:21:18
Генерировать Закончили в = 05.01.2013 13:35:53
Времени ушло = 0 часов, 14 минут, 35 секунд, -839640 миллисекунд
- -
Генерировать Начали в = 05.01.2013 13:37:13
Генерировать Закончили в = 05.01.2013 13:47:35
Времени ушло = 0 часов, 10 минут, 22 секунд, -599157 миллисекунд
+ +
Генерировать Начали в = 05.01.2013 13:47:55 17000000 -> 19000000
Генерировать Закончили в = 05.01.2013 13:55:38
Времени ушло = 0 часов, 7 минут, 42 секунд, -419250 миллисекунд
+ +
Генерировать Начали в = 05.01.2013 13:59:16
Генерировать Закончили в = 05.01.2013 14:09:52
Времени ушло = 0 часов, 10 минут, 35 секунд, -599922 миллисекунд
+ +
Генерировать Начали в = 05.01.2013 14:18:02 22000000 -> 24000000
Генерировать Закончили в = 05.01.2013 14:27:51
Времени ушло = 0 часов, 9 минут, 49 секунд, -539564 миллисекунд
+ +
Генерировать Начали в = 05.01.2013 14:38:54 24000000 -> 27000000
Генерировать Закончили в = 05.01.2013 14:51:06
Времени ушло = 0 часов, 12 минут, 12 секунд, -719937 миллисекунд
+ +
Генерировать Начали в = 05.01.2013 14:52:22 27'000'000 -> 30'000'000
Генерировать Закончили в = 05.01.2013 15:02:57
Времени ушло = 0 часов, 10 минут, 35 секунд, -599532 миллисекунд
- -
Генерировать Начали в = 05.01.2013 15:08:35 30'000'000 -> 33'000'000
Генерировать Закончили в = 05.01.2013 15:18:56
Времени ушло = 0 часов, 10 минут, 20 секунд, -599126 миллисекунд
- -
Генерировать Начали в = 05.01.2013 15:19:38 33'000'000 -> 36'000'000
Генерировать Закончили в = 05.01.2013 15:31:18
Времени ушло = 0 часов, 11 минут, 40 секунд, -659328 миллисекунд
- -
Генерировать Начали в = 05.01.2013 15:31:36 36'000'000 -> 39'000'000
Генерировать Закончили в = 05.01.2013 15:43:09
Времени ушло = 0 часов, 11 минут, 33 секунд, -659984 миллисекунд
+ +
Генерировать Начали в = 05.01.2013 15:44:55 39'000'000 -> 42'000'000
Генерировать Закончили в = 05.01.2013 15:54:34
Времени ушло = 0 часов, 9 минут, 39 секунд, -539782 миллисекунд
+ +
Генерировать Начали в = 05.01.2013 15:57:22 42'000'000 -> 45'000'000
Генерировать Закончили в = 05.01.2013 16:08:47
Времени ушло = 0 часов, 11 минут, 25 секунд, -659344 миллисекунд
- -
Генерировать Начали в = 05.01.2013 16:21:18 45'000'000 -> 48'000'000
Генерировать Закончили в = 05.01.2013 16:33:53
Времени ушло = 0 часов, 12 минут, 35 секунд, -719891 миллисекунд


Цитата
{05}{ === Простая проверка на сходимость === }
function SimpleCheckKoloda(K1:TPMKoloda):Byte;{ Если сходится, то SimpleCheckKoloda:=2 если нет, то число больше 2х }
var a, { Указатель на рассматриваемую карту }
aminus, { Карта левее рассматриваемой }
aplus, { Карта правее рассматриваемой }
b:Integer; { Указатель от рассматриваемой карты до конца возможных свёрток }
K2:TPMKoloda; { Колода для изменений в которой работаем }
num:Integer; { Хранит число длины цепочки }
begin
K2:=K1; { K2(тестовое состояние) = K1(текущее состояние) }
a:=1; { Указатель на начало }
num:=KartVKolode; { Начальная длина рассматриваемой колоды }
repeat
if num<3 then break; { Если осталось 2 карты = выход }
aminus:=a; { (a-1) Карта слева }
inc(a); { Увеличивает счётчик карт }
if a>=num then break; { Выход, если указатель карты a > длины ЦС }
aplus:=a+1; { (a+1) Карта справа }
{ Для самого начала. aminus:=1; a:=2; aplus:=3; Т.е. начали со 2й карты по 35ю, как и требовалось }
if (K2.Card[aminus].M=K2.Card[aplus].M) or (K2.Card[aminus].N=K2.Card[aplus].N) then
begin { условие сложения выполнилось }
for b:=a to num do K2.Card[b-1]:=K2.Card[b]; { сжатие ЦС в точке указателя }
dec(num); { длина ЦС уменьшилась }
a:=1; { указатель на начало }
end;
until false; { и снова... }
SimpleCheckKoloda:=num; {Сохраняем число карт после которого свёрток больше не будет}
end; {поэтому и объявляется как "var" K1:TPMKoloda}


--------------------
retikularnajaformacija = мой скайп. Пишите.)
Перейти в начало страницы
 
+Цитировать сообщение
aaleksander
сообщение 7.1.2013, 1:32
Сообщение #14


Хранитель
*****

Группа: Пользователи
Сообщений: 691
Регистрация: 23.10.2011
Пользователь №: 93 153
Знак Зодиака:
Страна:




Цитата
end; {поэтому и объявляется как "var" K1:TPMKoloda}


Где? Пост исходников неблагодарное дело. Помести ссылку на github в начале топике: кому надо - загрузят и посмотрят.

Цитата
for b:=a to num do
K2.Card[b-1]:=K2.Card[b]; { сжатие ЦС в точке указателя }


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


Хотя не. Давай исходники критичных участков сюда: лень скачивать целиком и все просматривать ah.gif


--------------------
У меня нет ЧСВ и я горжусь этим.
Перейти в начало страницы
 
+Цитировать сообщение
Phil
сообщение 7.1.2013, 15:07
Сообщение #15


Любитель
**********

Группа: Пользователи
Сообщений: 7 602
Регистрация: 22.4.2008
Пользователь №: 8 917
Знак Зодиака:
Страна:




Цитата(aaleksander @ 7.1.2013, 0:33) *
Где? Пост исходников неблагодарное дело. Помести ссылку на github в начале топике: кому надо - загрузят и посмотрят.

Не согласен. Точнее, исходники лучше выкладывать в конце, а не в начале. Или же обмениваться ими среди тех, кто понимает, программистов. Мне же они, например, мало нужны ab.gif - я не программист. Но вот конечный вариант сохранил бы, потому как от Миста, например, не осталось почти ничего. И от Лаборатории тоже, а там были когда-то исходники "плетения кос". Понимая и признавая "авторское право", считаю, что такие вещи лучше всё же сохранять "для истории". Дабы не переоткрывать велосипеды. Ведь будь сейчас исходник калькулятора Миста - уверен, всё было бы куда проще.

Ладно, это так, в сторону. Удачи вам, программисты. Надеюсь, что полученный результат будет и шустрым, как у Миста ab.gif и весьма эффективным и информативным, как "смесь" двух калькуляторов.
Перейти в начало страницы
 
+Цитировать сообщение
Ariant11
сообщение 12.1.2013, 3:35
Сообщение #16


Один из многих
**

Группа: Пользователи
Сообщений: 75
Регистрация: 18.5.2010
Из: Москва
Пользователь №: 26 296
Знак Зодиака:
Страна:




вот это деятельность вы, ребят, развернули. Выражаю искреннее восхищение вашим трудом и усердием) у меня духу не хватило за такое садиться)


--------------------
а ты знаешь, кто ты?
Перейти в начало страницы
 
+Цитировать сообщение
Чацкий
сообщение 12.1.2013, 7:34
Сообщение #17


Проходивший мимо
*

Группа: Пользователи
Сообщений: 49
Регистрация: 16.2.2012
Пользователь №: 99 628
Знак Зодиака:
Страна:




Цитата(Ariant11 @ 12.1.2013, 2:35) *
вот это деятельность вы, ребят, развернули. Выражаю искреннее восхищение вашим трудом и усердием) у меня духу не хватило за такое садиться)


Благодарю.

Очень сильно нужна инфа о балансировке гексаграмм, их взаимном переходе. Также требуются люди, разбирающиеся в теории ДНК тонналя.
Т.к. подошло время оформлять блок программы, относящийся к гексам и ДНК.
Пишите в личку, буду рад помощи.

А пока что выкладываю для общего тестирования ПМК017 от 12.01.2013. Никаких алгоритмов, упрощающих работу не включено. Всё базируется только на Random-select'е.

ПМК017 от 12.01.2013. = Прикрепленный файл  ProjectPMK17.zip ( 388.25 килобайт ) Кол-во скачиваний: 57








--------------------
retikularnajaformacija = мой скайп. Пишите.)
Перейти в начало страницы
 
+Цитировать сообщение
Чацкий
сообщение 1.9.2015, 16:49
Сообщение #18


Проходивший мимо
*

Группа: Пользователи
Сообщений: 49
Регистрация: 16.2.2012
Пользователь №: 99 628
Знак Зодиака:
Страна:




Ээээх... продолжить программить, что ли?)))
Хотя, думаю, проще найти программера и заплатить)))


--------------------
retikularnajaformacija = мой скайп. Пишите.)
Перейти в начало страницы
 
+Цитировать сообщение
Phil
сообщение 2.9.2015, 10:46
Сообщение #19


Любитель
**********

Группа: Пользователи
Сообщений: 7 602
Регистрация: 22.4.2008
Пользователь №: 8 917
Знак Зодиака:
Страна:




Если желание есть - продолжи. О балансировке я уже писал, её основные принципы. В первом Практе. Но могу повторить и здесь. С переходами между гексами сложнее, так как, по словами Миста и первых ХС, там выделялась какая-то энергия. При балансировке. Но я этого не почувствовал. Потому как нужно вести либо исходную, либо сбалансированную цепочку, а вот две сразу не пробовал. С ДНК Тоналя ещё сложнее, там остались только начальные разработки. Например, тот же "ключ". Расшифровок его я так и не нашёл. Как и того, что можно выиграть при переходе по этому ДНК. Если это где и было, то уже кануло в Лету на 99.99999...%
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 18.11.2017, 19:35