public class DeckRearranging {
public String rearrange(String deck, int[] above) {
String a = new String();
for(int i = 0; i < deck.length(); i++) {
a = a.substring(0, above[i]) + String.valueOf(deck.charAt(i)) + a.substring(above[i]);
}
return a;
}
}
簡単。500 問題文(要ログイン)
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
public class YearProgressbar {
public double percentage(String currentDate) {
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy HH:mm z", Locale.US);
Date date = sdf.parse(currentDate + " EST", new ParsePosition(0));
GregorianCalendar current = new GregorianCalendar();
current.setTime(date);
int year = current.get(GregorianCalendar.YEAR);
GregorianCalendar start = new GregorianCalendar();
String s = "January 01, " + Integer.toString(year) + " 00:00 EST";
start.setTime(sdf.parse(s, new ParsePosition(0)));
GregorianCalendar end = new GregorianCalendar();
s = "January 01, " + Integer.toString(year + 1) + " 00:00 EST";
end.setTime(sdf.parse(s, new ParsePosition(0)));
return (double)(current.getTimeInMillis() - start.getTimeInMillis()) / (double)(end.getTimeInMillis() - start.getTimeInMillis()) * 100.0;
}
}今までで一番苦労しました。せっかくJavaを使っているんだからってCalendarクラスを使おうとした結果がこれだよ!もう自分で実装したほうが早かったね・・・
ローカルではTestCaseが通るのに、TopCoder側では通らないという謎。
1時間以上悩んだ結果、原因は「夏時間」。
調べるうちにDateFormatクラスがあるから使ってやんよ、と思ったらこれもまた苦戦。
今度はローカルでSimpleDateFormatが動かない。なぜかTopCoder側で動く。
これは、Localeを指定しないと、月(Mayとか)を正しくとってこられないっぽい。デフォルトのままだと「5月」みたいに日本語表示しか読み取れなかったみたい。
そして、setTime(Date)した後は、setTimeZone(TimeZone)しても適用されていなくて、もうしょうがないから入力テキストにESTって記述してタイムゾーン指定してやったよ!!
他の人の解凍を見るとDateクラスの非推奨のメソッド使うともっと簡単にできたっぽい。もうやだ。
0 件のコメント:
コメントを投稿