Condition fullfilled to early but only "sometimes"

jonas.thornvall at gmail.com jonas.thornvall at gmail.com
Tue Mar 1 03:47:05 EST 2016


Den tisdag 1 mars 2016 kl. 08:49:57 UTC+1 skrev Ian:
> It's not at all clear what the problem is from your description. What
> is it that you expect the code to do? What is it doing instead that
> violates your expectation? Why are you asking for Javascript help on a
> Python mailing list?
> 
> On Mon, Feb 29, 2016 at 10:40 PM,  <jonas.thornvall at gmail.com> wrote:
> > I've been looking at the code for two days so i am a bit crosseyed.
> > If anyone could help me set the condition so the loop catch the last pair/pairs, it is kind of weird that it succeed sometimes and break to early and report fail others.
> >
> > I would be very greatful if anyone can see why it break to early and return fail. Although it is clearly a succes looking at the last remaining pair none connected pair.It should report fail for the network permutations that stall due to link exhausting, but not stall creating last pair.
> >
> > It just a minor bug due to some condition that i just not get.
> > Have a go 5 munutes maybe someone catch the faulthy condition.
> >
> > http://jt.node365.se/mydebug1.html
> > --
> > https://mail.python.org/mailman/listinfo/python-list

The program creates search for uniform networks, that is x nodes each with y links. Only a subset of permutations possible "easiest found out with pen and paper". So to the left is the node and to the right the nodes it links to.

When you run new network, sometimes it is full every node have x links, you create a uniform network. But often ir reports fail the links was exhausted and you stuck into a loop, that i fortunatily have the conditions to break.

But it *sometimes* break to early when there is still one or two pairs that would had worked. Not it is easy to make a fix for those, but it certainly would be more beautiful setting the correct condition.

function createLinks()
{
   var i = 0;
   var j = 0;

   while(i < nodes)
   {
// This see so that links already generated accounted for if one link than j
      j = arr[i].nodelinks.length;
      stupid = nodes - 1;
      temparr = new Array();
      while(j < links)
      {
         dublett = false;
         // Onlygenerate random values bigger than "i" else all links  exhausted
         if(i == 0)
         {
            aLink = Math.floor(Math.random() * (nodes - 1));
            aLink ++ ;
         }
         else
         {
            aLink = Math.floor(Math.random() * (stupid - i)) + i + 1;
         }
         if (aLink == nodes)aLink -- ;

         if (temparr[0] == null)
         {
            temparr[0] = aLink;
         }
         for(k = 0; k < arr[i].nodelinks.length; k ++ )
         {
            if(aLink == arr[i].nodelinks[k])
            {
               dublett = true;
            }
         }
         inmylist = false;
         var t = 0;
         for(var m = 0; m < temparr.length; m ++ )
         {
            if(temparr[m] == aLink)
            {
               inmylist = true;
            }
         }
         if (inmylist == false)
         {
            temparr[temparr.length] = aLink;
         
         }
         else
         {
            inmylist = false
         }
         scope = (nodes - 1) - i;
         if (temparr.length >= scope)
         {
            myboolean = false;
            return myboolean;
         }
        
         if(dublett == false && arr[aLink].nroflinks < links)
         {
            arr[i].nodelinks[arr[i].nodelinks.length] = aLink;
            arr[aLink].nodelinks[arr[aLink].nodelinks.length] = i;
            arr[i].nroflinks ++ ;
            arr[aLink].nroflinks ++ ;
            j ++ ;
         }
      }
      i ++ ;
   }
   myboolean = true;
   return myboolean;
}



More information about the Python-list mailing list