Need help with list processing!!!


    May 31 2009 | 2:11 pm
    Dear Jitterlist!!
    At first lines sorry again for bad english
    Can anybody help with list processing?
    I've list with some repeating numbers, and I need to find it and change to unique numbers, for example [max number + 1]...
    Repeatings can be came one time, or can be some more, or can have not...
    For another one example this is list that I've:
    1 2 2 3 4 5 6 6
    And this is needeed result:
    1 2 7 3 4 5 6 8
    Hope anybody can advice me, may be through some [zl] sequense, may be through some js or java...
    Many thanks for any tip!

    • May 31 2009 | 7:19 pm
      if i understand correctly, javascript seems like the easiest way to handle this.
      just some pseudocode:
      var count = 0;
      var preval = 0;
      
      for (i in list to process){
        var curval = list[i];
        if(curval = preval) list[i] = ++count;
        preval = curval;
      }
      outlet(list);
      is that helpful?
    • May 31 2009 | 7:20 pm
      something like this should do the trick...
      right now it is for ints only. for floats you have to make some changes.
    • May 31 2009 | 8:15 pm
      looks like yep, but I'm not some js advanced (
      I'm can't finished it to working code ...
    • May 31 2009 | 8:23 pm
      It's amazin god damned great patching ! Thanks
      But it have some error - after processing of list that need changes, when I've process normal numbered list - it came with error. Look at please!
    • May 31 2009 | 8:41 pm
      so you expect me to do all your work for you??
      here goes nothing. This might do the trick.
    • May 31 2009 | 9:30 pm
      thanks for your interest!
      with your patch not all clean again, but it's beautirful construction !!!
      can you say me what are doing subpatcher [p through] ??
      I am absolutely confused!!
      Cheers!
    • May 31 2009 | 9:36 pm
      the [+] object doesn't let you connect its output to any of its own inputs. by going through a subpatch I trick Max and I can now connect to anything I want to. it's easy to get stack overflows that way - Max is trying to prevent you from making such a mistake by not allowing the connection in the first place - so you need to be very careful when using that trick...
      could you give me a specific example about what isn't working for you?
    • May 31 2009 | 10:26 pm
      nice tip!
      I've attach patch, if you copy compressed, then patch need to restart...
    • Jun 01 2009 | 5:50 pm
      didn't have much time, but I made a few minor changes (mainly clearing things properly after each run).
      I hope this does what you want it to. It's also a bit messy right now, you might want to go through and put in some triggers...
    • Jun 01 2009 | 9:09 pm
      there still seems to be some funkyness going on. Since I really can't spend any more time on this (if you figure it out, please let me know) I thought I would instead try a javascript. I have never done javascripting before and figured this would be a good start.
      The couple of tests I did seemed more reliable than the previous patch. Save the Javascript code as listTEST.js
      inlets = 1;
      outlets = 1;
      
      var count = 0;
      var maxCount = 0;
      var preVal = 0;
      var curVal = 0;
      
      function list()    {
      
      var i;
      
         len = arguments.length;
      
          for (i = 0; i < len; i++)    {
               count = arguments[i];
              if (count > maxCount) maxCount = count;            //get highest number in list
          }
      //    post(maxCount);
      
          for ( i = 0; i < len; i++)    {                                       //substitute
              curVal = arguments[i];
      
              if (curVal == preVal)     {
                  arguments[i] = ++maxCount;
              }    
      
              preVal = curVal;
      
      //   post(arguments[i]);
      
          }
      
          maxCount = 0;
          preVal = 0;
      
          var a = arrayfromargs(arguments);
      
          outlet(0, a);
      }
    • Jun 02 2009 | 9:09 am
      Hiya, MIB!
      Once again thanks for time which you spend for my problems.
      Both decisions again have errors, but both variants is good training for me. Having looked your examples I hope a little to learn using JS in Max and to raise my level of patching...
      I'll let you know if there will be any success in it!
      Cheers!
    • Jun 08 2009 | 11:35 am
      Hiya MIB & list, I ask for solution Jasch, and this is his js
      Works!
      Many thaaaanks Jasch !
      /*
      duplicate replace
      jasch 20090608
      */
      function list()
      {
      var maximum = -1234567890;
      var inlist = arrayfromargs(arguments);
      // find highest value in list
      for(var i = 0; i < inlist.length; i++){
      if(inlist[i] > maximum){
      maximum = inlist[i];
      }
      }
      // iterate through list and replace duplicates by maximum+1
      for(var i = 0; i < inlist.length; i++){
      for(var j = 0; j < inlist.length; j++ ){
      if(inlist[i] === inlist[j] && i != j){
      inlist[j] = ++maximum;
      }
      }
      }
      outlet(0, inlist);
      }
      /*
      #P window setfont "Sans Serif" 9.;
      #P window linecount 1;
      #P message 249 118 97 196617 44 45 46 37 21 44;
      #P message 112 232 238 196617 44 45 46 37 21 47;
      #P newex 112 211 62 196617 prepend set;
      #P message 112 115 97 196617 1 2 3 4 5 5 6 7 8 9;
      #P newex 112 167 88 196617 js dup_replace.js;
      #P hidden connect 2 0 3 0;
      #P connect 0 0 2 0;
      #P connect 1 0 0 0;
      #P connect 4 0 0 0;
      #P window clipboard copycount 5;
      */