前提・実現したいこと
Golangの勉強のため、言語処理100本ノック#9
(http://www.cl.ecei.tohoku.ac.jp/nlp100/#sec09)を解いています。
その中の処理の一部で、単語を引数として与えると、
「単語の先頭と末尾の文字は残し,それ以外の文字の順序をランダムに並び替える
文字列」をreturnするという関数random()を実装しようとしています。
下記の事象に陥り、試行錯誤したものの自力で脱出できなくなってしまったため、
この実装の何が問題なのかをご指摘いただきたいです。
発生している問題・エラーメッセージ
関数random()に
文字列"testtest"を与えると、1度目はちゃんと機能をするのですが、
同じ文字列をさらに与えると、2度目の処理が待ち状態になったままになってしまいます。
実行結果: tstestet <このまま待ち状態になるため強制終了...>
該当のソースコード
func random(x string) (string) { var random string = "" var random_target []string = nil var random_num []int = nil var num int = 0 var skip_flag string = "" for i := 2 ; i <= len(x)-1 ; i++ { random_target = append(random_target,x[i-1:i]) } num = rand.Intn(len(random_target)) random_num = append(random_num,num) for len(random_num) < len(random_target) { num = rand.Intn(len(random_target)-1) for i :=1 ; i <= len(random_num) ; i++ { if random_num[i-1] == num { skip_flag = "skip" } } switch skip_flag { case "skip" : skip_flag = "" default : random_num = append(random_num,num) } } for i := 1 ; i <= len(x) ; i++ { switch i { case 1,len(x) : random = random + x[i-1:i] default : random = random + random_target[random_num[i-2]] } } return random }
func main() { fmt.Print("\n") fmt.Print(random("testtest")) fmt.Print("\n") fmt.Print(random("testtest")) fmt.Print("\n") }
試したこと
3文字の文字列"tst"を与えると、2度目でも動作しました。
2度目&4文字以上の文字列のときにこの事象がおこります。
補足情報(FW/ツールのバージョンなど)
Golang のバージョンは1.10を使用しています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/06 03:45