Explorar o código

kombinacje problemy solved

a.binder %!s(int64=9) %!d(string=hai) anos
pai
achega
dacdc4ab0c

+ 27 - 19
SE/dev/php-cli/PE_wariant_bit_table.xsl

@@ -74,9 +74,10 @@
                 if ($sum <= 3) echo str_pad($bin, 10, "0", STR_PAD_LEFT) . " = " . $i . "\n";
         }-->
         <xsl:param name="variant" required="yes"/>
-        <xsl:param name="bit_limit" required="yes"/>
-        <xsl:param name="no_more_variants" required="yes"/>
+        <xsl:param name="bit_limit" required="yes"/> <!-- like 6 -->
+        <xsl:param name="max_possible_bit" required="yes"/><!-- like 1111111 -->
         <xsl:param name="loop" required="no"/>
+        <!--<xsl:message>#80 f. v:<xsl:value-of select="$variant"/>;$bit_limit=<xsl:value-of select="$bit_limit"/>;$max_possible_bit=<xsl:value-of select="$max_possible_bit"/>; $loop=<xsl:value-of select="$loop"/>;</xsl:message>-->
         <xsl:variable name="variant" select="number($variant) + 1"/><!-- dodajemy 1 aby sprawdzic jak wyglada -->
         <xsl:variable name="curr_bit" select="bp:decimalToBit($variant)"/>
         <xsl:variable name="digits">
@@ -88,22 +89,28 @@
         </xsl:variable>
         <xsl:variable name="cur_bit_len" select=" string-length($digits)"/>
         <xsl:choose>
-            <xsl:when test="number($loop) &gt; 60000">
+            <xsl:when test="number($loop) &gt; 1000">
                 <!--<xsl:message>#91 loop:<xsl:value-of select="$loop"/>; hit returning $variant=<xsl:value-of select="$variant"/>; $curr_bit=<xsl:value-of select="$curr_bit"/>;</xsl:message>-->
                 <xsl:value-of select="$variant"/>
             </xsl:when>
-            <xsl:when test="number($cur_bit_len)= number($no_more_variants)">
+            <xsl:when test="$curr_bit = $max_possible_bit">
                 <!--<xsl:message>#90 brak kolejnych wariantow $variant=<xsl:value-of select="$variant"/>;$bit_limit=<xsl:value-of select="$bit_limit"/>; $curr_bit=<xsl:value-of select="$curr_bit"/></xsl:message>-->
                 <xsl:value-of select="$variant"/>
             </xsl:when>
-            <xsl:when test="number($cur_bit_len) &lt;= number($bit_limit)">
-               <xsl:value-of select="$variant"/> 
+            <xsl:when test="number($cur_bit_len) &lt;=  number($bit_limit)">
+                <!--<xsl:variable name="next_bit" select="bp:decimalToBit($variant+1)"/>-->
+                <!--<xsl:message>#104 next <xsl:value-of select="$variant"/></xsl:message>-->
+                <xsl:value-of select="$variant"/>
             </xsl:when>
+            
             <xsl:when test="number($cur_bit_len) &gt;  number($bit_limit)">
                 <!--<xsl:variable name="next_bit" select="bp:decimalToBit($variant+1)"/>-->
                 <!--<xsl:message>#104 next <xsl:value-of select="$variant"/></xsl:message>-->
-                <xsl:value-of select="bp:next_bit_max($variant ,$bit_limit,$no_more_variants,$loop+1)"/>
+                <xsl:value-of select="bp:next_bit_max($variant ,$bit_limit,$max_possible_bit,$loop+1)"/>
             </xsl:when>
+            <!--<xsl:otherwise>
+                <xsl:message terminate="yes">#107 f. else $variant=<xsl:value-of select="$variant"/>; $curr_bit=<xsl:value-of select="$curr_bit"/>; $digits=<xsl:value-of select="$digits"/>;</xsl:message>
+                <xsl:value-of select="$variant"/></xsl:otherwise>-->
         </xsl:choose>
     </xsl:function>
     
@@ -111,26 +118,26 @@
         <xsl:param name="wariant_id" required="yes"/>
         <xsl:param name="elements_cnt" required="yes"/>
         <xsl:param name="bit" required="yes"/>
-        <xsl:param name="bit_limit" required="yes"/>
-        <xsl:variable name="table">
+        <xsl:param name="max_possible_bit" required="yes"/>
+        <!--<xsl:variable name="table">
             <variant>
                 <xsl:for-each select="1 to $elements_cnt">
                     <pos>
                         <xsl:attribute name="pos" select="."/>
