Решение на Нормализация на пътища от Йордан Пулов

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

Към профила на Йордан Пулов

Резултати

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

Код

package main
import (
"container/list"
"fmt"
"strings"
)
func parsePath(path string) string {
l := list.New()
temp := strings.Split(path, "/")
for _, val := range temp {
l.PushBack(val)
if val == ".." {
l.Remove(l.Back())
l.Remove(l.Back())
}
}
// fmt.Print(l)
var to_return string = "/"
for el := l.Front(); el != nil; el = el.Next() {
if el.Value.(string) == ""{
return to_return
}
to_return += el.Value.(string)
to_return += "/"
//fmt.Print(el.Value)
//fmt.Print("/")
//to_return = append(to_return, el.Value.(string))
//to_return = append(to_return, "/")
}
return to_return
}

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

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

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

Йордан обнови решението на 14.10.2013 08:43 (преди над 4 години)

+func parsePath(path string) string {
+
+
+ l := list.New()
+ temp := strings.Split(path , "/" )
+ for i , v := range temp {
+ l.PushBack(v)
+ if(temp [i] == ".."){
+ l.Remove(l.Back())
+ l.Remove(l.Back())
+ }
+ }
+ fmt.Print(temp)
+ var to_return string
+
+
+ for e := l.Front(); e != nil; e = e.Next() {
+ to_return += e.Value
+ to_return +="/"
+
+ }
+
+ return to_return
+
+}

Интересно решение но има няколко неща които е добре да пипнеш.

  1. Слагай package main и import-ите в началото на решението.
  2. Използвай go fmt за да да си подредиш кода преди да го предадеш.
  3. Не може да озползваш += за стрингове. Трябва да откриеш друг начин за конкатанация.

Може да пробваш да го изпълниш за да видиш грешката. http://play.golang.org/p/cqtXAVWzDC

Йордан обнови решението на 14.10.2013 09:41 (преди над 4 години)

func parsePath(path string) string {
l := list.New()
temp := strings.Split(path , "/" )
- for i , v := range temp {
- l.PushBack(v)
- if(temp [i] == ".."){
+ for _ , val := range temp {
+ l.PushBack(val)
+ if(val == ".."){
l.Remove(l.Back())
l.Remove(l.Back())
}
}
- fmt.Print(temp)
+ // fmt.Print(l)
var to_return string
- for e := l.Front(); e != nil; e = e.Next() {
- to_return += e.Value
+ for el := l.Front(); el != nil; el = el.Next() {
+ to_return += el.Value
to_return +="/"
-
- }
+
+ //fmt.Print(el.Value)
+ // fmt.Print("/")
+ }
return to_return
}

Йордан обнови решението на 14.10.2013 10:11 (преди над 4 години)

-func parsePath(path string) string {
-
+package main
+import (
+ "container/list"
+ "fmt"
+ "strings"
+)
+
+func parsePath(path string) []string {
+
l := list.New()
- temp := strings.Split(path , "/" )
- for _ , val := range temp {
- l.PushBack(val)
- if(val == ".."){
- l.Remove(l.Back())
- l.Remove(l.Back())
- }
- }
- // fmt.Print(l)
- var to_return string
-
-
+ temp := strings.Split(path, "/")
+ for _, val := range temp {
+ l.PushBack(val)
+ if val == ".." {
+ l.Remove(l.Back())
+ l.Remove(l.Back())
+ }
+ }
+ // fmt.Print(l)
+ var to_return []string
+
for el := l.Front(); el != nil; el = el.Next() {
- to_return += el.Value
- to_return +="/"
-
+ //to_return += el.Value
+ //to_return += "/"
+
//fmt.Print(el.Value)
- // fmt.Print("/")
+ //fmt.Print("/")
+ strings.Join(to_return, el.Value)
+ strings.Join(to_return, "/")
}
-
- return to_return
+
+ return to_return
}

Имам проблем при join-ването , не разпознава el.Value като стринг и се чупи там ... как да го обърна към стринг . Пробвах също и с append и там направи същият проблем EDIT : Оправих си го :)

Йордан обнови решението на 14.10.2013 10:22 (преди над 4 години)

package main
import (
"container/list"
"fmt"
"strings"
)
func parsePath(path string) []string {
l := list.New()
temp := strings.Split(path, "/")
for _, val := range temp {
l.PushBack(val)
if val == ".." {
l.Remove(l.Back())
l.Remove(l.Back())
}
}
// fmt.Print(l)
var to_return []string
for el := l.Front(); el != nil; el = el.Next() {
//to_return += el.Value
//to_return += "/"
//fmt.Print(el.Value)
//fmt.Print("/")
- strings.Join(to_return, el.Value)
- strings.Join(to_return, "/")
+ to_return = append(to_return, el.Value.(string))
+ to_return = append(to_return, "/")
}
return to_return
}

Йордан обнови решението на 14.10.2013 11:19 (преди над 4 години)

package main
import (
"container/list"
"fmt"
"strings"
)
-func parsePath(path string) []string {
+func parsePath(path string) string {
l := list.New()
temp := strings.Split(path, "/")
for _, val := range temp {
l.PushBack(val)
if val == ".." {
l.Remove(l.Back())
l.Remove(l.Back())
}
}
// fmt.Print(l)
- var to_return []string
+ var to_return string = "/"
for el := l.Front(); el != nil; el = el.Next() {
- //to_return += el.Value
- //to_return += "/"
+ if el.Value.(string) == ""{
+ return to_return
+ }
+ to_return += el.Value.(string)
+ to_return += "/"
//fmt.Print(el.Value)
//fmt.Print("/")
- to_return = append(to_return, el.Value.(string))
- to_return = append(to_return, "/")
+ //to_return = append(to_return, el.Value.(string))
+ //to_return = append(to_return, "/")
}
return to_return
}