כידוע לכם אני כותב לרוב במירק סקריפט ולמי שיצא לעבד עם התוכנה כניראה הבין שאין שם כלום XD אז אחרי דיונים כאילו ואחרים כתבתי את הפונקציה matrix על מנת לתת קלי נוסף למתכנתים וכו'
אני רוצה לציין שהפוסט הזה הוא הפוסט הראשון בסידרה די גדולה (אני מקווה) של פוסטים שיעשקו באחד מהמטרות שלי בחיים והיא לצור בינה אנושית מלחותית , תצחקו :) זה בראי . עכשיו נתחיל -
alias Matrix {
if ($prop == info) return $hget(Matrix,$1)
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 | goto error }
else {
if ($26) { echo $color(info) -sa * Too many parameters: Matrix | goto error }
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 | goto error }
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 | goto error }
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 | goto error }
else {
var %i = 1 , %Function = $replace($MatrixFunction(%x),0,$2) , %v1
while (%i < %x) {
%v1 = [ $ [ $+ [ $calc(%i + 2) ] ] ]
;%v1 = [ $ [ $+ [ $0 ] ] ]
%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 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
}
אני רוצה לציין שהפוסט הזה הוא הפוסט הראשון בסידרה די גדולה (אני מקווה) של פוסטים שיעשקו באחד מהמטרות שלי בחיים והיא לצור בינה אנושית מלחותית , תצחקו :) זה בראי . עכשיו נתחיל -
MLS:
//Matrix new name x y z
//Matrix close name
//Matrix move name x y z text
//echo -a $matrix(name).info
//echo -a $matrix(name,x,y,z)
//Matrix close name
//Matrix move name x y z text
//echo -a $matrix(name).info
//echo -a $matrix(name,x,y,z)
alias Matrix {
if ($prop == info) return $hget(Matrix,$1)
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 | goto error }
else {
if ($26) { echo $color(info) -sa * Too many parameters: Matrix | goto error }
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 | goto error }
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 | goto error }
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 | goto error }
else {
var %i = 1 , %Function = $replace($MatrixFunction(%x),0,$2) , %v1
while (%i < %x) {
%v1 = [ $ [ $+ [ $calc(%i + 2) ] ] ]
;%v1 = [ $ [ $+ [ $0 ] ] ]
%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 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
}
קוד נורא יפה לטעמי למבד החלק של האלייס השני - עשיתי את זה בנסיון לפשט את הקוד כדי שיהיה יותר קל לקרוא ממינו אך לצערי רק סיבחתי :\
אז יש לנו מימוש של מטריצות , יש עד כמה דברים שהייתי רוצה לפרסם בנושא:
כפל בין שני מטריצות וחזרה של מטריצת ההכפלה.
MLS:
mcasd <name1> <name2> <name3>
alias mcasd {
Matrix new $3 $gettok($Matrix($2).info,1,32) $gettok($Matrix($1).info,2,32)
var %x = 1 , %y = 1 , %z = 1 , %i = 1 , %sum = 0
%x = 1
while (%x <= $gettok($Matrix($1).info,2,32)) {
%z = 1
while (%z <= $gettok($Matrix($2).info,1,32)) {
%y = 1
while (%y <= $gettok($Matrix($1).info,1,32)) {
%sum = $calc(%sum + ( $Matrix($1,%y,%x) * $Matrix($2,%z,%y) ))
inc %y
}
Matrix move $3 %z %x %sum
%sum = 0
inc %z
}
inc %x
}
}
alias mcasd {
Matrix new $3 $gettok($Matrix($2).info,1,32) $gettok($Matrix($1).info,2,32)
var %x = 1 , %y = 1 , %z = 1 , %i = 1 , %sum = 0
%x = 1
while (%x <= $gettok($Matrix($1).info,2,32)) {
%z = 1
while (%z <= $gettok($Matrix($2).info,1,32)) {
%y = 1
while (%y <= $gettok($Matrix($1).info,1,32)) {
%sum = $calc(%sum + ( $Matrix($1,%y,%x) * $Matrix($2,%z,%y) ))
inc %y
}
Matrix move $3 %z %x %sum
%sum = 0
inc %z
}
inc %x
}
}
מציג מטריצות בצורת טבלה
MLS:
alias showmatrix {
var %x = 1 , %y , %text
while (%x <= $gettok($matrix($1).info,2,32)) {
%y = 1
%text = $null
while (%y <= $gettok($matrix($1).info,1,32)) {
%text = %text $matrix($1,%y,%x)
inc %y
}
echo -a @ %text
inc %x
}
}
var %x = 1 , %y , %text
while (%x <= $gettok($matrix($1).info,2,32)) {
%y = 1
%text = $null
while (%y <= $gettok($matrix($1).info,1,32)) {
%text = %text $matrix($1,%y,%x)
inc %y
}
echo -a @ %text
inc %x
}
}
אלי בהמשך יהיה מאמר על כפל מטריצות לכו תדעו :)
כל הזכיות שמורות ל Vendetta - The Last Dimension
כל הזכיות שמורות ל Vendetta - The Last Dimension
אין תגובות:
הוסף רשומת תגובה