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()