This is an old revision of the document!
Corning Community College
CSCS2330 Discrete Structures
Using the TIC-80 fantasy console simulator on your pi, implement a program that performs a sorting of a randomized list of values, both displaying an animation of the sort, along with timing and keeping track of the approximate number of steps needed to accomplish the task for variable numbers of non-animated runtimes.
The sorting algorithm I'd like for you to produce is that of a naive approach:
In future projects we will be looking at the specifics of established, existing sorting algorithms. Part of the task here is to establish a baseline: you exploring some process without existing knowledge or experience in sorting, so that you can become more familiar with some of the underlying details of what it means to sort values (so our later explorations make more sense).
Additionally, the entire class will be participating in documenting and filling out this project page. It is the responsibility of EACH class member to:
Broadly, to “sort” is to observe a set of values, knowing their relative significance, and arrange them by some pattern of those relationships. In terms of this project, all that must be done is to arrange a list of values (say, 1-10), which begins in a random order, in least-to-greatest order, which we mathematicians understand as being [1,2,3,4,5,6,7,8,9,10]. That's all well and good, but how do humans *really* go about accomplishing such a task? The easiest way to answer this question may be to bring the problem into the physical realm.
Imagine (or physically use) a deck of cards, Ace through Ten. Shuffle them, and arrange them (in the random order produced) in a straight line. Taking a slight detour back into the theoretical realm, understand that a computer is only really capable of “thinking” about one thing at a time - it can only hold one piece of information in its working memory. Given that, when a computer needs to re-arrange something (as has been explored in the various array-manipulators assigned in the past), it must essentially swap two values at a time: retrieve one index, set that index to the other value, and then set the other index to the value retrieved. Likewise, as we go about re-arranging these cards, we will be performing swapping operations, where two cards mutually exchange positions. The purpose of this project is to decide how to go about performing those swaps in a consistent pattern such that by performing the same logic over and over again the cards end up in Ace-Ten order.
To illustrate the idea of a swap more clearly:
Original: [5,4,1,7,9,10,1,8,2,6,3]
Swapped : [4,5,1,7,9,10,1,8,2,6,3] (here, 4 and 5 changed places)
Swapped : [4,1,5,7,9,10,1,8,2,6,3] (here, 5 and 1 changed places)
Swapped : [1,4,5,7,9,10,1,8,2,6,3] (here, 4 and 1 changed places)
I'll be looking for the following:
52:saf0:final tally of results (52/52) *:saf0:no errors, program runs without issue in TIC-80 [13/13] *:saf0:specified algorithm is implemented and functional [13/13] *:saf0:metrics, timing of process is implemented, functional, shown [13/13] *:saf0:project page contributions as per project specifications [13/13]
Additionally: