Thank you to anyone who has already donated - your generous donations helped make three months of treatment possible.

My brother Nate continues to fight stage IV Hodgkin's lymphoma. He's just 31, with a wife and baby girl. They have no active income (since he's been unable to return to work), no insurance, and cannot afford the treatment he needs. Nate and his family need your help. Please consider a donation, every dollar helps. Thanks.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import java.io.Console;
import java.util.Random;

public class Guesser {

        /* The highest number that can be used */
        public static final int MAX_NUMBER = 100;

        /* Our Console object we will use to read input with */
        private final Console console = System.console();

        /* Our "random" number generator */
        private final Random random = new Random();

        /* The last answer that was given */
        private Answer lastAnswer = null;

        // User given input for if our guess was too high or low
        enum Answer {
                CORRECT, HIGHER, LOWER
        }

        public Guesser() {
                // Intro
                printf("This is a game where I (the computer) will try and guess a number you choose.");
                printf("Please choose a number between 1 and %d", MAX_NUMBER);
                printf("Once you have chosen a number, press ENTER.");

                // Wait for input
                console.readLine();

                // Count the amount of tries it took us to guess
                int tries = 0;

                // The correct number (set when we correctly guess)
                int correctNumber = -1;

                // The number we guessed
                int guess = -1;

                // The bottom guessing range
                int bottomRange = 1;

                // The upper guessing range
                int upperRange = MAX_NUMBER;

                // Now we can begin :-)
                do {
                        // Take a guess :-)
                        guess = rand(bottomRange, upperRange);

                        // Keep reading an answer until it's non null
                        do {
                                System.out.printf("Is your number %d? [Yes (y), Higher (h), Lower (l)] ", guess);
                                lastAnswer = readAnswer();
                        } while (lastAnswer == null);

                        // Were we correct ??
                        if (lastAnswer == Answer.CORRECT) {
                                correctNumber = guess;
                                break;
                        }

                        // Calculate the next range
                        if (lastAnswer == Answer.HIGHER) {
                                bottomRange = guess + 1;
                        } else { // LOWER
                                upperRange = guess - 1;
                        }

                        // Failure is not an option
                        tries ++;
                } while ( lastAnswer != Answer.CORRECT );

                // We won....
                printf("Yippee! It took me %d tries to guess your number, which was %d.", tries, correctNumber);
        }

        /* Read an aswer from the user */
        private Answer readAnswer() {
                String line = console.readLine();

                // Disregard my dumb parsing... :D
                for (Answer answer : Answer.values()) {
                        if (line.startsWith("y")) {
                                return Answer.CORRECT;
                        }

                        if (line.toLowerCase().startsWith(answer.toString().substring(0, 1).toLowerCase())) {
                                return answer;
                        }
                }

                return null;
        }

        /* Generate a random number between two values */
        private int rand(int min, int max) {
                if ( min > max ) {
                        return rand(max, min);
                }

                return min + (int) (Math.random() * ((max - min) + 1));
        }

        /* Convenience method for System.out.println(String.format.... */
        private void printf(String str, Object... args) {
                System.out.println(String.format(str, args));
        }

        public static void main(String[] args) {
                new Guesser();
        }

}