עמוד ראשי מירק סקריפטינג סניפטים Matrix 2.5 by Vendetta

Matrix 2.5 by Vendetta

mIRC Snippets - בפורום זה יפורסמו קודים שימושיים למירק. לפרסום קודים יש לפרסמם תחילה בפורום "פרסום קודים ומדריכים" ולאחר מכאן הם יועברו לפורום זה.

vendetta
משתמש רשום
Matrix 2.5 by Vendetta
הצטרף: 30 יוני 2010, 18:18
הודעות: 75
פורסם: 24 נובמבר 2010, 16:58
שם הקוד: Matrix
יוצר: Vendetta
גירסא: 2.5
תיאור: אלייס האפשר ליצג מטריצה מסדר גודל לא מגבל במירק
הפעלה:
//Matrix <new/move/close> <name> x y z t q ....
$Matrix(<name>,x,y,z,q,....)


דרישות: תמיכה ב $isid
קוד:
alias Matrix {
  var %checkid = 0
  if ($isid == $false) %checkid = 1
  if (%checkid == 1) {
    if ($1 == new) {
      tokenize 32 $2-
      if (!$3) echo $color(info) -sa * Too few parameters: Matrix
      else {
        if ($26) echo $color(info) -sa * Too many parameters: Matrix
        else {
          if ($window($+(@,$1))) {
            hdel -w Matrix $1
            window -c $+(@,$1)
          }
          var %x = 2 , %sum = 1 , %all
          while ([ $ [ $+ [ %x ] ] ]) {
            %all = %all $v1
            %sum = $calc(%sum * $v1) 
            if ($v1 !isnum) { echo $color(info) -sa * Index mast be a number: Matrix | halt }
            inc %x
          }
          window -h $+(@,$1)
          %x = 1
          while (%x <= %sum) { echo $+(@,$1) 0 | inc %x }
          hadd -m Matrix $1 %all
        }
      }
    }
    if ($1 == close) {
      hdel -w Matrix $1
      window -c $+(@,$1)
    }
    if ($1 == move) %checkid = 2
  }
  if (%checkid == 2) || (%checkid == 0) {
    if (%checkid == 2) tokenize 32 $2-
    else tokenize 32 $1-
    var %x = $0 , %n , %text , %info , %i = 1
    %info = $hget(Matrix,$1)
    while ($gettok(%info,%i,32)) {
      if ([ $ [ $+ [ $calc(%i + 1) ] ] ] > $v1) { echo $color(info) -sa * Deviation from the limit: Matrix | halt }
      inc %i
    }
    %text = [ $ [ $+ [ %x ] ] ]
    dec %x
    if (%checkid == 2) dec %x
    if (%x !== $numtok(%info,32)) echo $color(info) -sa * Discrepancy between the number of indexes in the matrix and what is introduced: Matrix
    else {
      var %i = 1 , %Function = $replace($MatrixFunction(%x),0,$2) , %v1
      while (%i < %x) {
        %v1 = [ $ [ $+ [ $calc(%i + 2) ] ] ]
        %Function = $replace(%Function,$chr($calc(%i + 64)),$gettok(%info,%i,32),$chr($calc(%i + 161)),%v1)
        inc %i
      }
      if (%checkid == 2) rline $+(@,$1) $calc(%Function) %text
      else return $line($+(@,$1),$calc(%Function))
    }
  }
}
alias -l MatrixFunction {
  if ($1 > 1) {
    var %x 1 , %all , %save
    while (%x < $1) {
      %all = %all $chr($calc(%x + 64)) %save * ( $chr($calc(%x + 161)) - 1 ) +
      %save = %save * $chr($calc(%x + 64))
      inc %x
    }
  }
  return %all 0
}




קוד דוגמה:
מילוי מטריצה של 10על10 בעלת 100 מקומות בלוח הכפל והחזרה של המספר שהוכנס למקום 5 על 8 של המטריצה
alias checkMatrix {
  Matrix new check 10 10
  var %x = 1 , %y = 1
  while (%x <= 10) {
    %y = 1
    while (%y <= 10) {
      Matrix move check %x %y $calc(%y * %x)
      inc %y
    }
    inc %x
  }
  echo -a @@ $Matrix(check,8,5)
  Matrix check close
}


כמו כל הקודים שלי בתקופה האחרונה הקוד בה לצורך לימוד יותר מאשר לצורך עזרה למתכנתים בפתירת בעיות בעזרתו , לכן השתדלתי לכתוב בצורה מפורטת כמה שיותר בלי להתחשב כלל ביעילות וכו'.
במידה ויש באג כזה או אחר השמח לשמוע לא בדקתי באגים מאז גירסה 1 :)

הערה* הקוד מוגבל למשהו בסביבות ה20 מימדים מינוס פלוס , כדי להקל על הקראה שלו פיצלתי חלק מימנו לעד אלייס מה שגורם להגבלה מסויימת.
נערך לאחרונה על ידי vendetta בתאריך 12 ינואר 2011, 18:11, נערך 2 פעמים בסך הכל.
In the name of God, impure souls of the living dead shall be banished into eternal damnation
Amen
תמונה
אפשר למצוא אותי בערוץ החברים שלי בקווקנט tomer2k#

הצטרף: 27 יולי 2010, 20:22
הודעות: 24
פורסם: 25 נובמבר 2010, 00:37
תומר אש עלייך כל הכבוד, אני אישית גאה בך שעשית, אני מאמין ב 100% שרק למדת מהאתגרון הזה :)

הצטרף: 30 יוני 2010, 18:18
הודעות: 75
פורסם: 25 נובמבר 2010, 17:21
תודה רבה!! :)
In the name of God, impure souls of the living dead shall be banished into eternal damnation
Amen
תמונה
אפשר למצוא אותי בערוץ החברים שלי בקווקנט tomer2k#


חזור אל סניפטים