解答・コメントを送る方法

コメントを送るには2つの方法があります。
  • 匿名でコメントを書く
    ログインせずにコメントを書くことができます。 名前は「匿名」となります。
  • アカウントを作成してコメントを書く
    アカウントを作成すると、記名での投稿ができます。 また、プロフィールページが作成され、 簡単なプロフィールや 統計情報が表示されるようになります。
どちらの場合も投稿後の修正・削除はできないので、 投稿前によくご確認下さい。

投稿ボタンを押す前に以下の文章を確認してください

  • 当サイトへの投稿は クリエイティブ・コモンズ・ライセンス BY(表示)および、その解釈に同意するものとみなされます。各ページには下のようにライセンス表示が行われます。
    Creative Commons License このサイトの内容は、 クリエイティブ・コモンズ・ライセンスの下でライセンスされています。 [詳細]
  • あなたの投稿したコード・コメント・トピックが再利用・添削されることを望まない場合は、投稿をお控えください。
  • 自分が書いていない、ウェブサイトや書籍などからの無断コピーは著作権の侵害です。著作権者の了解を得るか、自分で0から書いてください。
  • 著作権の侵害、名誉毀損、など投稿内容に問題がある場合、削除することがあります。
  • これらのことにあなたはあらかじめ同意したものとみなされます。

Post comment

Post a comment to the following challenge: 文字列で+を表示する (Nested Flatten)

As a reply to the following comment: tktc: もっとFunctionalに書きたいので...(#10090) [show]

[hide]
もっとFunctionalに書きたいのですが…。
  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
class Cross(val src: String) {

  // 角の凹みの数
  val dent = 1

  // 格子の数
  val grid = dent * 2 + 1

  // 一辺の長さ
  val side = src.length * grid + 1

  // 描画エリア
  val area:Array[Array[char]] = 
    for (row <- ((" " * side +"\n") * side).split("\n"))
      yield row.toCharArray

  // 水平描画が右向き:true/左向き:false
  var hAhead = true

  // 垂直描画が下向き:true/上向き:false
  var vAhead = true

  // 描画開始位置と描画方向を表現するクラス。
  case class Direction(val posX: Int, val posY: Int, val heading: Int)

  // 最初の描画位置、上段、中央の格子から、水平:右向きに描画する。
  val start = Direction(grid / 2, 0, Cross.HeadingRight)

  // 描画開始
  write(start)

  // 描画メソッド
  def write(d: Direction) :Unit = {
    val x = d.posX * src.length
    val y = d.posY * src.length
    
    d.heading match {
      case Cross.HeadingRight =>
       for (i <- x to x + src.length -1) {
         area(y)(i) = src.charAt(i - x)
       }
      case Cross.HeadingBottom =>
       for (i <- y to y + src.length -1) {
         area(i)(x) = src.charAt(i - y)
       }
      case Cross.HeadingLeft =>
       for (i <- (x- src.length + 1 to x).reverse) {
         area(y)(i) = src.charAt(x - i)
       }
      case Cross.HeadingTop =>
       for (i <- (y - src.length +1 to y).reverse) {
         area(i)(x) = src.charAt(y - i)
       }
    }
    var next = this.next(d) 
    if (next != start) {
      write(next)
    }
  }

  // 次の描画開始位置と描画方向を返す。
  def next(d:Direction) = {
    d.heading match {
      case Cross.HeadingRight =>
       if (d.posX + 2 > grid)
         hAhead = false
       Direction(d.posX + 1, d.posY, if (vAhead) Cross.HeadingBottom else Cross.HeadingTop )
      case Cross.HeadingBottom =>
       if (d.posY + 2 > grid)
         vAhead = false
       Direction(d.posX, d.posY + 1, if (hAhead) Cross.HeadingRight else Cross.HeadingLeft)
      case Cross.HeadingLeft =>
       if (d.posX - 2 < 0 )
         hAhead = true
       Direction(d.posX - 1, d.posY, if (vAhead) Cross.HeadingBottom else Cross.HeadingTop)
      case Cross.HeadingTop =>
       if (d.posY - 2 < 0 )
         vAhead = true
       Direction(d.posX, d.posY - 1, if (hAhead) Cross.HeadingRight else Cross.HeadingLeft)
    }
  }

  // コンソールに表示する。
  def show {
    for(row <- area)
      println(new String(row))
  }
}


object Cross {
  val HeadingRight = 0 
  val HeadingBottom = 1
  val HeadingLeft = 2  
  val HeadingTop = 3   
}

object RunCross {
  def main(args: Array[String]): Unit = {
    val src = if (args.length >= 1) args(0) else "doukaku"
    val cross = new Cross(src)
    cross.show
    
  }
}


コメント本文
形式 [?]
コード
言語

タグ
半角スペースで区切って複数のタグを入力できます。
参考ページタイトル

参考ページURL
利用規約を読んで同意する必要があります。
by guest

Index

Feed

Other

Link

Pathtraq

loading...