-                        <!--<xsl:attribute name="bin_pos" select=" bp:if_bit_pos($bit,.)"/>-->
+                        <!-\-<xsl:attribute name="bin_pos" select=" bp:if_bit_pos($bit,.)"/>-\->
                         <xsl:if test=" string-length($bit) &gt; 0">
                             <xsl:attribute name="bin_pos"  select="substring($bit,.,1)"/>
                         </xsl:if>
-                        <!--<xsl:attribute name="bin_poss" select="$bit"/>-->
-                        <!--<xsl:value-of select="substring($bit,.,1)"/>-->
+                        <!-\-<xsl:attribute name="bin_poss" select="$bit"/>-\->
+                        <!-\-<xsl:value-of select="substring($bit,.,1)"/>-\->
                     </pos>
                 </xsl:for-each>
             </variant>
-        </xsl:variable>
+        </xsl:variable>-->
         
-        <xsl:variable name="sum_bit" select="sum($table/variant/pos/@bin_pos)"/>
+        <!--<xsl:variable name="sum_bit" select="sum($table/variant/pos/@bin_pos)"/>-->
         <!--<xsl:variable name="sum_bit" select="1"/>-->
-        <xsl:choose>
+        <!--<xsl:choose> errory
             <xsl:when test="$sum_bit = $elements_cnt and $sum_bit &lt;= $bit_limit">
                 <variant>
                     <xsl:attribute name="no_more_variants" select="$sum_bit"/>
@@ -156,7 +163,7 @@
                     <xsl:attribute name="bit_limit_hit" select="$sum_bit"/>
                 </variant>
             </xsl:otherwise>
-        </xsl:choose>
+        </xsl:choose>-->
         
     </xsl:template>
     
@@ -168,8 +175,9 @@
     
     <xsl:template name="PE_wariant">
         <xsl:param name="elements_cnt" select="10"/>
-        <xsl:param name="bit_max" select="3"/>
+        <xsl:param name="max_possible_bit" select="1111111111"/>
         <xsl:param name="EconomicDistanceCut2"/><!-- tabela do podstawiania danych i wyliczen -->
+        
         <PE_wariant_bit_table>
             <!--<xsl:variable name="no_more_variants" select=" math:power(2,$elements_cnt)"/>-->
             <xsl:variable name="no_more_variants" select="6"/>
@@ -183,7 +191,7 @@
                             </test>-->
                 <xsl:variable name="bit" select=" string-join(bp:decimalToBitFill(.,$elements_cnt),'')"/>
                 <xsl:variable name="bit2" select=" string-join(bp:decimalToBit($wariant_id),'')"/>
-                <xsl:variable name="bp:next_bit_max" select="bp:next_bit_max($wariant_id,$bit_max,$elements_cnt,0)"/>
+                <xsl:variable name="bp:next_bit_max" select="bp:next_bit_max($wariant_id,$max_possible_bit,$elements_cnt,0)"/>
                 
             <xsl:variable name="PE_wariant_bit_table">
                 <PE_wariant_bit_table>
@@ -196,7 +204,7 @@
                         <xsl:with-param name="wariant_id" select="$wariant_id"/>
                         <xsl:with-param name="elements_cnt" select="$elements_cnt"/>
                         <xsl:with-param name="bit" select="bp:decimalToBitFill($wariant_id,$elements_cnt)"/>
-                        <xsl:with-param name="bit_limit" select="$bit_max"/>
+                        <xsl:with-param name="max_possible_bit" select="$max_possible_bit"/>
                     </xsl:call-template>
                 </PE_wariant_bit_table>
             </xsl:variable>

+ 42 - 18
SE/dev/php-cli/edge_paths_with_PE_controll.xsl

@@ -508,6 +508,15 @@
                                         <xsl:variable name="max_possible_bit"><!-- produkuje 11111111 -->
                                             <xsl:for-each select="1 to count($candidates/bp:Path_Point)"><xsl:value-of select="1"/></xsl:for-each>
                                         </xsl:variable>
+                                        <!-- tune  -->
+                                        <xsl:variable name="bit_max_Pos">
+                                            <xsl:choose>
+                                                <xsl:when test="number($bit_max_Pos) &lt; 1">
+                                                    <xsl:value-of select="1"/>
+                                                </xsl:when>
+                                                <xsl:otherwise><xsl:value-of select="$bit_max_Pos"/></xsl:otherwise>
+                                            </xsl:choose>
+                                        </xsl:variable>
                                         
                                         <xsl:call-template name="calculate_optimum">
                                             <xsl:with-param name="candidates" select="$candidates"/>
@@ -602,29 +611,44 @@
         <xsl:param name="poprzednie_odpalam_liczenie_or_nie"/>
         <!-- do jednorazowego wyzwolenia przez fukcje, aby tylko raz odjelo wariant zerowy -->
         
