<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Latest comments replied to yukoba</title><link>http://ja.doukaku.org/user/689/</link><description>Latest comments replied to yukoba(long)</description><language>ja</language><lastBuildDate>Fri, 09 Jan 2009 04:40:37 -0000</lastBuildDate><item><title>みずしま's comment on 情報オリンピック2007年度国内本選問題2
</title><link>http://ja.doukaku.org/comment/6012/</link><description>



&lt;a href="http://ja.doukaku.org/159/"&gt;情報オリンピック2007年度国内本選問題2&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/159/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/159/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;遅くなる理由として次の2点があると思います。&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;非常に繰り返し回数の多いループにおいて
forを使用していること(forは無名関数
を引数に取るメソッド呼び出しの構文糖なので
遅い)&lt;/li&gt;
&lt;li&gt;objectのすぐ内側で変数を定義しているため、
それらがフィールドになってしまっている
(フィールドの参照はローカル変数の参照に
比べて遅い)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;コードは汚くなりますが、元のコードを改造して
以下のようにすることで、自分の環境
(Athlon 64 3000+, Windows XP
Professional, JDK 1.6.0)において、Javaに
移植した場合にかなり近い性能が出ることを
確認できました。ここで、&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;{ }で囲むことによって、s1やs2などをローカル
変数にすることで高速化&lt;/li&gt;
&lt;li&gt;組み込みのループ構文であるwhileを使うことで
高速化&lt;/li&gt;
&lt;/ul&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
 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;object P2Tune extends Application {
  {
    val s1 = readLine.toArray
    val s2 = readLine.toArray
    val len = new Array[Array[int]](s1.length, s2.length)
  
    var max = 0
    var i = 0
    while(i &amp;lt; s1.length) {
      val c1 = s1(i)
      var j = 0
      while(j &amp;lt; s2.length) {
        val prev = if(i &amp;gt; 0 &amp;amp;&amp;amp; j &amp;gt; 0) len(i-1)(j-1) else 0
        len(i)(j) = if(c1 == s2(j)) prev + 1 else 0
        max = Math.max(max, len(i)(j))
        j += 1
      }
      i += 1
    }
    println(max)
  }
}
&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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/6012/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/6012/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度世界大会「洪水」
</title><link>http://ja.doukaku.org/comment/5763/</link><description>



&lt;a href="http://ja.doukaku.org/153/"&gt;情報オリンピック2007年度世界大会「洪水」&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/153/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/153/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  プログラムの制限時間もクリアしているバージョン。&lt;br/&gt;以下が擬似コードです。&lt;br/&gt;&lt;br/&gt;-------------------------------------&lt;br/&gt;&lt;br/&gt;{まだたどっていない壁}がある&lt;br/&gt;&amp;nbsp;&amp;nbsp;[全ての壁|座標でソート済み]in{まだたどっていない壁}から最初の壁をとる。次はこの配列番号から。&lt;br/&gt;&amp;nbsp;&amp;nbsp;左手に水:int＝頂点から右方向に壁&amp;nbsp;なら&amp;nbsp;1&amp;nbsp;下方向なら&amp;nbsp;-1&lt;br/&gt;&amp;nbsp;&amp;nbsp;最初の壁に戻ってくるまで、壁をたどる&amp;nbsp;(do-while)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{たどった壁}に入っている&amp;nbsp;=&amp;gt;&amp;nbsp;{たどった壁}から{両方水の壁}へ移動&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&amp;nbsp;{まだたどっていない壁}から{たどった壁}へ移動&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;次の壁の始点＝前の壁の終点&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{次の壁の始点&amp;nbsp;-&amp;gt;&amp;nbsp;つながっている壁|not&amp;nbsp;in&amp;nbsp;両方水の壁&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;崩壊壁}から「角度」の小さい順にたどる&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;角度＝外積（前の壁、次の壁）×左手に水（正負）-&amp;gt;&amp;nbsp;９０～３６０&lt;br/&gt;&amp;nbsp;&amp;nbsp;{たどった壁}&amp;nbsp;=&amp;gt;&amp;nbsp;{崩壊壁}&lt;br/&gt;{両方水の壁}を表示&lt;br/&gt;&lt;br/&gt;-------------------------------------&lt;br/&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
 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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;package jp.yukoba.ioi2007;

import scala.collection.mutable._

object Flood4 extends Application {
  class Base
  case class Point(x:int, y:int) extends Base {
    def &amp;lt; (that:Point) = (y &amp;lt; that.y || (y == that.y &amp;amp;&amp;amp; x &amp;lt; that.x))
  }
  case class Wall(no:int, from:Point, to:Point) extends Base {
    def &amp;lt; (that:Wall) = (from &amp;lt; that.from)
  }
  
