paizaの練習問題を解く へび Go編
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 へび | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】 ついにボス…! 実装 以下のように実装しました。 package main import "fmt" func main(){ var h, w, sy, sx, n int fmt.Scan(&h, &w, &sy, &sx, &n) s := make([]string, h) for i := 0; i < h; i++ { fmt.Scan(&s[i]) } dir := []string{"N", "E", "S", "W"} ct := 0 cd := 120 // 初期の座標に印をつける runes := []rune(s[sy]) runes[sx] = '*' s[sy] = string(runes) for i := 0; i < n; i++ { var t int var d string fmt.Scan(&t, &d) lr := 1 if d == "L" { lr = -1 } result := true l := t - ct for j := 0; j < l; j++ { switch dir[cd%4] { case "N": sy-- case "S": sy++ case "E": sx++ case "W": sx-- } if sy >= h || sx >= w || sy < 0 || sx < 0 || s[sy][sx] == '#' || s[sy][sx] == '*' { result = false break } else { runes := []rune(s[sy]) runes[sx] = '*' s[sy] = string(runes) } } ct = t cd += lr if !result { break } } l := 100 - ct for i := 0; i < l; i++ { switch dir[cd%4] { case "N": sy-- case "S": sy++ case "E": sx++ case "W": sx-- } if sy >= h || sx >= w || sy < 0 || sx < 0 || s[sy][sx] == '#' || s[sy][sx] == '*' { break } else { runes := []rune(s[sy]) runes[sx] = '*' s[sy] = string(runes) } } for i := 0; i < h; i++ { fmt.Println(s[i]) } } 実装はできましたが、ちょっと重複している部分があるので修正します。 ...