<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Перебор вариантов</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/4494.html</link>
    <description>  Привет. Нужен совет - как создать прогу.&lt;br&gt;Есть файл с таким содержимым:&lt;br&gt;a1 a2 a3 a4 a5&lt;br&gt;b1 b2 b3&lt;br&gt;c1 c2 c3 c4&lt;br&gt;Количество строк и элементов в строке может быть разным. Элементы разделены пробелами). Нужна прога, которая выполняет перебор вариантов. Каждый вариант - это множество, в которое входит по одному элементу из каждой строки. То есть прога должна выводить следующее:&lt;br&gt;a1 b1 c1&lt;br&gt;a1 b1 c2&lt;br&gt;a1 b1 c3&lt;br&gt;a1 b1 c4&lt;br&gt;a1 b2 c1&lt;br&gt;a1 b2 c2&lt;br&gt;...&lt;br&gt;a5 b3 c4&lt;br&gt;&lt;br&gt;Самое простое в этой задаче - считать строки из файла и загнать в массив массивов.&lt;br&gt;open (List, &quot;list.txt&quot;) or die &quot;Can&apos;t read list $!&quot;;&lt;br&gt;while (&amp;lt;List&amp;gt;) &#123;&lt;br&gt;    push &#064;rows, &#091; split &#093;;&lt;br&gt;&#125;&lt;br&gt;А дальше должны идти вложенные циклы for:&lt;br&gt;  перебор элементов 1-го массива&lt;br&gt;    перебор элементов 2-го массива&lt;br&gt;        ...&lt;br&gt;          перебор элементов N-го массива (N - количество строк)&lt;br&gt;             вывод элемента&lt;br&gt;&lt;br&gt;Сложность в том, что заранее количество строк неизвестно. Соответственно, заранее неизвестно количество массивов в &#064;rows (значение N) и количество вложенных ц</description>

<item>
    <title>Перебор вариантов (kotz80)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/4494.html#6</link>
    <pubDate>Tue, 06 Apr 2010 14:39:18 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt; do &#123; &lt;br&gt;&amp;gt;  show($input); &lt;br&gt;&amp;gt; &#125; while (make_next($input)); &lt;br&gt;&amp;gt;&#125; # sub &lt;br&gt;&amp;gt;# ==================================== &lt;br&gt;&amp;gt;my($fname, $input); &lt;br&gt;&amp;gt;$fname = &quot;/tmp/input.txt&quot;; &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;$input = load($fname); &lt;br&gt;&amp;gt;produce($input); &lt;br&gt;&lt;br&gt;А на Паскале можно то же самое?? А то эти иероглифи не понимаю, перл -  это не мой конек&lt;br&gt;</description>
</item>

