// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ANCHOR: solution // ANCHOR: collatz_length /// Determine the length of the collatz sequence beginning at `n`. fn collatz_length(mut n: i32) -> u32 { // ANCHOR_END: collatz_length let mut len = 1; while n > 1 { n = if n % 2 == 0 { n / 2 } else { 3 * n + 1 }; len += 1; } len } // ANCHOR: tests #[test] fn test_collatz_length() { assert_eq!(collatz_length(11), 15); } // ANCHOR_END: tests // ANCHOR: main fn main() { // ANCHOR_END: main println!("Length: {}", collatz_length(11)); }