20 lines
482 B
Zig
20 lines
482 B
Zig
// Please implement the `ComputationError.IllegalArgument` error.
|
|
|
|
pub const ComputationError = error{IllegalArgument};
|
|
|
|
pub fn steps(number: usize) anyerror!usize {
|
|
if (number == 0) {
|
|
return ComputationError.IllegalArgument;
|
|
}
|
|
return collatz(number, 0);
|
|
}
|
|
|
|
fn collatz(number: usize, acc: usize) usize {
|
|
if (number == 1) {
|
|
return acc;
|
|
}
|
|
|
|
const next = if (number % 2 == 0) number / 2 else number * 3 + 1;
|
|
|
|
return collatz(next, acc + 1);
|
|
}
|