University of Toronto ACM-ICPC Tryouts 2012
D: Diablo Bot
Maybe you've played Diablo? There are three different character classes: Noobs, Suckers, and Pros. Noobs don't know anything about the game. Suckers think they know how to play. Pros know that the goal of the game is to write a script that will farm for valuable items that they can turn around and sell to Suckers on the black market. Obviously Pros would sell to Noobs if they could, but Noobs don't even know how to buy items.
An obvious piece of preqrequisite information for making such a bot is knowing what sorts of items are worth picking up. There are Normal, Magic, Rare, and Set items:
- Set items always belong to some famous dead person, so they always begin with a word that ends in "’s" (e.g. Andrew’s). No other items are special enough to begin this way.
- Rare items always have names that are two words long.
- Magic items always have names that are between two and four words long. If, and only if, a Magic item has more than two words in its name, then the last two words are "of [something]" (e.g. of Doom).
- If the first word is "Damaged", the item is a Normal item. Furthermore, any item that could not possibly be Magic, Rare, or Set must also be Normal. No other items are Normal.
- You may not have played Diablo, but hopefully you still know that a "word" is a maximal substring of non-space characters. Also, letter case is irrelevant.
You have a list of N (1 ≤ N ≤ 1000) item names, and you need to be able to classify these items as accurately as possible. It may not be possible to assign a unique type to each item, but as long as it's not Normal, surely you'll want it. Every item name is a string of no more than 100 characters, containing only alphabetic characters, spaces, and apostrophes. Every name begins and ends with a non-space character.
Input
Line 1: 1 integer, N
Next N lines: The name of the ith item, for i = 1..N
Output
N lines: The type of the ith item (one of "Normal", "Set", "Magic", or "Rare"), or "Not sure, take anyways" (without quotes) if the item's type cannot be determined, but is known not to be Normal, for i = 1..N
Sample Input
7 Somebody's Something of Whatever stone of jordan Wirt's Leg FLAMING TURNIP Damaged Goods Sword Fish shaped volatile organic compounds
Sample Output
Set Magic Set Not sure, take anyways Normal Normal Normal
The first and third items begin with possessives, so they must be Set items. The second item is three words long, and ends in "of [something]" so it must be Magic. The fourth item could be either Rare or Magic. The fifth item begins with "Damaged" so it's Normal. The last two items don't fit the descriptions of Set, Rare, or Magic, so they must be Normal also.
All Submissions
Best Solutions
Point Value: 15
Time Limit: 5.00s
Memory Limit: 64M
Added: Oct 02, 2012
Author: wjomlex
Languages Allowed:
C++03, PAS, C, HASK, ASM, RUBY, PYTH2, JAVA, PHP, SCM, CAML, PERL, C#, C++11, PYTH3
Comments (Search)
Not algorithm related, but I suggest you read up about:
- continue
- List<> / ArrayList<>
Furthermore, we explicitly recommend against saving and then printing output at the end.
Is it not possible to be provided with a test case that should return Rare?
eg. is "Somebody'S Something of Whatever" still a valid set item and is "stone OF Jordan" a valid magic item? Same for "damaged goods".