Factorial Post Mortem Back to Perl Golf

Accepted | Artistic/Unorthodox | Rejected

Referee comments are in italics. Blue rows denote golfer's best solution. Red text denotes special characters.

Accepted

ScoreGolferSubmit TimeCode
44.11 BoB (Best of Breed - referees) Tue Aug 6 14:18:36 2002
-l $_*=$`%9e9,??for~4=~?0*$?..pop;print$`%10
44.11 Juho Snellman Thu Aug 8 04:25:32 2002
-l $_*=$`%9e9,??for~4=~?0*$?..pop;print$`%10
Ah, the other regexp could be changed to ?? too.
44.12 BoB (Best of Breed - referees) Mon Aug 5 23:34:39 2002
-l $_*=$`%9e9,??for+1=~?0*$?..pop;print$`%10
44.12 BoB (Best of Breed - referees) Tue Aug 6 00:47:40 2002
-l $_*=$`%9e9,??for??=~?0*$?..pop;print$`%10
questionable ? Naah
44.12 Juho Snellman Tue Aug 6 13:50:09 2002
-l $_*=$`%9e9,//for~4=~/0*$/..pop;print$`%10
Improve tiebreaker marginally. (Dammit, where's the missing 0.0013?).
44.12 Juho Snellman Thu Aug 8 04:24:00 2002
-l $_*=$`%9e9,//for~4=~?0*$?..pop;print$`%10
Finally got the tiebreaker. I hope...
44.13 BoB (Best of Breed - referees) Mon Aug 5 17:56:41 2002
-l $_*=$`%9e9,//for+1=~/0*$/..pop;print$`%10
44.13 Juho Snellman Mon Aug 5 16:54:48 2002
-l $_*=$`%9e9,//for+1=~/0*$/..pop;print$`%10
Hmm... It seems that the map was a pessimization. Back to for.
45.11 Juho Snellman Mon Aug 5 16:45:15 2002
-l map{$_*=$`%9e9;//}1=~/0*$/..pop;print$`%10
Use *=
46.10 Juho Snellman Mon Aug 5 16:38:33 2002
-l map{//for$_*$`%9e9}1=~/0*$/..pop;print$`%10
46.11 Eugene van der Pijll Wed Aug 7 22:28:07 2002
-l $_*=$~%9e8,$~=/0*$/.$`for@~..pop;print$~%10
I should have seen this sooner, I suppose...
46.13 BoB (Best of Breed - referees) Mon Aug 5 16:28:33 2002
-l ($`%9e9*$_)=~//for+1=~/0*$/..pop;print$`%10
46.13 Juho Snellman Mon Aug 5 15:28:01 2002
-l ($`%9e9*$_)=~//for+1=~/0*$/..pop;print$`%10
Use the return value of the initial regexp as part of the loop condition. Saves an amazing 2 strokes.
48.08 Rick Klement Sat Aug 3 03:04:07 2002
$}=substr$}*".$_",~6for++$}..pop;print+chop$},$/
catch BoB?
48.08 Rick Klement Sun Aug 4 15:14:33 2002
-l $}=substr$}*".$_",~6for++$}..pop;print+chop$}
slightly better tiebreak
48.08 BoB (Best of Breed - referees) Sat Aug 3 02:51:31 2002
-l $}=substr$}*".$_",-7for++$}..pop;print+chop$}
smirk
48.09 Rick Klement Sat Aug 3 01:04:24 2002
$}=substr$}*".$_",-7for++$}..pop;print+chop$},$/
48.12 Eugene van der Pijll Wed Aug 7 22:22:47 2002
-l $_=$~*$_%9e8,$~=/0*$/.$`for@~..pop;print$~%10
48.12 Eugene van der Pijll Wed Aug 7 16:35:03 2002
-l $_*=$z,$z=$`//0*$/%9e8for++$z..pop;print$z%10
48.12 BoB (Best of Breed - referees) Thu Aug 1 10:22:30 2002
-l $_*=$z,/0*$/,$z=$`%1e6for++$z..pop;print$z%10
48.12 Bass Sat Aug 3 14:56:16 2002
-l $_*=$},/0*$/,$}=$`%1e9for++$}..pop;print$}%10
shuffle, rinse, repeat
48.12 Wladimir Palant Thu Aug 1 23:46:35 2002
-l $_*=$}%1e6,/0*$/,$}=$`for++$}..pop;print$}%10
48.12 Markus Laire Thu Aug 8 02:46:38 2002
-l $_*=$z%9e9,/0*$/,$z=$`for++$z..pop;print$z%10
48.13 Juho Snellman Mon Aug 5 15:03:03 2002
-l 1=~/0*$/;($`%9e9*$_)=~//for 1..pop;print$`%10
Wohoo!! Empty regexps to the rescue.
48.13 Michael Rybakin Wed Aug 7 06:02:34 2002
-l $_*=$z%1e9,/0*$/,$z=$`for++$z..pop;print$z%10
48.22 Eugene van der Pijll Wed Aug 7 05:00:26 2002
-l $_*=$^F,$^F=$`///%9e8for?0*$?..pop;print$^F%20/2
48.28 Markus Laire Thu Aug 8 01:58:37 2002
$_*=$*%9e9,/0*$/,$*=$`for++$*..pop;print$*%10,$/
48.30 Eugene van der Pijll Tue Aug 6 18:05:45 2002
-l $_*=$^F,$^F=$`//0*$/%9e8for+1..pop;print$^F/2%10
49.09 Mtv Europe Tue Aug 6 11:42:22 2002
for$~(0..pop){$_=$`%9e9*$~||1;s~0*$~
~}print/.
/g
tie optimization
49.10 Stephen Turner Thu Aug 1 17:59:12 2002
-l ($}=$}%1e9*$_)=~s~0+$~~for++$}..pop;print$}%10
49.10 Stephen Turner Sun Aug 4 10:06:18 2002
-l ($}=$}%9e9*$_)=~s~0+$~~for++$}..pop;print$}%10
Improving my tie-breaker by a massive 0.00058 strokes. Call it professional pride.
49.10 Juho Snellman Mon Aug 5 11:23:57 2002
-l ($}=$}%1e9*$_)=~s~0*$~~for++$}..pop;print$}%10
Initialize $} with ++ in the loop generator, instead of using ||1 in the loop body.
49.10 Wladimir Palant Thu Aug 1 18:33:36 2002
-l ($}=$}*$_%1e6)=~s~0*$~~for++$}..pop;print$}%10
49.10 Michael Rybakin Tue Aug 6 12:44:32 2002
-l ($z=$_*$z%1e9)=~s|0*$||for++$z..pop;print$z%10
49.11 Chris Dolan Mon Aug 5 14:37:14 2002
-l ($z=$z*$_%1e9)=~s^0*$^^for++$z..pop;print$z%10
Just a simple tiebreaker improvement...
49.11 Mtv Europe Thu Aug 1 14:33:30 2002
for$n(0..pop){$_=$_*$n%1e8||1;s/0*$/
/}print/.
/g
49.12 Honza Pazdziora Thu Aug 1 19:22:33 2002
-l ($z=$z*$_%1E6)=~s/0*$//for++$z..pop;print$z%10
49.12 Jukka Suomela Thu Aug 1 15:32:53 2002
-l ($y=$y*$_%1E8)=~s/0*$//for++$y..pop;print$y%10
49.12 Jukka Suomela Thu Aug 1 17:02:34 2002
-l ($}=$}*$_%1e8)=~s/0*$//for++$}..pop;print$}%10
49.12 Chris Dolan Mon Aug 5 06:51:58 2002
-l ($z=$z*$_%1e9)=~s/0*$//for++$z..pop;print$z%10
49.12 Pepik Sun Aug 4 16:07:59 2002
-l ($}=$}*$_%1e6)=~s/0*$//for++$}..pop;print$}%10
49.12 Josef Drexler Mon Aug 5 01:57:24 2002
-l ($z=$z*$_%1e9)=~s/0*$//for++$z..pop;print$z%10
49.12 Wladimir Palant Thu Aug 1 18:11:49 2002
-l ($}=$}*$_%1E6)=~s/0*$//for++$}..pop;print$}%10
49.19 Eugene van der Pijll Fri Aug 2 21:24:22 2002
-l ($^F=$^F*$_%1e9)=~s/0*$//for 1..pop;print$^F/2%10
Hmmmm. Nice solution, but is it portable? It uses $^F, which is "ordinarily 2".
49.19 Eugene van der Pijll Fri Aug 2 22:17:38 2002
-l ($^F=$^F*$_%1e9)=~s/0*$//for 1..pop;print$^F/2%10
Better tiebreaker than the last, by .0067
49.19 Eugene van der Pijll Fri Aug 2 22:35:20 2002
-l ($^F=$^F*$_%1e9)=~s/0*$//for.5,1..pop;print$^F%10
Oops, I submitted the wrong file. This is the one with the improved tiebreaker.
50.09 Terje K Tue Aug 6 21:43:07 2002
-l $_=$_*++$z%1e6,s~0+$~~for($_=1)x pop;print chop
50.09 Ross Younger Mon Aug 5 21:26:25 2002
-l ($~=$_*$~%1e9||1)=~s~0+$~~for~0..pop;print$~%10
50.09 James Harvey Mon Aug 5 21:15:04 2002
-l ($z=$z*$_%1e6||1)=~s~0*$~~for 0..pop;print$z%10
well, duh, same optimisation on both holes, bonus...
50.09 Juho Snellman Fri Aug 2 21:04:09 2002
-l ($~=$~%1e9*$_||1)=~s~0*$~~for 0..pop;print$~%10
Doh! Grab the last number with %10 instead of chop.
50.10 Ross Younger Sun Aug 4 19:30:36 2002
-l ($~=$_*$~%1e9||1)=~s/0*$//for~0..pop;print$~%10
50.10 Greg Allen Thu Aug 1 19:04:40 2002
-l $z=$z*++$y%1e6,s~0*$~~for($z=1)x pop;print$z%10
50.10 Greg Allen Fri Aug 2 09:53:45 2002
-l $~=$~*++$z%1e6,s|0*$||for($~=1)x pop;print$~%10
yes! 0.0008 improvement
50.10 Wladimir Palant Thu Aug 1 13:19:19 2002
-l ($}=$}*$_%1E6||1)=~s/0*$//for$~..pop;print$}%10
50.11 Rick Klement Thu Aug 1 13:41:15 2002
-l $_=$_*++$}%9e9,s/0+$//for($_=1)x pop;print chop
50.11 Petri Mikkelä Thu Aug 1 11:53:17 2002
-l ($~=$~*$_%9e9||1)=~s/0*$//for 0..pop;print$~%10
50.11 Alexander Onokhov Mon Aug 5 23:47:38 2002
-l ($a=$_*$a%1e6||1)=~s/0*$//for$|..pop;print$a%10
50.12 Chris Dolan Fri Aug 2 05:14:05 2002
-l $z=$z*++$y%1e7,s/0*$//for($z=1)x pop;print$z%10
50.12 Eugene van der Pijll Fri Aug 2 04:30:42 2002
-l ($a=$a*$_%1e9||1)=~s/0*$//for 0..pop;print$a%10
50.12 Jasper McCrea Thu Aug 1 19:38:44 2002
-l ($o=$_*$o%1e7||1)=~s/0*$//for 0..pop;print$o%10
I don't even understand the postorder hole!!
50.12 Josef Drexler Fri Aug 2 02:05:59 2002
-l $_*=$z,s/0*$//,$z=$_%1e7for++$z..pop;print$z%10
inspiration struck, and I'm getting very close!
50.13 Qingning Huo Tue Aug 6 07:26:22 2002
-l $_*=$~,/0*$/,$~=$`%1e9for($~=1)..pop;print$~%10
50.13 Qingning Huo Wed Aug 7 16:05:44 2002
-l $_*=$~,/0*$/,$~=$`%9e9for($~=1)..pop;print$~%10
50.13 Bass Thu Aug 1 09:53:30 2002
(($}%=1e9)*=$_)=~s/0*$//for++$}..pop;print$}%10,$/
first try..
50.13 Markus Laire Mon Aug 5 15:55:02 2002
$_*=$~%1e6,/0*$/,$~=$`for($~=1)..pop;print$~%10,$/
50.13 Markus Laire Tue Aug 6 12:51:40 2002
$_*=$~%9e9,/0*$/,$~=$`for($~=1)..pop;print$~%10,$/
51.08 Prakash Kailasa Thu Aug 8 02:55:38 2002
-l for$~(0..pop){$_=$_%1e6*$~||1;s~0+$~~}print+chop
51.09 Prakash Kailasa Mon Aug 5 19:44:17 2002
-l for$z(0..pop){$_=$_*$z%1e6||1;s/0*$//}print+chop
51.10 Terje K Tue Aug 6 21:32:17 2002
-l ($_*=++$z)%=1e7,s~0+$~~for($_=1)x pop;print chop
51.11 Wladimir Palant Thu Aug 1 15:25:35 2002
-l ($`*$_%1E6||1)=~/0*$/,$~=$`for$~..pop;print$~%10
This solution is longer than my best one, unfortunately $` is not global
51.12 Amir Karger Tue Aug 6 15:55:46 2002
-l $p=($p*$_)=~/0*$/*$`%1e6||1for 0..pop;print$p%10
Aha! I've finally clawed my way through the "barren zone" into the upper section of the leaderboard!
51.12 gimbo Sat Aug 3 12:25:21 2002
-l for$k(++$_..pop){$_=$k*$_%1e6;s/0*$//}print$_%10
51.12 Eike Grote Wed Aug 7 07:36:28 2002
-l ($}=$}*$_%1e9)=~s/0+$//for(++$}..pop);print$}%10
51.12 Wladimir Palant Thu Aug 1 12:39:28 2002
-l ($}=$}*$_%1E6)=~s/0*$//for($}=1)..pop;print$}%10
51.13 Qingning Huo Sat Aug 3 16:53:57 2002
-l $~=($_*=$~)*s/0*$//%1e9for($~=1)..pop;print$~%10
51.13 Ross Younger Sun Aug 4 12:40:43 2002
-l ($a=$_*$a%1e6)=~s/0*$//for$a=1,2..pop;print$a%10
51.13 Martti Laitinen Thu Aug 8 02:21:55 2002
($r=$r*$_%1e6)=~s/0*$//for($r=1)..pop;print$r%10,$/
My first golf :) Too bad I didn't have time for the second hole. I wish I have time at least rethink this later with some people...

There is still time

52.09 Terje K Thu Aug 1 09:33:02 2002
-l for$b(++$_..pop){($_*=$b)%=1e6;s|0+$||}print chop
52.10 Mtv Europe Thu Aug 1 06:52:21 2002
-l for$n(++$_..pop){($_*=$n)%=1e8;s/0*$//}print chop
52.10 James Harvey Mon Aug 5 12:25:30 2002
-l $z=1;($z=$z*$_%1e6)=~s~0*$~~for 1..pop;print$z%10
52.10 Juho Snellman Fri Aug 2 11:51:40 2002
-l ($p=$p%1e7*$_||1)=~s/0*$//for 0..pop;print+chop$p
Replace a regexp with a modulo.
52.11 Rick Klement Thu Aug 1 06:08:44 2002
-l $_*=++$n,$_%=1e6,s/0+$//for($_=1)x pop;print chop
first shot, but it's too late to think :)
52.11 Terje K Thu Aug 1 08:03:01 2002
-l for$b(++$_..pop){($_*=$b)%=1e6;s/0+$//}print chop
52.12 Eric Roode Thu Aug 1 21:25:44 2002
-l $z=1;($z=$z*$_%1e7)=~s/0+$//for 2..pop;print$z%10
Slowly chipping away at it.
52.12 Greg Allen Thu Aug 1 18:36:38 2002
-l ($z=$z*++$y%1e6)|s/0*$//for($z=1)x pop;print$z%10
52.13 Qingning Huo Sat Aug 3 09:01:52 2002
-l $_*=$x,s/0*$//,$x=$_%1e9for($x=1)..pop;print$x%10
52.13 Amir Karger Mon Aug 5 16:55:43 2002
-l $p=($p*$_)=~/0*$/*$`%1e6||1for 0..pop;
print$p%10
I swore I wasn't going to enter this month. I kept my vow until August 1, about 11 am...
52.13 Ross Younger Sat Aug 3 19:08:26 2002
-l $a=1;($a=$_*$a%1e6)=~s/0*$//for 2..pop;print$a%10
Now if only I could figure out how to avoid the `print' ...
52.13 Eric Roode Fri Aug 2 16:03:23 2002
-li1 ($^I=$^I*$_%1e7)=~s/0+$//for 2..pop;print$^I%10
Playing around with ways to shorten. Not getting very far.
52.13 Markus Laire Sun Aug 4 22:36:31 2002
$_*=$~%1e6,/0*$/,$~=$`for($~=1)..pop;print$~%10,"\n"
53.10 James Harvey Sun Aug 4 21:02:40 2002
-l $_=1;for$z(1..pop){$_=$_*$z%1e6;s~0*$~~}print$_%10
more tiebreaks...
53.11 tinita Mon Aug 5 01:03:18 2002
-l ($~=$~*$_%10**6)=~s~0*$~~for($~=1)..pop;print$~%10
working on tiebreak...
53.12 Honza Pazdziora Thu Aug 1 18:49:33 2002
-l $_=1;for$z(1..pop){$_=$_*$z%1E6;s/0*$//}print$_%10
53.12 James Harvey Sun Aug 4 12:35:15 2002
-l $_=1;for$t(1..pop){$_=$_*$t%1e6;s/0*$//}print$_%10
more whittling...
53.12 me ELOISE Wed Aug 7 21:39:27 2002
-l $_=1;for$i(1..pop){$_=$i*$_%1e7;s/0*$//}print$_%10
53.13 James Harvey Sun Aug 4 16:30:32 2002
-l $t=1;($t=$t*$_%1e6)=~s/0*$//for(1..pop);print$t%10
53.13 Jasvir Nagra Tue Aug 6 00:54:01 2002
-l for(++$p..pop){$_*=$p;/0*$/;$p=$`%10**6}print$p%10
Finally remembered that I know how to get rid of $ARGV[0]!
53.14 Eugene van der Pijll Thu Aug 1 20:43:07 2002
-l $a=1;(($a%=1e9)*=$_)=~s/0*$//for 1..pop;print$a%10
53.14 Ross Younger Fri Aug 2 22:42:38 2002
-l $a=1;($a=$a*$_%1e6)=~s/0*$//for(2..pop);print$a%10
53.14 tinita Thu Aug 1 19:50:42 2002
-l ($s=$s*$_%10**6)=~s/0*$//for($s=1)..pop;print$s%10
hope the "10**6" will be okay, since the input is limited to 9999
53.16 Aj Tue Aug 6 17:18:59 2002
-l $_*=$a,/0*$/,$a=$`%10**9for($a=1)..pop;print$a%10;
54.11 Terje K Thu Aug 1 07:24:04 2002
-l $_=1;for$b(1..pop){($_*=$b)%=1e6;s/0+$//}print chop
54.12 Marko Nippula Mon Aug 5 15:34:33 2002
-l $_++;$_*=$~--,s/0$//,$_%=1e5while$~+=pop;print$_%10
54.12 Markus Laire Sun Aug 4 22:04:11 2002
$x=$x*$_%1e6,$x=~s/0*$//for($x=1)..pop;print$x%10,"\n"
54.13 Alistair McGlinchy Tue Aug 6 23:25:16 2002
-l $n=1;($n*=$_)=~s/0*$//,$n%=1e8for 1..pop;print$n%10
54.13 Keith Calvert Ivey Tue Aug 6 00:13:34 2002
-l $_*=$z,($z)=/(.{0,6}?)0*$/for($z=1)..pop;print$z%10
54.13 Keith Calvert Ivey Thu Aug 8 04:32:42 2002
-l $_*=$~,($~)=/(.{0,9}?)0*$/for($~=1)..pop;print$~%10
Just some last-minute tiebreaker silliness.
54.13 James Harvey Sun Aug 4 12:26:48 2002
-l $_=1;for$t(1..pop){($_*=$t)%=1e6;s/0*$//}print$_%10
whittling, whittling...
54.16 Aj Tue Aug 6 13:04:32 2002
-l $a=1;$_*=$a,/0*$/,$a=$`%10**9for 1..pop;print$a%10;
55.10 Chris Dolan Fri Aug 2 03:01:53 2002
-l $_=substr$_*=++$c,s/0*$//-7for($_=1)x pop;print chop
55.10 Prakash Kailasa Mon Aug 5 19:33:19 2002
-l for$z(0..pop){$_=$_*$z||1;s/0*$//;$_%=1e6}print+chop
55.10 Terje K Thu Aug 1 06:46:49 2002
-l $_=1;for$b(1..pop){$_*=$b;s/0+$//;$_%=1e6}print chop
55.11 Juho Snellman Fri Aug 2 07:32:49 2002
-l s/.{1,6}$/$&*++$i/e,s/0*$//for($_=1)x+pop;print+chop
This is pretty slow for the later tests. Getting the solution for 9999! takes about 70 seconds on my 600MHz machine.
55.12 Honza Pazdziora Thu Aug 1 16:30:27 2002
-l $_=1;for$z(1..pop){$_*=$z;s/0*$//;$_%=1E6}print$_%10
55.12 James Harvey Sun Aug 4 09:39:15 2002
-l $x=1;for(1..pop){(($x*=$_)%=1e6)=~s/0*$//}print$x%10
55.12 Michael Robinson Sat Aug 3 08:04:34 2002
-l $_=1;for$i(2..pop){$_*=$i;s/0*$//;$_%=1e6}print$_%10
The 1e6 seems like cheating, but I can't work out another algorithm. There should be one, according to a reference @ MathWorld, but the paper isn't online.
55.12 Wladimir Palant Thu Aug 1 12:22:24 2002
-l $_=1;for$~(1..pop){$_*=$~;s/0*$//;$_%=1E6}print$_%10
55.12 me ELOISE Wed Aug 7 21:08:48 2002
-l $_=1;for$i(1..pop){$_*=$i;s/0*$//;$_%=1e6}print$_%10
55.13 Marko Nippula Sat Aug 3 06:01:06 2002
-l $_++;$_*=$~--,s/0+$//,$_%=1e5while$~+=pop;print$_%10
Looping backwards allowed to replace /5/2until%5 thing with s/0+$//.
55.13 Guillermo Sansovic Sun Aug 4 13:16:51 2002
-l for$n(++$_..pop){s/(.{1,6})0*$/$1*$n/e}print/(.)0*$/
55.13 Stanislav Svirid Wed Aug 7 16:57:16 2002
-l $_=1;for$.(1..pop){$_=$_%10**6*$.;s/0*$//}print chop
56.08 Michael Wrenn Tue Aug 6 13:47:34 2002
-l for$~(0..pop){$_=substr$_*$~||1,-9;s/0*$//}print chop
I'm sitting at the back of the bus wondering why all the kids said it was so much more fun. Ah! The ride is much bumpier!
56.11 Yanick Champoux Sat Aug 3 14:38:25 2002
-l ++$_;$_*=$x--,s/0*$//,$_%=1E5while$x||=pop;print
chop
56.11 Jukka Suomela Thu Aug 1 14:41:28 2002
-l ($y)=($y*$_)=~/(.{1,6}?)0*$/for++$y..pop;print chop$y
56.12 James Harvey Fri Aug 2 08:37:09 2002
-l $x=1;for(1..pop){($x*=$_)=~s/0*$//;$x%=1e6}print$x%10
56.13 Keith Calvert Ivey Sun Aug 4 02:05:53 2002
-l ($z)=($z*$_)=~/(.{0,6}?)0*$/for($z=1)..pop;print$z%10
56.13 Ala Qumsieh Mon Aug 5 17:55:31 2002
-l for$i(0..pop){/(.{0,8})0*$/;$_=$i*$1||1}print/(.)0*$/
I don't have time for golf this month, and with the crazy scores obtained by others so far, I feel too discouraged to even try! Oh well :)
56.13 Eric Roode Thu Aug 1 20:29:26 2002
$p=1;$p*=$_,$p=~s/0+$//,$p%=1e6for(2..pop);print$p%10,$/
57.10 Wladimir Palant Sat Aug 3 11:41:54 2002
-l $_=1;s~.*([^0])~$&*$}%9e9~ewhile$}++<=$ARGV[0];print$1
Same thing a bit shorter
57.13 Prakash Kailasa Mon Aug 5 19:01:40 2002
-l for$n(0..pop){$_=$1*$n||1;/(.{1,6}?)0*$/}print/(.)0*$/
57.13 Matthias Schoder Thu Aug 1 14:24:51 2002
-l $_++;for$i(1..pop){s/(.{1,6})0*$/$1*$i/e}print/(.)0*$/
57.14 Matthias Schoder Sat Aug 3 22:27:22 2002
-l $_++;for$i(1..pop){s/(.{1,6})0*$/$1*$i/e}print/(.)0*$/
57.14 Matthias Schoder Tue Aug 6 16:18:35 2002
-l $_++;for$i(1..pop){s/(.{1,6})0*$/$1*$i/e}print/(.)0*$/
57.14 Matthias Schoder Tue Aug 6 16:19:02 2002
-l $_++;for$i(1..pop){s/(.{1,6})0*$/$1*$i/e}print/(.)0*$/
58.09 Brad Jones Fri Aug 2 17:01:55 2002
-l $z=pop;$_=1;while($z){s|0$||;$_=$_*$z--%1e9}print chop;
Merge two expressions into one, saving 2 more characters.
58.10 Prakash Kailasa Sat Aug 3 03:41:40 2002
-l for$n(0..pop){$_=$1*$n||1;s/(.{1,6}?)0*$/$1/}print+chop
58.15 Jasvir Nagra Sun Aug 4 04:39:19 2002
-l for(++$p..$ARGV[0]){$_*=$p;/0*$/;$p=$`%10**6}print$p%10
Just something to get going I suppose.
59.11 Ala Qumsieh Thu Aug 1 19:13:30 2002
-l $_=1;for$i(1..pop){$_*=$i;($_)=/(.{1,9}?)0*$/}print+chop
59.11 Ross Younger Thu Aug 1 17:55:44 2002
-l $a=1;map{$a=$a%1e6*$_;$a/=10until$a%10}2..pop;print$a%10
59.14 Tom Hargreaves Sat Aug 3 19:52:46 2002
for$~(++$_..pop){$_*=$~,($_)=/(.{0,6}?)0*$/}print$&x/.$/,$/
60.09 Brad Jones Fri Aug 2 02:59:58 2002
-l $z=pop;$_=1;while($z){$_*=$z--;s|0$||;$_%=1e9}print chop;

60.11 Mtv Europe Thu Aug 1 05:46:16 2002
-l for$n(++$_..pop){$_*=$n;s/0*$//;s/.*(.{6})/$1/}print chop
non cheating but still bad
60.11 Ross Younger Thu Aug 1 12:53:36 2002
-l $a=1;for(2..pop){$a=$a*$_%1e6;$a/=10until$a%10}print$a%10
60.11 Roberto Natella Thu Aug 1 22:45:07 2002
-l for$n(++$_..pop){$_*=$n,($_)=/(.{0,9}[^0])0*$/}print chop
60.13 Chris Dolan Fri Aug 2 01:28:55 2002
-l $_*=++$c,s/0*$//,s/.*(.{6})$/$1/for($_=1)x pop;print chop
60.13 Josef Drexler Fri Aug 2 01:32:40 2002
-l for$z(++$_..pop){$_*=$z;s/0*$//;s/.*(.{7})/$1/}print/.$/g
60.13 Dave Hoover Fri Aug 2 13:38:23 2002
-l for$a(++$_..pop){$_*=$a;($_)=/(.{0,5}[^0])0*$/}print/.$/g
Hacking my way out...
60.14 Marko Nippula Thu Aug 1 14:49:13 2002
-l map{$_/=5,$^F/=2until$_%5;$^F=$^F%1e5*$_}2..pop;print$^F/2%10
Some optimizations.
60.14 Matthias Schoder Thu Aug 1 13:48:05 2002
-l $_++;for$i(1..pop){s/.*?(.{1,6})0*$/$1*$i/e}print/(.)0*$/
60.14 Wladimir Palant Thu Aug 1 09:28:30 2002
-l $_=1;for$a(1..pop){$_*=$a;s/0*$//;$_%=1000000}print $_%10
61.11 Wladimir Palant Sat Aug 3 11:36:36 2002
-l $_=1;z while s~.*([^0])~$}++<$ARGV[0]?$&*$}%9e9:!print$1~e
Just another nice solution, a bit too long though...
61.12 Scott Hall Mon Aug 5 22:45:07 2002
-l $Z=1;map{($Z)=($Z*=$_)=~/(.{1,9}?)0*$/}1..pop;print chop$Z
61.12 Brad Jones Thu Aug 1 21:50:09 2002
-l $z=pop;$_=1;while($z){$_*=$z--;s/0*$//;$_%=1e9}print$_%10;
Use $_. Duh.
61.13 Michael Wrenn Mon Aug 5 20:21:30 2002
-l for$c(++$_..pop){$_*=$c;s/.*?(\d{6})0*$/$1/}print/(\d)0*$/
Can I be in the Amateur section this time? I have no excuses.
61.14 Matthias Schoder Tue Aug 6 22:13:09 2002
-l $_++;for$i(1..pop){s/^.*?(.{1,6})0*$/$1*$i/e}print/(.)0*$/
61.14 zImage Sat Aug 3 20:17:40 2002
-l $_=1;for($b=pop;$b;){/(.{0,6}?)0*$/;$_=$1*$b--}print/(.$)/
62.11 Scott Hall Mon Aug 5 01:56:15 2002
-l $x=1;for(1..pop){($x)=($x*=$_)=~/(.{1,9}?)0*$/}print chop$x
62.14 zImage Sat Aug 3 19:10:16 2002
-l $_=1;for($b=pop;$b;){/(.{0,6}?)0*$/;$_=$1*$b--}/.$/;print$&
Only 14 strokes from the current high score. I wish I could get postorder this short.
62.15 me ELOISE Tue Aug 6 18:20:30 2002
-l $_=1;for$i(1..pop){$_*=$i;($_)=/(.{0,5}?.)0*$/}/.$/;print$&
63.11 Yanick Champoux Sat Aug 3 00:08:32 2002
-l $_=1;$x=pop;$_*=$x--,($_)=/([^0]{1,5})0*$/while$x;print chop
Okay... Second try.
63.12 Prakash Kailasa Fri Aug 2 03:40:05 2002
-l $_=1;for$n(1..pop){$_*=$n;s/0*$//;/.{1,6}$/;$_=$&}print chop
63.12 Matthias Schoder Thu Aug 1 12:42:30 2002
-l $_=1;for$i(1..pop){$_*=$i;($_)=/(\d{1,6})0*$/}print/(\d)0*$/
63.13 Oleg Fri Aug 2 16:58:21 2002
$_=1;for($m=pop;$m;){s/([^0]{1,5})0*$/$1*$m--/e}/.$/;print"$&
"
It's quite slow, but that must be enough...
64.10 Honza Pazdziora Thu Aug 1 14:50:08 2002
-l $z=1;map{$z*=$_;$z=~s/.*?(.{1,6}?)0*$/$1/}1..pop;print chop$z
64.11 James Harvey Thu Aug 1 13:20:49 2002
-l $x=1;for(1..pop){($x*=$_)=~s/.*?(.{1,6}?)0*$/$1/}print chop$x
64.12 Ala Qumsieh Thu Aug 1 17:54:59 2002
-l $_=1;for$i(1..pop){$_*=$i;s/0*$//;($_)=/(.{0,9})$/}print+chop
First try ... weird hole!
64.17 me ELOISE Tue Aug 6 17:57:37 2002
$_=1;for$i(1..pop){$_*=$i;($_)=/(.{0,5}?.)0*$/}/(.)$/;print"$1
"
65.11 Josef Drexler Thu Aug 1 05:25:23 2002
-l $_=1;for$a(1..pop){$_*=$a;s/0*$//;s/\d*(\d{7})/$1/};print/.$/g
quick'n'dirty
65.12 entropie Fri Aug 2 15:26:16 2002
-l $f=$_=$ARGV[0]||1;while(--$f){$_*=$f;s/0$//;$_%=1e6}print$_%10
65.16 Marko Nippula Thu Aug 1 14:00:26 2002
-l map{$_/=($^F/=2)&&5until$_%5;$^F=($^F%1e5)*$_}1..pop;print$^F/2%10
65.17 me ELOISE Sat Aug 3 04:42:37 2002
$_=1;for$i(1..pop){$_*=$i;/(.{0,5}?.)0*$/;$_=$1}/(.)$/;print"$1
"
66.11 Martin Carlsen Sat Aug 3 22:09:37 2002
-l map{until($_%5){$_/=5;$p/=2}$p=$p%10**5*$_}++$p..pop;print$p%10
66.12 Prakash Kailasa Thu Aug 1 05:46:50 2002
$_=1;for$n(1..pop){$_*=$n;s/0*$//;s/.*?(.{1,6})$/$1/}print chop,$/
67.08 Andrew Farnsworth Thu Aug 1 20:59:53 2002
-l $z=1;for(1..$ARGV[0]){$z=$_*substr$z,-6;$z=~s|0*$||}print chop$z
Corrected $zRGV to $ARGV
67.09 Andrew Farnsworth Thu Aug 1 20:53:30 2002
-l $T=1;for(1..$ARGV[0]){$T=$_*substr$T,-6;$T=~s|0*$||}print chop$T
Tie Breaker update and get rid of extra variable.
67.10 Andrew Farnsworth Thu Aug 1 20:56:25 2002
-l $A=1;for(1..$ARGV[0]){$A=$_*substr$A,-6;$A=~s|0*$||}print chop$A
TieBreaker update
67.10 Brad Jones Thu Aug 1 19:57:47 2002
-l $z=pop;$y=1;while($z){$y*=$z--;$y=~s/0*$//;$y%=1e6}print chop$y;
Minor tweaks to variable names to improve tiebreaker values
67.11 Brad Jones Thu Aug 1 17:51:44 2002
-l $a=pop;$b=1;while($a){$b*=$a--;$b=~s/0*$//;$b%=1e6}print chop$b;
Realized I left a 2-character piece of the previous regex version.
67.12 tinita Thu Aug 1 16:56:48 2002
-l $s=1;map{$s=$s*$_%10**6;$s=~s/(.)0*$/$1/;$l=$1}1..pop;print$l||1
67.12 Phil Radden Fri Aug 2 19:38:41 2002
-l $z=1;for(2..pop){$_/=5,$z/=2until$_%5;$z=$z%100000*$_}print$z%10
Deary me, must remember how to play golf after being away so long :(
67.13 Nik L Tue Aug 6 06:16:11 2002
-l for(($t=1)..pop){$_*=$t;$t=(/(\d*[^0])0*/)[0]%1000000}print$t%10
67.14 Eric Roode Thu Aug 1 16:44:48 2002
#!perl

