**change_diophantine**,
a Python code which
sets up a Diophantine equation to solve the change making problem,
which counts the number of ways a given sum can be formed
using coins of various denominations.

The change making problem is given a target value C and a set of N coin denominations with value W. The task is to determine the minimum number of coins needed to form the given value.

In the unbounded change making problem, there are a limitless supply of coins of each denomination. In the bounded change making problem, each denomination is available only up to some given limit.

For some sets of denominations, there will be target values that cannot be formed. (This relates to Frobenius's problem.)

The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.

**change_diophantine** is available in
a MATLAB version and
an Octave version and
a Python version.

change_dynamic, a Python code which uses dynamic programming to solve the change making problem, which counts the number of ways a given sum can be formed using coins of various denominations.

change_greedy, a Python code which uses the greedy method to seek a solution to the change making problem, which tries to match a given amount by selecting coins of various denominations.

combo, a Python code which includes many combinatorial routines.

diophantine_nd, a Python code which is given a Diophantine equation in N variables, and returns all strictly positive solutions, or all nonnegative solutions.

football_dynamic, a Python code which uses dynamic programming to count the ways of achieving a given score in football.

mcnuggets, a Python code which counts M(N), the number of ways a given number N of Chicken McNuggets can be assembled, given that they are only available in packages of 6, 9, and 20.

partition_brute, a Python code which uses brute force to seek solutions of the partition problem, splitting a set of integers into two subsets with equal sum.

partition_greedy, a Python code which uses a greedy algorithm to seek a solution of the partition problem, in which a given set of integers is to be split into two groups whose sums are as close as possible.

satisfy, a Python code which demonstrates, for a particular circuit, an exhaustive search for solutions of the circuit satisfiability problem.

subset, a Python code which enumerates, generates, ranks and unranks combinatorial objects including combinations, partitions, subsets, index sets, and trees.

subset_sum, a Python code which seeks solutions of the subset sum problem, in which it is desired to find a subset of a set of integers which has a given sum.

tsp_brute, a Python code which reads a file of city-to-city distances and solves the traveling salesperson problem, using brute force.

tsp_greedy, a Python code which reads a file of city-to-city distances, and solves a small traveling salesperson problem (TSP) using the greedy algorithm. It picks a starting city at random, and then successively visits the nearest unvisited city.

- change_diophantine.py, the source code.
- change_diophantine.sh, runs all the tests.
- change_diophantine.txt, the output file.