|
|
Introduction
The Goal
To make a comprehensive, fully-featured, and extendable go problem resource.
The Problem Solver
A Java applet that lets you interactively solve go problems. Multiple paths, both correct and incorrect, can be followed in an attempt to solve a problem. You can view the solution as a numbered sequence, an animation, or you can navigate it with colored paths. The problem solver can display several kinds of Smart Go File markup, including marked stones and intersections, and comments.
The Database
Stores go problems of varying types. Searchable and extendable. Problems are rated with two types of difficulty measurements, as well as a user-rated "coolness" factor.
The Author
My name's adum and I can be reached at adum@adum.com.
![]()
Features
Difficulty
goproblems.com measures two types of difficulty. Since it's hard for people to objectively measure the difficulty of a problem, goproblems.com measures two statistics that independently or in small numbers mean little, but over time and in context should provide a means to measure the difficulty of a problem.
When you're playing with a problem, you'll see the difficulty expressed as: x/y. x is the percentage of people who've gotten this problem wrong. y is the average number of seconds it took people to solve the problem correctly.
Coolness
To give people a way to objectively rate problems, they can vote on coolness. Ten is the most, one the least. The coolness factor of a problem is the average of the votes.
Comments
What if you don't agree with the answer of a problem? Or you think there's a cleaner way to achieve it? Well, just add a comment. This is the best way to provide feedback, and also just to discuss problems, especially those of the "find the best move" variety. The comment button doesn't show up until you've tried the problem, as comments might contain spoilers.
![]()
Ratings
How it Works
First of all, a disclaimer. I've come up with the best approach I can think of, but I can easily believe there's a better method out there. If you can think of one, let me know!
The basic idea is to somehow calculate a number based on all the problem attempts a user has made. You want to reward successes proportionally to the difficulty of the problem, and the inverse of this for failures. Given the algorithm below, I calculate a number between 100 and -100.
Issues
The ratings get updated once per night due to computational complexity. People with fewer than five attempts don't get counted. Attempts on problems that have been tried less than ten times also do not get counted.
The ratings only vaguely appear to correspond to the given strength of users. I think a lot of this comes from the way people approach the site. Do they study a problem carefully before attempting it, or do they click just using their instinct? Do they skip problems that look too complicated or do they purposely challenge themselves? These things make big differences.
The Formula
Here's some pseudo-code:
ratingSum = 0.0 divisor = 0.0 loop (all first attempts by some user) { difficulty = (percentage (0.0 - 1.0) of successful attempts on this problem by all users) if (successful attempt) { rating = rating + (1 - difficulty) divisor = divisor + (1 - difficulty) } else { rating = rating - difficulty divisor = divisor + difficulty } } userRating = (rating / divisor) * 100![]()
![]()