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

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

Към профила на Мария Терзиева

Резултати

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

Код

package main
import "regexp"
func removeDirPlusDots(path string, regex string) string {
re := regexp.MustCompile(regex)
newPath := re.ReplaceAllLiteralString(path, "")
if re.MatchString(newPath) {
return removeDirPlusDots(newPath, regex)
}
return newPath
}
func checkForAndAddRoot(path string) string {
if path == "" || path[0] != '/' {
return ("/" + path)
} else {
return path
}
}
func removeDotsAndSlashes(path string) string {
re := regexp.MustCompile(`(\.\./)+|\.\.|\./`)
newPath := re.ReplaceAllLiteralString(path, "")
return newPath
}
func parsePath(path string) string {
regex := `/[^/.]+/\.\.`
regexDotsIncluded := `/[^/]+/\.\.`
return removeDotsAndSlashes(removeDirPlusDots(removeDirPlusDots(checkForAndAddRoot(path), regex), regexDotsIncluded))
}

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

PASS
ok  	_/tmp/d20131015-29033-1w8leik	0.011s
PASS
ok  	_/tmp/d20131015-29033-1w8leik	0.011s
PASS
ok  	_/tmp/d20131015-29033-1w8leik	0.011s
PASS
ok  	_/tmp/d20131015-29033-1w8leik	0.011s
PASS
ok  	_/tmp/d20131015-29033-1w8leik	0.011s
PASS
ok  	_/tmp/d20131015-29033-1w8leik	0.011s
PASS
ok  	_/tmp/d20131015-29033-1w8leik	0.011s
PASS
ok  	_/tmp/d20131015-29033-1w8leik	0.011s

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

Мария обнови решението на 15.10.2013 13:10 (преди над 4 години)

+package main
+
+import "regexp"
+
+func parsePath(path string) string {
+ re := regexp.MustCompile(`/[^/.]+/\.\.`)
+ new_path := re.ReplaceAllLiteralString(path, "")
+ switch {
+ case new_path == "/" || new_path == "./.." || new_path == ".." || new_path == "../":
+ return "/"
+ case re.FindString(new_path) != "":
+ return parsePath(new_path)
+ default:
+ return new_path
+ }
+}

Мария обнови решението на 15.10.2013 13:20 (преди над 4 години)

package main
import "regexp"
func parsePath(path string) string {
re := regexp.MustCompile(`/[^/.]+/\.\.`)
- new_path := re.ReplaceAllLiteralString(path, "")
+ newPath := re.ReplaceAllLiteralString(path, "")
switch {
- case new_path == "/" || new_path == "./.." || new_path == ".." || new_path == "../":
+ case newPath == "/" || newPath == "./.." || newPath == ".." || newPath == "../":
return "/"
- case re.FindString(new_path) != "":
- return parsePath(new_path)
+ case re.FindString(newPath) != "":
+ return parsePath(newPath)
default:
- return new_path
+ return newPath
}
}

Мария обнови решението на 15.10.2013 13:21 (преди над 4 години)

package main
import "regexp"
func parsePath(path string) string {
- re := regexp.MustCompile(`/[^/.]+/\.\.`)
+ re := regexp.MustCompile(`/[^.]+/\.\.`)
newPath := re.ReplaceAllLiteralString(path, "")
switch {
case newPath == "/" || newPath == "./.." || newPath == ".." || newPath == "../":
return "/"
case re.FindString(newPath) != "":
return parsePath(newPath)
default:
return newPath
}
}

Мария обнови решението на 15.10.2013 13:28 (преди над 4 години)

package main
import "regexp"
func parsePath(path string) string {
- re := regexp.MustCompile(`/[^.]+/\.\.`)
+ re := regexp.MustCompile(`/[^/.]+/\.\.`)
newPath := re.ReplaceAllLiteralString(path, "")
switch {
case newPath == "/" || newPath == "./.." || newPath == ".." || newPath == "../":
return "/"
case re.FindString(newPath) != "":
return parsePath(newPath)
default:
return newPath
}
}

Мария обнови решението на 15.10.2013 13:55 (преди над 4 години)

package main
import "regexp"
func parsePath(path string) string {
re := regexp.MustCompile(`/[^/.]+/\.\.`)
newPath := re.ReplaceAllLiteralString(path, "")
switch {
- case newPath == "/" || newPath == "./.." || newPath == ".." || newPath == "../":
- return "/"
- case re.FindString(newPath) != "":
- return parsePath(newPath)
- default:
- return newPath
+ case newPath == "/" || newPath == "./.." || newPath == ".." || newPath == "../":
+ return "/"
+ case re.FindString(newPath) != "":
+ return parsePath(newPath)
+ default:
+ return ("/" + newPath)
}
}

Мария обнови решението на 15.10.2013 16:00 (преди над 4 години)

package main
import "regexp"
-func parsePath(path string) string {
- re := regexp.MustCompile(`/[^/.]+/\.\.`)
+func removeDirPlusDots(path string, regex string) string {
+ re := regexp.MustCompile(regex)
newPath := re.ReplaceAllLiteralString(path, "")
- switch {
- case newPath == "/" || newPath == "./.." || newPath == ".." || newPath == "../":
- return "/"
- case re.FindString(newPath) != "":
- return parsePath(newPath)
- default:
- return ("/" + newPath)
+ if re.MatchString(newPath) {
+ return removeDirPlusDots(newPath, regex)
}
+ return newPath
+}
+
+func checkForAndAddRoot(path string) string {
+ if path == "" || path[0] != '/' {
+ return ("/" + path)
+ } else {
+ return path
+ }
+}
+
+func removeDotsAndSlashes(path string) string {
+ re := regexp.MustCompile(`(\.\./)+|\.\.|\./`)
+ newPath := re.ReplaceAllLiteralString(path, "")
+ return newPath
+}
+
+func parsePath(path string) string {
+ regex := `/[^/.]+/\.\.`
+ regexDotsIncluded := `/[^/]+/\.\.`
+ return removeDotsAndSlashes(removeDirPlusDots(removeDirPlusDots(checkForAndAddRoot(path), regex), regexDotsIncluded))
}