101 lines
2.5 KiB
Java
101 lines
2.5 KiB
Java
package p;
|
|
|
|
class AdventOfCodeDay2 {
|
|
static float parse_digit(char c) {
|
|
switch (c) {
|
|
case '0': return 0.0f;
|
|
case '1': return 1.0f;
|
|
case '2': return 2.0f;
|
|
case '3': return 3.0f;
|
|
case '4': return 4.0f;
|
|
case '5': return 5.0f;
|
|
case '6': return 6.0f;
|
|
case '7': return 7.0f;
|
|
case '8': return 8.0f;
|
|
case '9': return 9.0f;
|
|
default: return -1.0f;
|
|
}
|
|
}
|
|
|
|
static float fabs(float f)
|
|
{
|
|
if (f < 0)
|
|
return -f;
|
|
else
|
|
return f;
|
|
}
|
|
|
|
static float fsign(float f)
|
|
{
|
|
if (f < 0)
|
|
return -1;
|
|
else
|
|
return 1;
|
|
}
|
|
|
|
static boolean report_safe(float[] line, int length)
|
|
{
|
|
float last = line[0];
|
|
float last_sign = 0.0f;
|
|
for (int i = 1; i < length; i++) {
|
|
float cur = line[i];
|
|
float rate = last - cur;
|
|
|
|
if (fabs(rate) < 1 || fabs(rate) > 3)
|
|
return false; // unsafe
|
|
|
|
float sign = fsign(rate);
|
|
if (last_sign != 0.0f && sign != last_sign)
|
|
return false; // unsafe
|
|
|
|
last_sign = sign;
|
|
last = cur;
|
|
}
|
|
|
|
return true; // safe
|
|
}
|
|
|
|
static float solve(char[] input) {
|
|
float[] line = new float[100];
|
|
int line_ix = 0;
|
|
int input_ix = 0;
|
|
float num = 0.0f;
|
|
float safe_count = 0.0f;
|
|
|
|
while (input_ix < input.length) {
|
|
if (input[input_ix] == ' ' || input[input_ix] == '\n') {
|
|
line[line_ix] = num;
|
|
line_ix += 1;
|
|
num = 0.0f;
|
|
}
|
|
if (input[input_ix] == '\n') {
|
|
if (report_safe(line, line_ix)) {
|
|
safe_count += 1.0f;
|
|
}
|
|
line_ix = 0;
|
|
}
|
|
float digit = parse_digit(input[input_ix]);
|
|
if (!(digit < 0.0f)) {
|
|
num *= 10.0f;
|
|
num += digit;
|
|
}
|
|
input_ix += 1;
|
|
}
|
|
|
|
return safe_count;
|
|
}
|
|
|
|
public static void main() {
|
|
char[] input = {
|
|
'7', ' ', '6', ' ', '4', ' ', '2', ' ', '1', '\n',
|
|
'1', ' ', '2', ' ', '7', ' ', '8', ' ', '9', '\n',
|
|
'9', ' ', '7', ' ', '6', ' ', '2', ' ', '1', '\n',
|
|
'1', ' ', '3', ' ', '2', ' ', '4', ' ', '5', '\n',
|
|
'8', ' ', '6', ' ', '4', ' ', '4', ' ', '1', '\n',
|
|
'1', ' ', '3', ' ', '6', ' ', '7', ' ', '9', '\n',
|
|
};
|
|
|
|
solve(input);
|
|
}
|
|
}
|