patagonia2 发表于 2016-04-29 16:09

er好强大啊

比较下 tak
er 0.17 秒 真的快了不少{:yxh5:} {:yxh71:} 不科学啊{:yxh4:}
perl 17 秒
python 6.5 秒

er%-module(e).
-module(tak).
-mode(native).
-define(P, io:format).
-export().

tak(X, Y, Z) ->
if
    Y >= X -> Z;
    true ->
      tak(
      tak(X - 1, Y, Z),
      tak(Y - 1, Z, X),
      tak(Z - 1, X, Y)
      )
end
.

bm() ->
lists:foreach(
    fun(_) ->
      {Time, _} = timer:tc(tak, bm_testcase, []),
      TimeSec = Time / 1000000,
      ?P("~p~n", )
    end,
    lists:seq(1, 5)
)
.

bm_testcase() ->
lists:foreach(
    fun(_) ->
      tak:tak(24, 16, 8)
    end,
    lists:seq(1, 10)
)
.


main(_) ->
    bm(),
halt().
pythonuse Time::HiRes qw(time);

$|++;

bm_tak(5);

sub bm_tak {
    my $n = shift;

    for ( 0 .. $n ) {
      my ( $i, $x ) = ( 0, time );
      while ( $i < 10 ) {
            tak( 24, 16, 8 );
            $i++;
      }
      print time - $x . "\n";
    }
}

sub tak {
    my ( $x, $y, $z ) = @_;

    if ( $y >= $x ) {
      return $z;
    }
    else {
      return tak(
            tak( $x - 1, $y, $z ),
            tak( $y - 1, $z, $x ),
            tak( $z - 1, $x, $y )
      );
    }
}


perl
import time



def tak(x, y, z):
    if y >= x: return z
    return tak(tak(x - 1, y, z), tak(y - 1, z, x), tak(z - 1, x, y))


for k in range(0, 5):
    t = time.time()
    i = 0
    while i < 10:
      tak(24, 16, 8)
      i += 1
    print("%.02f" % (time.time() - t))

patagonia2 发表于 2016-05-17 17:37

真的不科学啊{:yxh48:}

patagonia2 发表于 2016-05-21 14:00

不科学啊
真的不科学啊{:yxh4:}

er0.17 秒
perl   17 秒
页: [1]
查看完整版本: er好强大啊