解答・コメントを送る方法
コメントを送るには2つの方法があります。
- 匿名でコメントを書くログインせずにコメントを書くことができます。 名前は「匿名」となります。
- アカウントを作成してコメントを書くアカウントを作成すると、記名での投稿ができます。 また、プロフィールページが作成され、 簡単なプロフィールや 統計情報が表示されるようになります。
投稿ボタンを押す前に以下の文章を確認してください
- 当サイトへの投稿は クリエイティブ・コモンズ・ライセンス BY(表示)および、その解釈に同意するものとみなされます。各ページには下のようにライセンス表示が行われます。
- あなたの投稿したコード・コメント・トピックが再利用・添削されることを望まない場合は、投稿をお控えください。
- 自分が書いていない、ウェブサイトや書籍などからの無断コピーは著作権の侵害です。著作権者の了解を得るか、自分で0から書いてください。
- 著作権の侵害、名誉毀損、など投稿内容に問題がある場合、削除することがあります。
- これらのことにあなたはあらかじめ同意したものとみなされます。
Post comment
Post a comment to the following challenge:
文字列で+を表示する
(Nested
Flatten)
As a reply to the following comment: tktc: もっとFunctionalに書きたいので...(#10090) [show]

tktc #10090() [ Scala ] Rating0/0=0.00
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 } }Rating0/0=0.00-0+
[ reply ]