I am starting my senior project this fall, but before I can register for it, I have to have an idea of what I want to do for my senior project. I work nearly 40 hours every week and have a wife and daughter to take care of so I don’t want something that will take up a great amount of time. I had an idea to make a program where the user could input the colors of each square on each face of a rubik’s cube and the program would output the directions on how to solve it. But, like I said, that would take a phenomenal amount of time.
So, anyone have any ideas on what I could do. The only guidance given to me was “think of something on campus or in your life dealing with software, or the internet that you think needs improvement.”
Well, you’ve got me thinking about the Rubik’s Cube idea now Is an arbitrary setup of a Rubik’s Cube even necessarily solvable? I mean, obviously if it started out as a “fully correct” cube with each face of a different color, and then moves were made, then it must be solvable because we should be able to undo the moves. But that’s not the problem you’re presenting…it just asks us to come up with an arbitrary tiling of the cube (presumably limited to the correct numbers of colored squares, but not limited as to their placement) and then solve it. I’m not sure whether that kind of problem is necessarily solvable (that is, is the solution state reachable from any arbitrary arrangement of the tiles?), and if it is not necessarily solvable, whether it is decidable (that is, can you algorithmically figure out whether a given initial setup is solvable?) If it is undecidable, you could end up with a runaway program on some inputs, because it would keep trying moves and it wouldn’t know whether to give up.
Can you tell I’m taking Theory of Computation right now? Does anyone know enough about Rubik’s Cube theory to answer these questions? I don’t have time to try and figure them out right now.
Sorry for not helping with your question, but that is an interesting idea you’ve got!
Well, my brother is making TamaCthulhu for his senior project (start off with a shapeless Elder Being, and either worship it via the Necronomicon button, feed it via the Severed Limbs button, or punish it via the Holy Water button, and watch as it grows into one of various Eldritch Gods). So that one’s taken and you can’t do that.
This would be hard. Just cause two mp3’s sound the same to you doesn’t mean they look anything alike to the computer.
I don’t know if this would qualify, but making a program that can match an arbitrary string against an arbitrary regular expression is fairly challenging, especially if you want to do it quickly. Something to consider.
I wrote a traffic generator for my model railroad, on my own time (guess that makes me an ubergeek, but at least I don’t speak Klingon). C++ and STL data structures, about 3000 lines of code. I’m about to go to V 3.0, with an integrated bar code reader and a more realistic traffic model. You can help with the new, or plagiarize the old if you like.
mblackwell, That rubix cube lego thing is intense.
Soup Nazi, what are some of your interests both in CompSci and outside? I could tell you that I find genetic algorithms and evolutionary code fascinating and also have a love of music, so maybe I’d find some interesting way to build music through some sort of evolutionary process… But that’s my software preferences and real-world preferences. What are yours?
Well, I mean, a lot depends on your areas of expertise. What advanced CS classes have you taken?
A good tatic though, in my experience, is to take something that exists and modify it. Like find some sort of open sourece metrics tool and and add 10 new metrics to it. That way, you’ve already got some fancy gui stuff you didn’t have to build, and you’ve done a little CS research to do build your new metrics. Plus, if you fail, you can always try to get credit for a paper to the effect of “Why implementing the so-and-so feature on thus-and-such is hard.”
A project I was able to do relativly quickly and easily was build a Java block coverage tool. That would likely be enough for a senior project. But it might require more compiler knowledge than you have (not that I built the parser or unparser by myself - all that stuff is freely available).
Mike
PS A random title assignment is not necessarily a solvable rublics cube, just for the record. Just consider the case where the same color is assigned to the central face of two sides.
PPS If you really want to do something silly, you can feel free to contine my exciting master’s theis - implementing an optimization called tagged integers on the .NET runtime. Likely more work than you’d care to do, unless you have some VM experience though.
It is certainly true that an arbitrary setup of a Rubik’s cube is not necessarily solvable - if it was just a case of taking six sets of nine same-coloured faces and plonking an assortment of them on each face, then all kinds of problems might arise (for example, if the red face of the solved cube is opposite the green face, it is impossible to have an edge or corner piece with both colours on it).
Furthermore, even certain configurations of the fixed pieces are not solvable; it has been a while since I played with one, but I’m certain that if you take one ‘edge’ piece out of a solved cube and reinsert it ‘flipped’, you will have created an unsolvable configuration; edges can only be ‘flipped’ in pairs (IIRC).
Anyway, back to the OP, how about a database project? I have often thought that a simple in-business message board (like a simplified version of this one, with forums, threads, etc) would be quite an interesting project.
Another thing I just thought of (and something that I wrote as a directed credit class) is an employee scheduler database.
Have about 100 employees with shift times (8 hours, or 9, 4, 6 for part timers, etc.) that vary by about 15 or 30 minutes each (start 6AM off 2PM, start 9AM end 6 PM), but each “position” must be filled from 6AM to 12 PM (as much as possible)
Then you can simulate people calling in sick, or shift trades, supervisory positions vs. line workers, etc. It’s sort of an NP problem. Maybe you can define it as such?
You might even be able to sell it to the local McDonald’s or something.
An imaging program that extrapolates and predicts what Michael Jackson’s face will look like in 20 years…
Seriously – phewner is right – it would help to know the CS areas that you are most interested in. What are the advanced classes that you’ve taken that you enjoyed the most? What aspects of CS are you most interested in?
Harmonix: Thanks for the idea… I have an obsession with music — I collect mp3’s like other dorks collect stamps (they never use them, they just keep them)
vunderbob: I am interestedin hearing more about your traffic generator… could you [link=mailto:rantingidiot@burntmail.com]e-mail[/link] me about it?
Bill H.: my interests? Like I said I am obsessed with music… I was also pondering the difficluty of creating a program similar to Fuity Loops™ that would allow you to make beats and instrumental sounds allowing total control over tempo, pitch, melody, harmony, rhyhm, length, chorus, etc. (specifically for techno). One problem I can come up with off the top of my head is that Fruity Loops™ uses a LOT of resources, so mine probably would too…
phewner: I am very unfamiliar with compiler construction, I have taken 1 semesterof Java (I don’t remember much at all, but it is relatively easy to learn [sub]again[/sub] since I know C++ fairly well, I have taken Object Oriented Programming (C++) I am almost through with Data Structures (C++), I have taken Data Communications, Programming Languages, Operating Systems, Unix (more like intro to Linux), and Computer Architecture & Organization. So I think I will be using C++, or maybe some type of Web-design since I am almost through with Web-programming (XML, PHP, CGI).
The Database idea sounds plausible… I want to do something with music or the internet since those keep me interested (which is necessary cause I can be a slacker when not interested).
Thanks for the ideas everyone, I really appreciate it… Keep em coming!
Get a cell phone and a handheld GPS unit and make a program that will allow you to dial up the cell phone and get its present location using the GPS. Call it the future of teenage tracking systems.
Maybe you could write a fuzzy logic program to organize your mp3s for you. Feed it some Sample songs (Led Zep, AC/DC, Enya, whatever) and tell it what those songs count as. Then start tuning the logic with more samples.
Eventually maybe you could get it to dump out stuff like :
45% Rock
35% Punk
20% Techno
There exist converters from abc into more readable formats, like midi and others, which can then be read by various players.
So, one project possibility is to use some AI-ish stuff to build songs (or even just short non-melodic, strictly drum and sample loops) in abc, which should be a relatively easy format to play with.
One possible way to do this is to build a library of loops you like, and use various techniques to either mate or selectively take pieces of each. You could analyze the library you select for typical occurances or sequences of notes. For example, you could analyze a group of just kick and snare drums, and build loops based on common sequences found there, then doing similar for other drums and samples.