Example illustrating how to generate a Multiplication Table using FuzzyCSV
This demo demonstrates generating a multiplication table like this
╔═══╤═══╤════╤════╤════╤════╤════╤════╤════╤════╗ ║ A │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 ║ ╠═══╪═══╪════╪════╪════╪════╪════╪════╪════╪════╣ ║ 1 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 ║ ╟───┼───┼────┼────┼────┼────┼────┼────┼────┼────╢ ║ 2 │ 2 │ 4 │ 6 │ 8 │ 10 │ 12 │ 14 │ 16 │ 18 ║ ╟───┼───┼────┼────┼────┼────┼────┼────┼────┼────╢ ║ 3 │ 3 │ 6 │ 9 │ 12 │ 15 │ 18 │ 21 │ 24 │ 27 ║ ╟───┼───┼────┼────┼────┼────┼────┼────┼────┼────╢ ║ 4 │ 4 │ 8 │ 12 │ 16 │ 20 │ 24 │ 28 │ 32 │ 36 ║ ╟───┼───┼────┼────┼────┼────┼────┼────┼────┼────╢ ║ 5 │ 5 │ 10 │ 15 │ 20 │ 25 │ 30 │ 35 │ 40 │ 45 ║ ╟───┼───┼────┼────┼────┼────┼────┼────┼────┼────╢ ║ 6 │ 6 │ 12 │ 18 │ 24 │ 30 │ 36 │ 42 │ 48 │ 54 ║ ╟───┼───┼────┼────┼────┼────┼────┼────┼────┼────╢ ║ 7 │ 7 │ 14 │ 21 │ 28 │ 35 │ 42 │ 49 │ 56 │ 63 ║ ╟───┼───┼────┼────┼────┼────┼────┼────┼────┼────╢ ║ 8 │ 8 │ 16 │ 24 │ 32 │ 40 │ 48 │ 56 │ 64 │ 72 ║ ╟───┼───┼────┼────┼────┼────┼────┼────┼────┼────╢ ║ 9 │ 9 │ 18 │ 27 │ 36 │ 45 │ 54 │ 63 │ 72 │ 81 ║ ╚═══╧═══╧════╧════╧════╧════╧════╧════╧════╧════╝
The above was generated by the code below
@Grab('io.github.kayr:fuzzy-csv:1.9.1-groovy4')
import static fuzzycsv.FuzzyStaticApi.*
def a = (1..9)
def b = (1..9)
def table = tbl([
['A', 'B'],
[a, b]])
table.unwind('A', 'B')
.addColumn(fx { it.A * it.B }.az('C'))
.pivot('B', 'C', 'A')
.printTable()
Explaining the code
First we will generate table in this format
A | B | C 2 | 1 | 1 2 | 2 | 4 2 | 3 | 6
Where C = A x B
Step 1 Create values for column A and B using Groovy Ranges
//A has numbers 1 - 9
def a = (1..9)
//B has number 1 - 9
def b = (1..9)
Step 2 Create a table with the values above
def table = tbl([
['A', 'B'],
[a, b]
])
Step 3 Unwind the columns A and B
table.unwind('A', 'B')
Now the table will look like this (Parts Are Omitted For Brevity)
╔═══╤═════╗ ║ A │ B ║ ╠═══╪═════╣ ║ 1 │ 3 ║ ╟───┼─────╢ ║ 9 │ 7 ║ ╟───┼─────╢ ║ 9 │ 8 ║ ╟───┼─────╢ ║ 9 │ 9 ║ ..............
Step 4 Add the C column is product of A x B
table.addColumn(fx { it.A * it.B }.az('C'))
Now the table will look like this
╔═══╤═══╤════╗ ║ A │ B │ C ║ ╠═══╪═══╪════╣ ║ 1 │ 1 │ 1 ║ ╟───┼───┼────╢ ║ 1 │ 2 │ 2 ║ ╟───┼───┼────╢ ║ 1 │ 3 │ 3 ║
Step 5 Pivot the table to finally get the multiplication table
table.pivot('B', 'C', 'A').printTable()