Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: Perl Solution to Spotify Programming Puzzle

by repellent (Priest)
on Aug 26, 2011 at 05:07 UTC ( [id://922512]=note: print w/replies, xml ) Need Help??


in reply to Perl Solution to Spotify Programming Puzzle

NOTE: The solution below is incorrect. Please refer to the latest attempt instead.

Here's my shot at it:
use List::Util qw(reduce); my (@teams, %emp); my $n = <>; for my $i (0 .. $n - 1) { my ($e1, $e2) = (split ' ', scalar <>); push @{ $emp{$e1} }, $i; push @{ $emp{$e2} }, $i; $teams[$i] = 1; } my @picks; sub pick { my $pick = shift; push @picks, $pick; $teams[$_] = 0 for @{ $emp{$pick} }; delete $emp{$pick}; } my @favorites = (1002, 2001); $emp{$_} and pick($_) for @favorites; while (1) { my $max = reduce { $a->[1] > $b->[1] ? $a : $b } map [ $_ => scalar(grep $teams[$_], @{ $emp{$_} }) ], keys %emp; my ($winner, $cnt) = @{ $max }; last if $cnt == 0; pick($winner); } local $\ = "\n"; print scalar(@picks); print for @picks;

Update: Now with favorites!

Replies are listed 'Best First'.
Re^2: Perl Solution to Spotify Programming Puzzle
by BrowserUk (Patriarch) on Aug 26, 2011 at 10:29 UTC

    I think you're over favouring. Fed this set:

    10 1001 2002 1003 2002 1003 2005 1003 2005 1005 2002 1005 2002 1008 2002 1009 2005 1010 2002 1010 2002

    Yours outputs:

    3 1009 2002 1003

    where this is possible and (to my interpretation of the rules) therefore better:

    2 2002 2005

    Mine's broken in the reverse way in that it ignores (actually, doesn't even consider), equally valid solutions that would use the favoured employee.


    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.
      Thanks :) I attempted again given what you said, also considering the eye-opener that argggh pointed out. I tried hard using some comparison heuristic approach before resigning to the fact that this is really a combinatorial problem.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://922512]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (6)
As of 2024-04-16 12:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found