[BLANK_AUDIO] This week we're going to be talking about abstraction and modeling. And the idea here is that we're going to tie together a lot of the concepts of this course at the end. So that you'll be able to see how everything fits together that we've done. Dwight, you want to tell us about modeling? >> Sure. Again one of the, the main questions that biologists always think about is you know, they give you a DNA and they want to understand the evolution of that set of DNA. And then they come to a computer scientist and they say okay here's the DNA. I want to know what is the evolutionary history of this DNA. So, the first question you need to, to understand or to ask is what is DNA? How do I model DNA? So, it's common for us to model it as a sequence or a string of, of letters where every letter can be one of four possibilities, A or C or T or G. So first, we have to understand how do we model DNA for a computer to be able to read it. Second thing, I go back to the biologists and I say, what do you mean by evolutionary history? Then, we go back and forth and we understand, okay it's a tree. It's a rooted tree. Then we need to understand, okay, you have many possible trees. Which one do you want. So we have to think about how to model some criteria that can tell us this tree is better than this or biologists like this tree better than this one. So, we have to go through this process until we get to a mathematical object. Then we can start reasoning about developing algorithms and implementing code. >> So, this week we're not going to be talking about DNA but we do have what we think is an interesting project for you. Joe, you want to tell us about it? >> So, this week we're going to work with the Fifteen Puzzle. So the Fifteen Puzzle, it's been around for about 150 years and it consists of a 4 by 4 grid with 15 tiles that can be moved around on the grid. The basic strategy is that you can move one of the adjacent tiles into the empty space. It turns out that it's not that hard for humans to solve. There's about a 5 step process that you can go through to solve in about 50 to 100 moves. But what we're going to do is we're going to develop a model for what the solution process looks like. And it looks very much what you see for DNA, it'll be a four letter sequence, left, right, up or down. And what we're going to do is we're going to implement this human solution process. Now, the actual solution process, although it's easy to describe in English, is actually quite tricky to turn into code. And one of the critical things that you'll need to do is make sure as you're solving pieces of the puzzles, you don't actually mess up the pieces you've already solved. To do that, you'll need to actually build some advarience that check that you're not corrupting the previous part of the solution that you've computed. So I think that you'll find this to be a very interesting programming task to undertake. >> We think you're going to find this week challenging and it's intentional. Like I said in the beginning, this project here is set to tie together all of the concepts in the course, all right. So, if you try to approach this as just one big thing and you try to write all of the code and test it and debug it in one shot, you're going to fail. Right, you need to follow the practices that we've been teaching throughout where you build up a little piece. You test it, you get it working, and then you move on to the next piece. You test it and you get it working, and you keep everything that you've already built, working as you build up your larger and larger project. Then we believe you have a chance of success here, okay?