Everything seems to work perfectly
minor stuff
Mostly added the virtual method visualizeInput(input). Humans will most of the time need a better way to visualize the input data than what the default method does
Fixed bug in randomNewOutput() plus it now throws a runtime error when a new output actually doesn't exist
Did some testing
new precondition to call learn(float): a previous output must have been returned by output() beforehand
minor stuff