2007 TopCoder Collegiate Challenge
TCCC07 Header Links
Today is Wednesday, April 24, 2024
TCCC07 Sponsored by Eli Lilly

TCCC07 Event Patron - NSA

TCCC07 Sponsored by Deutsche Bank

nicka81 is the new Component Design Champion!

Discuss this

Friday, November 2, 2007
by the Design Review Board
TopCoder Members



After three days of on-site finals, nicka81 emerged as the winner of the 2007 TopCoder Collegiate Challenge Component Design competition, taking home the top prize of $25,000. Vovka took second place, and urtks took home the third.

Component Design Final Scores

Handle Final Score
nicka81 92
Vovka 60
urtks 42
kakarotto 38
Luca 34
sql_lall 26
bramandia 18


Wednesday, October 31, 2007
Round 1: Graph Framework
by aksonov

Probably all of us are familiar with Graph theory and have implemented various graph algorithms to solve problems. Depending on the problem space, it may be necessary to represent graphs in memory in a variety of different ways. The Graph Framework component provides a standard interface for representing graphs regardless of internal memory representation.

The component will provide two representations for graphs, one suitable for dense graphs and one suitable for sparse graphs. The Graph Framework should also provide numerous common graph functionalities, such as modeling both directed and undirected graphs, with or without cycles, CRUD operations with edges and vertices, event listener framework, etc.

It seems to be an exciting component for designers - the designer should not know some specific IT technology (such as ASP.NET, servlets, JSP, etc.) and maximum freedom for creativity is given to implement the requirements. Many requirements make the design really untrivial - the designers should have good knowledge of various design patterns to implement the required functionality and make usage of this component really easy. Competitors had to find the golden mean between simplicity of API and the component flexibility.

Probably the most challenging parts of the component were the ability to find out what kind of graph a Graph object is (directed, undirected, acyclic, multigraph, etc.) in an efficient way and making such property settable. The designer has to implement flexible validation support for invalid operations and powerful transformation mechanisms from one kind of graph to another one.

Another non-trivial task was to make the graph really independent from its representation but make easy extending of both graph operations and graph representation possible. Some designers implement Bridge Design pattern to solve this task effectively.


Thursday, November 1, 2007
Round 2: AJAX Scrollable JSF Data Bound Table / AJAX Scrollable Data Bound Control
by kyky

The Scrollable Data Bound Table component is a custom table component with a scrollbar. It uses AJAX to pass the data when it becomes necessary as the user slides the scroll bar up and down, and caches it on the client side to keep the network traffic down to the minimum required.

Building a design for this component was relatively straightforward, as the web technologies that must be used place strict boundaries for the design. Understanding these technologies was crucial to submitting a working design, though. This proved too challenging for the majority of the competitors: the component got only three submissions that passed the review.

When the requirements call for a compact design like this, the designers get fewer chances to forget a requirement, miss a relationship on a diagram, or make a mistake in an algorithm description. They also get more time to document their classes and methods well. As the result, the submitters are forced to compete on fine points of understanding the TopCoder Design Methodology and showcasing their submissions to the users (and of course to the Review Board). The winning submissions in both Java and .NET were high-quality designs with great documentation for developers, earning their authors impressive scores in the upper nineties.


Friday, November 2, 2007
Round 3: Faceted Classification
by Ghostar

The "Faceted Classification" component is a component designed to categorize items based on their properties.

From the requirements specification for the component:

"A faceted classification attempts to exhaustively define a domain through mutually exclusive categories. Facets are orthogonal categories that isolate one perspective of a domain, like 'Price' or 'Location.' Facets allow items in a domain to be ordered in multiple ways, unlike traditional taxonomy which defines a single order. Faceted navigation can be a very effective tool for multidimensional domains since it allows the user to choose the order classifications are selected from, like 'Location' and then 'Price.'"

Basically, the component provides a way to classify items based on values for defined facets. The example used in the forum and in most of the designs was that of wine. The facets for wine could include color (red or white), vintage (2003, 2002), price ($1-5, $5-25), alcohol content, and location, among other things. A single ID for a specific type of wine could apply to a number of these facet values, like "color:red, vintage:2003, and price:$1-5." The overall goal of the component is to provide a few basic features:

  • A domain object model to allow a user to programmatically define the facets, their values, and the item IDs associated with each value;
  • A persistence mechanism that saves the model to comma-separated value (CSV) files. Multiple files were allowed to house the data, and the file structure and layout was left up to the designer;
  • A bulk operation mechanism that allows for the user to bulk import, update, and delete entities from the model;
  • Set operations that allow the user to get sets of item assignments and perform union and intersections on those sets.

The competitors had a lot of freedom with how this design was to look. Designs like this are very open-ended, as they aren't reliant on very specific technologies (like JSP or WCF), so reviewing them is interesting as different approaches are taken to tackle the same problems. One big thing the designers had to do was ensure they were up to date with the conversations in the forum, as it contained a number of clarifications to the original requirements, including things related to specific features and what the file input and output was to look like.

I was looking for a number of specific things in the design, besides the general requirements with basic design features, like design pattern and modifiers:

  • The model API should be obvious to the user familiar with the requirements. The user should be able to easily create facets (like wine color), values for those facets (like red or white), and assign item ID's to those values (like 123 or 345).
  • The API to modify the model, like create new values, rename values, and delete item assignments, should be obvious to the user and easy to call.
  • The persistence mechanism should be extensible, with the ability to easily plug in a new implementation, like database persistence, into the design.
  • The bulk operations should be obvious and user friendly.
  • The operations required with set manipulation should be efficiently described and designed.
  • The file structure should be well described, with good examples, and the general IO should be efficient, as it is expected there will be large sets of facets, values, and assignments.

Overall this is a great component for a design final, as it allows the designers a lot of freedom over what the final design looks like and allows their creativity and attention to detail to flourish.



Component Design: Scores & Wagers

  Graph Framework
Java .NET
 
  Round 1  
Competitor initial score final score place wager points link rd1 total
bramandia 82.09 84.57 5 60 12 download 12
kakarotto 80.86 84.44 6 20 3 download 3
Luca 81.23 87.36 2 48 24 download 24
nicka81 94.66 96.18 1 60 60 download 60
sql_lall N/A N/A 7 10 1 N/A 1
urtks 80.81 86.39 3 20 6 download 6
Vovka 82.17 85.76 4 42 10 download 10
 
  AJAX Scrollable JSF Data Bound Table / AJAX Scrollable Data Bound Control
Java .NET
 
  Round 2  
Competitor initial score final score place wager points link rd2 total
bramandia N/A N/A 5 10 2 N/A 14
kakarotto 63.17 64.75 2 20 5 download 8
Luca N/A N/A 5 10 2 N/A 26
nicka81 93.95 98.42 1 30 30 download 90
sql_lall 80.28 82.15 3 60 20 download 21
urtks 94.94 98.26 2 60 30 download 36
Vovka N/A N/A 5 10 2 N/A 12
 
  Faceted Classification
Java .NET
 
  Round 3  
Competitor initial score final score place wager points link complete total
bramandia 78.65 84.78 7 30 4 download 18
kakarotto 86.24 92.65 2 60 30 download 38
Luca 83.67 89.88 5 42 8 download 34
nicka81 86 90.78 4 10 2 download 92
sql_lall 83.58 87.84 6 30 5 download 26
urtks 86.46 92.39 3 20 6 download 42
Vovka 90.05 93.08 1 48 48 download 60