  // 点番号 -&amp;gt; Point
  val N = readInt
  val dotMap = Map(List.tabulate(N, i =&amp;gt; {
    val line = readLine.split(&amp;quot; &amp;quot;).map(Integer.parseInt(_))
    (i+1, Point(line(0), line(1)))
  }):_*)
  // 壁番号 -&amp;gt; Wall
  val W = readInt
  val wallMap = Map(List.tabulate(W, i =&amp;gt; {
    val ary = readLine.split(&amp;quot; &amp;quot;).map(Integer.parseInt(_))
    // 左上に近いのを from に設定
    val p1 = dotMap(ary(0))
    val p2 = dotMap(ary(1))
    if(p1 &amp;lt; p2)
      (i+1, Wall(i+1, p1, p2))
    else
      (i+1, Wall(i+1, p2, p1))
  }):_*)
  // 訪れていない壁番号のセット
  val unvisited:Set[int] = Set(wallMap.keys.toList:_*)
  // ソート済みの壁の壁番号の配列
  val sortAry = wallMap.keySet.toList.sort((n1, n2) =&amp;gt; 
      wallMap(n1) &amp;lt; wallMap(n2)).toArray
  // 上のたどっていくポインタ
  var sortAryPos = 0
  // {たどった壁} {両方水の壁}
  val visited = Set[int]()
  val bothWater = Set[int]()
  val brokenWall = Set[int]()
  // Point -&amp;gt; Wallの配列
  val point2wallAry = Map[Point, Array[(Wall,int)]]()
  for(pointNo &amp;lt;- dotMap.keys) {
    // 頂点から出る壁は１～４つ
    val point = dotMap(pointNo)
    point2wallAry(point) = new Array[(Wall,int)](4)
  }
  for(wallNo &amp;lt;- unvisited) {
    def put(p:Point, wallDir:(Wall,int)) {
      val ary = point2wallAry(p)
      for(i &amp;lt;- 0 until (ary.length)) {
        if(ary(i) == null) {
          ary(i) = wallDir
          return
        }
      }
      error(&amp;quot;ここにはこない&amp;quot;)
    }
    val wall = wallMap(wallNo)
    put(wall.from, (wall, 1))
    put(wall.to, (wall, -1))
  }
  
  while(unvisited.size &amp;gt; 0) {
    //println(unvisited)
    // [全ての壁|座標でソート済み]in{まだたどっていない壁}から最初の壁をとる。次はこの配列番号から。
    def getFromSortAry():int = {
        while(true) {
          val wallNo = sortAry(sortAryPos)
        if(unvisited.contains(wallNo)) return wallNo
        sortAryPos += 1
        }
      error(&amp;quot;ここにはこない&amp;quot;)
    }
    var wallNo = getFromSortAry
    var wall = wallMap(wallNo) 
    // 左手に水:int＝頂点から右方向に壁 なら 1 下方向なら -1
    val isLeftWater = if(wall.from.y == wall.to.y) 1 else -1
    //println(&amp;quot;isLeftWater = &amp;quot; + isLeftWater)
    // 壁のたどる方向、1 = from -&amp;gt; to、-1 = to -&amp;gt; from
    var wallDir = 1
    // 最初の壁に戻ってくるまで、壁をたどる (do-while)
    val firstWallNo = wallNo
    val firstWallDir = wallDir
    def loop() {
      while(true) {
        //println(&amp;quot;wall = &amp;quot; + wall + &amp;quot;, wallDir = &amp;quot; + wallDir)
        //{たどった壁}に入っている =&amp;gt; {たどった壁}から{両方水の壁}へ移動
        //  else {まだたどっていない壁}から{たどった壁}へ移動
        if(visited.contains(wallNo)) {
          visited -= wallNo
          bothWater += wallNo
        } else {
          unvisited -= wallNo
          visited += wallNo
        }
        // 次の壁の始点＝前の壁の終点
        val nextStart = (if(wallDir == 1) wall.to else wall.from)
        // {次の壁の始点 -&amp;gt; つながっている壁|not in 両方水の壁 &amp;amp;&amp;amp; 崩壊壁}から「角度」の小さい順にたどる
        //println(nextStart)
        val wallAry = point2wallAry(nextStart)
        var minArg = Integer.MAX_VALUE
        var minWallDir:(Wall,int) = null
        for(i &amp;lt;- 0 until (wallAry.length)) {
          val nextWallDir = wallAry(i)
          //println(&amp;quot;nextWallDir = &amp;quot; + nextWallDir)
          if(nextWallDir != null &amp;amp;&amp;amp; !bothWater.contains(nextWallDir._1.no) &amp;amp;&amp;amp; 
            !brokenWall.contains(nextWallDir._1.no)) {
            // 角度＝外積（前の壁、次の壁）×左手に水（正負）-&amp;gt; ９０～３６０
            def getArg(wall1:Wall, wallDir1:int, wall2:Wall, wallDir2:int, isLeftWater:int):int = {
              def toSign(p:Point):Point = Point(toSignI(p.x), toSignI(p.y))
              def toSignI(i:int) = if(i&amp;lt;0) -1 else if(i==0) 0 else 1
              def toVec(wall:Wall, wallDir:int) =
                if(wallDir == 1) Point(wall.to.x - wall.from.x, wall.to.y - wall.from.y)
                else Point(wall.from.x - wall.to.x, wall.from.y - wall.to.y)
              val vec1 = toSign(toVec(wall1, wallDir1))
              val vec2 = toSign(toVec(wall2, wallDir2))
              if(vec1 == vec2) return 180
              else if(vec1.x == -vec2.x &amp;amp;&amp;amp; vec1.y == -vec2.y) return 360
              val gaiseki = (vec1.x * vec2.y - vec1.y * vec2.x) * isLeftWater
              if(gaiseki &amp;lt; 0) return 90
              else return 270
            }
            val arg = getArg(wall, wallDir, nextWallDir._1, nextWallDir._2, isLeftWater)
            //println(&amp;quot;arg = &amp;quot; + arg)
            if(arg &amp;lt; minArg) {
              minArg = arg
              minWallDir = nextWallDir
            }
          }
        }
        //assert(minWallDir != null)
        if(minWallDir == null) return
        // 最初の壁に戻って来たら終了
        val nextWall = minWallDir._1
        val nextWallDir = minWallDir._2
        if(nextWall.no == firstWallNo &amp;amp;&amp;amp; nextWallDir == firstWallDir) return
        wall = nextWall
        wallDir = nextWallDir
        wallNo = wall.no
      }
      
    }
    loop()
    brokenWall ++= visited
    visited.clear
  }  
  println(bothWater.size)
  for(wallNo &amp;lt;- bothWater)
    println(wallMap(wallNo).no)
  //println(brokenWall.size)
}
&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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5763/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5763/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度国内予選問題2
</title><link>http://ja.doukaku.org/comment/5627/</link><description>



