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クラスの非推奨のメソッド使うともっと簡単にできたっぽい。もうやだ。