in reply to Re^4: Sorting challenge
in thread Sorting challenge

This works, and I like that it uses as few explicit variables as I can manage while still chomping.

use v5.10; say for sort { $a <=> $b } map { chomp( my $i = <> ); $i } 1 .. <>;

Since it's just a throwaway, I suppose you could even rely on Perl's numification rules, eliminating chomp, and thus further eliminating the use of variables, making it as pure a "filter" as possible:

print for sort { $a <=> $b } map { scalar <> } 1 .. <>;

I also kind of liked this one, but it's more verbose:

my $count = <>; my @numbers; while( $count-- ) { push @numbers, scalar <>; } print for sort { $a <=> $b } @numbers;

Dave

Replies are listed 'Best First'.
Re^6: Sorting challenge
by hdb (Monsignor) on Jul 23, 2013 at 15:07 UTC

    Why not just

    <>; print sort { $a <=> $b } <>;

      Because he is supposed to limit input to a user-specified number. By ignoring that specific number, the test harness could throw in extra inputs to verify he's actually checking.


      Dave

Re^6: Sorting challenge
by PerlSufi (Friar) on Jul 23, 2013 at 15:24 UTC
    Wow, nice davido. However, all of those still gave 'time limit exceeded'. Actually, all of the responses here did. Though they were all far better than my attempt! Here is the link explaining this message from the site:
    http://www.codechef.com/wiki/faq#Why_do_I_get_a_Time_Limit_Exceeded

      The incoming list is potentially 10^6 integers long, correct? That's potentially 1_000_000 integers.

      This can be solved, it may involve packing your input into a huge string using pack, appending each int's packed representation onto the same string. Then manually implementing a sort that works in-place within the string, again using pack and unpack.

      Messy! I don't think I want to invest the time in it. :)

      Updated to correct math. ;)

      Actually, 1 million integers in an array shouldn't be a deal-breaker, unless they're severely limiting your memory. My while-loop solution ought to be the most memory friendly. The map solutions generate a list of 1 .. n before sorting the inputs, so you're holding 2M integers rather than 1M in memory.


      Dave