<item>
    <title>Перебор вариантов (Maxim Kuznetsov)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/4494.html#5</link>
    <pubDate>Fri, 22 Jul 2005 08:05:23 GMT</pubDate>
    <description>проблем со стеком при рекурсивном переборе быть не может ;-)&lt;br&gt;скорее возникнет проблема с памятью ..&lt;br&gt;поясняю : если в переборе учатвуют 32 переменные хотя-бы по 2 варианта,&lt;br&gt;то глубина рекурсии всего 32, а кол-во вариантов уже минимум 2^32..&lt;br&gt;&lt;br&gt;так что заменять рекурсию на итерации в данном случае - просто лишний геморой ;-)&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Перебор вариантов (Cforest)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/4494.html#4</link>
    <pubDate>Wed, 20 Jul 2005 15:41:46 GMT</pubDate>
    <description>Да, текст скрипта, что называется, поехал при Copy-Paste. :(&lt;br&gt;Но вариант работает. </description>
</item>

<item>
    <title>Перебор вариантов (Cforest)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/4494.html#3</link>
    <pubDate>Wed, 20 Jul 2005 15:38:03 GMT</pubDate>
    <description>  Ihor, спасибо!&lt;br&gt;&lt;br&gt;Вот какой вариант получился с рекурсией (наверное, не очень изящный - давно не программировал). Вы абсолютно правы - при рекурсии возможны проблемы со стеком. Еще раз спасибо!&lt;br&gt;&lt;br&gt;#!/usr/bin/perl&lt;br&gt;&lt;br&gt;sub get_element &#123;&lt;br&gt;    my ($array, $variant) = &#064;_;&lt;br&gt;    if ($array == $#rows) &#123;&lt;br&gt;for $element (0 .. $#&#123; $rows&#091;$array&#093; &#125;) &#123;        &lt;br&gt;    print Result join (&quot; &quot;, &#064;&#123; $variant &#125;);&lt;br&gt;    print Result &quot; &quot;, $rows&#091;$array&#093;&#091;$element&#093;, &quot;&#092;n&quot;;&lt;br&gt;&#125;&lt;br&gt;    &#125; else &#123;&lt;br&gt;for $element (0 .. $#&#123; $rows&#091;$array&#093; &#125;) &#123;        &lt;br&gt;    my &#064;incomplete_variant = &#064;&#123; $variant &#125;;&lt;br&gt;    push &#064;incomplete_variant, $rows&#091;$array&#093;&#091;$element&#093;;&lt;br&gt;    my $inner_array = $array + 1;&lt;br&gt;    get_element($inner_array, &#092;&#064;incomplete_variant);&lt;br&gt;&#125;&lt;br&gt;    &#125;&lt;br&gt;&#125;      &lt;br&gt;&lt;br&gt;open (List, &quot;list.txt&quot;) or die &quot;Can&apos;t read list $!&quot;;&lt;br&gt;while (&amp;lt;List&amp;gt;) &#123;&lt;br&gt;    push &#064;rows, &#091; split &#093;;&lt;br&gt;&#125;&lt;br&gt;close(List);&lt;br&gt;&lt;br&gt;open (Result, &quot;&amp;gt; result.txt&quot;) or die &quot;Can&apos;t write results $!&quot;;&lt;br&gt;&lt;br&gt;for $i (0..$#&#123; $rows&#091;0&#093; &#125;) &#123;&lt;br&gt;    my &#064;variant;&lt;br&gt;    push (&#064;variant, $rows&#091;0&#093;&#091;$i&#093;);&lt;br&gt;    get_element(1</description>
</item>

<item>
    <title>Перебор вариантов (ihor)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/4494.html#2</link>
    <pubDate>Wed, 20 Jul 2005 14:37:53 GMT</pubDate>
    <description>рекурсия - не самый удачный вариант, стека может не хватить.&lt;br&gt;вот вариант итеративный:&lt;br&gt;=====================================&lt;br&gt;#!/usr/local/bin/perl&lt;br&gt;&lt;br&gt;use strict;&lt;br&gt;# ====================================&lt;br&gt;sub load &#123;&lt;br&gt;my($fname) = &#064;_;&lt;br&gt;my(&#064;vals, &#064;res, $str);&lt;br&gt;&lt;br&gt;open(FILE, $fname) &amp;#124;&amp;#124; die &quot;Can&apos;t open $fname!&quot;;&lt;br&gt;while (defined ($str = &amp;lt;FILE&amp;gt;)) &#123;&lt;br&gt;&#064;vals = split(/&#092;s+/, $str);&lt;br&gt;push(&#064;res, &#091;0, $#vals, &#091;&#064;vals&#093;&#093;);&lt;br&gt;&#125; # while&lt;br&gt;close(FILE);&lt;br&gt;return &#092;&#064;res;&lt;br&gt;&#125; # sub&lt;br&gt;&lt;br&gt;# ====================================&lt;br&gt;sub make_next &#123;&lt;br&gt;my($input) = &#064;_;&lt;br&gt;my($i, $m, $carry);&lt;br&gt;$carry = 1;&lt;br&gt;&lt;br&gt;for ($i = $#&#123;$input&#125;; $i &amp;gt;= 0; $i--) &#123;&lt;br&gt;$m = $&#123;$&#123;$input&#125;&#091;$i&#093;&#125;&#091;0&#093; + $carry;&lt;br&gt;if ($m &amp;gt; $&#123;$&#123;$input&#125;&#091;$i&#093;&#125;&#091;1&#093;) &#123;&lt;br&gt;$&#123;$&#123;$input&#125;&#091;$i&#093;&#125;&#091;0&#093; = 0;&lt;br&gt;&#125; else &#123;&lt;br&gt;$carry = 0;&lt;br&gt;$&#123;$&#123;$input&#125;&#091;$i&#093;&#125;&#091;0&#093; = $m;&lt;br&gt;last;&lt;br&gt;&#125; # else&lt;br&gt;&#125; # for&lt;br&gt;&lt;br&gt;return 1 if $carry == 0;&lt;br&gt;return 0;&lt;br&gt;&#125; # sub&lt;br&gt;# ====================================&lt;br&gt;sub show &#123;&lt;br&gt;my($input) = &#064;_;&lt;br&gt;my($elem, &#064;idxs, &#064;vals, $src);&lt;br&gt;&lt;br&gt;foreach $elem (&#064;&#123;$input&#125;) &#123;&lt;br&gt;push</description>
</item>

<item>
    <title>Перебор вариантов (Maxim Kuznetsov)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/4494.html#1</link>
    <pubDate>Wed, 20 Jul 2005 14:05:30 GMT</pubDate>
    <description>а рекурсию в Перле отменили ? &lt;br&gt;или в школе не учили...&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

</channel>
</rss>
