Forth http://fforum.winglion.ru/ |
|
*найти все возможные комбинации букв внутри строки http://fforum.winglion.ru/viewtopic.php?f=19&t=1127 |
Страница 2 из 2 |
Автор: | mOleg [ Чт янв 24, 2008 23:55 ] |
Заголовок сообщения: | |
garbler писал(а): mOleg писал(а):garbler
спасибо за участие, но ваш код не полностью соответствует ТЗ 8( надо бы отсеивать уже встреченные комбинации. а они и отсеиваются, тут как раз всё корректно, на каждом шаге рекурсии символ каждого вида юзается только один раз. поскольку перестановки получаются из набора символов всегда все и нет ограничения на порядок их следования (перестановок), то достаточно просто хранить в хвосте нужные символы, не обращая внимания на их порядок. было бы идеально, если бы вы хоть чуть-чуть прокоментировали свой код (это у меня такое желание несбыточное есть |
Автор: | mOleg [ Пт янв 25, 2008 03:49 ] |
Заголовок сообщения: | |
white_TigR писал(а): Код:CREATE SYMS 256 ALLOT
CREATE CODE 10 ALLOT CREATE COUNT 10 ALLOT прошу прощения, для какой системы данное решение? если для СПФ, то не хватает какой-то либы 8( |
Автор: | mOleg [ Пт янв 25, 2008 04:23 ] |
Заголовок сообщения: | |
garbler писал(а): mOleg писал(а): ничего, если я немного прокоментирую ваш код? с удовольствием, буду только рад garbler писал(а): DUP 0 = IF 2DROP 0 EXIT THEN
на самом деле по мелочи, просто бросилось в глаза, лучше так: DUP IFNOT NIP NIP EXIT THEN либо, если ifnot в системе отсутствует: DUP IF ELSE NIP NIP EXIT THEN потому что флаги в форте дважды проявлять не стоит вопрос не принципиальный на самом деле, не счиатйте за замечание, а скорее за примечание |
Автор: | garbler [ Пт янв 25, 2008 11:18 ] |
Заголовок сообщения: | |
вопрос писал(а): но алгоритм всё равно рекурсивный (конец строки - на самом деле начало)
Другое дело - я бы потребовал доказательство, не отсеиваются ли при этом "законные" строки, т.к. не всё меняется со всем с доказательством сложнее, всегда завидовал людям, знающим математику. проверить можно так: для всех вариантов всех строк, скажем, длиной до 5-6 символов сгенерировать все перестановки (подменой cnotfind) в setb и сгенерировать перестановки без дублей исходным алгоритмом в seta далее: 1) должно выполняться условие первого рода - cat seta | sort | uniq == cat seta | sort 2) должно выполняться условие второго рода - cat seta | sort == cat setb | sort | uniq вот такой вот регрессионный тест.... |
Автор: | garbler [ Пт янв 25, 2008 11:25 ] |
Заголовок сообщения: | |
mOleg писал(а): white_TigR писал(а): Код:CREATE SYMS 256 ALLOT CREATE CODE 10 ALLOT CREATE COUNT 10 ALLOT прошу прощения, для какой системы данное решение? если для СПФ, то не хватает какой-то либы 8( это не для spf, но под ним запускается после пары корректировок в начало записать это: Код: : CLS ; IMMEDIATE : GOTOXY POSTPONE 2DROP ; IMMEDIATE : PRINT BEGIN DUP C@ WHILE DUP C@ EMIT 1+ REPEAT DROP ; : Recurs POSTPONE RECURSE ; IMMEDIATE а в конец вот это: Код: S" aabcaaa" DROP variants . CR
а что это за система - надо тигру спрашивать |
Автор: | garbler [ Пт янв 25, 2008 11:41 ] |
Заголовок сообщения: | |
mOleg писал(а): garbler писал(а): DUP 0 = IF 2DROP 0 EXIT THEN на самом деле по мелочи, просто бросилось в глаза, лучше так: DUP IFNOT NIP NIP EXIT THEN либо, если ifnot в системе отсутствует: DUP IF ELSE NIP NIP EXIT THEN потому что флаги в форте дважды проявлять не стоит вопрос не принципиальный на самом деле, не считайте за замечание, а скорее за примечание ммм.... это не совсем флаг был, скорее длинна строки, поэтому я так "шаблонно" и написал. да, думаю, замена адекватная, как вариант ещё так можно: Код: ?DUP IF .... ELSE 0 AND THEN ( или 0 NIP или DROP 0 ) просто я обычно коротким условием обрываю код сразу, чтобы не мешался, не люблю глубокую вложенность структур управления, так что, вот он и второй "шаблон"..... если говорить о флагах, то тогда лучше ещё и cnotfind переписать с применением TRUE и FALSE Код: : (cnotfind) ( c s2 s1 --> t/f )
TRUE -ROT ?DO OVER I C@ = IF FALSE AND LEAVE THEN LOOP NIP ; p.s. 2all: кстати, очень рекомендую книгу А.Шень "Программирование. Теоремы и задачи" изумительная вещь! p.p.s. код со всеми правками здесь |
Автор: | VoidVolker [ Пт янв 25, 2008 11:42 ] |
Заголовок сообщения: | |
mOleg писал(а): прошу прощения, для какой системы данное решение? если для СПФ, то не хватает какой-то либы 8( garbler писал(а): а что это за система - надо тигру спрашивать
Это же Кварк. |
Автор: | white_TigR [ Сб янв 26, 2008 00:47 ] |
Заголовок сообщения: | |
угу. Кварк ) Просто он как то ближе мне... |
Автор: | mOleg [ Сб янв 26, 2008 13:17 ] |
Заголовок сообщения: | |
garbler писал(а): просто я обычно коротким условием обрываю код сразу, чтобы не мешался, не люблю глубокую вложенность структур управления, так что, вот он и второй "шаблон"..... абсолютно правильное решение! я тоже так всегда делаю. white_TigR писал(а): угу. Кварк ) Просто он как то ближе мне...
читаем правила |
Автор: | white_TigR [ Вс янв 27, 2008 01:27 ] |
Заголовок сообщения: | |
mOleg писал(а): читаем правила Цитата: 7) обязательно указание на форт-систему, для которой написан код; версию системы. В случае уникальности форт-системы обязательна прямая ссылка, по которой она может быть найдена.
Quark http://www.msyst.ru/quarkexe.zip |
Автор: | Hishnik [ Вс янв 27, 2008 01:31 ] |
Заголовок сообщения: | |
Кварк - уникален... |
Страница 2 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |