Project Euler

Problem #99

Comparing two numbers written in index form like 2^(11) and 3^(7) is not difficult, as any calculator would confirm that 2^(11) = 2048 < 3^(7) = 2187.

However, confirming that 632382^(518061) > 519432^(525806) would be much more difficult, as both numbers contain over three million digits.

Using base_exp.txt (right click and 'Save Link/Target As...'), a 22K text file containing one thousand lines with a base/exponent pair on each line, determine which line number has the greatest numerical value.

NOTE: The first two lines in the file represent the numbers in the example given above.

Erlang: Running time = 0.222s
p99()->
	File=binary_to_list(element(2,file:read_file("base_exp.txt"))),
	Data=lists:map(fun(L)->
		Line=string:strip(L),
		[A,B]=string:tokens(Line,","),
		{list_to_integer(A),list_to_integer(B)}
		end,string:tokens(File,"\r\n")),
	p99(1,Data,0,0).
p99(_,[],BestLine,_)->io:format("~w~n",[BestLine]);
p99(LineNum,[{Base,Exp}|Rest],BestLine,BestValue)->
	MyVal=Exp*math:log(Base),
	case MyVal > BestValue of
		true->
			p99(LineNum+1,Rest,LineNum,MyVal);
		false->
			p99(LineNum+1,Rest,BestLine,BestValue)
	end.

Ruby: Running time = 0.035s
def p99
  vals=File.read("base_exp.txt").split("\n").map{|l|l.split(",").map{|i|i.to_i}}.map{|p|p[1]*Math.log(p[0])}
  puts 1+vals.index(vals.max)
end