Topological Sort

Score: 132.52 (pass)

#!perl -nl
@n{/(.+) (.+)/}|=n;$n{$2}+=$1ne$2;push@{$g{$1}},$2}{(map{$n{$_}--for@{$g{$_}};delete$n{$_};print}grep!$n{$_},keys%n)?redo:exit%n

Score: 135.54 (pass)

My problem is, when I switch to a different method, it always ends up *longer*.

#!perl -nl
@n{/(.+) (.+)/}||=0;$n{$2}+=$1ne$2;push@{$g{$1}},$2}{(map$n{$_}?():do{map$n{$_}--,@{$g{$_}};delete$n{$_};print},keys%n)?redo:exit%n

Score: 143.57 (pass)

Just printing in the loop does save a few bytes.

#!perl -n
@n{/(.+) (.+)/}||=0;$1ne$2&&$n{$2}++;push@{$g{$1}},$2}{(map{$n{$_}?():do{map$n{$_}--,@{$g{$_}};delete$n{$_};print"$_
"}}keys%n)?redo:%n&&die

Score: 156.57 (pass)

#!perl -n
@n{/(.+) (.+)/}||=0;$1ne$2&&$n{$2}++,push@{$g{$1}},$2}{$c=0;map{$n{$_}||do{$c=$o.="$_
";map$n{$_}--,@{$g{$_}};delete$n{$_}}}keys%n;$c?redo:%n?die:print$o

Score: 165.58 (pass)

Not very good translation of tsort(1) from BSD, with minor tweaks.

#!perl -n
/(.+) (.+)/;$1ne$2&&$n{$2}++,push@{$g{$1}},$2;@n{$1,$2}||=()}{$c=0;map{$n{$_}||do{map$n{$_}--,@{$g{$_}};$c=$o.="$_
";delete$n{$_}}}keys%n;$c&&redo;%n&¨print$o