Update README.md

This repository contains samples of my work in Java and Python.

JAVA----------------------------------------------------------------------------

The Java_Sample piwords is a package that searches for English words
buried in the digits of pi.  It does this through a sequence of classes/methods:

PiGenerator - returns a specified number of hexadecimal digits of pi; also 
  contains a method to more efficiently compute a^b%m for future use
BaseTranslator - converts a fractional digit array from one base to another
DigitsToStringConverter - converts a list of digits in a given base to chars
  based on a given mapping
AlphabetGenerator - given a list of tuples containing a char and its desired
  frequency, return a char array in lexicographic order containing each character
  repeated the desired number of times
WordFinder - given a string to search and an array of strings to look for, returns
  a mapping of found strings and their indices in the searched string
Pair - represents a generic immutable pair of nonNull values that can be compared
Main - runs an example for each class/method

PYTHON---------------------------------------------------------------------------

The Python_Samples folder contains three separate OOP projects.

StateMachines.py creates a superclass SM representing the basic functions shared
by all state machines.  It is then inherited by subclasses R and Gain, which 
represent the primitive state machines Delay and Multiplier.  Next are two subclasses
designed to combine two state machines in a Cascade or FeedbackAdd structure, and
last is an example of a specific type of state machine subclass which accumulates
inputs by alternately adding and subtracting them.  Each subclass overwrites SM's 
default for getNextValues by specifying its own unique behavior.

SlidePuzzleSolver.py begins with the superclass SearchNode and a method for a breadth-
first, dynamic programming, A* uniform cost search over SearchNodes.  A subclass 
PuzzleSearchNode extends SearchNode, overriding the getChildren method with directions
specific to the states and possible moves of a 3x3 classic slide puzzle.  When
implemented, the ucSearch method can give a path of states leading from any starting
arrangement of tiles in the puzzle to any possible end arrangement.  Finally, a 
heuristic method is defined to increase the efficiency of a PuzzleSearchNode search.

CircuitSolver.py contains (at the end) a method solveCircuit, which, given any list of one-port
components in a circuit, can solve for the the values associated with any circuit variable.
It does this by solving the system of equations given by the constitutive equation for each
component, one Kirchoff's Current Law equation for each node except for ground, and one 
ground equation setting the ground node's potential to zero.  Components are represented by a
superclass OnePort, which establishes the basic requirements: a potential to the left, a potential
to the right, and the current going through the component.  Subclasses of OnePort - VSrc (Voltage 
Source), ISrc (Current Source), and Resistor - inherit this superclass and also define their
constitutive equation to describe their behavior in a circuit.