paizaの練習問題を解く いびつなひとりリバーシ(1ターン) Go編
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 いびつなひとりリバーシ(1ターン) | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】 実装 以下のように実装しました。 package main import "fmt" func main(){ var h, w, sy, sx int fmt.Scan(&h, &w) g := make([][]rune, h) for i := 0; i < h; i++ { var s string fmt.Scan(&s) g[i] = []rune(s) for j, v := range s { if v == '!' { sy, sx = i, j } } } g[sy][sx] = '*' dy := []int{1, -1, 0, 0, 1, 1, -1, -1} dx := []int{0, 0, 1, -1, 1, -1, 1, -1} for i := 0; i < 8; i++ { for j := 1;; j++ { ly, lx := sy + dy[i] * j, sx + dx[i] * j if ly >= 0 && lx >= 0 && ly < h && lx < w { if g[ly][lx] == '*' { for k := j - 1; k > 0; k-- { ny, nx := sy + dy[i] * k, sx + dx[i] * k g[ny][nx] = '*' } break } else if g[ly][lx] == '#' { break } } else { break } } } for i := 0; i < h; i++ { fmt.Println(string(g[i])) } } 前回のコードとそこまで変わりがないですね。ifが一つ増えたくらい。 ...