<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Latest comments for language 'Pnuts' on doukaku.org</title><link>http://ja.doukaku.org/lang/pnuts/</link><description>Latest comments for language 'Pnuts' on doukaku.org(long)</description><language>ja</language><lastBuildDate>Sat, 22 Nov 2008 19:24:37 -0000</lastBuildDate><item><title>odz's comment on 自然数の分割
</title><link>http://ja.doukaku.org/comment/4335/</link><description>



&lt;a href="http://ja.doukaku.org/89/"&gt;自然数の分割&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/89/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/89/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;たまには Pnuts などを&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
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;function sum_perms(n, m) {
    if (m == 1) {
        yield [n]
    }
    else if (n == 0) {
        yield new int[m]
    }
    else {
        for (i : n..0) {
            for (rest : sum_perms(n - i, m - 1)) {
                yield [i] + rest
            }
        }
    }
}

function main(args) {
    if (args.length == 2) {
        n, m = project(args, function(o) { int(o) })
    }
    else {
        n, m = [5, 3]
    }

    for (t : sum_perms(n, m)) {
        println(join(&amp;#39; &amp;#39;, t))
    }
}

main($args[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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/4335/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/4335/</guid></item><item><title>tomatsu's comment on 重複無し乱数
</title><link>http://ja.doukaku.org/comment/2300/</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;
  &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
2
3
4&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;import java.util.*
function bingo(n) {Collections.shuffle(x = list(range(1,n))); x}

println(bingo(10))
&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/2300/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/2300/</guid></item><item><title>tomatsu's comment on 全ての組み合わせ
</title><link>http://ja.doukaku.org/comment/2244/</link><description>



&lt;a href="http://ja.doukaku.org/44/"&gt;全ての組み合わせ&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/44/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/44/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
 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;function cp(lists){
  if (size(lists) == 0){
    yield {}
  } else {
    for (lss : cp(lists[1..])){
      for (ls : lists[0]) yield {ls} + lss
    }
  }
}
printAll(cp([{1,2,3,4}, &amp;quot;abc&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/2244/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/2244/</guid></item><item><title>tomatsu's comment on 全ての組み合わせ
</title><link>http://ja.doukaku.org/comment/2213/</link><description>



&lt;a href="http://ja.doukaku.org/44/"&gt;全ての組み合わせ&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/44/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/44/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
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;function cp(lists){
  if (size(lists) == 1){
    yield project(lists[0], {_x-&amp;gt;{_x}})
  } else {
    for (r : cp(lists[1..])){
      for (m:r){
        for (a:project(lists[0], {e-&amp;gt; {e}+ m})) yield {a}
      }
    }
  }
}
function listcp(lists) list(project(cp(lists), {x-&amp;gt;x[0]}))

println(listcp([[1,2,3,4], &amp;quot;abc&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/2213/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/2213/</guid></item><item><title>tomatsu's comment on 複数行のコメントアウト
</title><link>http://ja.doukaku.org/comment/2043/</link><description>



&lt;a href="http://ja.doukaku.org/42/"&gt;複数行のコメントアウト&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/42/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/42/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
 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;/*
Java風コメントアウト
*/

`
バッククォートで囲んだ部分は文字列リテラルになる
`
if (false){
  // コメントアウトではないけど if 文を使うことも
}
&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/2043/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/2043/</guid></item><item><title>tomatsu's comment on JPEGをGETして色反転して保存
</title><link>http://ja.doukaku.org/comment/1899/</link><description>



&lt;a href="http://ja.doukaku.org/41/"&gt;JPEGをGETして色反転して保存&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/41/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/41/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
 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;import java.awt.image.*
b=list(project(range(255,0), byte))
invert_op = LookupOp(ByteLookupTable(0,[b,b,b]), null)

function invert(imagefile, dest){
  im = readImage(imagefile)
  im2 = makeImage(im.width, im.height, null, im.type)
  invert_op.filter(im, im2)
  writeImage(im2, dest)
}

invert(&amp;quot;white-pants.jpg&amp;quot;, &amp;quot;black-pants.jpg&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/1899/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/1899/</guid></item><item><title>tomatsu's comment on アクセスログのIPアドレスを逆引き
</title><link>http://ja.doukaku.org/comment/1849/</link><description>



&lt;a href="http://ja.doukaku.org/39/"&gt;アクセスログのIPアドレスを逆引き&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/39/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/39/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  dnsjava使用。
&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&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;concurrency = 100
n = 1000
inputfile = &amp;quot;access_log&amp;quot;
outputfile &amp;quot;access_log_out&amp;quot;

function processLog(input){
  nameservice = LRUcache(10000, reverseDns)
  pool = threadPool(concurrency)
  t = Object[n]
  i = 0
  for (line: readLines(input)){
    idx = line.indexOf(&amp;#39; &amp;#39;)
    t[i] = async({line, idx -&amp;gt; {-&amp;gt;[nameservice[line[0..idx-1]], line[idx..]]}}(line, idx), pool)
    if (++i &amp;gt;= n){
      for (j: 0..n-1){
         r0, r1 = t[j]()
         println(r0, r1)
      }
      i = 0
    }
  }
}

import org.xbill.DNS.*
function reverseDns(hostIp){
  answers = Lookup(ReverseMap.fromAddress(hostIp), Type.PTR, DClass.IN).run()
  (answers == null || answers.length == 0) ? hostIp : answers[0].rdataToString()
}

input = reader(inputfile, &amp;quot;ASCII&amp;quot;)
output = writer(outputfile, &amp;quot;ASCII&amp;quot;)
addShutdownHook({-&amp;gt;output.close(); input.close()})
getContext().setWriter(output) 
processLog(input)
&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/1849/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/1849/</guid></item><item><title>tomatsu's comment on 与えられた数字のケタ数
</title><link>http://ja.doukaku.org/comment/1831/</link><description>



&lt;a href="http://ja.doukaku.org/40/"&gt;与えられた数字のケタ数&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/40/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/40/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
2
3
4&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;function figure(x){
  y = size(string(int(x)))
  [y, pow(10,y-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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/1831/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/1831/</guid></item><item><title>tomatsu's comment on 整数の漢数字表記
</title><link>http://ja.doukaku.org/comment/1788/</link><description>



&lt;a href="http://ja.doukaku.org/38/"&gt;整数の漢数字表記&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/38/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/38/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
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;function num2K(num){
  table = {0=&amp;gt;&amp;quot;&amp;quot;, 1=&amp;gt;&amp;quot;十&amp;quot;,2=&amp;gt;&amp;quot;百&amp;quot;,3=&amp;gt;&amp;quot;千&amp;quot;,4=&amp;gt;&amp;quot;万&amp;quot;,8=&amp;gt;&amp;quot;億&amp;quot;,12=&amp;gt;&amp;quot;兆&amp;quot;,16=&amp;gt;&amp;quot;京&amp;quot;}
  table2 = [&amp;quot;&amp;quot;,&amp;quot;一&amp;quot;,&amp;quot;二&amp;quot;,&amp;quot;三&amp;quot;,&amp;quot;四&amp;quot;,&amp;quot;五&amp;quot;,&amp;quot;六&amp;quot;,&amp;quot;七&amp;quot;,&amp;quot;八&amp;quot;,&amp;quot;九&amp;quot;]
  if (num == 0) return &amp;quot;零&amp;quot;
  i = 0
  s = {}
  for (v : project(reverse(string(num)), {a-&amp;gt;a-&amp;#39;0&amp;#39;})){
    if (table.containsKey(i)){
      s.add(table2[v] + table[i] + (i &amp;gt; 3 ? &amp;quot; &amp;quot; : &amp;quot;&amp;quot; ))
    } else if (v &amp;gt; 1){
      s.add(table2[v] + table[i%4])
    } else if (v != 0){
      s.add(table[i%4])
    }
    i++
  }
  join(&amp;quot;&amp;quot;, reverse(s))
}

print(&amp;quot;&amp;gt;&amp;gt;&amp;quot;); flush(); println(num2K(readLine(System.in))) 
&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/1788/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/1788/</guid></item><item><title>tomatsu's comment on モノクロ画像の類似検索
</title><link>http://ja.doukaku.org/comment/1742/</link><description>



&lt;a href="http://ja.doukaku.org/37/"&gt;モノクロ画像の類似検索&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/37/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/37/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;Core2 Duo1.83GHz、pnuts -J-server -O で起動して1.3秒 (配列の初期化を除く）&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
26
27
28
29
30
31
32
33
34
35
36
37
38
39&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;N_WORDS = 1024*768/32
fb = new int[100][N_WORDS]
for (j:0..99){
  for (i:0..N_WORDS-1) fb[j][i] = random()
}

distance = makeProxy(Integer.getMethod(&amp;quot;bitCount&amp;quot;, [int]))

function sim(f1,f2){
  d = 0
  for (i:0..N_WORDS-1) d += distance(f1[i]^f2[i])
  d
}

function sim(f1,f2, min){
  d = 0
  for (i:0..N_WORDS-1) {
     d += distance(f1[i]^f2[i])
     if (d &amp;gt; min) return d
  }
  d
}

function findOne(f0, buffers){
   idx = 0
   min = sim(f0, buffers[0])
   for (i: 1.. size(buffers)-1){
      f = buffers[i]
      m = sim(f0, f, min)
      if (m &amp;lt; min){
        min = m
        idx = i
      }
   }
   idx
}
s=currentTimeMillis()
println(findOne(fb[0], fb[1..])+1, &amp;quot;th image&amp;quot;)
println((currentTimeMillis()-s), &amp;quot; msec&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/1742/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/1742/</guid></item><item><title>tomatsu's comment on 入出力の中継
</title><link>http://ja.doukaku.org/comment/1731/</link><description>



&lt;a href="http://ja.doukaku.org/11/"&gt;入出力の中継&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/11/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/11/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
2
3
4
5
6
7
8
9&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;function relay(A, B){
  rt = Runtime.getRuntime()
  a = rt.exec(A)
  b = rt.exec(B)
  t1 = fork({-&amp;gt;read(a.inputStream, b.outputStream); a.waitFor(); b.destroy() })
  t2 = fork({-&amp;gt;read(b.inputStream, a.outputStream); b.waitFor(); a.destroy() })
  t1.join()
  t2.join()
}
&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/1731/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/1731/</guid></item><item><title>tomatsu's comment on 「組合せ型の最小完全ハッシュ関数」の逆関数
</title><link>http://ja.doukaku.org/comment/1730/</link><description>



&lt;a href="http://ja.doukaku.org/36/"&gt;「組合せ型の最小完全ハッシュ関数」の逆関数&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/36/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/36/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
 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;function c(n, r){
   k = 1
   for (i = (r+1); i &amp;lt;= n; i++) k *= i
   for (i = 2; i &amp;lt;= (n-r); i++) k /= i
   k
}

function d(n, r, val){
  pat = int[n]
  for (idx : 1 .. n){
    x = c(n - idx, r)
    if (val &amp;gt;= x){
        pat[idx - 1] = 1
        r--
        val -= x
    }
  }
  pat
}
&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/1730/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/1730/</guid></item><item><title>tomatsu's comment on 長方形の交差判定
</title><link>http://ja.doukaku.org/comment/1727/</link><description>



&lt;a href="http://ja.doukaku.org/23/"&gt;長方形の交差判定&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/23/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/23/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
2
3&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;function overlap(r1,r2) {
    r1.l &amp;lt; r2.r &amp;amp;&amp;amp; r2.l &amp;lt; r1.r &amp;amp;&amp;amp; r1.b &amp;lt; r2.t &amp;amp;&amp;amp; r2.b &amp;lt; r1.t
}
&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/1727/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/1727/</guid></item><item><title>tomatsu's comment on ローカル変数の一覧を取得
</title><link>http://ja.doukaku.org/comment/1726/</link><description>



&lt;a href="http://ja.doukaku.org/35/"&gt;ローカル変数の一覧を取得&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/35/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/35/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;この技は pnuts -pure で起動したときだけ使えます。&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&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;import pnuts.tools.StackFrameInspector
function f(){
  x=1
  y=2
  StackFrameInspector.localSymbols(getContext())
}
println(f())
&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/1726/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/1726/</guid></item><item><title>tomatsu's comment on RFC 4180対応版 CSVレコードの分解
</title><link>http://ja.doukaku.org/comment/1725/</link><description>



&lt;a href="http://ja.doukaku.org/33/"&gt;RFC 4180対応版 CSVレコードの分解&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/33/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/33/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;別途csvモジュールが必要。

http://pnuts.org/extensions/csv/&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&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;use(&amp;quot;csv&amp;quot;)
for (columns: readCSV(&amp;quot;csv.txt&amp;quot;)){
   i=0
   for(c:columns) println(++i, &amp;quot; =&amp;gt; &amp;quot;, c)
}
&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/1725/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/1725/</guid></item><item><title>tomatsu's comment on メソッド名一覧の表示
</title><link>http://ja.doukaku.org/comment/1724/</link><description>



&lt;a href="http://ja.doukaku.org/32/"&gt;メソッド名一覧の表示&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/32/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/32/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
 2
 3
 4
 5
 6
 7
 8
 9
10
11&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;class Foo {
  test_foo(){println(&amp;quot;test_foo&amp;quot;)}
  test_foo2(){println(&amp;quot;test_foo2&amp;quot;)}
  test_foo3(){println(&amp;quot;test_foo3&amp;quot;)}
  public_foo(){println(&amp;quot;public_foo&amp;quot;)}
}

f = Foo()
for(m:f.class.methods[{m-&amp;gt;m.name.startsWith(&amp;quot;test_&amp;quot;)}]){
  m.invoke(f, [])
}
&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/1724/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/1724/</guid></item><item><title>tomatsu's comment on Tiny MML
</title><link>http://ja.doukaku.org/comment/1723/</link><description>



&lt;a href="http://ja.doukaku.org/31/"&gt;Tiny MML&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/31/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/31/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
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;import javax.sound.midi.*
import static javax.sound.midi.ShortMessage.*
code = [69, 71, 60, 62, 64, 65, 67]
TONE = 120
function play(mml){
  mes = new ShortMessage()
  rcvr = MidiSystem.getReceiver()
  for (c: mml) {
      if (c &amp;gt;= &amp;#39;a&amp;#39; &amp;amp;&amp;amp; c &amp;lt;= &amp;#39;g&amp;#39;) {
          co = code[c - &amp;#39;a&amp;#39;]
          mes.setMessage(NOTE_ON, 0, co, TONE)
          rcvr.send(mes, -1)
          sleep(500)
          mes.setMessage(NOTE_OFF, 0, co)
          rcvr.send(mes, -1)
      } else {
          sleep(500)
      }
  }
  rcvr.close()
}
play(&amp;quot;cdefedcrefgagfercrcrcrcrcdefedcr&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/1723/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/1723/</guid></item><item><title>tomatsu's comment on マップの通り抜け
</title><link>http://ja.doukaku.org/comment/1722/</link><description>



&lt;a href="http://ja.doukaku.org/30/"&gt;マップの通り抜け&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/30/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/30/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;pre class='compact'&gt;使用例：

println(solve(stringReader(
".+....
.+.+++
.+.+.+
.+++.+
+....+")))
&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
26&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;function solve(f){
  m = list()
  for (line : scanLines(f))  m.add(list(project(line, {c-&amp;gt;c==&amp;#39;+&amp;#39; ? 1 : 0})))
  rows = size(m)
  columns = size(m[0])
  active = list()
  for (j:0..columns - 1) if (m[0][j] == 1) { m[0][j] = 2 ; active.add([0,j]) }

  function step(i, j, activeList){
    if (i + 1 == rows - 1 &amp;amp;&amp;amp; m[i+1][j] == 1) return true
    for (x,y : {[i,j+1], [i,j-1], [i-1,j],[i+1,j]}){
       if (x &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt;= columns-1 &amp;amp;&amp;amp; m[x][y] == 1) {m[x][y]++;  activeList.add([x,y])}
    }
    m[i][j] = 3  // no longer active
    false
  }
  for (k: 0..(rows - 2) * columns + 1){
     newActiveList = list()
     for (i,j : active){
       if (step(i, j, newActiveList)) return true
     }
     if (size(newActiveList) &amp;lt; 1) return false
     active = newActiveList
  }
  false
}
&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/1722/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/1722/</guid></item><item><title>tomatsu's comment on n日後を返す関数を返す関数
</title><link>http://ja.doukaku.org/comment/1721/</link><description>



&lt;a href="http://ja.doukaku.org/29/"&gt;n日後を返す関数を返す関数&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/29/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/29/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;function n_day_later(n) {{d-&amp;gt;addDay(d, 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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/1721/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/1721/</guid></item><item><title>tomatsu's comment on リストを逆順に表示
</title><link>http://ja.doukaku.org/comment/1720/</link><description>



&lt;a href="http://ja.doukaku.org/27/"&gt;リストを逆順に表示&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/27/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/27/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;printAll(reverse([1,2,3,4,5]))
&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/pnuts/"&gt;
      Pnuts
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/1720/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

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