{"id":345843,"date":"2023-02-24T15:02:06","date_gmt":"2023-02-24T15:02:06","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=345843"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=345843","title":{"rendered":"<span>\u041a\u0430\u043a \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c time2market \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e coding kata?<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041e\u0434\u043d\u0430\u0436\u0434\u044b \u0432 \u043c\u043e\u0435 \u043f\u043e\u043b\u0435 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u043f\u0430\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0437\u0430\u043a\u0430\u0437\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0431\u0435\u0437\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u044b\u0442\u0430\u043b\u0430\u0441\u044c \u0441\u0434\u0430\u0442\u044c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u043b\u0435\u0442. \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0434\u0430\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u043a\u043e\u043b\u043e 5% \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0441\u0434\u0430\u0447\u0430 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0435\u0443\u0434\u0430\u0447\u0430\u043c\u0438 \u0442\u043e \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u043f\u0440\u0438\u0435\u043c\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u043e\u043c, \u0442\u043e \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0440\u044b\u0432\u0430\u043b\u0438 \u0441\u0440\u043e\u043a\u0438 \u043f\u0440\u0438 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u0434.<\/p>\n<p>\u0417\u0430 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430.<\/p>\n<p>\u0410\u0443\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f time2market (\u0441\u0440\u043e\u043a\u043e\u0432 \u043e\u0442 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0434\u0435\u0438 \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435) \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043d\u0430 \u0442\u0440\u0435\u0445 \u0441\u0442\u0430\u0434\u0438\u044f\u0445:<\/p>\n<ul>\n<li>\n<p>\u0434\u043e\u043b\u0433\u043e \u0432\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0434<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u043b\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0440\u0443\u0447\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <\/p>\n<\/li>\n<li>\n<p>\u0447\u0430\u0441\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0443<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0435\u0440\u0432\u043e\u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u043d\u0438\u0437\u043a\u043e\u0433\u043e time2market \u044f\u0432\u043b\u044f\u043b\u043e\u0441\u044c \u0442\u043e, \u0447\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0435 \u0432\u043b\u0430\u0434\u0435\u043b\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 coding kata, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 &#171;<a href=\"https:\/\/codingdojo.org\/kata\/gilded-rose\/\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0437\u043e\u043b\u043e\u0447\u0435\u043d\u043d\u0430\u044f \u0440\u043e\u0437\u0430<\/a>&#171;. <\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0432 \u0443\u0437\u043a\u0438\u0445 \u043a\u0440\u0443\u0433\u0430\u0445. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0443 \u043d\u0435\u0435 \u043d\u0435\u0442. \u041d\u0438\u0436\u0435 \u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0441\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0433\u043e \u0442\u044c\u044e\u0442\u043e\u0440\u0438\u0430\u043b\u0430. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0442\u044c\u044e\u0442\u043e\u0440\u0438\u0430\u043b \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c, \u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0434\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0435\u043c\u043e\u0432, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f 95% \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0432\u044b\u0448\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0430 \u0438 \u0441\u0434\u0430\u043b\u0430 \u0437\u0430 6 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0445 48 \u043b\u0435\u0442, \u0447\u0442\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044e time2market \u0432 96 \u0440\u0430\u0437.<\/p>\n<h2>\u041f\u043e\u0437\u043e\u043b\u043e\u0447\u0435\u043d\u043d\u0430\u044f \u0440\u043e\u0437\u0430: \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u043b\u044f coding kata<\/h2>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442 \u0438 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 Gilded Rose. \u041a\u0430\u043a \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u043c\u044b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0433\u043e\u0441\u0442\u0438\u043d\u0438\u0446\u0430 \u0432 \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c \u0433\u043e\u0440\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u043d\u044b\u0439 \u0442\u0440\u0430\u043a\u0442\u0438\u0440\u0449\u0438\u043a \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u042d\u043b\u043b\u0438\u0441\u043e\u043d. \u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043a\u0443\u043f\u0430\u0435\u043c \u0438 \u043f\u0440\u043e\u0434\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0443\u0447\u0448\u0438\u0435 \u0442\u043e\u0432\u0430\u0440\u044b. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0448\u0438\u0445 \u0442\u043e\u0432\u0430\u0440\u043e\u0432 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u0441\u0440\u043e\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0448 \u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044c \u0434\u043b\u044f \u043d\u0430\u0441. \u041e\u043d \u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u041b\u0438\u0440\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0448\u0435\u043b \u043a \u043d\u043e\u0432\u044b\u043c \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c. \u0412\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043d\u0430\u0448\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0442\u043e\u0432\u0430\u0440\u043e\u0432. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043d\u0430\u0448\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443:<\/p>\n<ul>\n<li>\n<p>\u0412\u0441\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#171;\u043f\u0440\u043e\u0434\u0430\u0442\u044c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435&#187; (sell_in), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u043d\u0435\u0439, \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0434\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u043c\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 (quality), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043d\u0435\u043d \u043f\u0440\u0435\u0434\u043c\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u043d\u044f \u043d\u0430\u0448\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043e\u0431\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043f\u0440\u0430\u0432\u0434\u0430? \u041d\u0443 \u0432\u043e\u0442 \u0442\u0443\u0442 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u043e\u043a \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u0438\u0441\u0442\u0435\u043a, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c<\/p>\n<\/li>\n<li>\n<p>\u00ab\u0412\u044b\u0434\u0435\u0440\u0436\u0430\u043d\u043d\u044b\u0439 \u0431\u0440\u0438\u00bb (Aged Brie) \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0435 \u043e\u043d \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 50.<\/p>\n<\/li>\n<li>\n<p>&#171;Sulfuras&#187;, \u0431\u0443\u0434\u0443\u0447\u0438 \u043b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u043c, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430.<\/p>\n<\/li>\n<li>\n<p>\u00ab\u041f\u0440\u043e\u0445\u043e\u0434\u044b \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b\u00bb (Backstage passes to a TAFKAL80ETC concert), \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u043d\u043d\u044b\u0439 \u0431\u0440\u0438 (Aged Brie), \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f sell_in: \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 2, \u0435\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c 10 \u0434\u043d\u0435\u0439 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435, \u0438 \u043d\u0430 3, \u0435\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c 5 \u0434\u043d\u0435\u0439 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0446\u0435\u0440\u0442\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u0434\u043e 0.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u043c\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0434\u043e\u0433\u043e\u0432\u043e\u0440 \u0441 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u043e\u043c \u043a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u0438\u0445 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u00ab\u0421\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0445\u00bb (Conjured) \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432 \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0443 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043c\u0435\u0442\u043e\u0434 update_quality \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434, \u043f\u043e\u043a\u0430 \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u043a\u043b\u0430\u0441\u0441 Item \u0438\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e items, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u0433\u043e\u0431\u043b\u0438\u043d\u0443 \u0432 \u0443\u0433\u043b\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043f\u0430\u0434\u0435\u0442 \u043d\u0430 \u0432\u0430\u0441 \u0438 \u0443\u0431\u044c\u0435\u0442 \u0432\u0430\u0441 \u043e\u0434\u043d\u0438\u043c \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u043e\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u043d\u0435 \u0432\u0435\u0440\u0438\u0442 \u0432 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0435 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u043e\u043c (\u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 update_quality \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e items \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435, \u043c\u044b \u0432\u0430\u0441 \u043f\u0440\u0438\u043a\u0440\u043e\u0435\u043c).<\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434: <a href=\"https:\/\/github.com\/emilybache\/GildedRose-Refactoring-Kata\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/emilybache\/GildedRose-Refactoring-Kata<\/a><\/p>\n<pre><code class=\"python\">#gilded_rose.py  class GildedRose(object):      def __init__(self, items):         self.items = items      def update_quality(self):         for item in self.items:             if item.name != \"Aged Brie\" and item.name != \"Backstage passes to a TAFKAL80ETC concert\":                 if item.quality > 0:                     if item.name != \"Sulfuras, Hand of Ragnaros\":                         item.quality = item.quality - 1             else:                 if item.quality &lt; 50:                     item.quality = item.quality + 1                     if item.name == \"Backstage passes to a TAFKAL80ETC concert\":                         if item.sell_in &lt; 11:                             if item.quality &lt; 50:                                 item.quality = item.quality + 1                         if item.sell_in &lt; 6:                             if item.quality &lt; 50:                                 item.quality = item.quality + 1             if item.name != \"Sulfuras, Hand of Ragnaros\":                 item.sell_in = item.sell_in - 1             if item.sell_in &lt; 0:                 if item.name != \"Aged Brie\":                     if item.name != \"Backstage passes to a TAFKAL80ETC concert\":                         if item.quality > 0:                             if item.name != \"Sulfuras, Hand of Ragnaros\":                                 item.quality = item.quality - 1                     else:                         item.quality = item.quality - item.quality                 else:                     if item.quality &lt; 50:                         item.quality = item.quality + 1   class Item:     def __init__(self, name, sell_in, quality):         self.name = name         self.sell_in = sell_in         self.quality = quality      def __repr__(self):         return \"%s, %s, %s\" % (self.name, self.sell_in, self.quality)<\/code><\/pre>\n<pre><code class=\"python\">#texttest_fixture.py  from __future__ import print_function  from gilded_rose import *  if __name__ == \"__main__\":     print (\"OMGHAI!\")     items = [              Item(name=\"+5 Dexterity Vest\", sell_in=10, quality=20),              Item(name=\"Aged Brie\", sell_in=2, quality=0),              Item(name=\"Elixir of the Mongoose\", sell_in=5, quality=7),              Item(name=\"Sulfuras, Hand of Ragnaros\", sell_in=0, quality=80),              Item(name=\"Sulfuras, Hand of Ragnaros\", sell_in=-1, quality=80),              Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=15, quality=20),              Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=10, quality=49),              Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=5, quality=49),              Item(name=\"Conjured Mana Cake\", sell_in=3, quality=6),  # &lt;-- :O             ]      days = 2     import sys     if len(sys.argv) > 1:         days = int(sys.argv[1]) + 1     for day in range(days):         print(\"-------- day %s --------\" % day)         print(\"name, sellIn, quality\")         for item in items:             print(item)         print(\"\")         GildedRose(items).update_quality()<\/code><\/pre>\n<h2>\u041f\u0440\u043e\u0432\u0435\u0434\u0438\u0442\u0435 \u0430\u0443\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f time2market<\/h2>\n<p>\u0423 \u0412\u0430\u0441 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u044c\u0442\u0435\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0432\u044c\u044e \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/p>\n<\/li>\n<li>\n<p>\u0442\u0435\u0441\u0442\u044b <\/p>\n<\/li>\n<\/ul>\n<h3>\u0410\u0443\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 1\/4. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f time2market<\/h3>\n<p>\u0418\u0437\u0443\u0447\u0438\u0442\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043e \u0441\u043b\u0430\u0431\u044b\u0445 \u0438 \u0441\u0438\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f time2market.<\/p>\n<p><strong>\u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u0432\u043e\u0435 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435<\/strong>: \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043c\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c\u0438, \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u0437\u0430\u043d\u044f\u043b\u043e \u043c\u0435\u043d\u0435\u0435 \u043c\u0438\u043d\u0443\u0442\u044b. \u0412\u043e\u0437\u043d\u0438\u043a \u0432\u043e\u043f\u0440\u043e\u0441 \u043a\u0430\u043a \u043f\u043e\u043c\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u0438 \u044f \u0432\u044b\u0434\u0432\u0438\u043d\u0443\u043b \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0443, \u0447\u0442\u043e \u0441\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 &#171;Conjured &#187; \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0443 \u044f \u043d\u0435 \u0441\u043c\u043e\u0433, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u044f\u043b \u0435\u0435 \u043d\u0430 \u0432\u0435\u0440\u0443.<\/p>\n<h3>\u0410\u0443\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 2\/4. \u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f time2market<\/h3>\n<p>\u0418\u0437\u0443\u0447\u0438\u0442\u0435 \u043a\u043e\u0434 \u0432 \u0444\u0430\u0439\u043b\u0435 gilded_rose.py \u0438 \u0437\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043e \u0441\u043b\u0430\u0431\u044b\u0445 \u0438 \u0441\u0438\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u0445 \u043a\u043e\u0434\u0430 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f time2market.<\/p>\n<pre><code class=\"python\">#gilded_rose.py  class GildedRose(object):        ...        def update_quality(self):         for item in self.items:             if item.name != \"Aged Brie\" and item.name != \"Backstage passes to a TAFKAL80ETC concert\":                 if item.quality > 0:                     if item.name != \"Sulfuras, Hand of Ragnaros\":                         item.quality = item.quality - 1             else:                 if item.quality &lt; 50:                     item.quality = item.quality + 1                     if item.name == \"Backstage passes to a TAFKAL80ETC concert\":                         if item.sell_in &lt; 11:                             if item.quality &lt; 50:                                 item.quality = item.quality + 1                         if item.sell_in &lt; 6:                             if item.quality &lt; 50:                                 item.quality = item.quality + 1             if item.name != \"Sulfuras, Hand of Ragnaros\":                 item.sell_in = item.sell_in - 1             if item.sell_in &lt; 0:                 if item.name != \"Aged Brie\":                     if item.name != \"Backstage passes to a TAFKAL80ETC concert\":                         if item.quality > 0:                             if item.name != \"Sulfuras, Hand of Ragnaros\":                                 item.quality = item.quality - 1                     else:                         item.quality = item.quality - item.quality                 else:                     if item.quality &lt; 50:                         item.quality = item.quality + 1      ...<\/code><\/pre>\n<p><strong>\u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u0432\u043e\u0435 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435<\/strong>: \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 update_quality \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043c\u0435\u043d\u0435\u0435 28 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430. \u041a\u043e\u0434 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043c\u043d\u0435 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u043c. \u041b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u043e, \u0447\u0442\u043e \u0441\u043b\u043e\u0432\u0430 &#171;\u043f\u0443\u0442\u0430\u0442\u044c&#187; \u0438 &#171;\u043f\u0443\u0442\u044c&#187; \u0432 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u043f\u043e\u0445\u043e\u0436\u0438 (\u0445\u043e\u0442\u044f \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043d\u0443\u044e \u044d\u0442\u0438\u043c\u043e\u043b\u043e\u0433\u0438\u044e). <\/p>\n<p>\u0414\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0443\u0442\u0435\u0439 \u0432 \u043a\u043e\u0434\u0435 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0446\u0438\u043a\u043b\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0430\u043a\u0435\u0442 radon (<a href=\"https:\/\/radon.readthedocs.io\/en\/latest\/commandline.html\" rel=\"noopener noreferrer nofollow\">https:\/\/radon.readthedocs.io\/en\/latest\/commandline.html<\/a>) \u0438 \u0437\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0430.<\/p>\n<pre><code class=\"bash\">$ pip install radon $ radon cc -s gilded_rose.py   gilded_rose.py     M 8:4 GildedRose.update_quality - C (19)     C 3:0 GildedRose - C (11)     C 39:0 Item - A (2)     M 5:4 GildedRose.__init__ - A (1)     M 40:4 Item.__init__ - A (1)     M 45:4 Item.__repr__ - A (1)<\/code><\/pre>\n<p><strong>\u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u0432\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435<\/strong>: \u043c\u0435\u0442\u043e\u0434 update_quality \u0438\u043c\u0435\u0435\u0442 \u0446\u0438\u043a\u043b\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c 19 \u0435\u0434\u0438\u043d\u0438\u0446, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 19 \u043f\u0443\u0442\u0435\u0439, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u0412 \u043c\u043e\u044e \u0433\u043e\u043b\u043e\u0432\u0443 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f 5 \u043f\u0443\u0442\u0435\u0439 \u0438 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0439.  <\/p>\n<p>\u0412\u0430\u0436\u043d\u043e: \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u0446\u0438\u043a\u043b\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u0434\u0430\u0435\u0442 \u043b\u043e\u0436\u043d\u043e\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u043c \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u043a\u043e\u0434\u0435. \u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0439\u0442\u0435 \u0442\u0430\u043a\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0438.<\/p>\n<p>\u0417\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u043a\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0412\u044b \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b\u0438 \u043d\u0430 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430. \u0423 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043e\u043a\u043e\u043b\u043e 20 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<h3>\u0410\u0443\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 3\/4. \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f time2market<\/h3>\n<p>\u0418\u0437\u0443\u0447\u0438\u0442\u0435 \u043a\u043e\u0434 \u0432 \u0444\u0430\u0439\u043b\u0435 texttest_fixture.py \u0438 \u0437\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043e \u0441\u043b\u0430\u0431\u044b\u0445 \u0438 \u0441\u0438\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u0445 \u043a\u043e\u0434\u0430 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f time2market.<\/p>\n<pre><code class=\"python\">#texttest_fixture.py  from __future__ import print_function  from gilded_rose import *  if __name__ == \"__main__\":     print (\"OMGHAI!\")     items = [              Item(name=\"+5 Dexterity Vest\", sell_in=10, quality=20),              Item(name=\"Aged Brie\", sell_in=2, quality=0),              Item(name=\"Elixir of the Mongoose\", sell_in=5, quality=7),              Item(name=\"Sulfuras, Hand of Ragnaros\", sell_in=0, quality=80),              Item(name=\"Sulfuras, Hand of Ragnaros\", sell_in=-1, quality=80),              Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=15, quality=20),              Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=10, quality=49),              Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=5, quality=49),              Item(name=\"Conjured Mana Cake\", sell_in=3, quality=6),  # &lt;-- :O             ]      days = 2     import sys     if len(sys.argv) > 1:         days = int(sys.argv[1]) + 1     for day in range(days):         print(\"-------- day %s --------\" % day)         print(\"name, sellIn, quality\")         for item in items:             print(item)         print(\"\")         GildedRose(items).update_quality() <\/code><\/pre>\n<p><strong>\u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u0432\u043e\u0435 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435<\/strong>: \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u043d\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 &#8212; \u0442\u043e \u0435\u0441\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430. \u0412 \u0444\u0430\u0439\u043b\u0435 \u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u043e\u0432, \u043d\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430. \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u0435\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438. \u042d\u0442\u0430 \u0440\u0443\u0447\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 time2market.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0442\u0435\u0441\u0442, \u0438\u0437\u0443\u0447\u0438\u0442\u0435 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u0434\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"bash\">$ python texttest_fixture.py    OMGHAI! -------- day 0 -------- name, sellIn, quality +5 Dexterity Vest, 10, 20 Aged Brie, 2, 0 Elixir of the Mongoose, 5, 7 Sulfuras, Hand of Ragnaros, 0, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 15, 20 Backstage passes to a TAFKAL80ETC concert, 10, 49 Backstage passes to a TAFKAL80ETC concert, 5, 49 Conjured Mana Cake, 3, 6  -------- day 1 -------- name, sellIn, quality +5 Dexterity Vest, 9, 19 Aged Brie, 1, 1 Elixir of the Mongoose, 4, 6 Sulfuras, Hand of Ragnaros, 0, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 14, 21 Backstage passes to a TAFKAL80ETC concert, 9, 50 Backstage passes to a TAFKAL80ETC concert, 4, 50 Conjured Mana Cake, 2, 5<\/code><\/pre>\n<p><strong>\u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0435 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435<\/strong>: \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u0442 2 \u0434\u043d\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0434\u043b\u044f \u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044f \u0438\u0437 9 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432  \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0443 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c 54 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0438\u043a\u0441\u0438\u0440\u0430 \u043c\u0430\u043d\u0433\u0443\u0441\u0442\u0430 \u043d\u0435 \u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0438\u0436\u0435 \u043d\u0443\u043b\u044f, \u043d\u0443\u0436\u043d\u043e \u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c 8 \u0434\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u043a\u0440\u0430\u0442\u043d\u043e\u043c\u0443 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430. \u0411\u044b\u043b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u0441\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0438\u0440\u043e\u0436\u043d\u043e\u0433\u043e \u043c\u0430\u043d\u044b &#8212; \u0435\u0433\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0431\u044b\u0432\u0430\u043b\u043e \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0435\u0434\u0438\u043d\u0438\u0446\u0435 \u0432 \u0434\u0435\u043d\u044c, \u0430 \u043d\u0435 \u043f\u043e \u0434\u0432\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0432 \u0434\u0435\u043d\u044c \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u0445. <\/p>\n<p>\u0417\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u043a\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0412\u044b \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b\u0438 \u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442\u043e\u0432. \u0423 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043e\u043a\u043e\u043b\u043e 10 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<h2>\u0410\u0443\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 4\/4. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438\u0438 \u043f\u043e \u0438\u0442\u043e\u0433\u0430\u043c \u0430\u0443\u0434\u0438\u0442\u0430 \u0441 \u0446\u0435\u043b\u044c\u044e \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f time2market<\/h2>\n<p>\u0417\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u0438\u0442\u043e\u0433\u0443 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p><strong>\u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u0441\u0432\u043e\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438:<\/strong><\/p>\n<ol>\n<li>\n<p>\u0414\u043b\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f time2market \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u043e\u0434\u0430 update_quality \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c\u0438 SOLID <\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f time2market \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438: \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0446\u0438\u043a\u043b\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u0434\u043e 5.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f time2market \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: <\/p>\n<p>3.1 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u044b \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439<\/p>\n<p>3.2 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 <\/p>\n<p>3.3 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043a\u043e\u0434\u0430 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c 90%<\/p>\n<\/li>\n<\/ol>\n<h2>\u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u043e\u0434\u0430 1\/4. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432<\/h2>\n<p>\u041f\u0440\u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043e \u043d\u0430 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u043e\u043d\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0447\u043d\u0438\u0442\u0435 \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u043e\u0432. \u0414\u043e\u0431\u0435\u0439\u0442\u0435\u0441\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043e\u0442\u043f\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430.<\/p>\n<p>\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043a\u043e\u0434 \u0432 test_gilded_rose.py \u043d\u0430 \u043a\u043e\u0434 \u0438\u0437 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043d\u0438\u0436\u0435.<\/p>\n<pre><code class=\"python\">#test_gilded_rose.py  import pytest  def test_item_has_sell_in_attribute():     \"\"\"     \u0412\u0441\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \"\u043f\u0440\u043e\u0434\u0430\u0442\u044c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\" (sell_in), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u043d\u0435\u0439, \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0434\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u043c\u0435\u0442.     \"\"\"     item = Item(name=\"Foo\", sell_in=10, quality=1)     assert item.sell_in == 10  def test_item_has_quality_attribute():     \"\"\"     \u0412\u0441\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 (quality), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043d\u0435\u043d \u043f\u0440\u0435\u0434\u043c\u0435\u0442.     \"\"\"     item = Item(name=\"Foo\", sell_in=10, quality=1)     assert item.quality == 1  def test_system_decreases_quality_every_day():     \"\"\"     \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u043d\u044f \u043d\u0430\u0448\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043e\u0431\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.     \"\"\"     items = [Item(name=\"+5 Dexterity Vest\", sell_in=10, quality=1),]     GildedRose(items).update_quality()     assert items[0].sell_in == 9     assert items[0].quality == 0<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0442\u0435\u0441\u0442\u044b \u0441 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0434\u0430.<\/p>\n<pre><code class=\"bash\">$ pip install pytest $ pip install coverage  $ coverage run -m pytest test_gilded_rose.py &amp;&amp; coverage report    ========================================================================== test session starts ========================================================================== platform darwin -- Python 3.10.9, pytest-7.2.1, pluggy-1.0.0 rootdir: \/Users\/vmihaylov\/PycharmProjects\/GildedRose-Refactoring-Kata\/python collected 3 items                                                                                                                                                         test_gilded_rose.py ...                                                                                                                                           [100%]  =========================================================================== 3 passed in 0.00s =========================================================================== Name                  Stmts   Miss  Cover ----------------------------------------- gilded_rose.py           36     18    50% test_gilded_rose.py      13      0   100% ----------------------------------------- TOTAL                    49     18    63%<\/code><\/pre>\n<p>\u041f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043a\u043e\u0434\u0430 gilded_rose.py \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e 50%.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"python\">#test_gilded_rose.py  def test_when_sell_in_expired_quality_decreases_twice_as_fast():     \"\"\"     \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u043e\u043a \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u0438\u0441\u0442\u0435\u043a, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.     \"\"\"     items = [Item(name=\"+5 Dexterity Vest\", sell_in=0, quality=10),]     GildedRose(items).update_quality()     assert items[0].sell_in == -1     assert items[0].quality == 8  def test_quality_never_becomes_negative():     \"\"\"     \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c     \"\"\"     items = [Item(name=\"+5 Dexterity Vest\", sell_in=1, quality=0),]     GildedRose(items).update_quality()     assert items[0].sell_in == 0     assert items[0].quality == 0  def test_aged_brie_becomes_better_after_sell_in():     \"\"\"     \u00ab\u0412\u044b\u0434\u0435\u0440\u0436\u0430\u043d\u043d\u044b\u0439 \u0431\u0440\u0438\u00bb (Aged Brie) \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0435 \u043e\u043d \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f.     \"\"\"     items = [Item(name=\"Aged Brie\", sell_in=10, quality=1),]     GildedRose(items).update_quality()     assert items[0].sell_in == 9     assert items[0].quality == 2  def test_item_quality_never_exceeds_50():     \"\"\"     \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 50.     \"\"\"     items = [Item(name=\"Aged Brie\", sell_in=10, quality=50),]     GildedRose(items).update_quality()     assert items[0].sell_in == 9     assert items[0].quality == 50  def test_sulfuras_never_sells_in_and_never_looses_quality():     \"\"\"     \"Sulfuras\", \u0431\u0443\u0434\u0443\u0447\u0438 \u043b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u043c, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430.     \"\"\"     items = [Item(name=\"Sulfuras, Hand of Ragnaros\", sell_in=10, quality=80),]     GildedRose(items).update_quality()     assert items[0].sell_in == 10     assert items[0].quality == 80  def test_backstage_passes_increase_quality_by_2_if_10_to_6_days_left():     \"\"\"     \u00ab\u041f\u0440\u043e\u0445\u043e\u0434\u044b \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b\u00bb (Backstage passes to a TAFKAL80ETC concert) \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f sell_in: \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 2, \u0435\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c 10 \u0434\u043d\u0435\u0439 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435.     \"\"\"     items = [Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=10, quality=6),]     GildedRose(items).update_quality()     assert items[0].sell_in == 9     assert items[0].quality == 8  def test_backstage_passes_increase_quality_by_3_if_5_to_1_days_left():     \"\"\"     \u00ab\u041f\u0440\u043e\u0445\u043e\u0434\u044b \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b\u00bb (Backstage passes to a TAFKAL80ETC concert), \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f sell_in: \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 3, \u0435\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c 5 \u0434\u043d\u0435\u0439 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435.     \"\"\"     items = [Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=5, quality=7),]     GildedRose(items).update_quality()     assert items[0].sell_in == 5     assert items[0].quality == 10  def test_backstage_passes_increase_quality_by_3_if_5_to_1_days_left():     \"\"\"     \u00ab\u041f\u0440\u043e\u0445\u043e\u0434\u044b \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b\u00bb (Backstage passes to a TAFKAL80ETC concert), \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0446\u0435\u0440\u0442\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u0434\u043e 0.     \"\"\"     items = [Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=0, quality=7),]     GildedRose(items).update_quality()     assert items[0].sell_in == -1     assert items[0].quality == 0<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0442\u0435\u0441\u0442\u044b \u0435\u0449\u0435 \u0440\u0430\u0437 \u0438 \u0438\u0437\u043c\u0435\u0440\u044c\u0442\u0435 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043a\u043e\u0434\u0430 gilded_rose.py \u0442\u0435\u0441\u0442\u0430\u043c\u0438.<\/p>\n<pre><code class=\"python\">python % coverage run -m pytest test_gilded_rose.py &amp;&amp; coverage report ========================================================================== test session starts ========================================================================== platform darwin -- Python 3.10.9, pytest-7.2.1, pluggy-1.0.0 rootdir: \/Users\/vmihaylov\/PycharmProjects\/GildedRose-Refactoring-Kata\/python collected 10 items                                                                                                                                                        test_gilded_rose.py ..........                                                                                                                                    [100%]  ========================================================================== 10 passed in 0.01s =========================================================================== Name                  Stmts   Miss  Cover ----------------------------------------- gilded_rose.py           36      3    92% test_gilded_rose.py      53      4    92% ----------------------------------------- TOTAL                    89      7    92%<\/code><\/pre>\n<p>\u041f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043a\u043e\u0434\u0430 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e 92%.<\/p>\n<p>\u0417\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0442\u0435\u0441\u0442\u043e\u0432. \u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0443 \u043c\u0435\u043d\u044f \u0443\u0448\u043b\u043e \u043d\u0430 \u044d\u0442\u043e 40 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<h2>\u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u043e\u0434\u0430 2\/4. \u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043c\u0435\u0442\u043e\u0434\u0430 update_quality<\/h2>\n<p>\u041f\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430 Item.<\/p>\n<p>\u0414\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u044d\u0442\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043a\u043b\u0430\u0441\u0441 ItemEntity, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>ItemEntity \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d \u0438\u0437 Item, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u043a \u0441\u0435\u0431\u0435 \u043f\u043e\u043b\u044f Item<\/p>\n<\/li>\n<li>\n<p>ItemEntity \u0438\u043c\u0435\u0435\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 conjured, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 True \u0435\u0441\u043b\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 &#171;Conjured &#171;<\/p>\n<\/li>\n<li>\n<p>ItemEntity \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0432 Item, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u043e\u043b\u044f \u0432 Item<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"python\">#test_gilded_rose.py  ...  def test_item_entity_copies_attributes_from_item():     \"\"\"     ItemEntity \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d \u0438\u0437 Item, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u043a \u0441\u0435\u0431\u0435 \u043f\u043e\u043b\u044f Item     \"\"\"     item = Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=0, quality=7)     item_entity = ItemEntity(item=item)     assert item_entity.name == item.name     assert item_entity.sell_in == item.sell_in     assert item_entity.quality == item.quality  def test_item_entity_detects_conjured_item():     \"\"\"     ItemEntity \u0438\u043c\u0435\u0435\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 conjured, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 True \u0435\u0441\u043b\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \"Conjured \"     \"\"\"     item = Item(name=\"Conjured Backstage passes to a TAFKAL80ETC concert\", sell_in=0, quality=7)     item_entity = ItemEntity(item=item)     assert item_entity.is_conjured  def test_item_entity_converts_to_item():     \"\"\"     ItemEntity \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0432 Item, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u043e\u043b\u044f \u0432 Item     \"\"\"     item = Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=0, quality=7)     item_entity = ItemEntity(item=item)     copied_item = item_entity.to_item()     assert copied_item.name == \"Backstage passes to a TAFKAL80ETC concert\"     assert copied_item.sell_in == 0     assert copied_item.quality == 7<\/code><\/pre>\n<pre><code class=\"python\">#gilded_rose.py  ...  class ItemEntity:     def __init__(self, item):         name = item.name         self.name = name         self.sell_in = item.sell_in         self.quality = item.quality         self.is_conjured = name.startswith(\"Conjured \")<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0438\u0442\u0435 \u043a\u043e\u0434 update_quality \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0430 GildedRose \u0432 \u043a\u043b\u0430\u0441\u0441 ItemEntity<\/p>\n<pre><code class=\"python\">#gilded_rose.py  class GildedRose(object):        ...      def update_quality(self):         self.items = [ItemEntity(item=item).update_quality().to_item() for item in self.items]      ...  class ItemEntity:     ...      def update_quality(self):         if self.name != \"Aged Brie\" and self.name != \"Backstage passes to a TAFKAL80ETC concert\":             if self.quality > 0:                 if self.name != \"Sulfuras, Hand of Ragnaros\":                     self.quality = self.quality - 1         else:             if self.quality &lt; 50:                 self.quality = self.quality + 1                 if self.name == \"Backstage passes to a TAFKAL80ETC concert\":                     if self.sell_in &lt; 11:                         if self.quality &lt; 50:                             self.quality = self.quality + 1                     if self.sell_in &lt; 6:                         if self.quality &lt; 50:                             self.quality = self.quality + 1         if self.name != \"Sulfuras, Hand of Ragnaros\":             self.sell_in = self.sell_in - 1         if self.sell_in &lt; 0:             if self.name != \"Aged Brie\":                 if self.name != \"Backstage passes to a TAFKAL80ETC concert\":                     if self.quality > 0:                         if self.name != \"Sulfuras, Hand of Ragnaros\":                             self.quality = self.quality - 1                 else:                     self.quality = self.quality - self.quality             else:                 if self.quality &lt; 50:                     self.quality = self.quality + 1<\/code><\/pre>\n<p>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0442\u0435\u0441\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u043c ItemEntity \u0432\u043c\u0435\u0441\u0442\u043e GuildedRose<\/p>\n<pre><code class=\"python\">#test_gilded_rose.py  ...  def test_system_decreases_quality_every_day():     \"\"\"     \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u043d\u044f \u043d\u0430\u0448\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043e\u0431\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.     \"\"\"     item = ItemEntity(item=Item(name=\"+5 Dexterity Vest\", sell_in=10, quality=1))     item.update_quality()     assert item.sell_in == 9     assert item.quality == 0  def test_when_sell_in_expired_quality_decreases_twice_as_fast():     \"\"\"     \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u043e\u043a \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u0438\u0441\u0442\u0435\u043a, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.     \"\"\"     item = ItemEntity(Item(name=\"+5 Dexterity Vest\", sell_in=0, quality=10))     item.update_quality()     assert item.sell_in == -1     assert item.quality == 8  def test_quality_never_becomes_negative():     \"\"\"     \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c     \"\"\"     item = ItemEntity(Item(name=\"+5 Dexterity Vest\", sell_in=1, quality=0))     item.update_quality()     assert item.sell_in == 0     assert item.quality == 0  def test_aged_brie_becomes_better_after_sell_in():     \"\"\"     \u00ab\u0412\u044b\u0434\u0435\u0440\u0436\u0430\u043d\u043d\u044b\u0439 \u0431\u0440\u0438\u00bb (Aged Brie) \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0435 \u043e\u043d \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f.     \"\"\"     item = ItemEntity(Item(name=\"Aged Brie\", sell_in=10, quality=1))     item.update_quality()     assert item.sell_in == 9     assert item.quality == 2  def test_item_quality_never_exceeds_50():     \"\"\"     \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 50.     \"\"\"     item = ItemEntity(Item(name=\"Aged Brie\", sell_in=10, quality=50))     item.update_quality()     assert item.sell_in == 9     assert item.quality == 50  def test_sulfuras_never_sells_in_and_never_looses_quality():     \"\"\"     \"Sulfuras\", \u0431\u0443\u0434\u0443\u0447\u0438 \u043b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u043c, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430.     \"\"\"     item = ItemEntity(Item(name=\"Sulfuras, Hand of Ragnaros\", sell_in=10, quality=80))     item.update_quality()     assert item.sell_in == 10     assert item.quality == 80  def test_backstage_passes_increase_quality_by_2_if_10_to_6_days_left():     \"\"\"     \u00ab\u041f\u0440\u043e\u0445\u043e\u0434\u044b \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b\u00bb (Backstage passes to a TAFKAL80ETC concert) \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f sell_in: \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 2, \u0435\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c 10 \u0434\u043d\u0435\u0439 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435.     \"\"\"     item = ItemEntity(Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=10, quality=6))     item.update_quality()     assert item.sell_in == 9     assert item.quality == 8  def test_backstage_passes_increase_quality_by_3_if_5_to_1_days_left():     \"\"\"     \u00ab\u041f\u0440\u043e\u0445\u043e\u0434\u044b \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b\u00bb (Backstage passes to a TAFKAL80ETC concert), \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f sell_in: \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 3, \u0435\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c 5 \u0434\u043d\u0435\u0439 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435.     \"\"\"     item = ItemEntity(Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=5, quality=7))     item.update_quality()     assert item.sell_in == 5     assert item.quality == 10  def test_backstage_passes_increase_quality_by_3_if_5_to_1_days_left():     \"\"\"     \u00ab\u041f\u0440\u043e\u0445\u043e\u0434\u044b \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b\u00bb (Backstage passes to a TAFKAL80ETC concert), \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0446\u0435\u0440\u0442\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u0434\u043e 0.     \"\"\"     item = ItemEntity(Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=0, quality=7))     item.update_quality()     assert item.sell_in == -1     assert item.quality == 0  ...<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0443\u044e\u0441\u044f if-\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043d\u0438\u0436\u0435 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 update_quality \u0438 \u0432\u044b\u043d\u0435\u0441\u0438\u0442\u0435 \u0435\u0435 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 increase_quality.<\/p>\n<pre><code class=\"python\">#gilded_rose.py  class ItemEntity:     ...      def update_quality(self):        ...                 if self.quality &lt; 50:                     self.quality = self.quality + 1       ...<\/code><\/pre>\n<pre><code class=\"python\">#gilded_rose.py  class ItemEntity:     ...      def increase_quality(self):         if self.quality &lt; 50:             self.quality = self.quality + 1      ...<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0443\u044e\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0438 \u0432\u044b\u043d\u0435\u0441\u0438\u0442\u0435 \u0435\u0435 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 decrease_quality_if_not_sulfuras()<\/p>\n<pre><code class=\"python\">#gilded_rose.py  class ItemEntity:     ...      def update_quality(self):        ...           if self.quality > 0:               if self.name != \"Sulfuras, Hand of Ragnaros\":                   self.quality = self.quality - 1       ...<\/code><\/pre>\n<pre><code class=\"python\">#gilded_rose.py  class ItemEntity:     ...      def decrease_quality_if_not_sulfuras(self):       if self.quality > 0:           if self.name != \"Sulfuras, Hand of Ragnaros\":               self.quality = self.quality - 1                    ...<\/code><\/pre>\n<p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 decrease_quality_if_not_sulfuras \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u043c, \u0447\u0442\u043e \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432 Sulfuras. \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0439\u0442\u0435 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043a\u043b\u0430\u0441\u0441 Sulfuras \u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0438\u0442\u0435 \u0432 \u043d\u0435\u0433\u043e \u043b\u043e\u0433\u0438\u043a\u0443 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 &#8212; \u044d\u0442\u0430 \u043b\u043e\u0433\u0438\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u043d\u0435 \u0434\u0435\u043b\u0430\u043d\u0438\u0438 \u043d\u0438\u0447\u0435\u0433\u043e, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 pass).<\/p>\n<pre><code class=\"python\">#gilded_rose.py  ...  class Sulfuras(ItemEntity):     def decrease_quality(self):         pass  ...<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043a\u043b\u0430\u0441\u0441 EntityFactory, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0435\u0433\u043e \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"python\">#gilded_rose.py  ...  class EntityFactory:     def create(item):         if item.name == \"Sulfuras, Hand of Ragnaros\":             return Sulfuras(item=item)         else:             return ItemEntity(item=item)  ...<\/code><\/pre>\n<p>\u041f\u043e\u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u043a\u043e\u0434 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f EntityFactory \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f ItemEntity \u0432 \u043a\u043e\u0434\u0435 GildedRose \u0438 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445.<\/p>\n<pre><code class=\"python\">#gilded_rose.py  ...  class GildedRose(object):      ...      def update_quality(self):         self.items = [EntityFactory.create(item=item).update_quality().to_item() for item in self.items]      ...<\/code><\/pre>\n<pre><code class=\"python\">#test_gilded_rose.py  ... from gilded_rose import Item, GildedRose, ItemEntity, Sulfuras, EntityFactory ...  def test_system_decreases_quality_every_day():     \"\"\"     \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u043d\u044f \u043d\u0430\u0448\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043e\u0431\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.     \"\"\"     item = EntityFactory.create(item=Item(name=\"+5 Dexterity Vest\", sell_in=10, quality=1))     item.update_quality()     assert item.sell_in == 9     assert item.quality == 0  def test_when_sell_in_expired_quality_decreases_twice_as_fast():     \"\"\"     \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u043e\u043a \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u0438\u0441\u0442\u0435\u043a, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.     \"\"\"     item = EntityFactory.create(Item(name=\"+5 Dexterity Vest\", sell_in=0, quality=10))     item.update_quality()     assert item.sell_in == -1     assert item.quality == 8  def test_quality_never_becomes_negative():     \"\"\"     \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c     \"\"\"     item = EntityFactory.create(Item(name=\"+5 Dexterity Vest\", sell_in=1, quality=0))     item.update_quality()     assert item.sell_in == 0     assert item.quality == 0  def test_aged_brie_becomes_better_after_sell_in():     \"\"\"     \u00ab\u0412\u044b\u0434\u0435\u0440\u0436\u0430\u043d\u043d\u044b\u0439 \u0431\u0440\u0438\u00bb (Aged Brie) \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0435 \u043e\u043d \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f.     \"\"\"     item = EntityFactory.create(Item(name=\"Aged Brie\", sell_in=10, quality=1))     item.update_quality()     assert item.sell_in == 9     assert item.quality == 2  def test_item_quality_never_exceeds_50():     \"\"\"     \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 50.     \"\"\"     item = EntityFactory.create(Item(name=\"Aged Brie\", sell_in=10, quality=50))     item.update_quality()     assert item.sell_in == 9     assert item.quality == 50  def test_sulfuras_never_sells_in_and_never_looses_quality():     \"\"\"     \"Sulfuras\", \u0431\u0443\u0434\u0443\u0447\u0438 \u043b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u043c, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430.     \"\"\"     item = EntityFactory.create(Item(name=\"Sulfuras, Hand of Ragnaros\", sell_in=10, quality=80))     item.update_quality()     assert item.sell_in == 10     assert item.quality == 80  def test_backstage_passes_increase_quality_by_2_if_10_to_6_days_left():     \"\"\"     \u00ab\u041f\u0440\u043e\u0445\u043e\u0434\u044b \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b\u00bb (Backstage passes to a TAFKAL80ETC concert) \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f sell_in: \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 2, \u0435\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c 10 \u0434\u043d\u0435\u0439 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435.     \"\"\"     item = EntityFactory.create(Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=10, quality=6))     item.update_quality()     assert item.sell_in == 9     assert item.quality == 8  def test_backstage_passes_increase_quality_by_3_if_5_to_1_days_left():     \"\"\"     \u00ab\u041f\u0440\u043e\u0445\u043e\u0434\u044b \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b\u00bb (Backstage passes to a TAFKAL80ETC concert), \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f sell_in: \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 3, \u0435\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c 5 \u0434\u043d\u0435\u0439 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435.     \"\"\"     item = EntityFactory.create(Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=5, quality=7))     item.update_quality()     assert item.sell_in == 5     assert item.quality == 10  def test_backstage_passes_increase_quality_by_3_if_5_to_1_days_left():     \"\"\"     \u00ab\u041f\u0440\u043e\u0445\u043e\u0434\u044b \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b\u00bb (Backstage passes to a TAFKAL80ETC concert), \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0446\u0435\u0440\u0442\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u0434\u043e 0.     \"\"\"     item = EntityFactory.create(Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=0, quality=7))     item.update_quality()     assert item.sell_in == -1     assert item.quality == 0  def test_sulfuras_produced_by_factory():     \"\"\"     \u041f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \"Sulfuras, Hand of Ragnaros\" \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c Sulfuras     \"\"\"     sulfuras = EntityFactory.create(Item(name=\"Sulfuras, Hand of Ragnaros\", sell_in=10, quality=80))     assert isinstance(sulfuras, Sulfuras)  ...<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0441\u0440\u043e\u043a\u0430 \u0433\u043e\u0434\u043d\u043e\u0441\u0442\u0438 sell_in \u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0438\u0442\u0435 \u0435\u0435 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 decrease_sell_in. <\/p>\n<pre><code class=\"python\">#gilded_rose.py  ...  class ItemEntity:      ...      def update_quality(self):        ...              if self.name != \"Sulfuras, Hand of Ragnaros\":         self.sell_in = self.sell_in - 1      ... <\/code><\/pre>\n<p>\u0421\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 decrease_sell_in \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432 \u0438 Sulfuras.<\/p>\n<pre><code class=\"python\">#gilded_rose.py  class ItemEntity:      ...      def decrease_sell_in(self):         self.sell_in = self.sell_in - 1      ...  ...          class Sulfuras(ItemEntity):     ...      def decrease_sell_in(self):         pass      ...<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0442\u0435\u0441\u0442\u044b \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 &#171;Aged Brie&#187; \u0438 &#171;Backstage passes to a TAFKAL80ETC concert&#187;, \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u044d\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u043b\u043e\u0433\u0438\u043a\u0443 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430.<\/p>\n<pre><code class=\"python\">#test_gilded_rose.py  ...  from gilded_rose import Item, GildedRose, ItemEntity, Sulfuras, EntityFactory, AgedBrie, BackstagePasses  ...  def test_aged_brie_produced_by_factory():     \"\"\"     \u041f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \"Aged Brie\" \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c AgedBrie     \"\"\"     aged_brie = EntityFactory.create(Item(name=\"Aged Brie\", sell_in=10, quality=80))     assert isinstance(aged_brie, AgedBrie)  def test_backstage_passes_produced_by_factory():     \"\"\"     \u041f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \"Backstage passes to a TAFKAL80ETC concert\" \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c BackstagePasses     \"\"\"     backstage_passes = EntityFactory.create(Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=10, quality=80))     assert isinstance(backstage_passes, BackstagePasses)  ...<\/code><\/pre>\n<pre><code class=\"python\">#gilded_rose.py  ... class AgedBrie(ItemEntity):     pass  class BackstagePasses(ItemEntity):     pass  class EntityFactory:     def create(item):         if item.name == \"Aged Brie\":             return AgedBrie(item=item)         elif item.name == \"Backstage passes to a TAFKAL80ETC concert\":             return BackstagePasses(item=item)         elif item.name == \"Sulfuras, Hand of Ragnaros\":             return Sulfuras(item=item)         else:             return ItemEntity(item=item)  ...<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043a\u043e\u0434 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0432 update_quality  \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u043a\u043e\u0434 increase_quality, \u043d\u043e \u0434\u043b\u044f Backstage passes \u043e\u043d \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 sell_in. <\/p>\n<pre><code class=\"python\">#gilded_rose.py  ...  class ItemEntity:      ...      def increase_quality(self):       if self.quality &lt; 50:           self.quality = self.quality + 1                ...      def update_quality(self):        ...              if self.quality &lt; 50:           self.quality = self.quality + 1           if self.name == \"Backstage passes to a TAFKAL80ETC concert\":               if self.sell_in &lt; 11:                   self.increase_quality()               if self.sell_in &lt; 6:                   self.increase_quality()      ...      <\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0438\u0442\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 19-25 \u0432\u044b\u0448\u0435 \u0432 \u043c\u0435\u0442\u043e\u0434 increase_quality \u043a\u043b\u0430\u0441\u0441\u0430 BackstagePasses, \u0430 \u0432 \u0442\u0435\u043b\u0435 update_quality \u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0432\u044b\u0437\u043e\u0432 increase_quality.<\/p>\n<pre><code class=\"python\">#gilded_rose.py  ...  class BackstagePasses(ItemEntity):     def increase_quality(self):         super().increase_quality()          if self.sell_in &lt; 11:             super().increase_quality()         if self.sell_in &lt; 6:             super().increase_quality()  class ItemEntity:        ...      def increase_quality(self):         if self.quality &lt; 50:             self.quality = self.quality + 1      ...      def update_quality(self):         if self.name != \"Aged Brie\" and self.name != \"Backstage passes to a TAFKAL80ETC concert\":             self.decrease_quality()         else:             self.increase_quality()          self.decrease_sell_in()          if self.sell_in &lt; 0:             if self.name != \"Aged Brie\":                 if self.name != \"Backstage passes to a TAFKAL80ETC concert\":                     self.decrease_quality()                 else:                     self.quality = self.quality - self.quality             else:                 self.increase_quality()          return self      ...<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u043b\u044f Aged Brie \u0438 Backstage passes. <\/p>\n<pre><code class=\"python\">#gilded_rose.py  ...  class ItemEntity:     ...      def update_quality(self):         if self.name != \"Aged Brie\" and self.name != \"Backstage passes to a TAFKAL80ETC concert\":             self.decrease_quality()         else:             self.increase_quality()          ...<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043c\u0435\u0442\u043e\u0434 change_quality, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f Aged Brie \u0438 Backstage passes \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e, \u0430 \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 &#8212; \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c.<\/p>\n<pre><code class=\"python\">#gilded_rose.py  ...  class ItemEntity:     ...      def change_quality(self):         self.decrease_quality()      ...      def update_quality(self):         self.change_quality()          ...      ...  class AgedBrie(ItemEntity):     ...          def change_quality(self):         self.increase_quality()      ...  class BackstagePasses(ItemEntity):      ...          def change_quality(self):         self.increase_quality()      ...<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0441\u0440\u043e\u043a\u0430 \u0433\u043e\u0434\u043d\u043e\u0441\u0442\u0438. \u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 change_quality_after_sell_in \u0438 \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f Aged Brie \u0438 Backstage Passes.<\/p>\n<pre><code class=\"python\">#gilded_rose.py  ...  class ItemEntity:     ...      def update_quality(self):         ...          if self.sell_in &lt; 0:           if self.name != \"Aged Brie\":               if self.name != \"Backstage passes to a TAFKAL80ETC concert\":                   self.decrease_quality()               else:                   self.quality = self.quality - self.quality           else:               self.increase_quality()          ...      ...<\/code><\/pre>\n<pre><code class=\"python\">#gilded_rose.py  ...  class ItemEntity:     ...       def change_quality_after_sell_in(self):         self.decrease_quality()      def update_quality(self):         self.change_quality()          self.decrease_sell_in()          if self.sell_in &lt; 0:             self.change_quality_after_sell_in()          return self      ...  class AgedBrie(ItemEntity):     ...      def change_quality_after_sell_in(self):         self.increase_quality()  class BackstagePasses(ItemEntity):     ...      def change_quality_after_sell_in(self):         self.quality = 0<\/code><\/pre>\n<h2>\u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u043e\u0434\u0430 3\/4. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0446\u0438\u043a\u043b\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c<\/h2>\n<pre><code class=\"bash\">$ radon cc -s gilded_rose.py gilded_rose.py     C 56:0 EntityFactory - A (5)     M 57:4 EntityFactory.create - A (4)     C 1:0 GildedRose - A (3)     C 74:0 BackstagePasses - A (3)     M 81:4 BackstagePasses.increase_quality - A (3)     M 6:4 GildedRose.update_quality - A (2)     C 9:0 Item - A (2)     C 18:0 ItemEntity - A (2)     M 26:4 ItemEntity.increase_quality - A (2)     M 30:4 ItemEntity.decrease_quality - A (2)     M 43:4 ItemEntity.update_quality - A (2)     C 67:0 AgedBrie - A (2)     C 89:0 Sulfuras - A (2)     M 3:4 GildedRose.__init__ - A (1)     M 10:4 Item.__init__ - A (1)     M 15:4 Item.__repr__ - A (1)     M 19:4 ItemEntity.__init__ - A (1)     M 34:4 ItemEntity.decrease_sell_in - A (1)     M 37:4 ItemEntity.change_quality - A (1)     M 40:4 ItemEntity.change_quality_after_sell_in - A (1)     M 53:4 ItemEntity.to_item - A (1)     M 68:4 AgedBrie.change_quality - A (1)     M 71:4 AgedBrie.change_quality_after_sell_in - A (1)     M 75:4 BackstagePasses.change_quality - A (1)     M 78:4 BackstagePasses.change_quality_after_sell_in - A (1)     M 90:4 Sulfuras.decrease_quality - A (1)     M 93:4 Sulfuras.decrease_sell_in - A (1)<\/code><\/pre>\n<p>\u0412\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b GuildedRose \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u043c\u0435\u044e\u0442 \u0446\u0438\u043a\u043b\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u043d\u0435\u0435 5.<\/p>\n<h2>\u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u043e\u0434\u0430 4\/4. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043d\u043e\u0432\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>\u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0442\u0435\u0441\u0442 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0439\u0442\u0435 ItemEntity:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u00ab\u0421\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0445\u00bb (Conjured) \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432 \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0443 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"python\">#test_gilded_rose.py  ...  def test_conjured_items_quality_decreases_twice_as_fast():     \"\"\"     \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u00ab\u0421\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0445\u00bb (Conjured) \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432 \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0443 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432.     \"\"\"     item = EntityFactory.create(item=Item(name=\"Conjured +5 Dexterity Vest\", sell_in=10, quality=5))     item.update_quality()     assert item.sell_in == 9     assert item.quality == 3  def test_conjured_aged_brie_produce_aged_brie_by_factory():     \"\"\"     \u041f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \"Conjured Aged Brie\" \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c AgedBrie     \"\"\"     aged_brie = EntityFactory.create(Item(name=\"Conjured Aged Brie\", sell_in=10, quality=80))     assert isinstance(aged_brie, AgedBrie)<\/code><\/pre>\n<p>\u0418\u0437\u043c\u0435\u0440\u044c\u0442\u0435 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0443\u0448\u043b\u043e \u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u043e\u0434, \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0439 coding kata. \u0423 \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0437\u0430\u043d\u044f\u043b\u043e 10 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<p>\u0418\u0437\u043c\u0435\u0440\u044c\u0442\u0435 \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0412\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438 \u0442\u0435\u0441\u0442\u044b. \u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0443 \u043c\u0435\u043d\u044f \u0443\u0448\u043b\u043e 2 \u0447\u0430\u0441\u0430, \u0430 \u0442\u0435\u0441\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438\u0441\u044c \u043e\u043a\u043e\u043b\u043e 100 \u0440\u0430\u0437.<\/p>\n<h2>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u0441\u0442\u0438\u043d\u0433<\/h2>\n<pre><code class=\"python\">#gilded_rose.py  class GildedRose(object):      def __init__(self, items):         self.items = items      def update_quality(self):         self.items = [EntityFactory.create(item=item).update_quality().to_item() for item in self.items]  class Item:     def __init__(self, name, sell_in, quality):         self.name = name         self.sell_in = sell_in         self.quality = quality      def __repr__(self):         return \"%s, %s, %s\" % (self.name, self.sell_in, self.quality)  class ItemEntity:     def __init__(self, item):         name = item.name         self.name = name         self.sell_in = item.sell_in         self.quality = item.quality         self.is_conjured = name.startswith(\"Conjured \")      def increase_quality(self):         if self.quality &lt; 50:             self.quality = self.quality + 1      def decrease_quality(self):         if self.quality > 0:             self.quality = self.quality - 1          if self.is_conjured:             if self.quality > 0:                 self.quality = self.quality - 1      def decrease_sell_in(self):         self.sell_in = self.sell_in - 1      def change_quality(self):         self.decrease_quality()      def change_quality_after_sell_in(self):         self.decrease_quality()      def update_quality(self):         self.change_quality()          self.decrease_sell_in()          if self.sell_in &lt; 0:             self.change_quality_after_sell_in()          return self      def to_item(self):         return Item(name=self.name, sell_in=self.sell_in, quality=self.quality)  class EntityFactory:     def remove_conjured_if_exists(name):         if name.startswith(\"Conjured \"):             return name[9:]         else:             return name      def create(item):         stripped_name = EntityFactory.remove_conjured_if_exists(item.name)          if stripped_name == \"Aged Brie\":             return AgedBrie(item=item)         elif stripped_name == \"Backstage passes to a TAFKAL80ETC concert\":             return BackstagePasses(item=item)         elif stripped_name == \"Sulfuras, Hand of Ragnaros\":             return Sulfuras(item=item)         else:             return ItemEntity(item=item)  class AgedBrie(ItemEntity):     def change_quality(self):         self.increase_quality()      def change_quality_after_sell_in(self):         self.increase_quality()  class BackstagePasses(ItemEntity):     def change_quality(self):         self.increase_quality()      def change_quality_after_sell_in(self):         self.quality = 0      def increase_quality(self):         super().increase_quality()          if self.sell_in &lt; 11:             super().increase_quality()         if self.sell_in &lt; 6:             super().increase_quality()  class Sulfuras(ItemEntity):     def decrease_quality(self):         pass      def decrease_sell_in(self):         pass  <\/code><\/pre>\n<pre><code class=\"python\">#test_gilded_rose.py  import pytest  from gilded_rose import Item, GildedRose, ItemEntity, Sulfuras, EntityFactory, AgedBrie, BackstagePasses  def test_item_has_sell_in_attribute():     \"\"\"     \u0412\u0441\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \"\u043f\u0440\u043e\u0434\u0430\u0442\u044c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\" (sell_in), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u043d\u0435\u0439, \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0434\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u043c\u0435\u0442.     \"\"\"     item = Item(name=\"Foo\", sell_in=10, quality=1)     assert item.sell_in == 10  def test_item_has_quality_attribute():     \"\"\"     \u0412\u0441\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 (quality), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043d\u0435\u043d \u043f\u0440\u0435\u0434\u043c\u0435\u0442.     \"\"\"     item = Item(name=\"Foo\", sell_in=10, quality=1)     assert item.quality == 1  def test_system_decreases_quality_every_day():     \"\"\"     \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u043d\u044f \u043d\u0430\u0448\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043e\u0431\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.     \"\"\"     item = EntityFactory.create(item=Item(name=\"+5 Dexterity Vest\", sell_in=10, quality=1))     item.update_quality()     assert item.sell_in == 9     assert item.quality == 0  def test_when_sell_in_expired_quality_decreases_twice_as_fast():     \"\"\"     \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u043e\u043a \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u0438\u0441\u0442\u0435\u043a, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.     \"\"\"     item = EntityFactory.create(Item(name=\"+5 Dexterity Vest\", sell_in=0, quality=10))     item.update_quality()     assert item.sell_in == -1     assert item.quality == 8  def test_quality_never_becomes_negative():     \"\"\"     \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c     \"\"\"     item = EntityFactory.create(Item(name=\"+5 Dexterity Vest\", sell_in=1, quality=0))     item.update_quality()     assert item.sell_in == 0     assert item.quality == 0  def test_aged_brie_becomes_better_after_sell_in():     \"\"\"     \u00ab\u0412\u044b\u0434\u0435\u0440\u0436\u0430\u043d\u043d\u044b\u0439 \u0431\u0440\u0438\u00bb (Aged Brie) \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0435 \u043e\u043d \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f.     \"\"\"     item = EntityFactory.create(Item(name=\"Aged Brie\", sell_in=10, quality=1))     item.update_quality()     assert item.sell_in == 9     assert item.quality == 2  def test_item_quality_never_exceeds_50():     \"\"\"     \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 50.     \"\"\"     item = EntityFactory.create(Item(name=\"Aged Brie\", sell_in=10, quality=50))     item.update_quality()     assert item.sell_in == 9     assert item.quality == 50  def test_sulfuras_never_sells_in_and_never_looses_quality():     \"\"\"     \"Sulfuras\", \u0431\u0443\u0434\u0443\u0447\u0438 \u043b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u043c, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430.     \"\"\"     item = EntityFactory.create(Item(name=\"Sulfuras, Hand of Ragnaros\", sell_in=10, quality=80))     item.update_quality()     assert item.sell_in == 10     assert item.quality == 80  def test_backstage_passes_increase_quality_by_2_if_10_to_6_days_left():     \"\"\"     \u00ab\u041f\u0440\u043e\u0445\u043e\u0434\u044b \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b\u00bb (Backstage passes to a TAFKAL80ETC concert) \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f sell_in: \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 2, \u0435\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c 10 \u0434\u043d\u0435\u0439 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435.     \"\"\"     item = EntityFactory.create(Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=10, quality=6))     item.update_quality()     assert item.sell_in == 9     assert item.quality == 8  def test_backstage_passes_increase_quality_by_3_if_5_to_1_days_left():     \"\"\"     \u00ab\u041f\u0440\u043e\u0445\u043e\u0434\u044b \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b\u00bb (Backstage passes to a TAFKAL80ETC concert), \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f sell_in: \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 3, \u0435\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c 5 \u0434\u043d\u0435\u0439 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435.     \"\"\"     item = EntityFactory.create(Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=5, quality=7))     item.update_quality()     assert item.sell_in == 5     assert item.quality == 10  def test_backstage_passes_increase_quality_by_3_if_5_to_1_days_left():     \"\"\"     \u00ab\u041f\u0440\u043e\u0445\u043e\u0434\u044b \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b\u00bb (Backstage passes to a TAFKAL80ETC concert), \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0446\u0435\u0440\u0442\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u0434\u043e 0.     \"\"\"     item = EntityFactory.create(Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=0, quality=7))     item.update_quality()     assert item.sell_in == -1     assert item.quality == 0  def test_item_entity_copies_attributes_from_item():     \"\"\"     ItemEntity \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d \u0438\u0437 Item, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u043a \u0441\u0435\u0431\u0435 \u043f\u043e\u043b\u044f Item     \"\"\"     item = Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=0, quality=7)     item_entity = ItemEntity(item=item)     assert item_entity.name == item.name     assert item_entity.sell_in == item.sell_in     assert item_entity.quality == item.quality  def test_item_entity_detects_conjured_item():     \"\"\"     ItemEntity \u0438\u043c\u0435\u0435\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 conjured, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 True \u0435\u0441\u043b\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \"Conjured \"     \"\"\"     item = Item(name=\"Conjured Backstage passes to a TAFKAL80ETC concert\", sell_in=0, quality=7)     item_entity = ItemEntity(item=item)     assert item_entity.is_conjured  def test_item_entity_converts_to_item():     \"\"\"     ItemEntity \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0432 Item, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u043e\u043b\u044f \u0432 Item     \"\"\"     item = Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=0, quality=7)     item_entity = ItemEntity(item=item)     copied_item = item_entity.to_item()     assert copied_item.name == \"Backstage passes to a TAFKAL80ETC concert\"     assert copied_item.sell_in == 0     assert copied_item.quality == 7  def test_sulfuras_produced_by_factory():     \"\"\"     \u041f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \"Sulfuras, Hand of Ragnaros\" \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c Sulfuras     \"\"\"     sulfuras = EntityFactory.create(Item(name=\"Sulfuras, Hand of Ragnaros\", sell_in=10, quality=80))     assert isinstance(sulfuras, Sulfuras)  def test_aged_brie_produced_by_factory():     \"\"\"     \u041f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \"Aged Brie\" \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c AgedBrie     \"\"\"     aged_brie = EntityFactory.create(Item(name=\"Aged Brie\", sell_in=10, quality=80))     assert isinstance(aged_brie, AgedBrie)  def test_backstage_passes_produced_by_factory():     \"\"\"     \u041f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \"Backstage passes to a TAFKAL80ETC concert\" \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c BackstagePasses     \"\"\"     backstage_passes = EntityFactory.create(Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=10, quality=80))     assert isinstance(backstage_passes, BackstagePasses)  def test_conjured_items_quality_decreases_twice_as_fast():     \"\"\"     \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u00ab\u0421\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0445\u00bb (Conjured) \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432 \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0443 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432.     \"\"\"     item = EntityFactory.create(item=Item(name=\"Conjured +5 Dexterity Vest\", sell_in=10, quality=5))     item.update_quality()     assert item.sell_in == 9     assert item.quality == 3  def test_conjured_aged_brie_produce_aged_brie_by_factory():     \"\"\"     \u041f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \"Conjured Aged Brie\" \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c AgedBrie     \"\"\"     aged_brie = EntityFactory.create(Item(name=\"Conjured Aged Brie\", sell_in=10, quality=80))     assert isinstance(aged_brie, AgedBrie)<\/code><\/pre>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>Coding kata \u0434\u043b\u044f 30 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0438\u0445 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0437\u0430\u043d\u044f\u043b\u0438 \u043e\u043a\u043e\u043b\u043e 3 \u0447\u0430\u0441\u043e\u0432.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f coding kata \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0435\u0441\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438\u0441\u044c \u0431\u043e\u043b\u0435\u0435 100 \u0440\u0430\u0437.<\/p>\n<p>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u043c\u0435\u0435\u0442 \u0446\u0438\u043a\u043b\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c 5 \u0432\u043c\u0435\u0441\u0442\u043e 19.<\/p>\n<p>\u0412\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u0434 \u0437\u0430\u043d\u044f\u043b\u043e \u043c\u0435\u043d\u0435\u0435 10 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 time2market \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u0434\u043e 96 \u0440\u0430\u0437.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0447\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430. \u041e \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u0445 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e time2market \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c <a href=\"https:\/\/habr.com\/ru\/company\/mkb\/blog\/714928\/\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <\/p>\n<div class=\"tm-article-poll-container\">\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/718746\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u041a\u0430\u043a\u0438\u0435 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438 \u0441 time2market \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430?<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             83.33%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0423 \u043d\u0430\u0441 \u043f\u043b\u043e\u0445\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043c\u044b \u0434\u043e\u043b\u0433\u043e \u0432 \u043d\u0438\u0445 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f<\/span> <span class=\"tm-article-poll__answer-votes\">             5           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:83.33%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             33.33%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0423 \u043d\u0430\u0441 \u043f\u043b\u043e\u0445\u043e\u0439 \u043a\u043e\u0434 \u0438 \u043c\u044b \u0434\u043e\u043b\u0433\u043e \u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043c<\/span> <span class=\"tm-article-poll__answer-votes\">             2           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:33.33%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             66.67%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0423 \u043d\u0430\u0441 \u0440\u0443\u0447\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0438 \u043c\u044b \u0434\u043e\u043b\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c<\/span> <span class=\"tm-article-poll__answer-votes\">             4           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:66.67%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             16.67%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0423 \u043d\u0430\u0441 \u0432\u0441\u0435 \u043e\u0442\u043b\u0438\u0447\u043d\u043e<\/span> <span class=\"tm-article-poll__answer-votes\">             1           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:16.67%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 6 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.          \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 3 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.      <\/div>\n<\/div>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/718746\/\"> https:\/\/habr.com\/ru\/post\/718746\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041e\u0434\u043d\u0430\u0436\u0434\u044b \u0432 \u043c\u043e\u0435 \u043f\u043e\u043b\u0435 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u043f\u0430\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0437\u0430\u043a\u0430\u0437\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0431\u0435\u0437\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u044b\u0442\u0430\u043b\u0430\u0441\u044c \u0441\u0434\u0430\u0442\u044c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u043b\u0435\u0442. \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0434\u0430\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u043a\u043e\u043b\u043e 5% \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0441\u0434\u0430\u0447\u0430 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0435\u0443\u0434\u0430\u0447\u0430\u043c\u0438 \u0442\u043e \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u043f\u0440\u0438\u0435\u043c\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u043e\u043c, \u0442\u043e \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0440\u044b\u0432\u0430\u043b\u0438 \u0441\u0440\u043e\u043a\u0438 \u043f\u0440\u0438 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u0434.<\/p>\n<p>\u0417\u0430 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430.<\/p>\n<p>\u0410\u0443\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f time2market (\u0441\u0440\u043e\u043a\u043e\u0432 \u043e\u0442 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0434\u0435\u0438 \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435) \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043d\u0430 \u0442\u0440\u0435\u0445 \u0441\u0442\u0430\u0434\u0438\u044f\u0445:<\/p>\n<ul>\n<li>\n<p>\u0434\u043e\u043b\u0433\u043e \u0432\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0434<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u043b\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0440\u0443\u0447\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <\/p>\n<\/li>\n<li>\n<p>\u0447\u0430\u0441\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0443<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0435\u0440\u0432\u043e\u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u043d\u0438\u0437\u043a\u043e\u0433\u043e time2market \u044f\u0432\u043b\u044f\u043b\u043e\u0441\u044c \u0442\u043e, \u0447\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0435 \u0432\u043b\u0430\u0434\u0435\u043b\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 coding kata, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 &#171;<a href=\"https:\/\/codingdojo.org\/kata\/gilded-rose\/\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0437\u043e\u043b\u043e\u0447\u0435\u043d\u043d\u0430\u044f \u0440\u043e\u0437\u0430<\/a>&#171;. <\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0432 \u0443\u0437\u043a\u0438\u0445 \u043a\u0440\u0443\u0433\u0430\u0445. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0443 \u043d\u0435\u0435 \u043d\u0435\u0442. \u041d\u0438\u0436\u0435 \u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0441\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0433\u043e \u0442\u044c\u044e\u0442\u043e\u0440\u0438\u0430\u043b\u0430. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0442\u044c\u044e\u0442\u043e\u0440\u0438\u0430\u043b \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c, \u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0434\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0435\u043c\u043e\u0432, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f 95% \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0432\u044b\u0448\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0430 \u0438 \u0441\u0434\u0430\u043b\u0430 \u0437\u0430 6 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0445 48 \u043b\u0435\u0442, \u0447\u0442\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044e time2market \u0432 96 \u0440\u0430\u0437.<\/p>\n<h2>\u041f\u043e\u0437\u043e\u043b\u043e\u0447\u0435\u043d\u043d\u0430\u044f \u0440\u043e\u0437\u0430: \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u043b\u044f coding kata<\/h2>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442 \u0438 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 Gilded Rose. \u041a\u0430\u043a \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u043c\u044b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0433\u043e\u0441\u0442\u0438\u043d\u0438\u0446\u0430 \u0432 \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c \u0433\u043e\u0440\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u043d\u044b\u0439 \u0442\u0440\u0430\u043a\u0442\u0438\u0440\u0449\u0438\u043a \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u042d\u043b\u043b\u0438\u0441\u043e\u043d. \u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043a\u0443\u043f\u0430\u0435\u043c \u0438 \u043f\u0440\u043e\u0434\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0443\u0447\u0448\u0438\u0435 \u0442\u043e\u0432\u0430\u0440\u044b. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0448\u0438\u0445 \u0442\u043e\u0432\u0430\u0440\u043e\u0432 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u0441\u0440\u043e\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0448 \u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044c \u0434\u043b\u044f \u043d\u0430\u0441. \u041e\u043d \u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u041b\u0438\u0440\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0448\u0435\u043b \u043a \u043d\u043e\u0432\u044b\u043c \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c. \u0412\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043d\u0430\u0448\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0442\u043e\u0432\u0430\u0440\u043e\u0432. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043d\u0430\u0448\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443:<\/p>\n<ul>\n<li>\n<p>\u0412\u0441\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#171;\u043f\u0440\u043e\u0434\u0430\u0442\u044c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435&#187; (sell_in), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u043d\u0435\u0439, \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0434\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u043c\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 (quality), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043d\u0435\u043d \u043f\u0440\u0435\u0434\u043c\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u043d\u044f \u043d\u0430\u0448\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043e\u0431\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043f\u0440\u0430\u0432\u0434\u0430? \u041d\u0443 \u0432\u043e\u0442 \u0442\u0443\u0442 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u043e\u043a \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u0438\u0441\u0442\u0435\u043a, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c<\/p>\n<\/li>\n<li>\n<p>\u00ab\u0412\u044b\u0434\u0435\u0440\u0436\u0430\u043d\u043d\u044b\u0439 \u0431\u0440\u0438\u00bb (Aged Brie) \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0435 \u043e\u043d \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 50.<\/p>\n<\/li>\n<li>\n<p>&#171;Sulfuras&#187;, \u0431\u0443\u0434\u0443\u0447\u0438 \u043b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u043c, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430.<\/p>\n<\/li>\n<li>\n<p>\u00ab\u041f\u0440\u043e\u0445\u043e\u0434\u044b \u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u044b\u00bb (Backstage passes to a TAFKAL80ETC concert), \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u043d\u043d\u044b\u0439 \u0431\u0440\u0438 (Aged Brie), \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f sell_in: \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 2, \u0435\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c 10 \u0434\u043d\u0435\u0439 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435, \u0438 \u043d\u0430 3, \u0435\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c 5 \u0434\u043d\u0435\u0439 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0446\u0435\u0440\u0442\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u0434\u043e 0.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u043c\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0434\u043e\u0433\u043e\u0432\u043e\u0440 \u0441 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u043e\u043c \u043a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u0438\u0445 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u00ab\u0421\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0445\u00bb (Conjured) \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432 \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0443 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043c\u0435\u0442\u043e\u0434 update_quality \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434, \u043f\u043e\u043a\u0430 \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u043a\u043b\u0430\u0441\u0441 Item \u0438\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e items, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u0433\u043e\u0431\u043b\u0438\u043d\u0443 \u0432 \u0443\u0433\u043b\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043f\u0430\u0434\u0435\u0442 \u043d\u0430 \u0432\u0430\u0441 \u0438 \u0443\u0431\u044c\u0435\u0442 \u0432\u0430\u0441 \u043e\u0434\u043d\u0438\u043c \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u043e\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u043d\u0435 \u0432\u0435\u0440\u0438\u0442 \u0432 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0435 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u043e\u043c (\u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 update_quality \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e items \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435, \u043c\u044b \u0432\u0430\u0441 \u043f\u0440\u0438\u043a\u0440\u043e\u0435\u043c).<\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434: <a href=\"https:\/\/github.com\/emilybache\/GildedRose-Refactoring-Kata\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/emilybache\/GildedRose-Refactoring-Kata<\/a><\/p>\n<pre><code class=\"python\">#gilded_rose.py  class GildedRose(object):      def __init__(self, items):         self.items = items      def update_quality(self):         for item in self.items:             if item.name != \"Aged Brie\" and item.name != \"Backstage passes to a TAFKAL80ETC concert\":                 if item.quality > 0:                     if item.name != \"Sulfuras, Hand of Ragnaros\":                         item.quality = item.quality - 1             else:                 if item.quality &lt; 50:                     item.quality = item.quality + 1                     if item.name == \"Backstage passes to a TAFKAL80ETC concert\":                         if item.sell_in &lt; 11:                             if item.quality &lt; 50:                                 item.quality = item.quality + 1                         if item.sell_in &lt; 6:                             if item.quality &lt; 50:                                 item.quality = item.quality + 1             if item.name != \"Sulfuras, Hand of Ragnaros\":                 item.sell_in = item.sell_in - 1             if item.sell_in &lt; 0:                 if item.name != \"Aged Brie\":                     if item.name != \"Backstage passes to a TAFKAL80ETC concert\":                         if item.quality > 0:                             if item.name != \"Sulfuras, Hand of Ragnaros\":                                 item.quality = item.quality - 1                     else:                         item.quality = item.quality - item.quality                 else:                     if item.quality &lt; 50:                         item.quality = item.quality + 1   class Item:     def __init__(self, name, sell_in, quality):         self.name = name         self.sell_in = sell_in         self.quality = quality      def __repr__(self):         return \"%s, %s, %s\" % (self.name, self.sell_in, self.quality)<\/code><\/pre>\n<pre><code class=\"python\">#texttest_fixture.py  from __future__ import print_function  from gilded_rose import *  if __name__ == \"__main__\":     print (\"OMGHAI!\")     items = [              Item(name=\"+5 Dexterity Vest\", sell_in=10, quality=20),              Item(name=\"Aged Brie\", sell_in=2, quality=0),              Item(name=\"Elixir of the Mongoose\", sell_in=5, quality=7),              Item(name=\"Sulfuras, Hand of Ragnaros\", sell_in=0, quality=80),              Item(name=\"Sulfuras, Hand of Ragnaros\", sell_in=-1, quality=80),              Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=15, quality=20),              Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=10, quality=49),              Item(name=\"Backstage passes to a TAFKAL80ETC concert\", sell_in=5, quality=49),              Item(name=\"Conjured Mana Cake\", sell_in=3, quality=6),  # &lt;-- :O             ]      days = 2     import sys     if len(sys.argv) > 1:         days = int(sys.argv[1]) + 1     for day in range(days):         print(\"-------- day %s --------\" % day)         print(\"name, sellIn, quality\")         for item in items:             print(item)         print(\"\")         GildedRose(items).update_quality()<\/code><\/pre>\n<h2>\u041f\u0440\u043e\u0432\u0435\u0434\u0438\u0442\u0435 \u0430\u0443\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f time2market<\/h2>\n<p>\u0423 \u0412\u0430\u0441 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u044c\u0442\u0435\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0432\u044c\u044e \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/p>\n<\/li>\n<li>\n<p>\u0442\u0435\u0441\u0442\u044b <\/p>\n<\/li>\n<\/ul>\n<h3>\u0410\u0443\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 1\/4. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f time2market<\/h3>\n<p>\u0418\u0437\u0443\u0447\u0438\u0442\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043e \u0441\u043b\u0430\u0431\u044b\u0445 \u0438 \u0441\u0438\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f time2market.<\/p>\n<p><strong>\u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u0432\u043e\u0435 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435<\/strong>: \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043c\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c\u0438, \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u0437\u0430\u043d\u044f\u043b\u043e \u043c\u0435\u043d\u0435\u0435 \u043c\u0438\u043d\u0443\u0442\u044b. \u0412\u043e\u0437\u043d\u0438\u043a \u0432\u043e\u043f\u0440\u043e\u0441 \u043a\u0430\u043a \u043f\u043e\u043c\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u0438 \u044f \u0432\u044b\u0434\u0432\u0438\u043d\u0443\u043b \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0443, \u0447\u0442\u043e \u0441\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 &#171;Conjured &#187; \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0443 \u044f \u043d\u0435 \u0441\u043c\u043e\u0433, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u044f\u043b \u0435\u0435 \u043d\u0430 \u0432\u0435\u0440\u0443.<\/p>\n<h3>\u0410\u0443\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 2\/4. \u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f time2market<\/h3>\n<p>\u0418\u0437\u0443\u0447\u0438\u0442\u0435 \u043a\u043e\u0434 \u0432 \u0444\u0430\u0439\u043b\u0435 gilded_rose.py \u0438 \u0437\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043e \u0441\u043b\u0430\u0431\u044b\u0445 \u0438 \u0441\u0438\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u0445 \u043a\u043e\u0434\u0430 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f time2market.<\/p>\n<pre><code class=\"python\">#gilded_rose.py  class GildedRose(object):        ...        def update_quality(self):         for item in self.items:             if item.name != \"Aged Brie\" and item.name != \"Backstage passes to a TAFKAL80ETC concert\":                 if item.quality > 0:                     if item.name != \"Sulfuras, Hand of Ragnaros\":                         item.quality = item.quality - 1             else:                 if item.quality &lt; 50:                     item.quality = item.quality + 1                     if item.name == \"Backstage passes to a TAFKAL80ETC concert\":                         if item.sell_in &lt; 11:                             if item.quality &lt; 50:                                 item.quality = item.quality + 1                         if item.sell_in &lt; 6:                             if item.quality &lt; 50:                                 item.quality = item.quality + 1             if item.name != \"Sulfuras, Hand of Ragnaros\":                 item.sell_in = item.sell_in - 1             if item.sell_in &lt; 0:                 if item.name != \"Aged Brie\":                     if item.name != \"Backstage passes to a TAFKAL80ETC concert\":                         if item.quality > 0:                             if item.name != \"Sulfuras, Hand of Ragnaros\":                                 item.quality = item.quality - 1                     else:                         item.quality = item.quality - item.quality                 else:                     if item.quality &lt; 50:                         item.quality = item.quality + 1      ...<\/code><\/pre>\n<p><strong>\u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u0432\u043e\u0435 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435<\/strong>: \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 update_quality \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043c\u0435\u043d\u0435\u0435 28 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430. \u041a\u043e\u0434 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043c\u043d\u0435 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u043c. \u041b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u043e, \u0447\u0442\u043e \u0441\u043b\u043e\u0432\u0430 &#171;\u043f\u0443\u0442\u0430\u0442\u044c&#187; \u0438 &#171;\u043f\u0443\u0442\u044c&#187; \u0432 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u043f\u043e\u0445\u043e\u0436\u0438 (\u0445\u043e\u0442\u044f \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043d\u0443\u044e \u044d\u0442\u0438\u043c\u043e\u043b\u043e\u0433\u0438\u044e). <\/p>\n<p>\u0414\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0443\u0442\u0435\u0439 \u0432 \u043a\u043e\u0434\u0435 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0446\u0438\u043a\u043b\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0430\u043a\u0435\u0442 radon (<a href=\"https:\/\/radon.readthedocs.io\/en\/latest\/commandline.html\" rel=\"noopener noreferrer nofollow\">https:\/\/radon.readthedocs.io\/en\/latest\/commandline.html<\/a>) \u0438 \u0437\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0430.<\/p>\n<pre><code class=\"bash\">$ pip install radon $ radon cc -s gilded_rose.py   gilded_rose.py     M 8:4 GildedRose.update_quality - C (19)     C 3:0 GildedRose - C (11)     C 39:0 Item - A (2)     M 5:4 GildedRose.__init__ - A (1)     M 40:4 Item.__init__ - A (1)     M 45:4 Item.__repr__ - A (1)<\/code><\/pre>\n<p><strong>\u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u0432\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435<\/strong>: \u043c\u0435\u0442\u043e\u0434 update_quality<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-345843","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/345843","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=345843"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/345843\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=345843"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=345843"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=345843"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}