&lt;a href="http://ja.doukaku.org/132/"&gt;情報オリンピック2007年度国内予選問題2&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/132/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/132/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nv"&gt;main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;do&lt;/span&gt; &lt;span class="nv"&gt;line&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nv"&gt;getLine&lt;/span&gt;
          &lt;span class="nv"&gt;print&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;count&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;JOI&amp;quot;&lt;/span&gt; &lt;span class="nv"&gt;line&lt;/span&gt;
          &lt;span class="nv"&gt;print&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;count&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;IOI&amp;quot;&lt;/span&gt; &lt;span class="nv"&gt;line&lt;/span&gt;
&lt;span class="nv"&gt;count&lt;/span&gt; &lt;span class="nv"&gt;search&lt;/span&gt; &lt;span class="nv"&gt;line&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
  &lt;span class="nv"&gt;length&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;filter&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nv"&gt;search&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;map&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="nv"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;take&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;drop&lt;/span&gt; &lt;span class="nv"&gt;i&lt;/span&gt; &lt;span class="nv"&gt;line&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt; &lt;span class="nv"&gt;length&lt;/span&gt; &lt;span class="nv"&gt;line&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&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/haskell/"&gt;
      Haskell
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5627/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5627/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度国内予選問題1
</title><link>http://ja.doukaku.org/comment/5626/</link><description>



&lt;a href="http://ja.doukaku.org/131/"&gt;情報オリンピック2007年度国内予選問題1&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/131/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/131/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  
&lt;hr&gt;
  
    &lt;table&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5
6&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nv"&gt;main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;do&lt;/span&gt; &lt;span class="nv"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nv"&gt;readLn&lt;/span&gt;
          &lt;span class="nv"&gt;print&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;calc&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nv"&gt;calc&lt;/span&gt; &lt;span class="nv"&gt;left&lt;/span&gt; &lt;span class="nv"&gt;count&lt;/span&gt; &lt;span class="nv"&gt;coins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="kr"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;length&lt;/span&gt; &lt;span class="nv"&gt;coins&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="kr"&gt;then&lt;/span&gt; &lt;span class="nv"&gt;count&lt;/span&gt; 
  &lt;span class="kr"&gt;else&lt;/span&gt; &lt;span class="nv"&gt;calc&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;rem&lt;/span&gt; &lt;span class="nv"&gt;left&lt;/span&gt; &lt;span class="nv"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;div&lt;/span&gt; &lt;span class="nv"&gt;left&lt;/span&gt; &lt;span class="nv"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;tail&lt;/span&gt; &lt;span class="nv"&gt;coins&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
  &lt;span class="kr"&gt;where&lt;/span&gt; &lt;span class="nv"&gt;coin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;head&lt;/span&gt; &lt;span class="nv"&gt;coins&lt;/span&gt;