$p=1;$p*=$_,$p=~s/.*?(\d{1,5}[^0])0*$/$1/for(1..pop);print$p%10,"

"
Lame, but wanted to get on the board.
69.11 Brad Jones Thu Aug 1 17:49:41 2002
-l $a=pop;$b=1;while($a){$b*=$a--;$b=~s/0*$/$1/;$b%=1e6}print chop$b;
Second working version; first had a longer regexp to strip it down to 6 characters max instead of the %=.
69.12 Erik Beatty Thu Aug 1 20:03:24 2002
++$p;for(1..pop){until($_%5){$_/=5;$p/=2}$p=$p%10**5*$_}print$p%10,$/
69.13 Ryan Zachry Thu Aug 1 19:53:54 2002
-l $n=pop;$_=1;while($n){$_*=$n--;s/0*$//;s/.*(.{5})/$+/}/.$/;print$&
69.13 Erik Beatty Wed Aug 7 19:00:15 2002
++$x;for(1..pop){$_*=$x;s/0*$//;/\d{0,6}$/;$x=$&}$x=~/\d$/;print$&,$/
Same score, diff solution...
69.13 entropie Fri Aug 2 14:32:03 2002
$f=$_=$ARGV[0]||1;while(--$f){$_*=$f;s/0*$//;$_%=1e6}/.$/;print"$&\n"
faster...
69.16 me ELOISE Sat Aug 3 04:22:36 2002
$_=1;for$i(1..pop){$_*=$i;s/.*?(.{0,5}[1-9])0*$/$1/}/(.)$/;print"$1
"
71.11 Mtv Europe Thu Aug 1 05:31:33 2002
-l for$n(++$_..pop){s/./'$_.=0;'.'++$_;'x$&x$n/eg;eval}print/([^0])0*$/
cheating
73.09 Andrew Farnsworth Thu Aug 1 20:46:37 2002
-l $f=$ARGV[0];$t=1;for(1..$f){$t=$_*substr$t,-6;$t=~s|0*$||}print chop$t
Longshot
73.12 Martin Carlsen Sat Aug 3 21:02:13 2002
-l $_=1;for$f(1..pop){until($f%5){$f/=5;$_/=2}$_=($_%10**5)*$f}print$_%10
73.14 Honza Pazdziora Thu Aug 1 14:25:53 2002
-l $a=1;$a=~s/^.*?(.{0,5}[^0])0*$/$1/,$a*=$_ for 1..pop;print$a=~/(.)0*$/
75.11 Danny Rathjens Tue Aug 6 08:25:44 2002
-l for$n(0..pop){($_*$n+$`)=~/.$/,$_=$&for@t;$t[@t]=1}"@t"=~/[1-9]/;print$&
20 minutes to pass -brief, yuck.
75.13 entropie Fri Aug 2 02:49:23 2002
$f=$_=$ARGV[0]||1;while(--$f){($_)=($f*$_)=~/(.{1,6}?)0*$/}/.$/;print"$&\n"
not very nice - my first try
75.13 zImage Sat Aug 3 18:30:59 2002
-l $a=1;$b=pop;while($b){$a*=$b--;$a=~/(.{0,6}?)0*$/;$a=$1}$a=~/.$/;print$&
New approach. A while loop instead of recursion.
81.12 tinita Thu Aug 1 13:49:55 2002
-l sub
_{my$n=pop;$n?(($n*_($n-1))=~/(.{0,5}[^0])0*$/,$1):1}print
_(pop)=~/(.)$/;
83.16 Artem Baranov Thu Aug 1 16:58:30 2002
$a=pop;$a+=$a?0:1;$_=100001;for$b(1..$a){$_*=$b;/(\d{6})0*$/;$_=$1}print/(.)0*$/,$/
86.13 Nik L Thu Aug 1 08:11:30 2002
-l $p=1;for(1..$ARGV[0]){$f=$_;while(!($f%5)){$f/=5;$p/=2}$p%=100000;$p*=$f}print$p%10
88.19 me ELOISE Fri Aug 2 02:59:08 2002
$t=pop;$_=1;for($i=1;$i<=$t;$i++){$_*=$i;s/.*?(.?.?.?.?.?[1-9])0*$/$1/}/(.)$/;print"$1
"
89.10 zImage Sat Aug 3 16:53:01 2002
-l sub f{return 1if!(my$a=pop);($a*f($a-1))=~/(.{0,6}?)0*$/;return$1}f(pop)=~/.$/;print$&
89.13 W Geldenhuys Fri Aug 2 13:32:35 2002
-l  $i=pop;$_=$i?$i:1;while(--$i>0){$_*=$i;s/.*(\d{4}[1-9])0*/$1/}s/.*([1-9])0*/$1/;print
a few chars shaven.
93.12 Kristen Thelen Sun Aug 4 03:53:13 2002
-l $n=pop;$p=1;for($i=1;$i<=$n;++$i){$f=$i;while($f%5==0){$f/=5;$p/=2}$p=$p%1e5*$f}print$p%10
94.10 zImage Sat Aug 3 07:41:56 2002
-l sub f{my$a=pop;return 1if(!$a);($a*f($a-1))=~/(.{0,6}?)0*$/;return$1;}f(pop)=~/.$/;print$&;
99.11 Dr. Mu Sat Aug 3 05:55:55 2002
-l $r=1;for(2..pop){$_/=5,$t--until$_%5;$_/=2,$t++until$_%2;$r=$r*$_%10}$r=$r*2%10while$t--;print$r
102.13 W Geldenhuys Fri Aug 2 13:06:57 2002
-l $i=pop;$n=$i>0?$i:1;while(--$i>0){$n*=$i;$n=~s/.*(\d{4}[1-9])0*$/$1/g}$n=~s/.*([1-9])0*/$1/;print$n
110.13 me ELOISE Thu Aug 1 23:14:00 2002
$t=pop;$c=$_=1;for($i=1;$i<=$t;$i++){$_*=$i;$c*=$i;s/.*?(\d?\d?\d?\d?\d?\d?\d?[1-9])0*$/$1/}/(\d)$/;print"$1
"
just trying to get on thee board after my last amazingly wrong, too good to be true submission. *&^%^%$
121.11 Kristen Thelen Sun Aug 4 03:04:55 2002
-l ($n)=@ARGV;$prod=1;for($i=1;$i<=$n;++$i){$f=$i;while ($f%5==0){$f/=5;$prod/=2;}$prod=($prod%100000)*$f}print $prod%10;
126.10 Jeremy Madea Fri Aug 2 04:14:40 2002
-l $}=1;for(1..shift){while(not$_%2){$_/=2;$i++}while(not$_%5){$_/=5;$i--}$}=($}*$_%10)%10}while($i){$}=($}*2)%10;$i--}print$}

Artistic/Unorthodox

ScoreGolferSubmit TimeCode
66.17 pom Mon Aug 5 09:13:59 2002
for($a=$ARGV[$_++];$a>0;$_=s/0*$//*$_%100000*$a--){}print$_%10,$/;
This solution works in perl1 as well as the latest versions of perl5. We are not afforded the luxury of the -l flag, the omission of the final ; or the scientific notation for big numbers. Moreover, the revitalized perl1 interpreter is still a little shaky, making some shorter solutions strangely bugging... Anyway, here it is, not too bad I think.
85.16 Artem Baranov Thu Aug 1 15:43:53 2002
$b=pop;$b+=$b?0:1;$_=100001;for$i(1..$b){$_*=$i;/(\d{6})0*?$/;$_=$1}print/(.)0*?$/,$/
98.17 Markus Laire Tue Aug 6 13:10:28 2002
$z=pop;sub g{vec"^P\xd7\xa9\x98b\xef",pop,2}
print$z<2||(1+g$z%25)*(1,3,2,4)[g 24-$z/25%25]*6*(1+g$z/625)%10,$/
Different approach by using lookup-tables instead of actually calculating n! Trying to figure out how this works is good exercise, especially if you don't know what patterns there are in results. Note: string for vec has few non-ascii chars. the string is "10d7a99862ef" in hex.

Rejected

ScoreGolferSubmit TimeCode
6.08 BoB (Best of Breed - referees) Mon Aug 5 21:36:30 2002
line 1
pasted
6.08 BoB (Best of Breed - referees) Mon Aug 5 21:37:34 2002
#!perl
line 1
uploaded
33.07 BoB (Best of Breed - referees) Thu Aug 1 05:48:15 2002
let's scare them a bit. short :-)
48.08 BoB (Best of Breed - referees) Sat Aug 3 11:37:27 2002
-l $}=substr$}*".$_",~6for++$}..pop;print+chop$}
51.12 gimbo Sat Aug 3 12:08:18 2002
-l for$k(++$_..pop){$_=$k*$_%1e6;s/0*$//}print$_%10
51.12 me ELOISE Thu Aug 1 22:29:30 2002
$_=$t=pop;while($t>1){$_*=--$t}/(\d)0*$/;print"$1
"
52.10 Ala Qumsieh Thu Aug 8 02:49:18 2002
-l $x=1;map{$_/=5 until$_%5;$x*=$_}1..pop;print$x%10
gives 4 for 5, instead of the correct 2
54.13 Tor Hildrum Tue Aug 6 13:37:21 2002
-p $v=$_;for($_=1;$v>0;){$_*=$v--}s/0//g;$_=chop."\n" 
Still in the sandtrap, but shorter than my last sandtrap :)
57.10 Wladimir Palant Sat Aug 3 12:05:00 2002
-l $_=1;s~([^0])+~$&*$}%1e6~egwhile$}++<=$ARGV[0];print$1
I wonder if this one really works - I only had the time for the first 14 tests ;)
59.12 Dave Hoover Thu Aug 1 21:21:35 2002
-l for$a(++$_..pop){$_*=$a;($_)=/([^0]{1,4})0*$/}print/.$/g
Ahh, under 60. :-)
63.10 Tor Hildrum Sun Aug 4 09:32:54 2002
-n  $v=1;while($_>0){$v*=$_--;}$v=~s/0//g;$a=chop$v;print"$a\n"
Works fine on my machine for < 170!
63.13 Dave Hoover Thu Aug 1 20:27:19 2002
-l $_=1;for$a(1..pop){$_*=$a;s/.*?([^0]{1,4})0*$/$1/}print/.$/g
Chipping away...
64.11 Yanick Champoux Thu Aug 1 16:57:41 2002
-l $x=1;($x*=$_)=~s/.*?([^0]{1,4})0*$/$1/for 1..pop;print chop$x
Aaaand it's a start
66.18 me ELOISE Sat Aug 3 04:33:39 2002
$_=1;for$i(1..pop){$_*=$i;/(.{0,5}?.)0*$/;$_=$1}/(.)$/;print"$1 
"
67.08 Andrew Farnsworth Thu Aug 1 20:59:08 2002
-l $z=1;for(1..$zRGV[0]){$z=$_*substr$z,-6;$z=~s|0*$||}print chop$z
69.10 Jeremy Madea Fri Aug 2 00:58:14 2002
-l $}=1;for(1..shift){$}*=$_;$}=~/([1-9]{1,4})0*$/;$}=$1}print chop$}
70.14 Dave Hoover Thu Aug 1 20:09:29 2002
-l $_=1;for $a(1..pop){$_*=$a;s/.*?([^0]{1,4})0*$/$1/}print/([^0])0*$/
Still figuring out the right approach...
77.10 David Fannin Wed Aug 7 20:11:21 2002
-l $x=1;$i=pop;$i?do{for(1..$i){$x*=$_;print $x}}:1;$x=~/([^0])0*$/&&print $1
Fails for all tests above 0...
81.12 Dave Hoover Thu Aug 1 19:44:29 2002
-l sub f{$_[0]?f($_[0]-1)=~/([^0]{1,4})0*$/&&$_[0]*$1:1}print f(pop)=~/([^0])0*$/
First entry. This is a great hole!
138.08 Keith Calvert Ivey Sun Aug 4 02:02:51 2002
-l sub'_{my($m,$n)=@_;$m=~s/.//||return;my$o=$&;my($p,$q)=split$o,$n;_(substr($m,0,length$p),$p)._(substr($m,length$p),$q).$o}print+_@ARGV
Somehow I don't think this is ever going to get down to a reasonable length, but at least it works.