Катя обнови решението на 26.01.2016 07:36 (преди над 2 години)
Решението с isEvolving
да направиш два отделни call-a за пресмятане на ново поколение е нож с две остриета. Да, дава възможност да не се спират едно друго. Сега имаш логически race condition при който две извиквания на evolve е възможно да пресметнат Х+1-то поколение (едно и също), но в g.generation да се запише поколение Х+2. Също така, два пъти ще сложиш isEvolving = true
, но е достатъчно само една нишка да привърши за да смени на isEvolving = false
докато първта все още работи.
По тази причина мисля да ти взема една точка т.к. теста не намира автоматично такива проблеми.
@Дойчин :) Да, това беше доста грозен, бърз и неуспешен опит да се реши тази част от условието: "Генерирането на ново поколение не трябва да "блокира" GET заявки. Двете неща трябва да се случват конкурентно. Всички заявки променящи дъската (POST), обаче, трябва да изчакат докато това се случи."
Ще ми е доста интересно да видя как това е решено във вашето решение, когато то се появи в github.
Много просто. Не е решено :) Версията която успяваше да прави това беше прекалено сложна за четене. Предпочетох да покажа по - проста, но не спазваща напълно условието версия.
Ти си единствения човек който се е опитал да спази това условие. За което: браво! Лошото е, че те е ухапало. Нямахме за цел да те накажем заради това, че си се постарала повече. Може да кача и сложното решение тази вечер.
Не се чувствам наказана. Беше добра мотивация да си подобря решението ;)
Едно предложение на Мишо доведе до много по - добро решение.