&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/haskell/"&gt;
      Haskell
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5626/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5626/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度国内予選問題4
</title><link>http://ja.doukaku.org/comment/5624/</link><description>



&lt;a href="http://ja.doukaku.org/134/"&gt;情報オリンピック2007年度国内予選問題4&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/134/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/134/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Scala -&amp;gt; Haskell 移植&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&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nv"&gt;qualified&lt;/span&gt; &lt;span class="n"&gt;Data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Set&lt;/span&gt; &lt;span class="nv"&gt;as&lt;/span&gt; &lt;span class="n"&gt;Set&lt;/span&gt;

&lt;span class="nv"&gt;main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;do&lt;/span&gt; &lt;span class="nv"&gt;m&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nv"&gt;readLn&lt;/span&gt;
          &lt;span class="nv"&gt;lines1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nv"&gt;sequence&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;replicate&lt;/span&gt; &lt;span class="nv"&gt;m&lt;/span&gt; &lt;span class="nv"&gt;getLine&lt;/span&gt;
          &lt;span class="kr"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;seiza&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;map&lt;/span&gt; &lt;span class="nv"&gt;splitAtSpace&lt;/span&gt; &lt;span class="nv"&gt;lines1&lt;/span&gt;  
          &lt;span class="nv"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nv"&gt;readLn&lt;/span&gt;
          &lt;span class="nv"&gt;lines2&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nv"&gt;sequence&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;replicate&lt;/span&gt; &lt;span class="nv"&gt;n&lt;/span&gt; &lt;span class="nv"&gt;getLine&lt;/span&gt;
          &lt;span class="kr"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;stars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;fromList&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;map&lt;/span&gt; &lt;span class="nv"&gt;splitAtSpace&lt;/span&gt; &lt;span class="nv"&gt;lines2&lt;/span&gt;

          &lt;span class="kr"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;diffs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;map&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="nv"&gt;s1&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;minus&lt;/span&gt; &lt;span class="nv"&gt;s1&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;seiza&lt;/span&gt; &lt;span class="o"&gt;!!&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="nv"&gt;stars&lt;/span&gt;
          &lt;span class="kr"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;toList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;filter&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="nv"&gt;diff&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;all&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="nv"&gt;s2&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;member&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;plus&lt;/span&gt; &lt;span class="nv"&gt;s2&lt;/span&gt; &lt;span class="nv"&gt;diff&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;stars&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;seiza&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;diffs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!!&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;   
          &lt;span class="nv"&gt;putStrLn&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;show&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;fst&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;d&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="s"&gt;&amp;quot; &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="nv"&gt;show&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;snd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;d&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nv"&gt;splitAtSpace&lt;/span&gt; &lt;span class="nv"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;read&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;take&lt;/span&gt; &lt;span class="nv"&gt;p&lt;/span&gt; &lt;span class="nv"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;read&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;drop&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;p&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                 &lt;span class="kr"&gt;where&lt;/span&gt; &lt;span class="nv"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;length&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;takeWhile&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;/=&lt;/span&gt; &lt;span class="sc"&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;s&lt;/span&gt;
&lt;span class="nv"&gt;plus&lt;/span&gt; &lt;span class="nv"&gt;a&lt;/span&gt; &lt;span class="nv"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;fst&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;fst&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;b&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nv"&gt;snd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;snd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;b&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nv"&gt;minus&lt;/span&gt; &lt;span class="nv"&gt;a&lt;/span&gt; &lt;span class="nv"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;fst&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;fst&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;b&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nv"&gt;snd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;snd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;b&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&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/haskell/"&gt;
      Haskell
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5624/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5624/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度国内予選問題4
</title><link>http://ja.doukaku.org/comment/5610/</link><description>



&lt;a href="http://ja.doukaku.org/134/"&gt;情報オリンピック2007年度国内予選問題4&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/134/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/134/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
 8
 9
