• API
• FAQ
• Tools
• Archive
SHARE
TWEET

# TheOtherClock

alefhidalgo Jun 20th, 2011 824 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. import java.util.Scanner;
2. /**
3.  * Tuenti Programming Contest
4.  * Challenge 13: The other clock
5.  * @author alefhidalgo [at] gmail [dot] com
6.  */
7. public class TheOtherClock {
8.
9.         public static final int SECOND_ZERO_LEDS = 36; /*Total leds ON at t=0*/
10.         private int[] ledDisplay;
11.         private int[] lastLedDisplay;
12.         {       /* initialization block */
13.                 ledDisplay = new int[6];
14.                 lastLedDisplay = new int[6];
15.         }
16.
17.         /**
18.          * getLedsVariations: Get led variations between possible digits transition
19.          * @param lastDigit
20.          * @param newDigit
21.          * @return
22.          */
23.         private int getLedsVariations(int lastDigit, int newDigit) {
24.                 //all possible transitions in a led display
25.                 if(lastDigit == 0 && newDigit == 1) return 0;
26.                 if(lastDigit == 1 && newDigit == 2)     return 4;
27.                 if(lastDigit == 2 && newDigit == 3)     return 1;
28.                 if(lastDigit == 3 && newDigit == 4)     return 1;
29.                 if(lastDigit == 4 && newDigit == 5)     return 2;
30.                 if(lastDigit == 5 && newDigit == 6)     return 1;
31.                 if(lastDigit == 6 && newDigit == 7)     return 1;
32.                 if(lastDigit == 7 && newDigit == 8)     return 4;
33.                 if(lastDigit == 8 && newDigit == 9)     return 0;
34.                 if(lastDigit == 9 && newDigit == 0)     return 1;
35.                 if(lastDigit == 5 && newDigit == 0)     return 2;
36.                 return 0; /*no variations*/
37.         }
38.
39.         /**
40.          * Get Total led variations between last and new state
41.          * @return
42.          */
43.         private int getTotalVariations(){
44.                 int sumVariations = 0;
45.                 for (int i = 0; i < ledDisplay.length; i++) {
46.                         sumVariations += getLedsVariations (lastLedDisplay[i], ledDisplay[i]);
47.                 }
48.                 return sumVariations;
49.         }
50.
51.         /**
52.          * Set time in the led Display
53.          * @param h
54.          * @param m
55.          * @param s
56.          */
57.         private void setTime(int h, int m, int s) {
58.                 String sHours = String.valueOf(h);
59.                 String sMin = String.valueOf(m);
60.                 String sSec = String.valueOf(s);
61.                 if (sHours.length() > 1) {
62.                         ledDisplay[4] = Integer.parseInt(sHours.substring(1, 2));
63.                         ledDisplay[5] = Integer.parseInt(sHours.substring(0, 1));
64.                 } else {
65.                         ledDisplay[4] = Integer.parseInt(sHours.substring(0, 1));
66.                         ledDisplay[5] = 0;
67.                 }
68.
69.                 if (sMin.length() > 1) {
70.                         ledDisplay[2] = Integer.parseInt(sMin.substring(1, 2));
71.                         ledDisplay[3] = Integer.parseInt(sMin.substring(0, 1));
72.                 } else {
73.                         ledDisplay[2] = Integer.parseInt(sMin.substring(0, 1));
74.                         ledDisplay[3] = 0;
75.                 }
76.
77.                 if (sSec.length() > 1) {
78.                         ledDisplay[0] = Integer.parseInt(sSec.substring(1, 2));
79.                         ledDisplay[1] = Integer.parseInt(sSec.substring(0, 1));
80.                 } else {
81.                         ledDisplay[0] = Integer.parseInt(sSec.substring(0, 1));
82.                         ledDisplay[1] = 0;
83.                 }
84.
85.         }
86.
87.         /**
88.          * getTotalLedsOn
89.          *      Get total leds ON in a 7 display clock from t=0 to t=seconds
90.          * @param seconds
91.          * @return
92.          */
93.         public int getTotalLedsOn(int seconds) {
94.                 int sumLedsOn = TheOtherClock.SECOND_ZERO_LEDS;
95.                 for (int i = 0; i <= seconds; i++) {
96.                         int seg = i % 60;
97.                         int min = (i / 60) % 60;
98.                         int hours = (i / 3600) % 12;
99.                         setTime(hours, min, seg);
100.                         if(i>0) {
101.                                 //get only variations between off/on leds
102.                                 sumLedsOn += getTotalVariations();
103.                         }
104.                         //save the last display state in order to detect the variations
105.                         System.arraycopy(ledDisplay, 0, lastLedDisplay, 0, ledDisplay.length);
106.                 }
107.                 return sumLedsOn;
108.         }
109.
110.         /* For Debug purpose */
111. //      private void printLedDisplay() {
112. //              System.out.println(ledDisplay[5] + "" + ledDisplay[4] + ":" + ledDisplay[3] + "" + ledDisplay[2] + ":" + ledDisplay[1] + ""     + ledDisplay[0]);
113. //      }
114. //
115.         public static void main(String args[]) {
116.                 TheOtherClock theClock = new TheOtherClock();
117.                 Scanner in = new Scanner(System.in);
118.                 while (in.hasNextInt()) {
119.                         System.out.println(theClock.getTotalLedsOn(in.nextInt()));
120.                 }
121.         }
122. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.
Top