Ranking (as of 2014-09-15): 477 out of 562
Language: JAVA
// UVa 11947 - Cancer or Scorpio import java.util.Scanner; import java.text.SimpleDateFormat; import java.text.ParseException; import java.util.Date; import java.util.Calendar; import java.util.Arrays; import java.util.ArrayList; import java.util.ListIterator; class Main { public static void main(String[] args) { SimpleDateFormat parseFormat = new SimpleDateFormat("MMddyyyy"), printFormat = new SimpleDateFormat("MM/dd/yyyy"); Calendar cal = Calendar.getInstance(); Scanner sc = new Scanner(System.in); int N = sc.nextInt(); for (int i = 1; i <= N; i++) { try { Date date = parseFormat.parse(sc.next()); cal.setTime(date); cal.add(Calendar.WEEK_OF_YEAR, 40); String name = ZodiacSign.getZodiacSign(isLeapYear(cal.get(Calendar.YEAR)), cal.get(Calendar.DAY_OF_YEAR)); System.out.println(i + " " + printFormat.format(cal.getTime()) + " " + name); } catch (ParseException e) { } } } static boolean isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; } } class ZodiacSign { final String name; final int begin, end; ZodiacSign(String name, int begin, int end) { this.name = name; this.begin = begin; this.end = end; } static final ArrayList<ZodiacSign> zodiacSigns = new ArrayList<ZodiacSign>(Arrays.asList( new ZodiacSign("capricorn", 1, 20), new ZodiacSign("aquarius", 21, 31 + 19), new ZodiacSign("pisces", 31 + 20, 59 + 20), new ZodiacSign("aries", 59 + 21, 90 + 20), new ZodiacSign("taurus", 90 + 21, 120 + 21), new ZodiacSign("gemini", 120 + 22, 151 + 21), new ZodiacSign("cancer", 151 + 22, 181 + 22), new ZodiacSign("leo", 181 + 23, 212 + 21), new ZodiacSign("virgo", 212 + 22, 243 + 23), new ZodiacSign("libra", 243 + 24, 273 + 23), new ZodiacSign("scorpio", 273 + 24, 304 + 22), new ZodiacSign("sagittarius", 304 + 23, 334 + 22), new ZodiacSign("capricorn", 334 + 23, 334 + 31) )); static final ArrayList<ZodiacSign> leapYearZodiacSigns = new ArrayList<ZodiacSign>(Arrays.asList( new ZodiacSign("capricorn", 1, 20), new ZodiacSign("aquarius", 21, 31 + 19), new ZodiacSign("pisces", 31 + 20, 60 + 20), new ZodiacSign("aries", 60 + 21, 91 + 20), new ZodiacSign("taurus", 91 + 21, 121 + 21), new ZodiacSign("gemini", 121 + 22, 152 + 21), new ZodiacSign("cancer", 152 + 22, 182 + 22), new ZodiacSign("leo", 182 + 23, 213 + 21), new ZodiacSign("virgo", 213 + 22, 244 + 23), new ZodiacSign("libra", 244 + 24, 274 + 23), new ZodiacSign("scorpio", 274 + 24, 305 + 22), new ZodiacSign("sagittarius", 305 + 23, 335 + 22), new ZodiacSign("capricorn", 335 + 23, 335 + 31) )); static String getZodiacSign(boolean leapYear, int dayOfYear) { final ArrayList<ZodiacSign> list = (leapYear) ? leapYearZodiacSigns : zodiacSigns; String name = ""; for (ListIterator<ZodiacSign> i = list.listIterator(); i.hasNext(); ) { ZodiacSign zs = i.next(); if (dayOfYear >= zs.begin && dayOfYear <= zs.end) { name = zs.name; break; } } return name; } }
No comments:
Post a Comment