On Thu, Nov 29, 2001 at 03:17:39PM +0200, Ariel Scolnicov wrote: > > Yesterday, I saw an interesting related exercise. Write a program that > > reads the lines from a file and outputs the middle line. The kicker is > > that you can't use arrays.
I'll interpret that as O(1) memory, O(n) time. > #!/usr/local/bin/perl -w > # Print middle line of file(s) > use strict; > open F,$ARGV[0] or die; > open G,$ARGV[0] or die; > my $l; > 1 while (defined(<F>) && defined($l=<G>) && defined(<F>)); > print $l; That requires reading each line three times. Here's one where each line only need be read once: use File::ReadBackwards; open F, $ARGV[0] or die; tie *G, 'File::ReadBackwards', $ARGV[0] or die; while(1) { $front = <F>; last if $front eq $back; $back = <G>; last if $front eq $back; } print $front; -- Michael G. Schwern <[EMAIL PROTECTED]> http://www.pobox.com/~schwern/ Perl Quality Assurance <[EMAIL PROTECTED]> Kwalitee Is Job One Monkey tennis