-        <!-- znajduje kolejny korzystny wariant bit -->
+        <!-- znajduje kolejny korzystny wariant bit , trzeba to wyzwolic jak jest wiecej jedynek-->
         <xsl:variable name="variant">
+            <xsl:variable name="bit" select=" string-join(bp:decimalToBitFill($variant,$elements_cnt),'')"/>
+            <xsl:variable name="digits">
+                <xsl:for-each select="1 to string-length($bit)">
+                    <xsl:if test="substring($bit,.,1) = '1'">
+                        <xsl:value-of select="number(1)"/>
+                    </xsl:if>
+                </xsl:for-each>
+            </xsl:variable>
             <xsl:choose>
-                <xsl:when test="number($max_possible_bit) &gt;= number($elements_cnt)">
-                    <xsl:message>#576 $max_bit <xsl:value-of select="$max_possible_bit"/> &gt;$elements_cnt=<xsl:value-of select="$elements_cnt"/>; in $variant=<xsl:value-of select="$variant"/>;</xsl:message>
-                    <xsl:value-of select="number($variant)"/>
-                </xsl:when>
-                <xsl:when test="number($max_possible_bit) &gt; 0">
-                    
-                    <xsl:message>#80  try to find next $max_bit <xsl:value-of select="$max_possible_bit"/> &gt;$elements_cnt=<xsl:value-of select="$elements_cnt"/>; in $variant=<xsl:value-of select="$variant"/>;</xsl:message>
-                    <xsl:variable name="variant_found" select="bp:next_bit_max(number($variant),$max_possible_bit,$elements_cnt,0)"/>
-                    <xsl:value-of select="$variant_found"/>
-                    
+                <xsl:when test=" string-length($digits) &gt; number($max_bit)">
+                    <xsl:choose>
+                        <xsl:when test="number($max_bit) &gt;= number($elements_cnt)">
+                            <xsl:message>#576 olac  $max_bit <xsl:value-of select="$max_possible_bit"/> &gt;$elements_cnt=<xsl:value-of select="$elements_cnt"/>; in $variant=<xsl:value-of select="$variant"/>;</xsl:message>
+                            <xsl:value-of select="number($variant)"/>
+                        </xsl:when>
+                        <xsl:when test="number($max_bit) &gt; 0">
+                            <xsl:message>#80  try to find next $bit=<xsl:value-of select="$bit"/>; $max_possible_bit=<xsl:value-of select="$max_possible_bit"/>; $max_bit <xsl:value-of select="$max_bit"/> &gt;$elements_cnt=<xsl:value-of select="$elements_cnt"/>; in $variant=<xsl:value-of select="$variant"/>;</xsl:message>
+                            <xsl:variable name="variant_found" select="bp:next_bit_max(number($variant),$max_bit,$max_possible_bit,0)"/>
+                            <xsl:value-of select="$variant_found"/>
+                        </xsl:when>
+                        <xsl:otherwise>
+                            <xsl:value-of select="number($variant)"/>
+                        </xsl:otherwise>
+                    </xsl:choose>
                 </xsl:when>
-                <xsl:otherwise>
-                    <xsl:value-of select="number($variant)"/>
-                </xsl:otherwise>
+                <xsl:otherwise><xsl:value-of select="$variant"/></xsl:otherwise>
+            </xsl:choose>
+        </xsl:variable>
+        <xsl:variable name="bit">
+            <xsl:choose><!-- funkcja nearest possible bit moze zwrocic zero! -->
+                <xsl:when test=" string-length($variant) &gt; 0"><xsl:value-of select="string-join(bp:decimalToBitFill($variant,$elements_cnt),'')"/></xsl:when>
+                <xsl:otherwise><xsl:value-of select="$max_possible_bit"/></xsl:otherwise>
             </xsl:choose>
         </xsl:variable>
-      
-        <xsl:variable name="bit" select=" string-join(bp:decimalToBitFill($variant,$elements_cnt),'')"/>
-        <xsl:if test="$variant mod 1000 = 0 ">
-            <xsl:message>...  $variant curr found <xsl:value-of select="$variant"/>; $bit=<xsl:value-of select="$bit"/>, $elements_cnt=<xsl:value-of select="$elements_cnt"/>;</xsl:message>
+        <xsl:if test="$variant mod 64 = 0 ">
+            <xsl:message>...#625   $variant curr found <xsl:value-of select="$variant"/>; $max_bit=<xsl:value-of select="$max_bit"/>; $bit=<xsl:value-of select="$bit"/>, $elements_cnt=<xsl:value-of select="$elements_cnt"/>;</xsl:message>
         </xsl:if>
         <xsl:variable name="cand_to_calc">
             <xsl:for-each select="$candidates/bp:Path_Point">