#!/usr/bin/perl use warnings; use strict; use 5.010; # The 3n + 1 problem (http://www.streamtech.nl/problemset/100.html) my @pairs; say "Input:"; while (defined ($_ = ) && !/^\.$/) { if (!/^(\d+)\s+(\d+)$/ && $1 > 0 && $2 > 0) { chomp; say "Invalid input >$_<."; say 'Two non-zero positive integers are expected. Input ignored'; next; } push @pairs, [$1, $2]; } say "Output:"; for my $pair (@pairs) { my $maxLength = calcCycleLen ($pair->[0]); my $length2 = calcCycleLen ($pair->[1]); $maxLength = $length2 if $maxLength = $length2; say "@$pair $maxLength"; } sub calcCycleLen { my ($number) = @_; my $length = 1; while ($number > 1) { $number = $number % 2 ? $number * 3 + 1 : $number / 2; ++$length; } return $length; }