in reply to Re^2: Sorting challenge (Insertion sort)
in thread Sorting challenge

FWIW: this passed with a time of 4.56s. The main difference between this and failing attempts -- besides the correction for dups -- is preallocation of the array size:

$max = <>; $#n = $max; ++$n[ $_ ] while <>; defined $n[$_] and print "$_\n" x $n[$_] for 0 .. $#n; exit 0;

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^4: Sorting challenge (Insertion sort)
by davido (Cardinal) on Jul 24, 2013 at 14:20 UTC

    Interesting. ...and a good idea as well. It surely saves a lot of copying to progressively larger containers. It's possible that the data-set was even designed to make this an issue.


    Dave

      It's possible that the data-set was even designed to make this an issue.

      Could be. It is a 'simple' problem that is deceptively hard to accomplish given the constraints. Time in this case.

      Howver, I picked another of the easy tasks at random -- namely: TIDRICE -- and submitted the following:

      #! perl -slw use strict; ## substitute <DATA> for <> in 3 places to test for( 1 .. <> ) { my %h; for( 1 .. <> ) { $h{ $_->[0] } = $_->[1] for [ split ' ', <> ]; } my $score = 0; /\+/ and ++$score or --$score for values %h; print $score; } __DATA__ 3 4 tilak + tilak + tilak - tilak + 3 ratna + shashi - ratna - 3 bhavani - bhavani + bhavani -

      which produces their exact required output from their sample input on my machine; but it is rejected as producing the wrong output.

      So, I'm not sure if that means I missed some subtly of the spec. or their testing is flawed.

      I haven't reached a conclusion about the site yet. Their UI certainly has some annoyances -- but hell, I've hung around here for 10+ years and this place is far from perfect :)

      And one can't but wonder if perlsufi pulled off a very subtle spam with this thread :)


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

        I got a "correct" with this:

        use List::Util qw(sum); foreach ( 1 .. <> ) { my %votes; foreach ( 1 .. <> ) { chomp( my( $user, $vote ) = split /\s+/, <> ); $votes{$user} = $vote eq '+' ? 1 : -1; } push @scores, $_ for sum( values %votes ); } print "$_\n" for @scores;

        I had to take a shower to wash off the filth after filling out their questionnaire just to submit a solution. I expect to get junk mail even though I specifically opted out of their mailing list.

        It could be that I opted to produce all output after all input had been taken.

        Q. Do I need to take the input for all testcases at once before processing it?

        A. No, you need not take all the input at once. You can take the input for a particular test case and output the answer and then proceed to the next test case. Program should read from standard input and write into standard output. There is no need to read all data first, compute them all and then print all output. It is recommended to read and write data as simultaneously. Technically, server redirects standard stream to files. You can test you programs in the same way at home.


        Dave