Решение на Нормализация на пътища от Георги Терзиев

Обратно към всички решения

Към профила на Георги Терзиев

Резултати

  • 0 точки от тестове
  • 0 бонус точки
  • 0 точки общо
  • 0 успешни тест(а)
  • 8 неуспешни тест(а)

Код

package main
import (
"fmt"
"strings"
)
func parsePath(path string) string {
pathParts := strings.Split(path, "/")
numPathParts := len(pathParts)
var resultPathParts []string
curPart := 0
if numPathParts > 0 {
if pathParts[0] == ".." || pathParts[0] == "." {
if numPathParts > 1 && pathParts[1] == ".." {
curPart++
}
curPart++
}
for ; curPart < numPathParts; curPart++ {
if pathParts[curPart] == ".." {
_, resultPathParts = resultPathParts[len(resultPathParts)-1],
resultPathParts[:len(resultPathParts)-1]
} else if pathParts[curPart] != "" {
resultPathParts = append(resultPathParts, pathParts[curPart])
}
}
}
result := "/"
for curPart = 0; curPart < len(resultPathParts); curPart++ {
result += resultPathParts[curPart] + "/"
}
return result
}

Лог от изпълнението

# _/tmp/d20131015-29033-1kkzk3w
./solution.go:4: imported and not used: "fmt"
FAIL	_/tmp/d20131015-29033-1kkzk3w [build failed]
# _/tmp/d20131015-29033-1kkzk3w
./solution.go:4: imported and not used: "fmt"
FAIL	_/tmp/d20131015-29033-1kkzk3w [build failed]
# _/tmp/d20131015-29033-1kkzk3w
./solution.go:4: imported and not used: "fmt"
FAIL	_/tmp/d20131015-29033-1kkzk3w [build failed]
# _/tmp/d20131015-29033-1kkzk3w
./solution.go:4: imported and not used: "fmt"
FAIL	_/tmp/d20131015-29033-1kkzk3w [build failed]
# _/tmp/d20131015-29033-1kkzk3w
./solution.go:4: imported and not used: "fmt"
FAIL	_/tmp/d20131015-29033-1kkzk3w [build failed]
# _/tmp/d20131015-29033-1kkzk3w
./solution.go:4: imported and not used: "fmt"
FAIL	_/tmp/d20131015-29033-1kkzk3w [build failed]
# _/tmp/d20131015-29033-1kkzk3w
./solution.go:4: imported and not used: "fmt"
FAIL	_/tmp/d20131015-29033-1kkzk3w [build failed]
# _/tmp/d20131015-29033-1kkzk3w
./solution.go:4: imported and not used: "fmt"
FAIL	_/tmp/d20131015-29033-1kkzk3w [build failed]

История (1 версия и 1 коментар)

Георги обнови решението на 15.10.2013 01:55 (преди над 4 години)

+package main
+
+import (
+ "fmt"
+ "strings"
+)
+
+func parsePath(path string) string {
+ pathParts := strings.Split(path, "/")
+ numPathParts := len(pathParts)
+ var resultPathParts []string
+ curPart := 0
+ if numPathParts > 0 {
+ if pathParts[0] == ".." || pathParts[0] == "." {
+ if numPathParts > 1 && pathParts[1] == ".." {
+ curPart++
+ }
+ curPart++
+ }
+ for ; curPart < numPathParts; curPart++ {
+ if pathParts[curPart] == ".." {
+ _, resultPathParts = resultPathParts[len(resultPathParts)-1],
+ resultPathParts[:len(resultPathParts)-1]
+ } else if pathParts[curPart] != "" {
+ resultPathParts = append(resultPathParts, pathParts[curPart])
+ }
+ }
+ }
+ result := "/"
+ for curPart = 0; curPart < len(resultPathParts); curPart++ {
+ result += resultPathParts[curPart] + "/"
+ }
+ return result
+}

Имаш интересно решение. Ползването на външен итератор е готино но прави кода по-труден за четене. Добре ще е, ако намериш начин да го обединиш с for-а и да си ползваш локален итератор. Другия ми коментар е относно цикъла, който сглобява резултата. Можеш да го заместиш с strings.Join(resultPathParts, "/").