<div dir="ltr"><div class="gmail_default" style="font-family:simsun,serif;font-size:small">thanks,  guys!  dp array should be var, not let, but the compile run too slow. It indeed a bug.  Optimizing  the code for the compiling time is really a headache for coders.  I am using the Xcode 8.1. Hoping it can be fixed in next release.</div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><blockquote><i><font face="georgia, serif"><br></font></i></blockquote><i><font face="georgia, serif">best wishes for you </font></i></div></div>
<br><div class="gmail_quote">2017-06-06 8:57 GMT+08:00 Geordie J <span dir="ltr">&lt;<a href="mailto:geojay@gmail.com" target="_blank">geojay@gmail.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><span class=""><blockquote type="cite"><div>Am 06.06.2017 um 09:02 schrieb Jens Persson via swift-users &lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt;:</div><br class="m_-2579627832302497835Apple-interchange-newline"><div><div dir="ltr"><div>When compiling that from the command line, I get the following (after about 6 seconds):<br></div><div><br></div><div><div>test.swift:7:18: error: cannot assign through subscript: &#39;dp&#39; is a &#39;let&#39; constant</div><div>        dp[0][0] = 0</div><div>        ~~       ^</div><div>/.../</div></div><div><br></div><div>After fixing that (changing let dp to var dp), it will compile successfully, still taking a very long time though. This usually means that some expression(s) in the code happen to be a bit hard on the type checker (in its current state).</div><div>I tried the latest dev snapshot and it is a bit faster, perhaps 3 s instead of 6.</div><div><br></div><div>Anyway, here is a logically equivalent rewrite which will compile faster:</div><div><br></div><div><div>class Solution {</div><div>    func rob(nums: [Int]) -&gt; Int {</div><div>        guard nums.count &gt; 0 else { return 0 }</div><div>        var dp = Array.init(repeating: Array.init(repeating: 0, count: nums.count),</div><div>                            count: 2)</div><div>        dp[0][0] = 0</div><div>        dp[0][1] = nums[0]</div><div>        for i in 1 ..&lt; nums.count {</div><div>        <span style="white-space:pre-wrap">    </span>let dp_iMinus1_0 = dp[i - 1][0] </div><div>        <span style="white-space:pre-wrap">    </span>let dp_iMinus1_1 = dp[i - 1][1] </div><div>            dp[i][0] = max(dp_iMinus1_0, dp_iMinus1_1)</div><div>            dp[i][1] = dp_iMinus1_0 + nums[i]</div></div></div></div></blockquote><div><br></div></span><div>Just a nitpick: this isn’t functionally equivalent to the original code (dp[i][1] = dp[i][0] + nums[i]), because dp[i][0] might have actually changed on the previous line. But you can return this line to the original version without any effect on the compile time (less than 250ms on my machine).</div><div><br></div><div>I think the compile time issue is that max() is a generic function that takes any Comparable, so the type checker seems to go berserk trying to ensure the term is satisfiable.</div><div><br></div><div>If you create a non-generic replacement for max in the same file:</div><div><br></div><div><div>private func myMax(_ x1: Int, _ x2: Int) -&gt; Int {</div><div>    return (x1 &gt;= x2) ? x1 : x2</div><div>}</div></div><div><br></div><div>… and replace the assignment to <i>max(dp[i - 1][0], ……)</i> in the for loop with <i>myMax(dp[i - 1][0], ….)</i></div><div><br></div><div>The compile time will be just as fast as the one that swaps out the internal elements (on my machine it’s actually about 10% faster with the non-generic <i>max</i>).</div><div><br></div><div>Regards,</div><div>Geordie</div><span class=""><br><blockquote type="cite"><div><div dir="ltr"><div><div>        }</div><div>        return 0</div><div>    }</div><div>}</div></div><div><br></div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 5, 2017 at 2:32 PM, Hbucius Smith via swift-users <span dir="ltr">&lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-family:simsun,serif;font-size:small">Hi Swift-Users,</div><div class="gmail_default" style="font-family:simsun,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:simsun,serif;font-size:small">    when I compiled the code, Xcode cannot stop, I do not know why. It is very strange. Can anyone help ? Here is the code. I am using Xcode 8.1</div><div class="gmail_default" style="font-family:simsun,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:simsun,serif;font-size:small"><p class="m_-2579627832302497835m_9138524867132845885gmail-p1"><span class="m_-2579627832302497835m_9138524867132845885gmail-s2">class</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1"> Solution {</span><br><span class="m_-2579627832302497835m_9138524867132845885gmail-s1"></span></p><p class="m_-2579627832302497835m_9138524867132845885gmail-p2"><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">    </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s2">func</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1"> rob(nums: [</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s3">Int</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">]) -&gt; </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s3">Int</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1"> {</span></p><p class="m_-2579627832302497835m_9138524867132845885gmail-p2"><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">        </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s2">guard</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1"> nums.count &gt; </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">0</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1"> </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s2">else</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1"> { </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s2">return</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1"> </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">0</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1"> }</span></p><p class="m_-2579627832302497835m_9138524867132845885gmail-p2"><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">        </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s2">let</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1"> dp = Array.</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s2">init</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">(repeating: Array.</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s2">init</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">(repeating: </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">0</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">, count: nums.count),</span></p><p class="m_-2579627832302497835m_9138524867132845885gmail-p2"><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">                            count: </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">2</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">)</span></p><p class="m_-2579627832302497835m_9138524867132845885gmail-p2"><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">        dp[</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">0</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">][</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">0</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">] = </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">0</span></p><p class="m_-2579627832302497835m_9138524867132845885gmail-p2"><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">        dp[</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">0</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">][</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">1</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">] = nums[</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">0</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">]</span></p><p class="m_-2579627832302497835m_9138524867132845885gmail-p2"><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">        </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s2">for</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1"> i </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s2">in</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1"> </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">1</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1"> ..&lt; nums.count {</span></p><p class="m_-2579627832302497835m_9138524867132845885gmail-p2"><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">            dp[i][</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">0</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">] = max(dp[i - </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">1</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">][</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">0</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">], dp[i - </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">1</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">][</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">1</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">])</span></p><p class="m_-2579627832302497835m_9138524867132845885gmail-p2"><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">            dp[i][</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">1</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">] = dp[i - </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">1</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">][</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">0</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">] + nums[i]</span></p><p class="m_-2579627832302497835m_9138524867132845885gmail-p2"><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">        }</span></p><p class="m_-2579627832302497835m_9138524867132845885gmail-p2"><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">        </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s2">return</span><span class="m_-2579627832302497835m_9138524867132845885gmail-s1"> </span><span class="m_-2579627832302497835m_9138524867132845885gmail-s4">0</span></p><p class="m_-2579627832302497835m_9138524867132845885gmail-p2"><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">    }</span></p><p class="m_-2579627832302497835m_9138524867132845885gmail-p2"><span class="m_-2579627832302497835m_9138524867132845885gmail-s1">}</span></p></div><div class="gmail_default" style="font-family:simsun,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:simsun,serif;font-size:small"><br></div><br clear="all"><div><div class="m_-2579627832302497835m_9138524867132845885gmail_signature"><i><font face="georgia, serif">best wishes for you </font></i></div></div>
</div>
<br>______________________________<wbr>_________________<br>
swift-users mailing list<br>
<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-users</a><br>
<br></blockquote></div><br></div>
______________________________<wbr>_________________<br>swift-users mailing list<br><a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-users" target="_blank">https://lists.swift.org/<wbr>mailman/listinfo/swift-users</a><br></div></blockquote></span></div><br></div></blockquote></div><br></div>