Решение на Log Parsing от Йосиф Цветков
Резултати
- 10 точки от тестове
- 0 бонус точки
- 10 точки общо
- 10 успешни тест(а)
- 0 неуспешни тест(а)
Код
Лог от изпълнението
PASS ok _/tmp/d20141023-10368-1bcmc9o 0.014s PASS ok _/tmp/d20141023-10368-1bcmc9o 0.016s PASS ok _/tmp/d20141023-10368-1bcmc9o 0.012s PASS ok _/tmp/d20141023-10368-1bcmc9o 0.011s PASS ok _/tmp/d20141023-10368-1bcmc9o 0.011s PASS ok _/tmp/d20141023-10368-1bcmc9o 0.011s PASS ok _/tmp/d20141023-10368-1bcmc9o 0.011s PASS ok _/tmp/d20141023-10368-1bcmc9o 0.011s PASS ok _/tmp/d20141023-10368-1bcmc9o 0.011s PASS ok _/tmp/d20141023-10368-1bcmc9o 0.011s
История (11 версии и 12 коментара)
Йосиф обнови решението на 15.10.2014 13:57 (преди над 3 години)
Йосиф обнови решението на 15.10.2014 13:59 (преди над 3 години)
Много добре, ама малко си попретупал нещата накрая. Фокусирай се върху имплементацията си на All
и намери грешката :)
Йосиф обнови решението на 16.10.2014 02:41 (преди над 3 години)
Ярък пример че copy-paste техниките са опасни, особено в ръцете на полузаспали хора.
Факт. Сега е супер :)
Йосиф обнови решението на 17.10.2014 19:30 (преди над 3 години)
изтича памет ... памет .... изтича ...
Прочети условието за
Reduce
- най-вече добавената част :).
това също
Йосиф обнови решението на 17.10.2014 21:07 (преди над 3 години)
Под изтича памет предполагам че говориш за случаите когато се подаде празен слайс на Map или Filter и се връща nil, а не празен слайс - нещо което не бях съобразил.
Йосиф обнови решението на 17.10.2014 21:17 (преди над 3 години)
Проблем ли ще е ако ползвам някои от тези функции в настоящето предизвикателство ? По-точно, ползвам функциите Map и Filter.
Стига да си ги имплеметираш и там. Можете да ползвате цялата стандартна библиотека и каквото вие си напишете.
Относно решението ти:
- Хитър
Reduce
- В
Map
иFilter
се правят ненужно количество копирания на масиви.
Йосиф обнови решението на 18.10.2014 21:36 (преди над 3 години)
Сега вече не би трябвало да има memory leak/неграмотно ползване на ресурси.
Относно Reduce, беше готин(ако не друго, беше кратък) но е некоректен.
input := []string{"", "12"}
expected := "12aa"
strangeConcat := func(s1, s2 string) string {
return s1 + s1 + s2 + "aa"
}
result := Reduce(input, strangeConcat)
В този случай result има стойност "аааа12аа" а не коректното "12аа" и затова съм пренаписал Reduce по толкова не-готин начин. Ще се помъча още (може някоя рекурсия да помогне) но едва ли ще измисля 3-редова реализация която да върви във всички случаи.
Йосиф обнови решението на 18.10.2014 22:21 (преди над 3 години)
Защо смяташ че
Reduce
-а трябва да комбинира началния си аргумент ако няма други ?Върни
Filter
-а да е с len(data) - в добрия случай няма никаква разлика в лошия случай заделяш повече памет отколкото може да ти потрябва.
Йосиф обнови решението на 20.10.2014 16:05 (преди над 3 години)
Защо смяташ че Reduce
-а трябва да комбинира началния си аргумент ако няма други ?
Главно защото на Reduce
се подава функция на два аргумента, като в тази функция всеки аргумент може да бъде модифициран, като например в:
strangeConcat := func(s1, s2 string) string {
return s1 + "ala" + s2 + "bala"
}
и прецених че така е по-логично(поне за мен). Но след като го спомена и като прочетох "За начална стойност ползвайте първата стойност от масива." явно ще връщам първия(и единствен) елемент на слайса.
Върни Filter
-а да е с len(data) - в добрия случай няма никаква разлика в лошия случай заделяш повече памет отколкото може да ти потрябва.
Грешно ли ще е ако оставя Filter както си е понеже ако заменя filtered := make([]string, 0, cap(data))
със filtered := make([]string, len(data))
, то почват да ми се "чупят" тестове, по-специално TestFilterWithFalse
и TestFilterWithTrue
, тестове споделени с курса от Иван Боршуков? Доколкото разбирам, filtered := make([]string, len(data))
ми инициализира слайса със празни стрингове и това омазва всичко.
Това е добре.
Имах впредвид make([]string, 0, len(data))
- вслучай че ти подам слайс с един елемент но с капацитет 1000 няма да заделяш значително повече памет отколкото ти трябва :).