Algorithmic Assembly of Nanoscale Structures