2

Lasso でコーディングする方法を学習する一環として Project Euler の質問に取り組んでおり、私のソリューションを改善できるかどうか疑問に思っています。以下は、なげなわ 8 コードの質問 #1 に対して得たもので、正しい答えが返されます。

var ('total' = 0);

loop(1000-1);
    loop_count % 3 == 0 || loop_count % 5 == 0 ? $total += loop_count;
/loop;

output($total);

私の質問:これをコーディングするためのより良い方法またはより高速な方法はありますか? ありがとう!

4

3 に答える 3

1

実際、Chris 私の L9 コードの回答はほぼ同じだったようです。しかし、私が時間を計らなければならなかったのは、それをループでラップして1000回計ることでした。

Lasso 9 はマイクロ秒単位で実行できますが、それ以前のバージョンではミリ秒単位でしか計測できません。

以下に 3 つの方法を示します。最初はあなたのもので、次に私の 2 つのバージョンです。

define br => '<br>'
local(start_time = micros)
loop(1000)=>{
    var ('total' = 0);

    loop(1000-1);
        loop_count % 3 == 0 || loop_count % 5 == 0 ? $total += loop_count;
    /loop;
    $total;

}
'Avg (L8 code in 9): '+(micros - #start_time)/1000+' micros'

br
br

local(start_time = micros)
loop(1000)=>{
    local(sum = 0)
    loop(999)=>{ loop_count % 3 == 0 || loop_count % 5 == 0 ? #sum += loop_count }
    #sum
}
'Avg (incremental improvement): '+(micros - #start_time)/1000+' micros'

br
br

local(start_time = micros)
loop(1000)=>{
    local(sum = 0)
    loop(999)=>{ not (loop_count % 3) || not(loop_count % 5) ? #sum += loop_count }
    #sum
}
'Avg using boolean not: '+(micros - #start_time)/1000+' micros'

出力は次のとおりです。

Avg (L8 code in 9): 637 micros
Avg (incremental improvement): 595 micros
Avg using boolean not: 596 micros

8では多くの状況で冗長であり、9では完全に冗長であるため、「出力」を使用しなかったことに注意してください:)

于 2013-09-16T15:15:41.723 に答える