66 lines
1.1 KiB
AutoHotkey
66 lines
1.1 KiB
AutoHotkey
n := 5
|
|
MsgBox, 262144, ,% ""
|
|
. "Pascal upper-triangular :`n" show(Pascal_Upper(n))
|
|
. "`n`nPascal lower-triangular :`n" show(Pascal_Lower(n))
|
|
. "`n`nPascal symmetric:`n" show(Pascal_Symm(n))
|
|
return
|
|
|
|
show(obj){
|
|
for i, o in obj{
|
|
line := ""
|
|
for j, v in o
|
|
line .= v ", "
|
|
res .= "[" Trim(line, ", ") "]`n,"
|
|
}
|
|
return "[" Trim(res, "`n,") "]"
|
|
}
|
|
|
|
Pascal_Upper(n){
|
|
obj := fillObj(n)
|
|
loop % n
|
|
obj[1, A_Index] := 1
|
|
loop % n-1
|
|
obj[A_Index+1, 1] := 0
|
|
for i, o in obj
|
|
for j, v in o
|
|
if !(i = 1 or j = 1)
|
|
obj[i, j] := obj[i, j-1] + obj[i-1, j-1]
|
|
return obj
|
|
}
|
|
|
|
Pascal_Lower(n){
|
|
obj := fillObj(n)
|
|
loop % n
|
|
obj[A_Index, 1] := 1
|
|
loop % n-1
|
|
obj[1, A_Index+1] := 0
|
|
for i, o in obj
|
|
for j, v in o
|
|
if !(i = 1 or j = 1)
|
|
obj[i, j] := obj[i-1, j] + obj[i-1, j-1]
|
|
return obj
|
|
}
|
|
|
|
Pascal_Symm(n){
|
|
obj := fillObj(n)
|
|
loop % n
|
|
obj[A_Index, 1] := 1
|
|
loop % n-1
|
|
obj[1, A_Index+1] := 1
|
|
for i, o in obj
|
|
for j, v in o
|
|
if !(i = 1 or j = 1)
|
|
obj[i, j] := obj[i-1, j] + obj[i, j-1]
|
|
return obj
|
|
}
|
|
|
|
fillObj(n){
|
|
obj := []
|
|
loop % n{
|
|
i := A_Index
|
|
loop % n
|
|
obj[i, A_Index] := 0
|
|
}
|
|
return obj
|
|
}
|