10
11
12
13&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;object JOI4 extends Application {
  val m = readInt
  val seiza = List.tabulate(m, i =&amp;gt; readLine.split(&amp;quot; &amp;quot;).map(Integer.parseInt(_)).toList).toArray
  val n = readInt
  val stars = Set(List.tabulate(n, i =&amp;gt; readLine.split(&amp;quot; &amp;quot;).map(Integer.parseInt(_)).toList): _*)
  
  val diff = stars.map(minus(_, seiza(0))).
    find(diff =&amp;gt; seiza.forall(s2 =&amp;gt; stars.contains(plus(s2, diff)))).get
  println(diff(0) + &amp;quot; &amp;quot; + diff(1))
  
  def plus(a:List[int], b:List[int])  = List(a(0) + b(0), a(1) + b(1))
  def minus(a:List[int], b:List[int]) = List(a(0) - b(0), a(1) - b(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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5610/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5610/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度国内予選問題4
</title><link>http://ja.doukaku.org/comment/5609/</link><description>



&lt;a href="http://ja.doukaku.org/134/"&gt;情報オリンピック2007年度国内予選問題4&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/134/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/134/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;Setを使って楽してみました。&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&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;object JOI4 extends Application {
  val m = readInt
  val seiza = List.tabulate(m, i =&amp;gt; readLine.split(&amp;quot; &amp;quot;).map(Integer.parseInt(_)).toList).toArray
  val n = readInt
  val stars = Set(List.tabulate(n, i =&amp;gt; readLine.split(&amp;quot; &amp;quot;).map(Integer.parseInt(_)).toList): _*)
  
  def calc() {
    for(s1 &amp;lt;- stars) {
      val diff = minus(s1, seiza(0))
      if(seiza.forall(s2 =&amp;gt; stars.contains(plus(s2, diff)))) 
        return println(diff(0) + &amp;quot; &amp;quot; + diff(1))
    }
  }
  calc
  
  def plus(a:List[int], b:List[int])  = List(a(0) + b(0), a(1) + b(1))
  def minus(a:List[int], b:List[int]) = List(a(0) - b(0), a(1) - b(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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5609/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5609/</guid></item><item><title>yukoba's comment on 情報オリンピック2006年度国内本選問題3
</title><link>http://ja.doukaku.org/comment/5603/</link><description>



&lt;a href="http://ja.doukaku.org/145/"&gt;情報オリンピック2006年度国内本選問題3&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/145/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/145/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
 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;object Hon3 extends Application {
  val n = readInt
  val stars = List.tabulate(n, i =&amp;gt; {
    val list = readLine.split(&amp;quot; &amp;quot;).map(Integer.parseInt(_))
    (list(0), list(1))
  }).toArray
  
  val map = new Array[boolean](5001 * 5001)
  stars.foreach(p =&amp;gt; map(p._2 * 5001 + p._1) = true)
  
  def calc(i1:int, maxArea:int):int = {
    if(i1 == n) return maxArea
    def calc2(i1:int, i2:int, maxArea:int):int = {
      if(i2 == n) return maxArea
      val p1 = stars(i1); val p2 = stars(i2)
      if(hasTwoMore(p1, p2, 1) || hasTwoMore(p1, p2, -1))
        return calc2(i1, i2 + 1, Math.max(maxArea, calcArea(p1, p2)))
      return calc2(i1, i2 + 1, maxArea)
    }
    return calc(i1 + 1, calc2(i1, i1 + 1, maxArea))
  }
  def hasStarAtMap(p:(int,int)) = 
    p._1 &amp;gt;= 0 &amp;amp;&amp;amp; p._1 &amp;lt;= 5000 &amp;amp;&amp;amp; p._2 &amp;gt;= 0 &amp;amp;&amp;amp; p._2 &amp;lt;= 5000 &amp;amp;&amp;amp; map(p._2 * 5001 + p._1)
  // d == 1 なら右方向回転、 d == -1 なら左方向回転
  def hasTwoMore(p1:(int,int), p2:(int,int), d:int):boolean = {
    val p3 = (p2._1 + d * (p2._2 - p1._2), p2._2 - d * (p2._1 - p1._1))
    val p4 = (p3._1 + d * (p3._2 - p2._2), p3._2 - d * (p3._1 - p2._1))
    return hasStarAtMap(p3) &amp;amp;&amp;amp; hasStarAtMap(p4)
  }
  // 面積の計算
  def calcArea(p1:(int,int), p2:(int,int)) = 
    (p1._1 - p2._1) * (p1._1 - p2._1) + (p1._2 - p2._2) * (p1._2 - p2._2) 
  println(calc(0, 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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5603/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5603/</guid></item><item><title>yukoba's comment on 情報オリンピック2006年度国内本選問題1
</title><link>http://ja.doukaku.org/comment/5577/</link><description>



&lt;a href="http://ja.doukaku.org/143/"&gt;情報オリンピック2006年度国内本選問題1&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/143/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/143/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;こうやって書くと var をなくせるんですね。&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&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;object Hon1 extends Application {
  //Console.setIn(new java.io.FileReader(&amp;quot;input.txt&amp;quot;))
  val ary = Console.readLine().split(&amp;quot; &amp;quot;)
  val n = Integer.parseInt(ary(0))
  val k = Integer.parseInt(ary(1))
  val a = List.tabulate(n, i =&amp;gt; Console.readInt).toArray
  
  val firstSum = a.take(k).reduceLeft((i:int,j:int) =&amp;gt; i + j)
  def calc(i:int, prevSum:int, maxSum:int):int = {
    if(i == n) return maxSum
    val curSum = prevSum - a(i - k) + a(i) 
    return calc(i + 1, curSum, Math.max(maxSum, curSum)) 
  }
  
  println(calc(k, firstSum, firstSum))
}
&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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5577/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5577/</guid></item><item><title>yukoba's comment on 情報オリンピック2006年度国内本選問題1
</title><link>http://ja.doukaku.org/comment/5571/</link><description>



&lt;a href="http://ja.doukaku.org/143/"&gt;情報オリンピック2006年度国内本選問題1&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/143/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/143/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
 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;object Hon1 extends Application {
  //Console.setIn(new java.io.FileReader(&amp;quot;input.txt&amp;quot;))
  val ary = Console.readLine().split(&amp;quot; &amp;quot;)
  val n = Integer.parseInt(ary(0))
  val k = Integer.parseInt(ary(1))
  val a = List.tabulate(n, i =&amp;gt; Console.readInt).toArray
  
  var firstSum = 0
  a.take(k).foreach(v =&amp;gt; firstSum += v)
  
  def calc(i:int, prevSum:int, maxSum:int):int = {
    if(i == n) return maxSum
    val curSum = prevSum - a(i - k) + a(i) 
    return calc(i + 1, curSum, Math.max(maxSum, curSum)) 
  }
  
  println(calc(k, firstSum, firstSum))
}
&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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5571/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5571/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度国内予選問題3
</title><link>http://ja.doukaku.org/comment/5565/</link><description>



&lt;a href="http://ja.doukaku.org/133/"&gt;情報オリンピック2007年度国内予選問題3&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/133/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/133/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
 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;object JOI3 extends Application {
  val n = Console.readInt
  val taro = List.tabulate(n, i =&amp;gt; Console.readInt).sort((i,j) =&amp;gt; i &amp;lt; j)
  val hanako = List.range(1, n*2 + 1).filter(i =&amp;gt; !taro.contains(i))
  type Cards = List[int]
  
  def taroPuts(taro:Cards, hanako:Cards, p:int):List[int] = {
    if(hanako.length == 0) return List(0, taro.length);
    val result = putsCard(taro, p)
    return hanakoPuts(result._1, hanako, result._2)
  }
  def hanakoPuts(taro:Cards, hanako:Cards, p:int):List[int] = {
    if(taro.length == 0) return List(hanako.length, 0);
    val result = putsCard(hanako, p)
    return taroPuts(taro, result._1, result._2)
  }
  def putsCard(list:Cards, p:int):(Cards,int) = {
    val spanList = list.span(i =&amp;gt; i &amp;lt;= p)
    if(spanList._2.length == 0) 
      return (list, 0)
    else 
      return (spanList._1 ::: spanList._2.tail, spanList._2.head)
  }
  taroPuts(taro, hanako, 0).foreach(x =&amp;gt; println(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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5565/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5565/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度国内予選問題5
</title><link>http://ja.doukaku.org/comment/5533/</link><description>



&lt;a href="http://ja.doukaku.org/135/"&gt;情報オリンピック2007年度国内予選問題5&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/135/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/135/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;末尾再帰になるように変換。これで、テストデータ4以降も正常に処理できます。&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&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;import java.lang._
object JOI5 extends Application {
  val ary = Console.readLine().split(&amp;quot; &amp;quot;)
  val r = Integer.parseInt(ary(0))
  val c = Integer.parseInt(ary(1))
  val map = List.tabulate(r, (y) =&amp;gt; {
    val line = Console.readLine().split(&amp;quot; &amp;quot;)
    List.tabulate(c, (x) =&amp;gt; line(x) == &amp;quot;1&amp;quot;).toArray
  }).toArray
  def countMax(i:int, maxCount:int):int = {
    if(i == 2 &amp;lt;&amp;lt; r) return maxCount
    def countX(x:int, xSum:int):int = {
      if(x == c) return xSum
      def countY(y:int, ySum:int):int = {
        if(y == r) return ySum
        return countY(y + 1, ySum + (if((i &amp;amp; (2 &amp;lt;&amp;lt; y)) == 0 ^ map(y)(x)) 1 else 0))
      }
      val ycount = countY(0, 0)
      return countX(x + 1, xSum + Math.max(ycount, r - ycount))
    }
    return countMax(i + 1, Math.max(countX(0, 0), maxCount))
  }
  println(countMax(0, 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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5533/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5533/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度国内予選問題5
</title><link>http://ja.doukaku.org/comment/5532/</link><description>



&lt;a href="http://ja.doukaku.org/135/"&gt;情報オリンピック2007年度国内予選問題5&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/135/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/135/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;val を無くしてみましたが、テストデータ４以降がスタックオーバーフローします。&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&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;import java.lang._
object JOI5 extends Application {
  val ary = Console.readLine().split(&amp;quot; &amp;quot;)
  val r = Integer.parseInt(ary(0))
  val c = Integer.parseInt(ary(1))
  val map = List.tabulate(r, (y) =&amp;gt; {
    val line = Console.readLine().split(&amp;quot; &amp;quot;)
    List.tabulate(c, (x) =&amp;gt; line(x) == &amp;quot;1&amp;quot;).toArray
  }).toArray
  def countMax(i:int):int = {
    if(i == 2 &amp;lt;&amp;lt; r) return 0
    def countX(x:int):int = {
      if(x == c) return 0
      def countY(y:int):int = {
        if(y == r) return 0
        return (if((i &amp;amp; (2 &amp;lt;&amp;lt; y)) == 0 ^ map(y)(x)) 1 else 0) + countY(y + 1)
      }
      val ycount = countY(0)
      return Math.max(ycount, r - ycount) + countX(x + 1)
    }
    return Math.max(countX(0), countMax(i + 1))
  }
  println(countMax(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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5532/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5532/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度国内予選問題4
</title><link>http://ja.doukaku.org/comment/5531/</link><description>



&lt;a href="http://ja.doukaku.org/134/"&gt;情報オリンピック2007年度国内予選問題4&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/134/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/134/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;問題番号間違えた orz&lt;/p&gt;

&lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5531/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度国内予選問題4
</title><link>http://ja.doukaku.org/comment/5530/</link><description>



&lt;a href="http://ja.doukaku.org/134/"&gt;情報オリンピック2007年度国内予選問題4&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/134/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/134/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;val のみにしてみましたが、テストデータ４以降がスタックオーバーフローします。&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&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;import java.lang._
object JOI5 extends Application {
  val ary = Console.readLine().split(&amp;quot; &amp;quot;)
  val r = Integer.parseInt(ary(0))
  val c = Integer.parseInt(ary(1))
  val map = List.tabulate(r, (y) =&amp;gt; {
    val line = Console.readLine().split(&amp;quot; &amp;quot;)
    List.tabulate(c, (x) =&amp;gt; line(x) == &amp;quot;1&amp;quot;).toArray
  }).toArray
  def countMax(i:int):int = {
    if(i == 2 &amp;lt;&amp;lt; r) return 0
    def countX(x:int):int = {
      if(x == c) return 0
      def countY(y:int):int = {
        if(y == r) return 0
        return (if((i &amp;amp; (2 &amp;lt;&amp;lt; y)) == 0 ^ map(y)(x)) 1 else 0) + countY(y + 1)
      }
      val ycount = countY(0)
      return Math.max(ycount, r - ycount) + countX(x + 1)
    }
    return Math.max(countX(0), countMax(i + 1))
  }
  println(countMax(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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5530/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5530/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度国内予選問題3
</title><link>http://ja.doukaku.org/comment/5529/</link><description>



&lt;a href="http://ja.doukaku.org/133/"&gt;情報オリンピック2007年度国内予選問題3&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/133/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/133/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;var と mutable を無くしました。&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&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;object JOI3 extends Application {
  val n = Console.readInt
  val taro = List.tabulate(n, i =&amp;gt; Console.readInt).sort((i,j) =&amp;gt; i &amp;lt; j)
  val hanako = List.range(1, n*2 + 1).filter(i =&amp;gt; !taro.contains(i))
  
  def game(list1:List[int], list2:List[int], isList1Taro:boolean, p:int):String = {
   if(list1.length == 0 || list2.length == 0) 
     return if(isList1Taro) list2.length + &amp;quot;\n&amp;quot; + list1.length
     else list1.length + &amp;quot;\n&amp;quot; + list2.length
   val spanList = list1.span(i =&amp;gt; i &amp;lt;= p)
   if(spanList._2.length == 0) 
     return game(list2, list1, !isList1Taro, 0)
   else 
     return game(list2, spanList._1 ::: spanList._2.tail, !isList1Taro, spanList._2.head)
  }
  println(game(taro, hanako, true, 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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5529/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5529/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度国内予選問題2
</title><link>http://ja.doukaku.org/comment/5528/</link><description>



&lt;a href="http://ja.doukaku.org/132/"&gt;情報オリンピック2007年度国内予選問題2&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/132/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/132/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;var を無くしました。&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;object JOI2 extends Application {
  val line = Console.readLine
  def count(search:String) = 
    List.tabulate(line.length - 2, i =&amp;gt; line.substring(i, i+3)).
      filter(s =&amp;gt; s == search).length; 
  List(&amp;quot;JOI&amp;quot;, &amp;quot;IOI&amp;quot;).foreach(x =&amp;gt; println(count(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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5528/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5528/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度国内予選問題5
</title><link>http://ja.doukaku.org/comment/5515/</link><description>



&lt;a href="http://ja.doukaku.org/135/"&gt;情報オリンピック2007年度国内予選問題5&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/135/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/135/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;flip いらないので除去。どう考えても手続き型言語の記法で書いていますね。&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&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;import java.lang._
object JOI5 extends Application {
  val ary = Console.readLine().split(&amp;quot; &amp;quot;)
  val r = Integer.parseInt(ary(0))
  val c = Integer.parseInt(ary(1))
  val map = List.tabulate(r, (y) =&amp;gt; {
    val line = List.fromArray(Console.readLine().split(&amp;quot; &amp;quot;))
    List.tabulate(c, (x) =&amp;gt; line(x) == &amp;quot;1&amp;quot;).toArray
  }).toArray
  var maxCount = 0
  for(i &amp;lt;- List.range(0, 2 &amp;lt;&amp;lt; r)) {
    var count = 0
    for(x &amp;lt;- List.range(0, c)) {
      var ycount = 0
      for(y &amp;lt;- List.range(0, r)) 
        if((i &amp;amp; (2 &amp;lt;&amp;lt; y)) == 0 ^ map(y)(x)) ycount = ycount + 1
      count += Math.max(ycount, r - ycount)
    }
    maxCount = Math.max(count, maxCount)
  }
  println(maxCount)
}
&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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5515/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5515/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度国内予選問題4
</title><link>http://ja.doukaku.org/comment/5496/</link><description>



&lt;a href="http://ja.doukaku.org/134/"&gt;情報オリンピック2007年度国内予選問題4&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/134/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/134/flatten/"&gt;Flatten&lt;/a&gt;)


&lt;hr&gt;
  &lt;p&gt;より、Scalaぽく修正。&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
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;import java.lang._
object JOI4 extends Application {
  val m = Console.readInt
  val seiza = List.tabulate(m, (i) =&amp;gt; {
    val line = Console.readLine().split(&amp;quot; &amp;quot;)
    (Integer.parseInt(line(0)), Integer.parseInt(line(1)))
  }).sort(prev).toArray
  val n = Console.readInt
  val stars = List.tabulate(n, (i) =&amp;gt; {
    val line = Console.readLine().split(&amp;quot; &amp;quot;)
    (Integer.parseInt(line(0)), Integer.parseInt(line(1)))
  }).sort(prev).toArray
  
  def find():(int,int) = {
    for(i &amp;lt;- List.range(0, n - m)) {
      val diff = minus(stars(i), seiza(0))
      def isMatch(diff:(int,int)):boolean = {
        var pos = -1
        for(j &amp;lt;- List.range(0, m)) {
          def search(pos:int):int = {
            for(k &amp;lt;- List.range(pos, n) if(stars(k) == plus(seiza(j), diff))) return k
            return -1
          }
          pos = search(pos + 1)
          if(pos == -1) return false
        }
        return true
      }
      if(isMatch(diff)) return diff
    }
    error(&amp;quot;Cannot find seiza&amp;quot;)
  }
  val diff = find()
  println(diff._1 + &amp;quot; &amp;quot; + diff._2)
  
  def prev(a:(int,int), b:(int,int)) = if(a._2 == b._2) a._1 &amp;lt; b._1 else a._2 &amp;lt; b._2
  def plus(a:(int,int), b:(int,int)) = (a._1 + b._1, a._2 + b._2)
  def minus(a:(int,int), b:(int,int)) = (a._1 - b._1, a._2 - b._2)
}
&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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5496/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

</description><guid>http://ja.doukaku.org/comment/5496/</guid></item><item><title>yukoba's comment on 情報オリンピック2007年度国内予選問題1
</title><link>http://ja.doukaku.org/comment/5495/</link><description>



&lt;a href="http://ja.doukaku.org/131/"&gt;情報オリンピック2007年度国内予選問題1&lt;/a&gt;
(&lt;a href="http://ja.doukaku.org/131/nested/"&gt;Nested&lt;/a&gt; 
 &lt;a href="http://ja.doukaku.org/131/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
8
9&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;object JOI1 extends Application {
  var sum = 1000 - Console.readInt
  var count = 0;
  for(c &amp;lt;- Array(500, 100, 50, 10, 5, 1)) {
    count += sum / c
    sum %= c
  }
  println(count)
}
&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/scala/"&gt;
      Scala
      &lt;/a&gt;]
      [&lt;a href="http://ja.doukaku.org/comment/5495/download/"&gt;
      download code
      &lt;/a&gt;]
      &lt;/a&gt;]
    &lt;/div&gt;
    &lt;hr&gt;
  

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