Решение на Game of Life от Ралица Великова
Към профила на Ралица Великова
Резултати
- 10 точки от тестове
- 0 бонус точки
- 10 точки общо
- 14 успешни тест(а)
- 0 неуспешни тест(а)
Код
Лог от изпълнението
PASS ok _/tmp/d20160126-5892-1qpvw0v 0.004s PASS ok _/tmp/d20160126-5892-1qpvw0v 0.004s PASS ok _/tmp/d20160126-5892-1qpvw0v 0.006s PASS ok _/tmp/d20160126-5892-1qpvw0v 0.008s PASS ok _/tmp/d20160126-5892-1qpvw0v 0.007s PASS ok _/tmp/d20160126-5892-1qpvw0v 0.006s PASS ok _/tmp/d20160126-5892-1qpvw0v 0.006s PASS ok _/tmp/d20160126-5892-1qpvw0v 0.009s PASS ok _/tmp/d20160126-5892-1qpvw0v 0.006s PASS ok _/tmp/d20160126-5892-1qpvw0v 0.009s PASS ok _/tmp/d20160126-5892-1qpvw0v 0.010s PASS ok _/tmp/d20160126-5892-1qpvw0v 0.017s PASS ok _/tmp/d20160126-5892-1qpvw0v 0.015s PASS ok _/tmp/d20160126-5892-1qpvw0v 0.226s
История (7 версии и 5 коментара)
Ралица обнови решението на 23.01.2016 19:57 (преди над 2 години)
Хубаво решение. Виждам, че обичаш да си написваш нещата сама. Това е хубаво, защото се научаваш да имаш пълен контрол и да не разчиташ на магически библиотеки. Справила си се с тези неща без грешка. Но сега може да направиш следващата стъпка и да започнеш да използваш полезните неща от стандартната библиотека на Go, за които вече знаеш един възможен вариант за имплементация. А дори и можеш да сравниш твоя подход с тяхния.
Мисля, че ще намериш документацията на http.Request интересна, особено в часта където се говори за .Form
.
Пробвай да изпратиш JSON за добавяне на живи клетки, който не е съвсем по условието. Например [{"x": 5}]
. Изобщо, съвета ми е да не работиш с map-ове, когато сериализираш и десиарилираш JSON-и. Виждам, че използваш изключително този метод и на всички други места. Вършиш много повече работа и е възможно да сгрешиш. Вероятно ти отнема и повече време да го напишеш.
Регулярните изрази, които си използвала за намиране на пътя са напълно вярни. Решават проблема, бих казал, твърде добре. Разглеждала ли си възможноста за по - просто решение проблема който решават. Например http.ServeMux?
Намерих и едно нещо, за което може би сме те подвели с не съвсем пълно условие. NewGameOfLifeHandler
трябва просто да върне нот http.Handler
, но не и да го "закача". Ако се извика няколко пъти NewGameOfLifeHandler
ще се получи няколко закачания за пътя "/", което е грешно.
В допълнителните пояснения говорим за конкурентност. Разгледай кода си за критични секции. Знай, че http сървърите на go най - често пускат отделна го рутина за всеки рикуест.
Само тъжно, че остава доста малко време да се занимаваш със задачата.
Edit: разгледай и върнатите статус кодове за различните случаи. Най - добре си напиши прост тест, гледайки условието.
Ралица обнови решението на 24.01.2016 17:05 (преди над 2 години)
Ралица обнови решението на 24.01.2016 17:43 (преди над 2 години)
Ралица обнови решението на 25.01.2016 01:16 (преди над 2 години)
За handle се усетих днес, но преправях още. Така как е? (освен че http.ServeMux остава за разглеждане)
Тръгнала си по правилния път, но все още има останали race condition-и. Знай, че писането и четенето от един и същи map в две различни go рутини също е проблем. В долния пример има race condition:
go routine 1:
g.Board[cell] = false
go routine 2:
if g.Board[cell] { ... }
Например (но не само), извикването на updateNeighbours
трябва да е защитено с подходящия mutex. Има шансове решението ти да не мине някои тестове заради това.
Според мен ще искаш да получиш възможно най - много точки след като си се справила с трудната част. Има няколко прости неща, заради които няма да ти минат всички тестове. Това са върнатите статус кодовете и една възможност за паника. Прочети допълнителните поясненията, както и тези под всеки индивидуален endpoint. Разгледай и addNewCells
. Има случаи, в които ще гръмне.
Edit: Обърни внимание и на updateNeighbours
. Не съм сигурен, че прави това което искаш да прави. Пробвай я върху клетка която няма никакви съседи.
Видях, къде - какво съм омазала. Thanks :-)
Значи правилно съм разбрал какво трябва да прави updateNeighbours
. Напиши си елементарен тест за нея. Викни я за някоя клетка и след това провери дали всичките ѝ съседи са с правилно променени числа.
Пробвай да добавиш една и съща клетка няколко пъти по HTTP. Става ли нещо странно?
И накрая да се потретя. Обърни внимание на върнатите статус кодове. Ще е жалко заради тях да не ти минат много тестове.