<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Latest comments for language 'Arc' on doukaku.org</title><link>http://ja.doukaku.org/lang/arc/</link><description>Latest comments for language 'Arc' on doukaku.org(long)</description><language>ja</language><lastBuildDate>Sat, 22 Nov 2008 20:07:32 -0000</lastBuildDate><item><title>まさぽん's comment on LL Golf Hole 2 - 文字列に含まれる単語の最初の文字を大文字にする
</title><link>http://ja.doukaku.org/comment/7304/</link><description>



&lt;a href="http://ja.doukaku.org/196/"&gt;LL Golf Hole 2 - 文字列に含まれる単語の最初の文字を大文字にする&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/196/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/196/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  もうちょっと頑張ってみました。&lt;br/&gt;実行例:&lt;br/&gt;arc&amp;gt;&amp;nbsp;(c&amp;nbsp;"LL&amp;nbsp;day&amp;nbsp;and&amp;nbsp;night")&lt;br/&gt;LL&amp;nbsp;Day&amp;nbsp;And&amp;nbsp;Night("LL"&amp;nbsp;"Day"&amp;nbsp;"And"&amp;nbsp;"Night")&lt;br/&gt;&lt;br/&gt;表示の「("LL"&amp;nbsp;〜」以降は&amp;nbsp;prall(出力関数)の返り値なので気にしないでください。
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(def c(x)(prall(map[do(=(_ 0)(upcase:_ 0))_](tokens x))&amp;quot;&amp;quot; &amp;quot; &amp;quot;))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7304/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7304/</guid></item><item><title>まさぽん's comment on LL Golf Hole 2 - 文字列に含まれる単語の最初の文字を大文字にする
</title><link>http://ja.doukaku.org/comment/7256/</link><description>



&lt;a href="http://ja.doukaku.org/196/"&gt;LL Golf Hole 2 - 文字列に含まれる単語の最初の文字を大文字にする&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/196/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/196/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;戦略はいたってシンプルで、
・文字列を単語毎に分ける
・単語の頭を大文字にする
・単語をつなげる
というかんじです。&lt;/pre&gt;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(def c(x)(prn:apply +(intersperse&amp;quot; &amp;quot;(map(fn(y)(=(y 0)(upcase:y 0))y)(tokens x)))))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/7256/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/7256/</guid></item><item><title>まさぽん's comment on マルバツゲーム：賢いプレイヤー
</title><link>http://ja.doukaku.org/comment/6456/</link><description>



&lt;a href="http://ja.doukaku.org/174/"&gt;マルバツゲーム：賢いプレイヤー&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/174/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/174/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  先攻の場合は、リーチされてなければ、できるだけ角を取ってダブルリーチを狙う戦略です。&lt;br/&gt;後攻の場合は、相手の初手に合わせて戦略を変えています。&lt;br/&gt;思った以上の勝率でちょっとビックリしました。&lt;br/&gt;&lt;br/&gt;実行結果:&lt;br/&gt;arc&amp;gt;&amp;nbsp;(nplay-ox&amp;nbsp;10000&amp;nbsp;smart-player)&lt;br/&gt;smart-player&amp;nbsp;win:&amp;nbsp;9919&lt;br/&gt;random-player&amp;nbsp;win:&amp;nbsp;0&lt;br/&gt;draw:&amp;nbsp;81&lt;br/&gt;nil&lt;br/&gt;&lt;br/&gt;arc&amp;gt;&amp;nbsp;(nplay-ox&amp;nbsp;10000&amp;nbsp;random-player)&lt;br/&gt;smart-player&amp;nbsp;win:&amp;nbsp;8428&lt;br/&gt;random-player&amp;nbsp;win:&amp;nbsp;0&lt;br/&gt;draw:&amp;nbsp;1572&lt;br/&gt;nil
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(= lines &amp;#39;((1 2 3) (1 4 7) (1 5 9) (2 5 8) (3 5 7) (3 6 9) (4 5 6) (7 8 9)))

(def lsets&amp;lt;= (s1 s2) (all [mem _ s2] s1))

(def reach? (line mark pool)
  (let marked (map [if (mem _ mark) t nil] line)
    (if (and (is (count nil marked) 1) (mem (line (pos nil marked)) pool))
          (line (pos nil marked))
        nil)))

(def random-player (smark rmark pool)
  (if (is pool nil) &amp;#39;d
      (withs (picked (random-elt pool) rm (cons picked rmark) rp (rem picked pool))
        (if (some [lsets&amp;lt;= _ rm] lines) &amp;#39;r
            (smart-player smark rm rp)))))

(def smart-player (smark rmark pool)
  (if (is pool nil) &amp;#39;d
      (let rr (rem nil (map [reach? _ rmark pool] lines))
        (if (isnt nil (rem nil (map [reach? _ smark pool] lines))) &amp;#39;s
            (isnt nil rr) (random-player (cons (car rr) smark) rmark (rem (car rr) pool))
            (odd (len pool)) (senkou smark rmark pool)
            (koukou smark rmark pool)))))

(def senkou (smark rmark pool)
  (if (is (len pool) 9) (random-player (cons 1 smark) rmark (rem 1 pool))
      (is (len pool) 7)
        (let m (if (lsets&amp;lt;= &amp;#39;(2 3) pool) 3 7)
          (random-player (cons m smark) rmark (rem m pool)))
      (is (len pool) 1) &amp;#39;d
      (let m (if (lsets&amp;lt;= &amp;#39;(4 7) pool) 7 9)
        (random-player (cons m smark) rmark (rem m pool)))))

(def koukou (smark rmark pool)
  (let rf (last rmark)
    (if (mem rf &amp;#39;(1 3 7 9))
          (pat1379 smark rmark pool)
        (mem rf &amp;#39;(2 4))
          (pat24 smark rmark pool)
        (mem rf &amp;#39;(6 8))
          (pat68 smark rmark pool)
        (pat5 smark rmark pool))))

(def pat1379 (smark rmark pool)
  (if (is (len pool) 8) 
        (random-player (cons 5 smark) rmark (rem 5 pool))
      (is (len pool) 6)
        (let m (if (some [mem _ rmark] &amp;#39;(2 6)) 3
                   (some [mem _ rmark] &amp;#39;(4 8)) 7 2)
          (random-player (cons m smark) rmark (rem m pool)))
      (is (len pool) 4)
        (let m (if (some [mem _ rmark] &amp;#39;(2 8)) 4 2)
          (random-player (cons m smark) rmark (rem m pool)))
      (let picked (random-elt pool)
        (random-player (cons picked smark) rmark (rem picked pool)))))

(def pat24 (smark rmark pool)
  (if (is (len pool) 8)
        (random-player (cons 1 smark) rmark (rem 1 pool))
      (is (len pool) 6)
        (let m (if (lsets&amp;lt;= &amp;#39;(2 9) rmark) 7
                   (lsets&amp;lt;= &amp;#39;(4 9) rmark) 3 5)
          (random-player (cons m smark) rmark (rem m pool)))
      (is (len pool) 4)
        (let m (if (lsets&amp;lt;= &amp;#39;(2 4 9) rmark) (if (mem 5 pool) 5 (mem 3 pool) 3 7)
                   (lsets&amp;lt;= &amp;#39;(2 5 9) rmark) 7
                   (lsets&amp;lt;= &amp;#39;(5 4 9) rmark) 3)
          (random-player (cons m smark) rmark (rem m pool)))
      (let picked (random-elt pool)
        (random-player (cons picked smark) rmark (rem picked pool))))))

(def pat68 (smark rmark pool)
  (if (is (len pool) 8)
        (random-player (cons 9 smark) rmark (rem 9 pool))
      (is (len pool) 6)
        (let m (if (lsets&amp;lt;= &amp;#39;(1 6) rmark) 7
                   (lsets&amp;lt;= &amp;#39;(1 8) rmark) 3 5)
          (random-player (cons m smark) rmark (rem m pool)))
      (is (len pool) 4)
        (let m (if (lsets&amp;lt;= &amp;#39;(1 6 8) rmark) (if (mem 5 pool) 5 (mem 3 pool) 3 7)
                   (lsets&amp;lt;= &amp;#39;(1 5 8) rmark) 3
                   (lsets&amp;lt;= &amp;#39;(1 5 6) rmark) 7)
          (random-player (cons m smark) rmark (rem m pool)))
      (let picked (random-elt pool)
        (random-player (cons picked smark) rmark (rem picked pool))))))

(def pat5 (smark rmark pool)
  (if (is (len pool) 8) 
        (random-player (cons 1 smark) rmark (rem 1 pool))
      (is (len pool) 6)
        (random-player (cons 3 smark) rmark (rem 3 pool))
      (let picked (random-elt pool)
        (random-player (cons picked smark) rmark (rem picked pool)))))

(def nplay-ox (n sente)
  (let wl (map (fn (_) (sente nil nil (range 1 9))) (range 1 n))
    (prn &amp;quot;smart-player win: &amp;quot; (count &amp;#39;s wl))
    (prn &amp;quot;random-player win: &amp;quot; (count &amp;#39;r wl))
    (prn &amp;quot;draw: &amp;quot; (count &amp;#39;d wl))
    nil))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/6456/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/6456/</guid></item><item><title>まさぽん's comment on マルバツゲーム
</title><link>http://ja.doukaku.org/comment/6230/</link><description>



&lt;a href="http://ja.doukaku.org/173/"&gt;マルバツゲーム&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/173/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/173/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  srfi-1&amp;nbsp;の&amp;nbsp;lset&amp;lt;=&amp;nbsp;もどきを自作。&lt;br/&gt;&lt;br/&gt;実行結果:&lt;br/&gt;arc&amp;gt;&amp;nbsp;(nplay-ox&amp;nbsp;10000)&lt;br/&gt;o&amp;nbsp;win:&amp;nbsp;5835&lt;br/&gt;x&amp;nbsp;win:&amp;nbsp;2889&lt;br/&gt;draw:&amp;nbsp;1276&lt;br/&gt;nil
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(def lset&amp;lt;= (s1 s2)
  (if (is s1 nil) t
      (mem (car s1) s2) (lset&amp;lt;= (cdr s1) s2)
      nil))

(def check (lis)
  (when (&amp;lt; (len lis) 3) nil)
  (or (lset&amp;lt;= &amp;#39;(1 2 3) lis)
      (lset&amp;lt;= &amp;#39;(1 4 7) lis)
      (lset&amp;lt;= &amp;#39;(1 5 9) lis)
      (lset&amp;lt;= &amp;#39;(2 5 8) lis)
      (lset&amp;lt;= &amp;#39;(3 5 7) lis)
      (lset&amp;lt;= &amp;#39;(3 6 9) lis)
      (lset&amp;lt;= &amp;#39;(4 5 6) lis)
      (lset&amp;lt;= &amp;#39;(7 8 9) lis)))

(def o-player (omark xmark pool)
  (withs (picked (random-elt pool)
          om (cons picked omark))
    (if (check om) &amp;#39;o
        (is (cdr pool) nil) &amp;#39;d
        (x-player om xmark (rem picked pool)))))

(def x-player (omark xmark pool)
  (withs (picked (random-elt pool)
          xm (cons picked xmark))
    (if (check xm) &amp;#39;x
        (o-player omark xm (rem picked pool)))))

(def nplay-ox (n)
  (let wl (map (fn (_) (o-player nil nil (range 1 9))) (range 1 n))
    (prn &amp;quot;o win: &amp;quot; (count &amp;#39;o wl))
    (prn &amp;quot;x win: &amp;quot; (count &amp;#39;x wl))
    (prn &amp;quot;draw: &amp;quot; (count &amp;#39;d wl))
    nil))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/6230/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/6230/</guid></item><item><title>まさぽん's comment on 文字列のセンタリング
</title><link>http://ja.doukaku.org/comment/6154/</link><description>



&lt;a href="http://ja.doukaku.org/87/"&gt;文字列のセンタリング&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/87/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/87/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  実行例:&lt;br/&gt;arc&amp;gt;&amp;nbsp;(centering&amp;nbsp;"hoge"&amp;nbsp;10)&lt;br/&gt;"&amp;nbsp;&amp;nbsp;&amp;nbsp;hoge&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;br/&gt;arc&amp;gt;&amp;nbsp;(centering&amp;nbsp;"hogefuga"&amp;nbsp;5)&lt;br/&gt;"ogefu"
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6
7&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(def mklist (n (o fill nil)) (map (fn (x) fill) (range 1 n)))

(def centering (str length)
  (withs (plen (- length (len str)) tlen (abs plen) l (trunc (/ tlen 2)) r (- tlen l))
    (if (positive plen)
        (string (mklist l #\space) str (mklist r #\space))
        (cut str l (- (len str) r)))))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/6154/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/6154/</guid></item><item><title>まさぽん's comment on 立方根の計算
</title><link>http://ja.doukaku.org/comment/6002/</link><description>



&lt;a href="http://ja.doukaku.org/55/"&gt;立方根の計算&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/55/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/55/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  整数部分は配列(リスト)のインデックスで、小数部分は二分探索的なアプローチで求めています。&lt;br/&gt;三乗根がピッタリ整数の場合は、整数で答えを出すようにしたので、ちょっと長くなりました。&lt;br/&gt;&lt;br/&gt;実行例:&lt;br/&gt;arc&amp;gt;&amp;nbsp;(search-cube-root&amp;nbsp;10.0)&lt;br/&gt;2.1544346900318487&lt;br/&gt;arc&amp;gt;&amp;nbsp;(expt&amp;nbsp;(search-cube-root&amp;nbsp;10.0)&amp;nbsp;3)&lt;br/&gt;9.999999999999513&lt;br/&gt;arc&amp;gt;&amp;nbsp;(search-cube-root&amp;nbsp;100.0)&lt;br/&gt;4.641588833612786&lt;br/&gt;arc&amp;gt;&amp;nbsp;(expt&amp;nbsp;(search-cube-root&amp;nbsp;100.0)&amp;nbsp;3)&lt;br/&gt;100.00000000000048&lt;br/&gt;arc&amp;gt;&amp;nbsp;(search-cube-root&amp;nbsp;125.0)&lt;br/&gt;5
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(= cube-list (map [expt _ 3] (range 1 10)))
(= acc 0.000000000001)

(def search-real (cr of rn)
  (let gosa (- rn (expt cr 3))
    (if (&amp;lt; (abs gosa) acc)
        cr
        (if (&amp;lt; 0 gosa)
            (search-real (+ cr of) (/ of 2) rn)
            (search-real (- cr of) (/ of 2) rn)))))

(def search-cube-root (rn)
  (if (is (type rn) &amp;#39;int)
      (let i (trunc rn)
        (if (mem i cube-list)
            (+ (pos i cube-list) 1)
            (search-real (+ (pos i (sort &amp;lt; (cons i cube-list))) 0.5) 0.25 rn)))
      (search-real (+ (pos rn (sort &amp;lt; (cons rn cube-list))) 0.5) 0.25 rn)))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/6002/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/6002/</guid></item><item><title>まさぽん's comment on 水の移し替えパズル
</title><link>http://ja.doukaku.org/comment/5988/</link><description>



&lt;a href="http://ja.doukaku.org/73/"&gt;水の移し替えパズル&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/73/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/73/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;その必要はないと知りつつも、律儀に水を移し替える実装にしてみました。
問題が解決できない(水量の差が 3 の倍数である容器の組が存在しない)場合は nil を返して終了します。

実行例:
arc&amp;gt; (mizu '(4 2 10))
10
arc&amp;gt; (mizu '(827392 65536 122880))
827392
arc&amp;gt; (mizu '(5 7 9))
nil

水が移動する様を見たい方は 9 行目の (prn w) をアンコメントしてください。&lt;/pre&gt;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(def mizu (waters)
  (let index (indexing waters)
    (if (is index nil) nil
        (with (lcr &amp;#39;((2 -1 -1) (-1 2 -1) (-1 -1 2))
               n1 (index 0)
               n2 (index 1)
               aw (index 2))
          ((rfn lp (w step)
;            (prn w)
             (if (is (w n1) (w n2) 0) step
                 (is (w n1) 0) (lp (map + (lcr n1) w) (+ step 1))
                 (&amp;lt; (w aw) (/ (- (w n2) (w n1)) 3)) (lp (map + (lcr aw) w) (+ step 1))
                 (isnt (w n2) (w n1)) (lp (map + (lcr n1) w) (+ step 1))
                 (lp (map + (lcr aw) w) (+ step 1))))
           waters 0)))))

(def indexing (ls)
  (withs (mm (map [pos _ ls] (sort &amp;lt; ls))
          min (ls (mm 0))
          mid (ls (mm 1))
          max (ls (mm 2)))
    (if (is 0 (mod (- mid min) 3)) (list (mm 0) (mm 1) (mm 2))
        (is 0 (mod (- max min) 3)) (list (mm 0) (mm 2) (mm 1))
        (is 0 (mod (- max mid) 3)) (list (mm 1) (mm 2) (mm 0))
        nil)))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5988/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5988/</guid></item><item><title>mc's comment on アルファベットの繰り上がり
</title><link>http://ja.doukaku.org/comment/5965/</link><description>



&lt;a href="http://ja.doukaku.org/21/"&gt;アルファベットの繰り上がり&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/21/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/21/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  似たような機能にはrangeがあるようです。&lt;br/&gt;私も以前に自作したiotaを投稿してから気づいた&lt;br/&gt;のですが…^^;
&lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5965/</guid></item><item><title>まさぽん's comment on アルファベットの繰り上がり
</title><link>http://ja.doukaku.org/comment/5962/</link><description>



&lt;a href="http://ja.doukaku.org/21/"&gt;アルファベットの繰り上がり&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/21/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/21/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;Arc にも iota みたいなのが欲しい。

実行例:
arc&amp;gt; (make-alnum-list 100)
(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX BY BZ CA CB CC CD CE CF CG CH CI CJ CK CL CM CN CO CP CQ CR CS CT CU CV)&lt;/pre&gt;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(def dec-to-ib26-list (x)
  ((rfn lp (x ret)
     (if (is 0 x) ret
         (&amp;lt; (/ x 26) 1) (cons x ret)
         (is (type (/ x 26)) &amp;#39;int) (lp (- (/ x 26) 1) (cons 26 ret))
         (lp (trunc (/ x 26)) (cons (mod x 26) ret))))
   x nil))

(def to-alnum (x)
  (apply string (map [coerce (+ _ 64) &amp;#39;char] (dec-to-ib26-list x))))

(def iota (x . z)
  (with (limit x
         start (if (car z) (car z) 0)
         step  (if (cadr z) (cadr z) 1))
    (rev (let x nil (repeat limit (do (push start x) (++ start step))) x))))

(def make-alnum-list (n)
  (map [coerce (to-alnum _) &amp;#39;sym] (iota n 1 1)))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5962/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5962/</guid></item><item><title>まさぽん's comment on 議席数をドント方式で
</title><link>http://ja.doukaku.org/comment/5949/</link><description>



&lt;a href="http://ja.doukaku.org/26/"&gt;議席数をドント方式で&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/26/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/26/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;ちょっと手直し。&lt;/p&gt;

&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6
7&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(def donto (pool votes)
  (with (ls (let x nil (repeat (len votes) (push 0 x)) x)
          v (copy votes))
    (repeat pool
      (let i (pos (apply max v) v)
        (= (v i) (/ (votes i) (+ 1 (++ (ls i)))))))
    ls))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5949/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5949/</guid></item><item><title>まさぽん's comment on 議席数をドント方式で
</title><link>http://ja.doukaku.org/comment/5939/</link><description>



&lt;a href="http://ja.doukaku.org/26/"&gt;議席数をドント方式で&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/26/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/26/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;実行例:
arc&amp;gt; (donto 100 '(123 4 56 78))
(48 1 21 30)

2 行目の (let x ...) は scheme でいう (make-list ...)
の代替。&lt;/pre&gt;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(def donto (pool votes)
  (with (ls (let x nil (repeat (len votes) (push 0 x)) x)
          v (copy votes))
    ((rfn lp (p)
       (if (is 0 p)
           ls
           (let i (pos (apply max v) v)
             (= (v i) (/ (votes i) (+ 1 (++ (ls i)))))
             (lp (- p 1)))))
     pool)))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5939/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5939/</guid></item><item><title>mc's comment on 音声合成でHello, world!
</title><link>http://ja.doukaku.org/comment/5622/</link><description>



&lt;a href="http://ja.doukaku.org/59/"&gt;音声合成でHello, world!&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/59/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/59/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  MacOSXのsayコマンドに文字列を渡しています。&lt;br/&gt;(say&amp;nbsp;"Hello,&amp;nbsp;world!")
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(def say (mesg)
 (system (+ &amp;quot;say &amp;quot; mesg &amp;quot;&amp;amp;&amp;quot;)) 
 mesg)
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5622/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5622/</guid></item><item><title>mc's comment on 文字変換表に基く文字列の変換
</title><link>http://ja.doukaku.org/comment/5621/</link><description>



&lt;a href="http://ja.doukaku.org/148/"&gt;文字変換表に基く文字列の変換&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/148/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/148/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  UNIXのtrコマンドや、Perlのtr演算子のように、指定した対応づけに従って文字を変換する関数を作成して下さい。&lt;br/&gt;予め言語内に用意されている場合は、(1)一般的な使用法と、(2)より進んだ使用方法を提示して下さい。&lt;br/&gt;&lt;br/&gt;'ABCDEF'と'abcdef'等すべて対応する文字を書く必要があるものを、(1)基本版、'A-Z'と'a-z'のように"-"で範囲を指定できるものを(2)拡張版、2を更に発展させたものを(3)発展版とします。任意のものを選んで解答して下さい。&lt;br/&gt;&lt;br/&gt;実行例.&amp;nbsp;(与えられた文字列が、"typewriter"の場合)&lt;br/&gt;tr&amp;nbsp;'qwertyuiop'&amp;nbsp;'QWERTYUIOP'&amp;nbsp;"typewriter"&lt;br/&gt;=&amp;gt;&amp;nbsp;TYPEWRITER
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;;; 基本版/Arc
(def tr (orig subst str)
  (tostring
   (each c str
     (pr (aif (pos c orig) (subst it) c)))))

(tr &amp;quot;qwertyuiop&amp;quot; &amp;quot;QWERTYUIOP&amp;quot; &amp;quot;typewriter&amp;quot;)
;=&amp;gt;&amp;quot;TYPEWRITER&amp;quot;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5621/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5621/</guid></item><item><title>mc's comment on n人中m人が当選するくじ
</title><link>http://ja.doukaku.org/comment/5599/</link><description>



&lt;a href="http://ja.doukaku.org/4/"&gt;n人中m人が当選するくじ&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/4/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/4/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  Arcです。&lt;br/&gt;お題46の「重複無し乱数」で定義したbingoを使用しています。&lt;br/&gt;(lot&amp;nbsp;999&amp;nbsp;4)&lt;br/&gt;;=&amp;gt;&amp;nbsp;(484&amp;nbsp;286&amp;nbsp;880&amp;nbsp;186)&lt;br/&gt;;...&lt;br/&gt;;=&amp;gt;&amp;nbsp;(699&amp;nbsp;151&amp;nbsp;312&amp;nbsp;134)&amp;nbsp;
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(def lot (n m)
  (firstn m (bingo n)))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5599/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5599/</guid></item><item><title>mc's comment on 重複する要素を取り除く
</title><link>http://ja.doukaku.org/comment/5597/</link><description>



&lt;a href="http://ja.doukaku.org/56/"&gt;重複する要素を取り除く&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/56/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/56/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  Arcです。&lt;br/&gt;[]記法が使えるのを忘れてました。短いのは良いとは思えど…。
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(def uniq-only (lst)
  (rem [mem _ (cdr:mem _ lst)] lst))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5597/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5597/</guid></item><item><title>mc's comment on アレイのuniq
</title><link>http://ja.doukaku.org/comment/5596/</link><description>



&lt;a href="http://ja.doukaku.org/16/"&gt;アレイのuniq&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/16/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/16/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  Arcです。&lt;br/&gt;Arcでは、dedupがお題と同じ動作をするようです。
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(dedup &amp;#39;(3 1 4 1 5 9 2 6 5 3 5 8 9 7 9))
;=&amp;gt; (3 1 4 5 9 2 6 8 7)
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5596/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5596/</guid></item><item><title>mc's comment on 重複する要素を取り除く
</title><link>http://ja.doukaku.org/comment/5595/</link><description>



&lt;a href="http://ja.doukaku.org/56/"&gt;重複する要素を取り除く&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/56/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/56/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  Arcです。&lt;br/&gt;(uniq-only&amp;nbsp;'(3&amp;nbsp;1&amp;nbsp;4&amp;nbsp;1&amp;nbsp;5&amp;nbsp;9&amp;nbsp;2&amp;nbsp;6&amp;nbsp;5))&lt;br/&gt;;=&amp;gt;&amp;nbsp;(3&amp;nbsp;4&amp;nbsp;9&amp;nbsp;2&amp;nbsp;6)
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(def uniq-only (lst)
  (rem (fn (item) (mem item (cdr:mem item lst))) 
       lst))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5595/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5595/</guid></item><item><title>mc's comment on 文字列の反転
</title><link>http://ja.doukaku.org/comment/5593/</link><description>



&lt;a href="http://ja.doukaku.org/58/"&gt;文字列の反転&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/58/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/58/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  Arcです。文字の扱いについては色々議論されているようですが…。&lt;br/&gt;今のところrevは文字列の反転には使えないようですね…。&lt;br/&gt;リストにして反転して文字列に直しています。&lt;br/&gt;;;&lt;br/&gt;arc&amp;gt;&amp;nbsp;(srev&amp;nbsp;"こんにちは")&lt;br/&gt;"はちにんこ"&lt;br/&gt;&lt;br/&gt;arc&amp;gt;&amp;nbsp;(srev&amp;nbsp;"濁点(だくてん)")&lt;br/&gt;")んてくだ(点濁"
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(def srev (str)
  (let chars (coerce str &amp;#39;cons)
    (string (rev chars))))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5593/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5593/</guid></item><item><title>mc's comment on 重複無し乱数
</title><link>http://ja.doukaku.org/comment/5591/</link><description>



&lt;a href="http://ja.doukaku.org/46/"&gt;重複無し乱数&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/46/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/46/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  Arcです。&lt;br/&gt;割とCommon&amp;nbsp;Lispみたいになってしまいました。
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(def bingo (n)
  (let lst (iota n 1)
    (for i 0 (- n 1)
      (swap (lst i) (lst (rand n))))
    lst))

(def iota (n (o start 0) (o step 1))
  (let res ()
    (repeat n
      (push start res)
      (++ start step))
    (rev res)))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5591/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5591/</guid></item><item><title>mc's comment on コラッツ・角谷の問題
</title><link>http://ja.doukaku.org/comment/5589/</link><description>



&lt;a href="http://ja.doukaku.org/120/"&gt;コラッツ・角谷の問題&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/120/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/120/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  Arcです。&lt;br/&gt;Core2&amp;nbsp;Duo&amp;nbsp;E6600/Linux&amp;nbsp;2^20で6分位です。&lt;br/&gt;定義をメモ化できるdefmemoってのがあるので、それを使ってみたんですが、&lt;br/&gt;自分はあまり上手く使いこなせていないようで、スピードがでません…。&lt;br/&gt;実行結果&lt;br/&gt;(time&amp;nbsp;(collatz-max&amp;nbsp;(expt&amp;nbsp;2&amp;nbsp;20)))&lt;br/&gt;;=&amp;gt;&lt;br/&gt;;time:&amp;nbsp;334690&amp;nbsp;msec.&lt;br/&gt;;"f(837799)&amp;nbsp;=&amp;nbsp;524"
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;(def collatz-max (num)
  ((afn (num i n highest)
    (if (&amp;gt; i num)
        (prn (string &amp;quot;f(&amp;quot; n &amp;quot;) = &amp;quot; highest))
        (let cur (collatz i)
          (if (&amp;lt; highest cur)
          (self num (+ i 1) i cur)
          (self num (+ i 1) n highest)))))
   num 1 0 0))

(defmemo collatz (n)
  ((afn (res cnt)
    (if (is res 1)
        cnt
        (self (if (even res)
              (/ res 2)
              (+ (* res 3) 1))
          (+ cnt 1))))
   n 0))
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    &lt;div align = "right" style="margin-right: 1em;"&gt;
      [&lt;a href="http://ja.doukaku.org/lang/arc/"&gt;
      Arc
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5589/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5589/</guid></item></channel></rss>