Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Using your F# version I got:</p> <pre><code>&gt; e28(100000L);; Real: 00:00:00.061, CPU: 00:00:00.062, GC gen0: 2, gen1: 0, gen2: 0 val it : int64 = 666691667100001L </code></pre> <p>Using:</p> <pre><code>let e28d N = seq {2L..2L..N} |&gt; Seq.collect(fun x-&gt;seq{yield x;yield x; yield x; yield x}) |&gt; Seq.scan (+) 1L |&gt; Seq.sum </code></pre> <p>I got:</p> <pre><code>&gt; e28d(100000L);; Real: 00:00:00.040, CPU: 00:00:00.031, GC gen0: 2, gen1: 0, gen2: 0 val it : int64 = 666691667100001L </code></pre> <p>You will probably have a difficult time getting the python to perform quite as well as the F# simply since F# is compiled and Python is interpreted. That being said, the above improvement will work for the python as well:</p> <pre><code>&gt;&gt;&gt; def e28a(N = 100000): diagNumber = 1; sum = diagNumber; for width in range(2, N+1, 2): for j in range(4): diagNumber += width; sum += diagNumber; return sum; &gt;&gt;&gt; if __name__ == '__main__': import timeit print(timeit.timeit("e28a()", setup="from __main__ import e28a", number=10)) 0.5249497228663813 &gt;&gt;&gt; def e28a(N = 100000): diagNumber = 1; sum = diagNumber; for width in range(2, N+1, 2): diagNumber += width; sum += diagNumber; diagNumber += width; sum += diagNumber; diagNumber += width; sum += diagNumber; diagNumber += width; sum += diagNumber; return sum; &gt;&gt;&gt; if __name__ == '__main__': import timeit print(timeit.timeit("e28a()", setup="from __main__ import e28a", number=10)) 0.2585966329330063 &gt;&gt;&gt; </code></pre> <p>Part of this improvement comes from fewer function calls, i.e.:</p> <pre><code>&gt;&gt;&gt; def e28a(N = 100000): diagNumber = 1; sum = diagNumber; temp_range = range(4) #Change here for width in range(2, N+1, 2): for j in temp_range: #Change here diagNumber += width; sum += diagNumber; return sum; &gt;&gt;&gt; if __name__ == '__main__': import timeit print(timeit.timeit("e28a()", setup="from __main__ import e28a", number=10)) 0.40251470339956086 &gt;&gt;&gt; </code></pre> <p>And I think the other part comes from removing the loop. Both of these can be fairly expensive in Python.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload