63 lines
1.7 KiB
Java
63 lines
1.7 KiB
Java
import java.util.*;
|
|
|
|
public class Game24 {
|
|
static Random r = new Random();
|
|
|
|
public static void main(String[] args) {
|
|
|
|
int[] digits = randomDigits();
|
|
Scanner in = new Scanner(System.in);
|
|
|
|
System.out.print("Make 24 using these digits: ");
|
|
System.out.println(Arrays.toString(digits));
|
|
System.out.print("> ");
|
|
|
|
Stack<Float> s = new Stack<>();
|
|
long total = 0;
|
|
for (char c : in.nextLine().toCharArray()) {
|
|
if ('0' <= c && c <= '9') {
|
|
int d = c - '0';
|
|
total += (1 << (d * 5));
|
|
s.push((float) d);
|
|
} else if ("+/-*".indexOf(c) != -1) {
|
|
s.push(applyOperator(s.pop(), s.pop(), c));
|
|
}
|
|
}
|
|
if (tallyDigits(digits) != total)
|
|
System.out.print("Not the same digits. ");
|
|
else if (Math.abs(24 - s.peek()) < 0.001F)
|
|
System.out.println("Correct!");
|
|
else
|
|
System.out.print("Not correct.");
|
|
}
|
|
|
|
static float applyOperator(float a, float b, char c) {
|
|
switch (c) {
|
|
case '+':
|
|
return a + b;
|
|
case '-':
|
|
return b - a;
|
|
case '*':
|
|
return a * b;
|
|
case '/':
|
|
return b / a;
|
|
default:
|
|
return Float.NaN;
|
|
}
|
|
}
|
|
|
|
static long tallyDigits(int[] a) {
|
|
long total = 0;
|
|
for (int i = 0; i < 4; i++)
|
|
total += (1 << (a[i] * 5));
|
|
return total;
|
|
}
|
|
|
|
static int[] randomDigits() {
|
|
int[] result = new int[4];
|
|
for (int i = 0; i < 4; i++)
|
|
result[i] = r.nextInt(9) + 1;
|
|
return result;
|
|
}
|
|
}
|