RosettaCodeData/Task/Multiplication-tables/Bracmat/multiplication-tables.bracmat

57 lines
1.4 KiB
Plaintext

( multiplicationTable
= high i j row row2 matrix padFnc tmp
, celPad leftCelPad padFnc celDashes leftDashes
. !arg:?high
& ( padFnc
= L i w d
. @(!arg:? [?L)
& 1+(!L:?i):?L
& " ":?w
& "-":?d
& whl
' ( !i+-1:~<0:?i
& " " !w:?w
& "-" !d:?d
)
& str$!w:?w
& (
' (
. @(str$(rev$!arg ()$w):?arg [($L) ?)
& rev$!arg
)
. str$!d
)
)
& padFnc$(!high^2):((=?celPad).?celDashes)
& @(!high:?tmp [-2 ?)
& padFnc$!tmp:((=?leftCelPad).?leftDashes)
& 0:?i
& :?row:?row2
& whl
' ( 1+!i:~>!high:?i
& !row celPad$!i:?row
& !celDashes !row2:?row2
)
& str$(leftCelPad$X "|" !row \n !leftDashes "+" !row2 \n)
: ?matrix
& 0:?j
& whl
' ( 1+!j:~>!high:?j
& 0:?i
& :?row
& whl
' ( 1+!i:<!j:?i
& celPad$() !row:?row
)
& leftCelPad$!j "|" !row:?row
& whl
' ( 1+!i:~>!high:?i
& !row celPad$(!i*!j):?row
)
& !matrix str$(!row \n):?matrix
)
& str$!matrix
)
& out$(multiplicationTable$12)
& done;