`
JokerT
  • 浏览: 21905 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

topcoder practice1

 
阅读更多

 

Problem Statement:
TopCoder has decided to automate the process of assigning problem difficulty
levels to problems.  TopCoder developers have concluded that problem difficulty
is related only to the Average Word Length of Words in the problem statement:

If the Average Word Length is less than or equal to 3,  the problem is a 250
point problem.
If the Average Word Length is equal to 4 or 5, the problem is a 500 point
problem.
If the Average Word Length is greater than or equal to 6, the problem is a 1000
point problem.
 
Definitions:
Token - a set of characters bound on either side by spaces, the beginning of
the input String parameter or the end of the input String parameter.
Word - a Token that contains only letters (a-z or A-Z) and may end with a
single period. A Word must have at least one letter.
Word Length - the number of letters in a Word. (NOTE: a period is NOT a letter)

The following are Words :
"ab",  "ab."

The following are not Words :
"ab..", "a.b", ".ab", "a.b.", "a2b.", "."

Average Word Length - the sum of the Word Lengths of every Word in the problem
statement divided by the number of Words in the problem statement.  The
division is integer division. If the number of Words is 0, the Average Word
Length is 0.
 
Implement a class HowEasy, which contains a method pointVal.  The method takes
a String as a parameter that is the problem statement and returns an int that
is the point value of the problem (250, 500, or 1000). The problem statement
should be processed from left to right.
 
Here is the method signature (be sure your method is public):
int pointVal(String problemStatement);
 
problemStatement is a String containing between 1 and 50 letters, numbers,
spaces, or periods.  TopCoder will ensure the input is valid.
 
Examples:
 
If problemStatement="This is a problem statement", the Average Word Length is
23/5=4, so the method should return 500.
If problemStatement="523hi.", there are no Words, so the Average Word Length is
0, and the method should return 250.
If problemStatement="Implement a class H5 which contains some method." the
Average Word Length is 38/7=5 and the method should return 500.
If problemStatement=" no9 . wor7ds he8re. hj.." the Average Word Length is 0,
and the method should return 250.

分析:关键在于检测word,另外token是通过splite(" ")来得到也可以算做一个技巧。

解答亮点在于正则表达式的应用(比较初级,正则的强大还需要慢慢发现)

源代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author 生如夏花
*/
public class HowEasy {

/**
* @param args the command line arguments
*/
public static int pointVal(String problemStatement) {
// TODO code application logic here
String[] token;
token = problemStatement.split(" ");
int level = 250;
int num = 0;
int length = 0;
int avlength = 0;
for (String word : token) {
if (isWord(word)) {
num++;
length += word.length();
}
}
avlength = length / num;
if (avlength == 4 || avlength == 5) {
level = 500;
}
if (avlength >= 6) {
level = 1000;
}
return level;

}

public static boolean isWord(String str) {
Pattern p = Pattern.compile("[a-zA-Z]+");
Matcher m = p.matcher(str);
return m.matches();
}
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics