{"id":16187,"date":"2024-11-13T12:33:56","date_gmt":"2024-11-13T12:33:56","guid":{"rendered":"https:\/\/bestkora.com\/IosDeveloper\/?p=16187"},"modified":"2025-09-11T15:39:33","modified_gmt":"2025-09-11T15:39:33","slug":"%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax","status":"publish","type":"post","link":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/","title":{"rendered":"\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 ChatGPT \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 Expe\u0441timax \u0438 Monte Carlo \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/StatisticsMonteCarlo.gif\"><img loading=\"lazy\" decoding=\"async\" width=\"362\" height=\"744\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/StatisticsMonteCarlo.gif\" alt=\"\" class=\"wp-image-16209\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0445 &#8212; <a href=\"https:\/\/bestkora.com\/IosDeveloper\/test\/\" title=\"\">iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI&nbsp; \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1<\/a>, <a href=\"https:\/\/bestkora.com\/IosDeveloper\/\u0430\u0437\u0430\u0440\u0442\u043d\u0430\u044f-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430-ios-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f-\u0438\u0433\u0440\u044b\/\" title=\"\">iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI&nbsp; \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI<\/a>, <a href=\"https:\/\/bestkora.com\/IosDeveloper\/ios-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435-\u0438\u0433\u0440\u044b-2048-\u0432-swiftui-\u0441-chatgpt-\u0447\u0430\u0441\u0442\u044c-3-\u0438\u0438-ai\/\" title=\"\">iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI&nbsp; \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 3. \u0418\u0418<\/a>, &#8212;  <span style=\"font-weight: 400;\">\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b\u0430 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a ChatGPT \u043f\u043e\u043c\u043e\u0433 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b<strong> Expectimax <\/strong>&nbsp;\u0438 <strong>Monte Carlo<\/strong> \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048. \u042d\u0442\u043e \u0441\u0442\u043e\u0445\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b &#8212; \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">value<\/mark><\/code> \u043f\u043b\u0438\u0442\u043a\u0438 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">maxTile<\/mark><\/code> \u0438 \u0441\u0447\u0435\u0442 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">score<\/mark><\/code> &#8212; \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0438\u043c\u0435\u0442\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0432\u0435\u043b\u0438\u0447\u0438\u043d \u0432 \u0432\u0438\u0434\u0435 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u0445 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.<\/span><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Game2048ChatGPT \u0431\u044b\u043b\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043e c \u0446\u0435\u043b\u044c\u044e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432<strong> Expectimax <\/strong>&nbsp;\u0438 <strong>Monte Carlo<\/strong>&nbsp; \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0411\u0414) <strong>SwiftData<\/strong> \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430. \u041f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0418\u0418 ChatGPT, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043d\u043e\u0433\u0434\u0430, \u043b\u043e\u043c\u0430\u044f \u0432\u0441\u0435 \u0441\u0442\u0435\u0440\u0435\u043e\u0442\u0438\u043f\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u044b\u0439 \u0438 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 <a href=\"https:\/\/github.com\/BestKora\/Game2048ChatGPTStatistics\" title=\"\">GitHub<\/a>.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0443\u0442\u043e\u043c\u043b\u044f\u0442\u044c \u0432\u0430\u0441 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 ChatGPT, a \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u043c\u043e\u0433\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432&nbsp; <strong>Expectimax <\/strong>&nbsp;\u0438 <strong>Monte Carlo<\/strong>.<\/span><\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412\u043e\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f&nbsp; \u043f\u043b\u0438\u0442\u043a\u0438 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">maxTile<\/mark><\/code> \u0438 \u0441\u0447\u0435\u0442\u0430 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">score<\/mark><\/code> \u0434\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <strong>Expectimax<\/strong> \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0435\u0441\u043e\u0432\u044b\u0445 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">zeroWeight<\/mark><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0435 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">evaluate() <\/mark><\/code>\u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u043e\u0441\u043a\u0438. \u041e\u0446\u0435\u043d\u043a\u0430&nbsp; <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">evaluate() <\/mark><\/code>\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0432\u044b\u0431\u043e\u0440 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0445\u043e\u0434\u0430 \u0432 \u0438\u0433\u0440\u0435 2048.<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXffuL5zSq3NulpS0ISecUuaxx5pyjQXfVlAITu0tZqBSOsLZzD5ojrN6fsdbFf7f7gBw4sAbQ-jvRnCojzRwRVIBKT0AF12y-SLcml7XElyOAE5nfrajwpcdk8gznqQsFvbta_f?key=xraG3CJHvHw1T3viZ5TeyxTy\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0433\u0440 2048 \u0441 \u0418\u0418 Expectimax \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043b\u0438\u0442\u043e\u043a: 256, 512, 1024. 2048, 4096, 8092 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432\u0435\u0441\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 zeroWeight: 5.7,&nbsp; 8.7, 11.7 \u0438 13.7.<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcg8rXRWdDJJNysW1ijzOl2u6z2VpsSMGoFHHjrJPPCl6W8tyjmuS41I8JErfiyCm7VA6KdStxETUBsFJemUa7Ff2dKOhjeuCCRSqbNPTjo1aD0lvqg40Ka9BC-bcGNMXx79OAE7Q?key=xraG3CJHvHw1T3viZ5TeyxTy\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u0441\u0447\u0435\u0442 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">score<\/mark><\/code> \u0432 \u0438\u0433\u0440\u0430\u0445 2048 \u0441 \u0418\u0418 <strong>Expectimax<\/strong> \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043b\u0438\u0442\u043e\u043a: 512, 1024. 2048, 4096, 8092 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432\u0435\u0441\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 zeroWeight: 5.7,&nbsp; 8.7, 11.7 \u0438 13.7.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u0430 ( <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">average of score<\/mark><\/code>) \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442&nbsp; \u0432\u0435\u0441\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">zeroWeight<\/mark><\/code> \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0434\u0430\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430.&nbsp;<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041d\u043e \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432\u0435\u0441\u043e\u0432\u043e\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">zeroWeight <\/mark><\/code>=&nbsp; 11.7 \u0434\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0443\u0447\u0448\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u041c\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043b\u0438\u0442\u043a\u0443 \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 4096, a \u0432 \u0440\u0435\u0434\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438 8092, \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u044f \u0443\u0436\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043d\u0430\u0448\u0438\u0445 \u0440\u0443\u043a\u0430\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u041f\u041e\u0411\u0415\u0414\u0410 &#8212; \u0441\u0447\u0435\u0442 2048.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b, \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u0438\u0433\u0440\u044b 2048 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435.<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXfOaX6YG6JYIBb7ggwAsG3C2xOBoWzzKZlT0-Ys9JxKrGqDdonc_hHVOO3I5qyvHqoGfHPIo68cvF3gfOQLzdTPin2YcVwGcaj5o0p-I9PFnSa8JNF08df5oC9_9U2ixGkEbRPhFQfXYpeiOVoUITjwgz6D?key=xraG3CJHvHw1T3viZ5TeyxTy\" alt=\"\" style=\"width:338px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 <strong>Expectimax<\/strong> \u0438 <strong>Monte Carlo<\/strong>, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438\u0433\u0440 2048 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 <strong>SwiftData<\/strong>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <strong>Charts<\/strong> \u0432 \u0432\u0438\u0434\u0435 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0423 \u044d\u0442\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0438\u0433\u0440\u044b&nbsp; 2048: \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043b\u0438\u0442\u043a\u0438 maxTile \u0438 \u0441\u0447\u0435\u0442\u043e\u043c score.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0423 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <strong>Expectimax<\/strong> \u044d\u0442\u043e:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\"><\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u0433\u043b\u0443\u0431\u0438\u043d\u0430 <strong>depth<\/strong> \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0445\u043e\u0434\u043e\u0432 \u0432\u043f\u0435\u0440\u0435\u0434, \u043d\u043e \u0435\u0451 \u043d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u044f\u0442\u044c \u0432 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\u0445, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 depth = 5, \u0435\u0433\u043e \u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f,<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0432\u0435\u0441\u043e\u0432\u043e\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 <strong>zeroWeight<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439&nbsp; \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0447\u0438\u0441\u043b\u043e \u043f\u043b\u0438\u0442\u043e\u043a \u0441 \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c value, \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0435 evaluate() \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u043e\u0441\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0432\u044b\u0431\u043e\u0440 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0445\u043e\u0434\u0430 \u0432 \u0438\u0433\u0440\u0435 2048:<\/span><\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#EEFFFF;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(238, 255, 255, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#212121\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ MARK: - evaluateBoard\n    private func evaluateBoard (_ board: [&#91;Tile&#93;]) -> Double {\n        let grid = board.map {$0.map{$0.value}}\n        let emptyCells = board.flatMap { $0 }.filter { $0.value == 0 }.count\n            \n        let smoothWeight: Double = 0.1\n            let monoWeight: Double = 1.0\n        let emptyWeight: Double = Constants.zerosWeight \/\/ 5.7 8.7 11.7 13.7\n            let maxWeight: Double = 1.0\n            let maxTileCornerWeight = 1.0\n            \n            return monoWeight *  monotonicity(grid)\n         \/\/        + smoothWeight * smoothness(grid)\n                 + emptyWeight * Double(emptyCells)\n                 + maxWeight * Double(grid.flatMap { $0 }.max() ?? 2)\n             \/\/    + maxTileCornerWeight * maxTileInCorner(board)\n                 + snakeHeuristic(grid)\n        }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-darker\" style=\"background-color: #212121\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #545454; font-style: italic\">\/\/ MARK: - evaluateBoard<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">evaluateBoard<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">_<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">board<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #89DDFF\">[&#91;<\/span><span style=\"color: #EEFFFF\">Tile<\/span><span style=\"color: #89DDFF\">&#93;])<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> grid <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> board.<\/span><span style=\"color: #82AAFF\">map<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">$0.<\/span><span style=\"color: #82AAFF\">map<\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">$0.value<\/span><span style=\"color: #89DDFF\">}}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> emptyCells <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> board.<\/span><span style=\"color: #82AAFF\">flatMap<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> $0 <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">filter<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> $0.value <\/span><span style=\"color: #89DDFF\">==<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\">.count<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> smoothWeight: <\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0.1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> monoWeight: <\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">1.0<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> emptyWeight: <\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> Constants.zerosWeight <\/span><span style=\"color: #545454; font-style: italic\">\/\/ 5.7 8.7 11.7 13.7<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> maxWeight: <\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">1.0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> maxTileCornerWeight <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">1.0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> monoWeight <\/span><span style=\"color: #89DDFF\">*<\/span><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #82AAFF\">monotonicity<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">grid<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">         <\/span><span style=\"color: #545454; font-style: italic\">\/\/        + smoothWeight * smoothness(grid)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                 <\/span><span style=\"color: #89DDFF\">+<\/span><span style=\"color: #EEFFFF\"> emptyWeight <\/span><span style=\"color: #89DDFF\">*<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">emptyCells<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                 <\/span><span style=\"color: #89DDFF\">+<\/span><span style=\"color: #EEFFFF\"> maxWeight <\/span><span style=\"color: #89DDFF\">*<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">grid.<\/span><span style=\"color: #82AAFF\">flatMap<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> $0 <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">max<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">??<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">2<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">             <\/span><span style=\"color: #545454; font-style: italic\">\/\/    + maxTileCornerWeight * maxTileInCorner(board)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                 <\/span><span style=\"color: #89DDFF\">+<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">snakeHeuristic<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">grid<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0423 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <strong>Monte Carlo <\/strong>\u044d\u0442\u043e:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u0432\u0435\u0441\u043e\u0432\u043e\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 <strong>zeroWeightMC<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439&nbsp; \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0447\u0438\u0441\u043b\u043e \u043f\u043b\u0438\u0442\u043e\u043a \u0441 \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <strong>value<\/strong>, \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430\u0440\u044f\u0434\u0443 \u0441\u043e \u0441\u0447\u0435\u0442\u043e\u043c <strong>score<\/strong> \u0432 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0435 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u043e\u0441\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0432\u044b\u0431\u043e\u0440 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0445\u043e\u0434\u0430 \u0432 \u0438\u0433\u0440\u0435 2048,<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0447\u0438\u0441\u043b\u043e \u0447\u0438\u0441\u043b\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 <strong>simulations<\/strong>,<\/span><\/li>\n\n\n\n<li>&nbsp;<span style=\"font-weight: 400;\">\u0433\u043b\u0443\u0431\u0438\u043d\u0430 <strong>depth<\/strong> \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0445\u043e\u0434\u043e\u0432 \u0432\u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438.<\/span><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412\u043e\u0442 \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c <strong>SwiftData<\/strong> \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0432 <strong>Expectimax<\/strong>:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#EEFFFF;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#212121\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import Foundation\nimport SwiftData\n\n\/\/ MARK: - @Model TreeSearch\n@Model final class TreeSearch: Codable {\n    var algorithm: String\n    var time: Date = Date.now\n    var fourEstimate: Bool = false\n    var zeroWeight: Double = 11.7\n    var zerosBeginning: Int = 4\n    var maxTile: Int = 2\n    var score: Int = 0\n    var moves: Int = 0\n    \n    init(algorithm: String, time: Date, fourEstimate: Bool, zeroWeight: Double, zerosBeginning: Int, maxTile: Int, score: Int, moves: Int) {\n        self.algorithm = algorithm\n        self.time = time\n        self.fourEstimate = fourEstimate\n        self.zeroWeight = zeroWeight\n        self.zerosBeginning = zerosBeginning\n        self.maxTile = maxTile\n        self.score = score\n        self.moves = moves\n    }\n    \n    enum CodingKeys: String, CodingKey {\n            case algorithm\n            case time\n            case fourEstimate\n            case zeroWeight\n            case zerosBeginning\n            case maxTile\n            case score\n            case moves\n        }\n    \n    required init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        self.algorithm = try container.decode(String.self, forKey: .algorithm)\n        self.time = try container.decode(Date.self, forKey: .time)\n        self.fourEstimate = \n                    try container.decode(Bool.self, forKey: .fourEstimate)\n        self.zeroWeight = \n                    try container.decode(Double.self, forKey: .zeroWeight)\n        self.zerosBeginning = \n                    try container.decode(Int.self, forKey: .zerosBeginning)\n        self.maxTile = try container.decode(Int.self, forKey: .maxTile)\n        self.score = try container.decode(Int.self, forKey: .score)\n        self.moves = try container.decode(Int.self, forKey: .moves)\n    }\n    \n    func encode(to encoder: Encoder) throws {\n      \/\/ TODO: Handle encoding if you need to here\n        var container = encoder.container(keyedBy: CodingKeys.self)\n       \n        try container.encode(algorithm, forKey: .algorithm)\n        try container.encode(time, forKey: .time)\n        try container.encode(fourEstimate, forKey: .fourEstimate)\n        try container.encode(zeroWeight, forKey: .zeroWeight)\n        try container.encode(zerosBeginning, forKey: .zerosBeginning)\n        try container.encode(maxTile, forKey: .maxTile)\n        try container.encode(score, forKey: .score)\n        try container.encode(moves, forKey: .moves)\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-darker\" style=\"background-color: #212121\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Foundation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">SwiftData<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #545454; font-style: italic\">\/\/ MARK: - @Model TreeSearch<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">Model<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">final<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">class<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">TreeSearch<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Codable <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> algorithm: <\/span><span style=\"color: #FFCB6B\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> time: Date <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> Date.now<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> fourEstimate: <\/span><span style=\"color: #FFCB6B\">Bool<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FF9CAC\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> zeroWeight: <\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">11.7<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> zerosBeginning: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> maxTile: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> score: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> moves: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">init<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF; font-style: italic\">algorithm<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF; font-style: italic\">time<\/span><span style=\"color: #EEFFFF\">: Date, <\/span><span style=\"color: #82AAFF; font-style: italic\">fourEstimate<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">Bool<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF; font-style: italic\">zeroWeight<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF; font-style: italic\">zerosBeginning<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF; font-style: italic\">maxTile<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF; font-style: italic\">score<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF; font-style: italic\">moves<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.algorithm <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> algorithm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.time <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> time<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.fourEstimate <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> fourEstimate<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.zeroWeight <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> zeroWeight<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.zerosBeginning <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> zerosBeginning<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.maxTile <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> maxTile<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.score <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> score<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.moves <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> moves<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">enum<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">CodingKeys<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #FFCB6B\">CodingKey <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> algorithm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> time<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> fourEstimate<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> zeroWeight<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> zerosBeginning<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> maxTile<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> score<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> moves<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">required<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">init<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">from<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">decoder<\/span><span style=\"color: #EEFFFF\">: Decoder<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">throws<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> container <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> decoder.<\/span><span style=\"color: #82AAFF\">container<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">keyedBy<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> CodingKeys.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.algorithm <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .algorithm<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.time <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">Date.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .time<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.fourEstimate <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Bool<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .fourEstimate<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.zeroWeight <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .zeroWeight<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.zerosBeginning <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .zerosBeginning<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.maxTile <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .maxTile<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.score <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .score<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.moves <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .moves<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">to<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">encoder<\/span><span style=\"color: #EEFFFF\">: Encoder<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">throws<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">      <\/span><span style=\"color: #545454; font-style: italic\">\/\/ TODO: Handle encoding if you need to here<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> container <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> encoder.<\/span><span style=\"color: #82AAFF\">container<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">keyedBy<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> CodingKeys.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">       <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">algorithm, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .algorithm<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">time, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .time<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">fourEstimate, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .fourEstimate<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">zeroWeight, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .zeroWeight<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">zerosBeginning, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .zerosBeginning<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">maxTile, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .maxTile<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">score, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .score<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">moves, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .moves<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0410 \u0432\u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c <strong>SwiftData<\/strong> \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <strong>Monte Carlo<\/strong>:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#EEFFFF;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#212121\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import Foundation\nimport SwiftData\n\n\/\/ MARK: - @Model MonteCarloNew\n\n@Model final class MonterCarloNew: Codable {\n\n    var algorithm: String = \"Monte Carlo\"\n    var time: Date = Date.now\n    var numberSimulations: Int = 100\n    var deep: Int = 10\n    var limitZeros: Int = 4\n    var maxTile: Int = 2\n    var score: Int = 0\n    var moves: Int = 0\n    var zerosWeightMC : Int = 16384\n    \n    init(algorithm: String,time: Date, numberExperiments: Int, deep: Int, limitZeros: Int, maxTile: Int, score: Int, moves: Int, zerosWeightMC : Int) {\n        self.algorithm = algorithm\n        self.time = time\n        self.numberSimulations = numberExperiments\n        self.deep = deep\n        self.limitZeros = limitZeros\n        self.maxTile = maxTile\n        self.score = score\n        self.moves = moves\n        self.zerosWeightMC = zerosWeightMC\n    }\n    \n    enum CodingKeys: String, CodingKey {\n            case algorithm\n            case time\n            case numberExperiments\n            case deep\n            case limitZeros\n            case maxTile\n            case score\n            case moves\n            case zerosWeightMC\n        }\n    \n    required init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        self.algorithm = try container.decode(String.self, forKey: .algorithm)\n        self.time = try container.decode(Date.self, forKey: .time)\n        self.numberSimulations = \n                    try container.decode(Int.self, forKey: .numberExperiments)\n        self.deep = try container.decode(Int.self, forKey: .deep)\n        self.limitZeros = try container.decode(Int.self, forKey: .limitZeros)\n        self.maxTile = try container.decode(Int.self, forKey: .maxTile)\n        self.score = try container.decode(Int.self, forKey: .score)\n        self.moves = try container.decode(Int.self, forKey: .moves)\n        self.zerosWeightMC = \n                     try container.decode(Int.self, forKey: .zerosWeightMC)\n    }\n    \n    func encode(to encoder: Encoder) throws {\n      \/\/ TODO: Handle encoding if you need to here\n        var container = encoder.container(keyedBy: CodingKeys.self)\n       \n        try container.encode(algorithm, forKey: .algorithm)\n        try container.encode(time, forKey: .time)\n        try container.encode(numberSimulations, forKey: .numberExperiments)\n        try container.encode(deep, forKey: .deep)\n        try container.encode(limitZeros, forKey: .limitZeros)\n        try container.encode(maxTile, forKey: .maxTile)\n        try container.encode(score, forKey: .score)\n        try container.encode(moves, forKey: .moves)\n        try container.encode(zerosWeightMC, forKey: .zerosWeightMC)\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-darker\" style=\"background-color: #212121\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Foundation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">SwiftData<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #545454; font-style: italic\">\/\/ MARK: - @Model MonteCarloNew<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">Model<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">final<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">class<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">MonterCarloNew<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Codable <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> algorithm: <\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Monte Carlo<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> time: Date <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> Date.now<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> numberSimulations: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">100<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> deep: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">10<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> limitZeros: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> maxTile: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> score: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> moves: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> zerosWeightMC : <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">16384<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">init<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF; font-style: italic\">algorithm<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #EEFFFF\">,<\/span><span style=\"color: #82AAFF; font-style: italic\">time<\/span><span style=\"color: #EEFFFF\">: Date, <\/span><span style=\"color: #82AAFF; font-style: italic\">numberExperiments<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF; font-style: italic\">deep<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF; font-style: italic\">limitZeros<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF; font-style: italic\">maxTile<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF; font-style: italic\">score<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF; font-style: italic\">moves<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF; font-style: italic\">zerosWeightMC<\/span><span style=\"color: #EEFFFF\"> : <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.algorithm <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> algorithm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.time <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> time<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.numberSimulations <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> numberExperiments<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.deep <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> deep<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.limitZeros <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> limitZeros<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.maxTile <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> maxTile<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.score <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> score<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.moves <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> moves<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.zerosWeightMC <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> zerosWeightMC<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">enum<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">CodingKeys<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #FFCB6B\">CodingKey <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> algorithm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> time<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> numberExperiments<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> deep<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> limitZeros<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> maxTile<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> score<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> moves<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">case<\/span><span style=\"color: #EEFFFF\"> zerosWeightMC<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">required<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">init<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">from<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">decoder<\/span><span style=\"color: #EEFFFF\">: Decoder<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">throws<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> container <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> decoder.<\/span><span style=\"color: #82AAFF\">container<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">keyedBy<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> CodingKeys.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.algorithm <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .algorithm<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.time <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">Date.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .time<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.numberSimulations <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .numberExperiments<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.deep <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .deep<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.limitZeros <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .limitZeros<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.maxTile <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .maxTile<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.score <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .score<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.moves <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .moves<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        self.zerosWeightMC <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                     <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">decode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .zerosWeightMC<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">to<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">encoder<\/span><span style=\"color: #EEFFFF\">: Encoder<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">throws<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">      <\/span><span style=\"color: #545454; font-style: italic\">\/\/ TODO: Handle encoding if you need to here<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> container <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> encoder.<\/span><span style=\"color: #82AAFF\">container<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">keyedBy<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> CodingKeys.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">       <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">algorithm, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .algorithm<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">time, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .time<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">numberSimulations, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .numberExperiments<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">deep, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .deep<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">limitZeros, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .limitZeros<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">maxTile, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .maxTile<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">score, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .score<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">moves, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .moves<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> container.<\/span><span style=\"color: #82AAFF\">encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">zerosWeightMC, <\/span><span style=\"color: #82AAFF\">forKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .zerosWeightMC<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 <strong>SwiftData<\/strong> \u043c\u043e\u0434\u0435\u043b\u0438 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">Codable<\/mark><\/code>, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0411\u0414 <strong>SwiftData<\/strong> \u0432 \u0444\u0430\u0439\u043b \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u0437 \u0444\u0430\u0439\u043b\u0430.&nbsp;<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438\u0433\u0440\u0430 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c, \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0411\u0414.<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#EEFFFF;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(238, 255, 255, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#212121\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>  struct GameView: View {\n    @State private var viewModel = GameViewModel()\n    let tileSize: CGFloat = 80\n    let padding: CGFloat = 8\n    \n    @State var isAIPlaying = false\n    @State var selectedAlgorithm = Algorithm.Expectimax\n    @State var timer = Timer.publish(every: 0.45, on: .main, in: .common).autoconnect()\n    var body: some View {\n        VStack { . . .}\n        .onReceive(timer){ value in\n          if isAIPlaying {\n              if !viewModel.isGameOver {\n                  if selectedAlgorithm == Algorithm.MonteCarloAsync {\n                      viewModel.monteCarloAsyncAIMove()\n                  } else if selectedAlgorithm == Algorithm.Expectimax1 {\n                      viewModel.expectimaxAsyncAIMove()\n                  } else {\n                      viewModel.executeAIMove()\n                  }\n              } else {\n                  isAIPlaying  = false\n                  writeDB()               \n              }\n          }\n        }\n       \/\/ another modifiers  \n     }    \n\nprivate func writeDB(){\n        \/\/--------\n        let grid = viewModel.tiles.map {$0.map{$0.value}}\n        let maxTile = grid.flatMap { $0 }.max() ?? 2\n        \n        if selectedAlgorithm == Algorithm.MonteCarloAsync ||  \n           selectedAlgorithm == Algorithm.MonteCarlo {\n                \u0441ontext.insert(\n                    MonterCarloNew(algorithm:selectedAlgorithm.rawValue,\n                              time: Date.now,\n                              numberExperiments: Constants.numberSimilations, \n                              deep: Constants.deep, \n                              limitZeros: Constants.limitZeros, \n                              maxTile:  maxTile, \n                              score: viewModel.score, \n                              moves: 0,\n                              zerosWeightMC: Constants.zerosWeightMC))\n            \u0441ontext.saveContext()\n        } else {\n            \u0441ontext.insert(\n                     TreeSearch(algorithm: selectedAlgorithm.rawValue, \n                                time: Date.now, fourEstimate: true, \n                                zeroWeight: Constants.zerosWeight, \n                                zerosBeginning : Constants.zerosBeginning ,\n                                maxTile:  maxTile, \n                                score: viewModel.score, \n                                moves: 0))\n            \u0441ontext.saveContext()\n        }\n    \/\/---------\n    }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-darker\" style=\"background-color: #212121\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #C792EA\">struct<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">GameView<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">State<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> viewModel <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">GameViewModel<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> tileSize: CGFloat <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">80<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> padding: CGFloat <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">8<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">State<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> isAIPlaying <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FF9CAC\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">State<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> selectedAlgorithm <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> Algorithm.Expectimax<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">State<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> timer <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> Timer.<\/span><span style=\"color: #82AAFF\">publish<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">every<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0.45<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">on<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .main, <\/span><span style=\"color: #82AAFF\">in<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .common<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">autoconnect<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> body: <\/span><span style=\"color: #F78C6C\">some<\/span><span style=\"color: #EEFFFF\"> View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #82AAFF\">VStack<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> . . .<\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        .<\/span><span style=\"color: #82AAFF\">onReceive<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">timer<\/span><span style=\"color: #89DDFF\">){<\/span><span style=\"color: #EEFFFF\"> value <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">          <\/span><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #EEFFFF\"> isAIPlaying <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">              <\/span><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">!<\/span><span style=\"color: #EEFFFF\">viewModel.isGameOver <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                  <\/span><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #EEFFFF\"> selectedAlgorithm <\/span><span style=\"color: #89DDFF\">==<\/span><span style=\"color: #EEFFFF\"> Algorithm.MonteCarloAsync <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                      viewModel.<\/span><span style=\"color: #82AAFF\">monteCarloAsyncAIMove<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                  <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">else<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #EEFFFF\"> selectedAlgorithm <\/span><span style=\"color: #89DDFF\">==<\/span><span style=\"color: #EEFFFF\"> Algorithm.Expectimax1 <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                      viewModel.<\/span><span style=\"color: #82AAFF\">expectimaxAsyncAIMove<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                  <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">else<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                      viewModel.<\/span><span style=\"color: #82AAFF\">executeAIMove<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                  <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">              <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">else<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                  isAIPlaying  <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FF9CAC\">false<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #EEFFFF\">                  <\/span><span style=\"color: #82AAFF\">writeDB<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\">               <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">              <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">          <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">       <\/span><span style=\"color: #545454; font-style: italic\">\/\/ another modifiers  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">     <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">writeDB<\/span><span style=\"color: #89DDFF\">(){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">        <\/span><span style=\"color: #545454; font-style: italic\">\/\/--------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> grid <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> viewModel.tiles.<\/span><span style=\"color: #82AAFF\">map<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">$0.<\/span><span style=\"color: #82AAFF\">map<\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">$0.value<\/span><span style=\"color: #89DDFF\">}}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> maxTile <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> grid.<\/span><span style=\"color: #82AAFF\">flatMap<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> $0 <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">max<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">??<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #EEFFFF\"> selectedAlgorithm <\/span><span style=\"color: #89DDFF\">==<\/span><span style=\"color: #EEFFFF\"> Algorithm.MonteCarloAsync <\/span><span style=\"color: #89DDFF\">||<\/span><span style=\"color: #EEFFFF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">           selectedAlgorithm <\/span><span style=\"color: #89DDFF\">==<\/span><span style=\"color: #EEFFFF\"> Algorithm.MonteCarlo <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                \u0441ontext.<\/span><span style=\"color: #82AAFF\">insert<\/span><span style=\"color: #89DDFF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #82AAFF\">MonterCarloNew<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">algorithm<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\">selectedAlgorithm.rawValue,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                              <\/span><span style=\"color: #82AAFF\">time<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> Date.now,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                              <\/span><span style=\"color: #82AAFF\">numberExperiments<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> Constants.numberSimilations, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                              <\/span><span style=\"color: #82AAFF\">deep<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> Constants.deep, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                              <\/span><span style=\"color: #82AAFF\">limitZeros<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> Constants.limitZeros, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                              <\/span><span style=\"color: #82AAFF\">maxTile<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\">  maxTile, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                              <\/span><span style=\"color: #82AAFF\">score<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> viewModel.score, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                              <\/span><span style=\"color: #82AAFF\">moves<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #EEFFFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                              <\/span><span style=\"color: #82AAFF\">zerosWeightMC<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> Constants.zerosWeightMC<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            \u0441ontext.<\/span><span style=\"color: #82AAFF\">saveContext<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">else<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            \u0441ontext.<\/span><span style=\"color: #82AAFF\">insert<\/span><span style=\"color: #89DDFF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                     <\/span><span style=\"color: #82AAFF\">TreeSearch<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">algorithm<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> selectedAlgorithm.rawValue, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                <\/span><span style=\"color: #82AAFF\">time<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> Date.now, <\/span><span style=\"color: #82AAFF\">fourEstimate<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FF9CAC\">true<\/span><span style=\"color: #EEFFFF\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                <\/span><span style=\"color: #82AAFF\">zeroWeight<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> Constants.zerosWeight, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                <\/span><span style=\"color: #82AAFF\">zerosBeginning<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> Constants.zerosBeginning ,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                <\/span><span style=\"color: #82AAFF\">maxTile<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\">  maxTile, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                <\/span><span style=\"color: #82AAFF\">score<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> viewModel.score, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                <\/span><span style=\"color: #82AAFF\">moves<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            \u0441ontext.<\/span><span style=\"color: #82AAFF\">saveContext<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">    <\/span><span style=\"color: #545454; font-style: italic\">\/\/---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u0430\u043d\u043d\u044b\u0435, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 \u0411\u0414 &nbsp;SwiftData, \u0441\u043e\u0437\u0434\u0430\u0435\u043c&nbsp; <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">ChartTreeView<\/mark><\/code> \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <strong>Expectimax<\/strong> \u0432 \u0432\u0438\u0434\u0435 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#EEFFFF;--cbp-line-number-width:calc(3 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(238, 255, 255, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#212121\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import SwiftUI\nimport Charts\nimport SwiftData\n\n\/\/-------------------------\nstruct MaxTileFrequencyExp: Identifiable {\n    let maxTile: Int\n    let zeroWeight: Double\n    let count: Int\n    var id: Int { maxTile.hashValue ^ zeroWeight.hashValue }\n    var avrScore: Int = 0\n    var animate: Bool = false\n}\n\nstruct MaxTileZeroWeigtKey: Hashable {\n    let maxTile: Int\n    let zeroWeight: Double\n}\n\/\/---------------------------\nstruct ChartTreeView: View {\n    @Query(sort: \\TreeSearch.time, order: .forward)  \n                                          var expectimaxs: &#91;TreeSearch&#93;\n    @State private var algorithm: String = \"All\"\n    \/\/---- animate ----\n    @State var sampleAnalitics: [String: &#91;MaxTileFrequencyExp&#93;]  = &#91;:&#93;\n    \/\/---------------   \n    var filteredExpectimaxs: &#91;TreeSearch&#93; {\n        if algorithm == \"All\" { return expectimaxs }\n        return expectimaxs.compactMap { item in\n            return item.algorithm == algorithm ? item : nil\n        }\n    }\n    \n    var maxTileFrequencyByZeroWeight: &#91;MaxTileFrequencyExp&#93; {\n        let groupedData = Dictionary(\n            grouping: filteredExpectimaxs,\n            by: { MaxTileZeroWeigtKey(maxTile: $0.maxTile, \n                                      zeroWeight: $0.zeroWeight) }\n        )\n        \n        return groupedData.map { key, results in\n            MaxTileFrequencyExp(\n                maxTile: key.maxTile,\n                zeroWeight: key.zeroWeight,\n                count: results.count,\n                avrScore: results.map{$0.score}.average() \/ 1000\n            )\n        }\n        .sorted { $0.maxTile &lt; $1.maxTile }\n    }\n \n    var groupedData: [String: &#91;MaxTileFrequencyExp&#93;] {\n        Dictionary(grouping: maxTileFrequencyByZeroWeight, \n                         by: { String($0.zeroWeight)})\n    }\n\n    var marks:  &#91;String&#93; {\n      Array(Set(maxTileFrequencyByZeroWeight.map { $0.maxTile }))\n                         .map {String($0)}.sorted { Int($0)! &lt; Int($1)! }\n    }\n\n    var body: some View {\n         VStack {\n           HStack {\n             Text (\"Algorithm:\")\n              Picker( selection: $algorithm, label: Text(\"\")) {\n                ForEach(&#91;\"All\",\"Expectimax\", \"ExpectiMAsync\"&#93;, id: \\.self) {\n                 algorithm in\n                            Text(\"\\(algorithm)\").tag(\"\\(algorithm)\")\n                        }\n                    }\n                    .pickerStyle(.segmented)\n                    .padding(.leading, 10)\n                }\n                .padding(.bottom)\n             \/\/--------------------------------------------------------------\n              Section(header: Text(\"Number of MaxTile\").font(.subheadline)) {\n                    AnimatedChart\n              }\n              Section(header: Text(\"Average of score\").font(.subheadline)) {\n                    AnimatedChartAverage\n              }\n            \/\/----------------\n        }\/\/ VStack\n            .onChange(of: algorithm) { oldValue, newValue in\n                sampleAnalitics =  groupedData\n                \/\/ Re - Animating View\n                animateGraph(fromChange: true)\n            }\n            .padding()\n    } \/\/ body\n    \n    private var AnimatedChart: some View {\n       let max = sampleAnalitics.values.flatMap{$0}.map{$0.count}.max () ?? 0\n       return Chart {\n ForEach( sampleAnalitics.keys.sorted {Double($0)! &lt; Double($1)!}, id:\\.self) \n        { element in\n                ForEach(sampleAnalitics&#91;element&#93;!, id: \\.maxTile) { stat in\n                    BarMark(\n                        x: .value(\"MaxTile\", String(stat.maxTile)),\n                        y: .value(\"Count\",  stat.animate ? stat.count : 0)\n                    )\n                    .annotation (position: .top) {\n                        Text(String(stat.count))\n                            .foregroundColor(.black)\n                            .font(.footnote)\n                    }\n                }\n                .foregroundStyle(by: .value(\"Simulations\", element))\n                .position(by: .value(\"Simulations\", element))\n            }\n        }\n        \/\/ MARK: Customizing Y-Axis Length\n        .chartYScale(domain: 0...(max ) )\n        \/\/ MARK: Customizing X-Axis Length\n        .chartXScale(domain: marks)\n        .aspectRatio(1, contentMode: .fit)\n        .padding()\n        \/\/----- animate -------\n        .onAppear{\n            animateGraph()\n         } \/\/ onAppear\n    }\n    \n  private var AnimatedChartAverage: some View {\n    let max = sampleAnalitics.values.flatMap{$0}.map{$0.avrScore}.max () ?? 0\n         return Chart {\nForEach( sampleAnalitics.keys.sorted {Double($0)! &lt; Double($1)!} , id:\\.self) \n        { element in\n                 ForEach(sampleAnalitics&#91;element&#93;!, id: \\.maxTile) { stat in\n                     BarMark(\n                       x: .value(\"MaxTile\", String(stat.maxTile)),\n                       y: .value(\"Count\",  stat.animate ? stat.avrScore : 0)\n                     )\n                     .annotation (position: .top) {\n                         Text(String(stat.avrScore))\n                             .foregroundColor(.black)\n                             .font(.footnote)\n                     }\n                 }\n                 .foregroundStyle(by: .value(\"Simulations\", element))\n                 .position(by: .value(\"Simulations\", element))\n             }\n         }\n         \/\/ MARK: Customizing Y-Axis Length\n         .chartYScale(domain: 0...(max ) )\n         \/\/ MARK: Customizing X-Axis Length\n         .chartXScale(domain: marks)\n         .aspectRatio(1, contentMode: .fit)\n         .padding()\n    }\n    \/\/------- animate ----\n    func animateGraph(fromChange: Bool = false) {\n        sampleAnalitics = groupedData\n        \n        for  key in groupedData.keys.sorted(by: {Double($0)! &lt; Double($1)!})  {\n            if let bars =  groupedData &#91;key&#93; {\n            for (index, _) in bars.enumerated() {\n                \n                \/\/ For Some Reason Delay is Not Working\n                \/\/ Using DispatchQueue Delay\n                DispatchQueue.main.asyncAfter(deadline: .now() + Double(index) * (fromChange ? 0.03 : 0.05)) {\n                    withAnimation( fromChange ? .easeIn(duration: 0.8) : \n                    .interactiveSpring(response:0.8, \n                                       dampingFraction: 0.8, \n                                       blendDuration: 0.8))  {\n                        sampleAnalitics&#91;key&#93;! &#91;index&#93;.animate = true  \n                    } \/\/ with\n                } \/\/ DispatchQueue\n            } \/\/ for\n        } \/\/ if\n      } \/\/ for\n    }\/\/ func\n    \/\/---------------------\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-darker\" style=\"background-color: #212121\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">SwiftUI<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Charts<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">SwiftData<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #545454; font-style: italic\">\/\/-------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">struct<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">MaxTileFrequencyExp<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Identifiable <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> maxTile: <\/span><span style=\"color: #FFCB6B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> zeroWeight: <\/span><span style=\"color: #FFCB6B\">Double<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> count: <\/span><span style=\"color: #FFCB6B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> id: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> maxTile.hashValue <\/span><span style=\"color: #89DDFF\">^<\/span><span style=\"color: #EEFFFF\"> zeroWeight.hashValue <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> avrScore: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> animate: <\/span><span style=\"color: #FFCB6B\">Bool<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FF9CAC\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">struct<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">MaxTileZeroWeigtKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Hashable <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> maxTile: <\/span><span style=\"color: #FFCB6B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> zeroWeight: <\/span><span style=\"color: #FFCB6B\">Double<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #545454; font-style: italic\">\/\/---------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">struct<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">ChartTreeView<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">Query<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">sort<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> \\TreeSearch.time, order<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .forward<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                          <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> expectimaxs: <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">TreeSearch<\/span><span style=\"color: #89DDFF\">&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">State<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> algorithm: <\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">All<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">    <\/span><span style=\"color: #545454; font-style: italic\">\/\/---- animate ----<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">State<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> sampleAnalitics: <\/span><span style=\"color: #89DDFF\">[<\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">MaxTileFrequencyExp<\/span><span style=\"color: #89DDFF\">&#93;]<\/span><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> &#91;<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\">&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">    <\/span><span style=\"color: #545454; font-style: italic\">\/\/---------------   <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> filteredExpectimaxs: <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">TreeSearch<\/span><span style=\"color: #89DDFF\">&#93;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #EEFFFF\"> algorithm <\/span><span style=\"color: #89DDFF\">==<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">All<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> expectimaxs <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> expectimaxs.<\/span><span style=\"color: #82AAFF\">compactMap<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> item <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> item.algorithm <\/span><span style=\"color: #89DDFF\">==<\/span><span style=\"color: #EEFFFF\"> algorithm <\/span><span style=\"color: #89DDFF\">?<\/span><span style=\"color: #EEFFFF\"> item <\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">nil<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> maxTileFrequencyByZeroWeight: <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">MaxTileFrequencyExp<\/span><span style=\"color: #89DDFF\">&#93;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> groupedData <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Dictionary<\/span><span style=\"color: #89DDFF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">grouping<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> filteredExpectimaxs,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">by<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">MaxTileZeroWeigtKey<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">maxTile<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> $0.maxTile, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                      <\/span><span style=\"color: #82AAFF\">zeroWeight<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> $0.zeroWeight<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> groupedData.<\/span><span style=\"color: #82AAFF\">map<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> key, results <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">MaxTileFrequencyExp<\/span><span style=\"color: #89DDFF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">maxTile<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> key.maxTile,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">zeroWeight<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> key.zeroWeight,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">count<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> results.count,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">avrScore<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> results.<\/span><span style=\"color: #82AAFF\">map<\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">$0.score<\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">average<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">\/<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">1000<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        .<\/span><span style=\"color: #82AAFF\">sorted<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> $0.maxTile <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #EEFFFF\"> $1.maxTile <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> groupedData: <\/span><span style=\"color: #89DDFF\">[<\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">MaxTileFrequencyExp<\/span><span style=\"color: #89DDFF\">&#93;]<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #FFCB6B\">Dictionary<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">grouping<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> maxTileFrequencyByZeroWeight, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                         <\/span><span style=\"color: #82AAFF\">by<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">$0.zeroWeight<\/span><span style=\"color: #89DDFF\">)})<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> marks:  <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">&#93;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">      <\/span><span style=\"color: #FFCB6B\">Array<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Set<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">maxTileFrequencyByZeroWeight.<\/span><span style=\"color: #82AAFF\">map<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> $0.maxTile <\/span><span style=\"color: #89DDFF\">}))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                         .<\/span><span style=\"color: #82AAFF\">map<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">$0<\/span><span style=\"color: #89DDFF\">)}<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">sorted<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">$0<\/span><span style=\"color: #89DDFF\">)!<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">$1<\/span><span style=\"color: #89DDFF\">)!<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> body: <\/span><span style=\"color: #F78C6C\">some<\/span><span style=\"color: #EEFFFF\"> View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">         <\/span><span style=\"color: #82AAFF\">VStack<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">           <\/span><span style=\"color: #82AAFF\">HStack<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">             <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Algorithm:<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">              <\/span><span style=\"color: #82AAFF\">Picker<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">selection<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> $algorithm, <\/span><span style=\"color: #82AAFF\">label<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;&quot;<\/span><span style=\"color: #89DDFF\">))<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">ForEach<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">&#91;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">All<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">,<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Expectimax<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">ExpectiMAsync<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">&#93;, <\/span><span style=\"color: #82AAFF\">id<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> \\.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                 algorithm <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                            <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">algorithm<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">tag<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">algorithm<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    .<\/span><span style=\"color: #82AAFF\">pickerStyle<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.segmented<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    .<\/span><span style=\"color: #82AAFF\">padding<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.leading, <\/span><span style=\"color: #F78C6C\">10<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                .<\/span><span style=\"color: #82AAFF\">padding<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.bottom<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">             <\/span><span style=\"color: #545454; font-style: italic\">\/\/--------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">              <\/span><span style=\"color: #82AAFF\">Section<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Number of MaxTile<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">font<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.subheadline<\/span><span style=\"color: #89DDFF\">))<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #EEFFFF\">                    AnimatedChart<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">              <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">              <\/span><span style=\"color: #82AAFF\">Section<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Average of score<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">font<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.subheadline<\/span><span style=\"color: #89DDFF\">))<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #EEFFFF\">                    AnimatedChartAverage<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">              <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">            <\/span><span style=\"color: #545454; font-style: italic\">\/\/----------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #545454; font-style: italic\">\/\/ VStack<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            .<\/span><span style=\"color: #82AAFF\">onChange<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">of<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> algorithm<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> oldValue, newValue <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #EEFFFF\">                sampleAnalitics <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\">  groupedData<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">                <\/span><span style=\"color: #545454; font-style: italic\">\/\/ Re - Animating View<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">animateGraph<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">fromChange<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FF9CAC\">true<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            .<\/span><span style=\"color: #82AAFF\">padding<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ body<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> AnimatedChart: <\/span><span style=\"color: #F78C6C\">some<\/span><span style=\"color: #EEFFFF\"> View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">       <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> max <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> sampleAnalitics.values.<\/span><span style=\"color: #82AAFF\">flatMap<\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">$0<\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">map<\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">$0.count<\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">max<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">??<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">       <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">Chart<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">ForEach<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\"> sampleAnalitics.keys.<\/span><span style=\"color: #82AAFF\">sorted<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">$0<\/span><span style=\"color: #89DDFF\">)!<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">$1<\/span><span style=\"color: #89DDFF\">)!}<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">id<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\">\\.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> element <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">ForEach<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">sampleAnalitics<\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">element<\/span><span style=\"color: #89DDFF\">&#93;!<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">id<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> \\.maxTile<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> stat <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #82AAFF\">BarMark<\/span><span style=\"color: #89DDFF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                        <\/span><span style=\"color: #82AAFF\">x<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .value<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">MaxTile<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">stat.maxTile<\/span><span style=\"color: #89DDFF\">))<\/span><span style=\"color: #EEFFFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                        <\/span><span style=\"color: #82AAFF\">y<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .value<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Count<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">,  stat.animate <\/span><span style=\"color: #89DDFF\">?<\/span><span style=\"color: #EEFFFF\"> stat.count <\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    .<\/span><span style=\"color: #82AAFF\">annotation<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">position<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .top<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                        <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">stat.count<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                            .<\/span><span style=\"color: #82AAFF\">foregroundColor<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.black<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                            .<\/span><span style=\"color: #82AAFF\">font<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.footnote<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                .<\/span><span style=\"color: #82AAFF\">foregroundStyle<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">by<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .value<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Simulations<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, element<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                .<\/span><span style=\"color: #82AAFF\">position<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">by<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .value<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Simulations<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, element<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">        <\/span><span style=\"color: #545454; font-style: italic\">\/\/ MARK: Customizing Y-Axis Length<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        .<\/span><span style=\"color: #82AAFF\">chartYScale<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">domain<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #89DDFF\">...(<\/span><span style=\"color: #EEFFFF\">max <\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">        <\/span><span style=\"color: #545454; font-style: italic\">\/\/ MARK: Customizing X-Axis Length<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        .<\/span><span style=\"color: #82AAFF\">chartXScale<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">domain<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> marks<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        .<\/span><span style=\"color: #82AAFF\">aspectRatio<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #F78C6C\">1<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">contentMode<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .fit<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        .<\/span><span style=\"color: #82AAFF\">padding<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">        <\/span><span style=\"color: #545454; font-style: italic\">\/\/----- animate -------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        .<\/span><span style=\"color: #82AAFF\">onAppear<\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">animateGraph<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">         <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ onAppear<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> AnimatedChartAverage: <\/span><span style=\"color: #F78C6C\">some<\/span><span style=\"color: #EEFFFF\"> View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> max <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> sampleAnalitics.values.<\/span><span style=\"color: #82AAFF\">flatMap<\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">$0<\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">map<\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">$0.avrScore<\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">max<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">??<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">         <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">Chart<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #82AAFF\">ForEach<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\"> sampleAnalitics.keys.<\/span><span style=\"color: #82AAFF\">sorted<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">$0<\/span><span style=\"color: #89DDFF\">)!<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">$1<\/span><span style=\"color: #89DDFF\">)!}<\/span><span style=\"color: #EEFFFF\"> , <\/span><span style=\"color: #82AAFF\">id<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\">\\.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> element <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                 <\/span><span style=\"color: #82AAFF\">ForEach<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">sampleAnalitics<\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">element<\/span><span style=\"color: #89DDFF\">&#93;!<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">id<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> \\.maxTile<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> stat <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                     <\/span><span style=\"color: #82AAFF\">BarMark<\/span><span style=\"color: #89DDFF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                       <\/span><span style=\"color: #82AAFF\">x<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .value<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">MaxTile<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">stat.maxTile<\/span><span style=\"color: #89DDFF\">))<\/span><span style=\"color: #EEFFFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                       <\/span><span style=\"color: #82AAFF\">y<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .value<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Count<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">,  stat.animate <\/span><span style=\"color: #89DDFF\">?<\/span><span style=\"color: #EEFFFF\"> stat.avrScore <\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                     <\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                     .<\/span><span style=\"color: #82AAFF\">annotation<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">position<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .top<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                         <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">stat.avrScore<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                             .<\/span><span style=\"color: #82AAFF\">foregroundColor<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.black<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                             .<\/span><span style=\"color: #82AAFF\">font<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.footnote<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                     <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                 <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                 .<\/span><span style=\"color: #82AAFF\">foregroundStyle<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">by<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .value<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Simulations<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, element<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                 .<\/span><span style=\"color: #82AAFF\">position<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">by<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .value<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Simulations<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, element<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">             <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">         <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">         <\/span><span style=\"color: #545454; font-style: italic\">\/\/ MARK: Customizing Y-Axis Length<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">         .<\/span><span style=\"color: #82AAFF\">chartYScale<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">domain<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #89DDFF\">...(<\/span><span style=\"color: #EEFFFF\">max <\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">         <\/span><span style=\"color: #545454; font-style: italic\">\/\/ MARK: Customizing X-Axis Length<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">         .<\/span><span style=\"color: #82AAFF\">chartXScale<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">domain<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> marks<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">         .<\/span><span style=\"color: #82AAFF\">aspectRatio<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #F78C6C\">1<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">contentMode<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .fit<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">         .<\/span><span style=\"color: #82AAFF\">padding<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">    <\/span><span style=\"color: #545454; font-style: italic\">\/\/------- animate ----<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">animateGraph<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF; font-style: italic\">fromChange<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">Bool<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FF9CAC\">false<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        sampleAnalitics <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> groupedData<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">for<\/span><span style=\"color: #EEFFFF\">  key <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><span style=\"color: #EEFFFF\"> groupedData.keys.<\/span><span style=\"color: #82AAFF\">sorted<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">by<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">$0<\/span><span style=\"color: #89DDFF\">)!<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">$1<\/span><span style=\"color: #89DDFF\">)!})<\/span><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> bars <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\">  groupedData <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">key<\/span><span style=\"color: #89DDFF\">&#93;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">for<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">index, _<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><span style=\"color: #EEFFFF\"> bars.<\/span><span style=\"color: #82AAFF\">enumerated<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">                <\/span><span style=\"color: #545454; font-style: italic\">\/\/ For Some Reason Delay is Not Working<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">                <\/span><span style=\"color: #545454; font-style: italic\">\/\/ Using DispatchQueue Delay<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                DispatchQueue.main.<\/span><span style=\"color: #82AAFF\">asyncAfter<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">deadline<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .<\/span><span style=\"color: #82AAFF\">now<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">+<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">index<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">*<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">fromChange <\/span><span style=\"color: #89DDFF\">?<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0.03<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0.05<\/span><span style=\"color: #89DDFF\">))<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #82AAFF\">withAnimation<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\"> fromChange <\/span><span style=\"color: #89DDFF\">?<\/span><span style=\"color: #EEFFFF\"> .<\/span><span style=\"color: #82AAFF\">easeIn<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">duration<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0.8<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    .<\/span><span style=\"color: #82AAFF\">interactiveSpring<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">response<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #F78C6C\">0.8<\/span><span style=\"color: #EEFFFF\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                       <\/span><span style=\"color: #82AAFF\">dampingFraction<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0.8<\/span><span style=\"color: #EEFFFF\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                       <\/span><span style=\"color: #82AAFF\">blendDuration<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0.8<\/span><span style=\"color: #89DDFF\">))<\/span><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                        sampleAnalitics<\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">key<\/span><span style=\"color: #89DDFF\">&#93;!<\/span><span style=\"color: #EEFFFF\"> &#91;index&#93;.animate <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FF9CAC\">true<\/span><span style=\"color: #EEFFFF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ with<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ DispatchQueue<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ for<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ if<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">      <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ for<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #545454; font-style: italic\">\/\/ func<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">    <\/span><span style=\"color: #545454; font-style: italic\">\/\/---------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u0434\u043b\u044f <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">TreeSearchView<\/mark><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <strong>Expectimax<\/strong> \u0432 \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#EEFFFF;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#212121\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import SwiftUI\nimport SwiftData\n\nstruct TreeSearchView: View {\n    @Environment(\\.modelContext) private var context\n    @Query(sort: \\TreeSearch.time, order: .forward)  var items: &#91;TreeSearch&#93;\n    var body: some View {\n      NavigationStack {\n        List {\n          ForEach(groupByZeroWeight(items), id: \\.0) { montes in\n            Section(header: Text(\"\\(String(montes.0))  \\(montes.1.count)\")) {\n                 ForEach(montes.1) { item in\n                     let s = String(format: \"%2.2f\",item.zeroWeight)\n                     HStack{\n                       Text( \"**\\(item.maxTile)**\").foregroundColor(.purple)\n                       Text(item.time.formatted(date: .numeric, \n                                                time: .shortened))\n                       Text(\"**\\(item.score)**\").foregroundColor(.blue)\n                       Text(\"**\\(s)**\").foregroundColor(.red)\n                                   }\n                               }\n                           }\n                       }\n                   }\n            .listStyle(.plain)\n            .navigationTitle(\"Expectimax  (\\(items.count))\")\n            .toolbar{\n                ToolbarItem(placement: .topBarTrailing) { write}\n                ToolbarItem(placement: .topBarLeading) {read}\n            }\n        } .task {\n            if items.count == 0 {\n                await asyncLoad()  \/\/ background actor\n            }\n        }\n    }\n    \n    private func asyncLoad () async {  \/\/ actor\n        let actor = LoadModelActor(modelContainer: context.container)\n       \/\/ await actor.monteCarlosAsync (FilesJSON.monteCarlosFile)\n        await actor.treeSearchAsync (FilesJSON.treeSearchFile)\n    }\n    \n    func groupByZeroWeight(_ items: &#91;TreeSearch&#93;) -> [(Double, &#91;TreeSearch&#93;)] {\n        let grouped = Dictionary(grouping: items, by: { $0.zeroWeight })\n            return grouped.sorted(by: { $0.key &lt; $1.key })\n        }\n    \n    var write: some View {\n        Button(\"Write\") {\n            Task  {\n                writeJSON ()\n            }\n        }\n    }\n    var read: some View {\n        Button(\"Read\") {\n            Task  {\n                readJSON ()\n            }\n        }\n    }\n    \n    private func writeJSON () { . . .}\n    \n    private func readJSON () {. . .}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-darker\" style=\"background-color: #212121\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">SwiftUI<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">SwiftData<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">struct<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">TreeSearchView<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">Environment<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">\\.modelContext<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> context<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">Query<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">sort<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> \\TreeSearch.time, order<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .forward<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> items: <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">TreeSearch<\/span><span style=\"color: #89DDFF\">&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> body: <\/span><span style=\"color: #F78C6C\">some<\/span><span style=\"color: #EEFFFF\"> View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">      <\/span><span style=\"color: #82AAFF\">NavigationStack<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #82AAFF\">List<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">          <\/span><span style=\"color: #82AAFF\">ForEach<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">groupByZeroWeight<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">items<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">id<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> \\.<\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> montes <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">Section<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">montes.0<\/span><span style=\"color: #89DDFF\">))<\/span><span style=\"color: #C3E88D\">  <\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">montes.1.count<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">))<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                 <\/span><span style=\"color: #82AAFF\">ForEach<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">montes.1<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> item <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                     <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> s <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">format<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">%2.2f<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">,item.zeroWeight<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                     <\/span><span style=\"color: #82AAFF\">HStack<\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                       <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">**<\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">item.maxTile<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #C3E88D\">**<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">foregroundColor<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.purple<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                       <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">item.time.<\/span><span style=\"color: #82AAFF\">formatted<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">date<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .numeric, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                                <\/span><span style=\"color: #82AAFF\">time<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .shortened<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                       <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">**<\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">item.score<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #C3E88D\">**<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">foregroundColor<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.blue<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                       <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">**<\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">s<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #C3E88D\">**<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">foregroundColor<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.red<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                   <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                               <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                           <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                       <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                   <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            .<\/span><span style=\"color: #82AAFF\">listStyle<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.plain<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            .<\/span><span style=\"color: #82AAFF\">navigationTitle<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Expectimax  (<\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">items.count<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #C3E88D\">)<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            .<\/span><span style=\"color: #82AAFF\">toolbar<\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">ToolbarItem<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">placement<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .topBarTrailing<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> write<\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">ToolbarItem<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">placement<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .topBarLeading<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">read<\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> .<\/span><span style=\"color: #82AAFF\">task<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #EEFFFF\"> items.count <\/span><span style=\"color: #89DDFF\">==<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">asyncLoad<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #545454; font-style: italic\">\/\/ background actor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">asyncLoad<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">async<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #545454; font-style: italic\">\/\/ actor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> actor <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">LoadModelActor<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">modelContainer<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> context.container<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">       <\/span><span style=\"color: #545454; font-style: italic\">\/\/ await actor.monteCarlosAsync (FilesJSON.monteCarlosFile)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #EEFFFF\"> actor.<\/span><span style=\"color: #82AAFF\">treeSearchAsync<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">FilesJSON.treeSearchFile<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">groupByZeroWeight<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">_<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">items<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">TreeSearch<\/span><span style=\"color: #89DDFF\">&#93;)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">[(<\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">TreeSearch<\/span><span style=\"color: #89DDFF\">&#93;)]<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> grouped <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Dictionary<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">grouping<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> items, <\/span><span style=\"color: #82AAFF\">by<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> $0.zeroWeight <\/span><span style=\"color: #89DDFF\">})<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> grouped.<\/span><span style=\"color: #82AAFF\">sorted<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">by<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> $0.key <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #EEFFFF\"> $1.key <\/span><span style=\"color: #89DDFF\">})<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> write: <\/span><span style=\"color: #F78C6C\">some<\/span><span style=\"color: #EEFFFF\"> View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #82AAFF\">Button<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Write<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">Task<\/span><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">writeJSON<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> read: <\/span><span style=\"color: #F78C6C\">some<\/span><span style=\"color: #EEFFFF\"> View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #82AAFF\">Button<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Read<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">Task<\/span><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">readJSON<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">writeJSON<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> . . .<\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">readJSON<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">. . .<\/span><span style=\"color: #89DDFF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0418 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <strong>Expectimax<\/strong> \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438<strong> <\/strong>:<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcjNtq5b-iu-cOp-EvKDFywOF-EkOrnS7BpMm064CO8glcL1R089YHyi4M5PpYie1kdBn3KGmHa27RS768VPQZRCaWufYLrsjX73vhxPbnBD2bbe4pGsfJaCg9k9ajmxtLi8AIVJg?key=xraG3CJHvHw1T3viZ5TeyxTy\" width=\"295\" height=\"684\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0443\u044e \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u0430<strong> Monte Carlo,<\/strong> \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">simulations<\/mark><\/code> \u0438 \u0432\u0435\u0441\u043e\u0432\u043e\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">zeroWeightMC<\/mark><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439&nbsp; \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0447\u0438\u0441\u043b\u043e \u043f\u043b\u0438\u0442\u043e\u043a \u0441 \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">value<\/mark><\/code>.\u0418 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u044d\u0442\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432:<\/span> <\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-16-at-12.03.08.png\"><img loading=\"lazy\" decoding=\"async\" width=\"504\" height=\"1024\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-16-at-12.03.08-504x1024.png\" alt=\"\" class=\"wp-image-16201\" style=\"width:311px;height:auto\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-16-at-12.03.08-504x1024.png 504w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-16-at-12.03.08-148x300.png 148w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-16-at-12.03.08.png 676w\" sizes=\"auto, (max-width: 504px) 100vw, 504px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-16-at-12.02.49.png\"><img loading=\"lazy\" decoding=\"async\" width=\"481\" height=\"1024\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-16-at-12.02.49-481x1024.png\" alt=\"\" class=\"wp-image-16202\" style=\"width:293px;height:auto\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-16-at-12.02.49-481x1024.png 481w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-16-at-12.02.49-141x300.png 141w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-16-at-12.02.49.png 642w\" sizes=\"auto, (max-width: 481px) 100vw, 481px\" \/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0433\u0440 2048 \u0441 \u0418\u0418 <strong>Monte Carlo<\/strong> \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043b\u0438\u0442\u043e\u043a: 512, 1024. 2048, 4096, 8092 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432\u0435\u0441\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">zeroWeightMC<\/mark><\/code>: 4096 \u0438 16384  \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">simulations<\/mark><\/code>: 150, 180 \u0438 200.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041d\u043e \u0438\u0437 \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432\u0435\u0441\u043e\u0432\u043e\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">zeroWeightMC<\/mark><\/code> =&nbsp; <strong>16384<\/strong> \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">simulations<\/mark><\/code> = <strong>180<\/strong> \u0434\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0443\u0447\u0448\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: <strong>46 <\/strong>\u043f\u043e\u0431\u0435\u0434\u043d\u044b\u0445 \u0438\u0433\u0440 (MaxTile &gt;= 2048) \u0438\u0437 50 \u043f\u0440\u043e\u0442\u0438\u0432 42 \u043f\u043e\u0431\u0435\u0434\u044b \u0434\u043b\u044f simulations = 150 \u0438 41 \u043f\u043e\u0431\u0435\u0434\u0430 \u0434\u043b\u044f  simulations = 200. \u041c\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 (\u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e) \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043b\u0438\u0442\u043a\u0443 \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 2048, \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u043f\u043b\u0438\u0442\u043a\u0443 \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 4096.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u0430\u043d\u043d\u044b\u0435, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 \u0411\u0414, \u0441\u043e\u0437\u0434\u0430\u0435\u043c&nbsp; <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">View<\/mark><\/code> \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <strong>Monte Carlo<\/strong> \u0432 \u0432\u0438\u0434\u0435 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#EEFFFF;--cbp-line-number-width:calc(3 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#212121\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import SwiftUI\nimport Charts\nimport SwiftData\n\n\/\/-------------------------\nstruct MaxTileFrequency: Identifiable {\n    let maxTile: Int\n    let simulations: Int\n    let count: Int\n    var id: Int { maxTile.hashValue ^ simulations.hashValue }\n    var animate: Bool = false\n}\n\nstruct MaxTileSimulationKey: Hashable {\n    let maxTile: Int\n    let simulations: Int\n}\n\/\/----------------------\nstruct ChartViewNew: View {\n    @Query(sort: \\MonterCarloNew.time, order: .forward)  var monteCarlos: &#91;MonterCarloNew&#93;\n   \n    @State private var zerosWeightMC: String = \"All\"\n    \/\/---- animate ----\n    @State var sampleAnalitics: [Int: &#91;MaxTileFrequency&#93;]  = &#91;:&#93;\n    \/\/----------------\n    \n    var filteredMonteCarlos: &#91;MonterCarloNew&#93; {\n        if zerosWeightMC == \"All\" { return monteCarlos }\n            return monteCarlos.compactMap { item in\n                return item.zerosWeightMC == Int(zerosWeightMC) ? item : nil\n            }\n        }\n   \n    var maxTileFrequencyBySimulations: &#91;MaxTileFrequency&#93; {\n        let groupedData = Dictionary(\n            grouping: filteredMonteCarlos,\n            by: { MaxTileSimulationKey(maxTile: $0.maxTile, \n                                       simulations: $0.numberSimulations ) }\n        )\n        \n        return groupedData.map { key, results in\n            MaxTileFrequency(\n                maxTile: key.maxTile,\n                simulations: key.simulations,\n                count: results.count\n            )\n        }\n        .sorted { $0.maxTile &lt; $1.maxTile }\n    }\n    \n    var groupedData: [Int: &#91;MaxTileFrequency&#93;] {\n        Dictionary(grouping: maxTileFrequencyBySimulations, \n                   by: { $0.simulations})\n    }\n   \n    var marks:  &#91;String&#93; {\n        Array(Set(maxTileFrequencyBySimulations.map { $0.maxTile })).map {String($0)}.sorted { Int($0)! &lt; Int($1)! }\n    }\n    \/\/-----\n    \n    var body: some View {\n        VStack {\n          VStack {\n            Text (\"Zeros Weight:\")\n            Picker( selection: $zerosWeightMC, label: Text(\"\")) {\n              ForEach(&#91;\"All\", \"1024\", \"2048\", \"4096\", \"8192\", \"16384\"&#93;,\n                      id: \\.self) { weightMC in\n                        Text(\"\\(weightMC)\").tag(\"\\(weightMC)\")\n                    }\n                }\n                .pickerStyle(.segmented)\n                .padding()\n            }\n            AnimatedChart\n        } \/\/ VStack\n        .onChange(of: zerosWeightMC) { oldValue, newValue in\n            sampleAnalitics =  groupedData\n            \/\/ Re - Animating View\n            animateGraph(fromChange: true)\n        }\n    } \/\/ body\n    \n    private var AnimatedChart: some View {\n      let max = sampleAnalitics.values.flatMap{$0}.map{$0.count}.max () ?? 0\n       return Chart {\n          \/\/  ForEach( groupedData.keys.sorted() , id:\\.self) { simulation in\n          ForEach( sampleAnalitics.keys.sorted() , id:\\.self) { simulation in\n                  \n            \/\/   ForEach(groupedData&#91;simulation&#93;!, id: \\.maxTile) { item in\n              ForEach(sampleAnalitics&#91;simulation&#93;!, id: \\.maxTile) { item in\n                  \n                    BarMark(\n                        x: .value(\"Max Tile\", String(item.maxTile)),\n                        y: .value(\"Count\", item.animate ? item.count : 0)\n                    )\n                    .annotation (position: .top) {\n                        Text(String(item.count))\n                            .foregroundColor(.black)\n                            .font(.footnote)\n              }\n          }\n          .foregroundStyle(by:.value(\"Simulations\", String(simulation)))\n          .position(by: .value(\"Simulations\", String(simulation)))    \n        }\n    }\n        \/\/ MARK: Customizing Y-Axis Length\n        .chartYScale(domain: 0...(max ) )\n        \/\/ MARK: Customizing X-Axis Length\n        .chartXScale(domain: marks)\n        .chartLegend(.visible)\n        .aspectRatio(1, contentMode: .fit)\n        .padding()\n       .onAppear{\n           animateGraph()\n        } \/\/ onAppear\n    } \/\/ some View\n    \n    \/\/------- animate ----\n    func animateGraph(fromChange: Bool = false) {\n        sampleAnalitics = groupedData\n        \n        for  key in groupedData.keys.sorted() {\n            if let bars =  groupedData &#91;key&#93; {\n            for (index, _) in bars.enumerated() {\n                \n                \/\/ For Some Reason Delay is Not Working\n                \/\/ Using DispatchQueue Delay\n                DispatchQueue.main.asyncAfter(deadline: .now() + Double(index) * (fromChange ? 0.03 : 0.05)) {\n                    withAnimation( fromChange ? .easeIn(duration: 0.8) : .interactiveSpring(response:0.8, dampingFraction: 0.8,blendDuration: 0.8)){\n                        sampleAnalitics&#91;key&#93;! &#91;index&#93;.animate = true \n                    } \/\/ with\n                } \/\/ DispatchQueue\n            } \/\/ for\n        } \/\/ if\n      } \/\/ for\n    }\/\/ func\n    \/\/---------------------\n} \/\/ View<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-darker\" style=\"background-color: #212121\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">SwiftUI<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Charts<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">SwiftData<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #545454; font-style: italic\">\/\/-------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">struct<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">MaxTileFrequency<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Identifiable <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> maxTile: <\/span><span style=\"color: #FFCB6B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> simulations: <\/span><span style=\"color: #FFCB6B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> count: <\/span><span style=\"color: #FFCB6B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> id: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> maxTile.hashValue <\/span><span style=\"color: #89DDFF\">^<\/span><span style=\"color: #EEFFFF\"> simulations.hashValue <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> animate: <\/span><span style=\"color: #FFCB6B\">Bool<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FF9CAC\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">struct<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">MaxTileSimulationKey<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Hashable <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> maxTile: <\/span><span style=\"color: #FFCB6B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> simulations: <\/span><span style=\"color: #FFCB6B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #545454; font-style: italic\">\/\/----------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">struct<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">ChartViewNew<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">Query<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">sort<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> \\MonterCarloNew.time, order<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .forward<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> monteCarlos: <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">MonterCarloNew<\/span><span style=\"color: #89DDFF\">&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">   <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">State<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> zerosWeightMC: <\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">All<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">    <\/span><span style=\"color: #545454; font-style: italic\">\/\/---- animate ----<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">State<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> sampleAnalitics: <\/span><span style=\"color: #89DDFF\">[<\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">MaxTileFrequency<\/span><span style=\"color: #89DDFF\">&#93;]<\/span><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> &#91;<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\">&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">    <\/span><span style=\"color: #545454; font-style: italic\">\/\/----------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> filteredMonteCarlos: <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">MonterCarloNew<\/span><span style=\"color: #89DDFF\">&#93;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #EEFFFF\"> zerosWeightMC <\/span><span style=\"color: #89DDFF\">==<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">All<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> monteCarlos <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> monteCarlos.<\/span><span style=\"color: #82AAFF\">compactMap<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> item <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> item.zerosWeightMC <\/span><span style=\"color: #89DDFF\">==<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">zerosWeightMC<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">?<\/span><span style=\"color: #EEFFFF\"> item <\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">nil<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">   <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> maxTileFrequencyBySimulations: <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">MaxTileFrequency<\/span><span style=\"color: #89DDFF\">&#93;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> groupedData <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Dictionary<\/span><span style=\"color: #89DDFF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">grouping<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> filteredMonteCarlos,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">by<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">MaxTileSimulationKey<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">maxTile<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> $0.maxTile, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                       <\/span><span style=\"color: #82AAFF\">simulations<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> $0.numberSimulations <\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> groupedData.<\/span><span style=\"color: #82AAFF\">map<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> key, results <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">MaxTileFrequency<\/span><span style=\"color: #89DDFF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">maxTile<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> key.maxTile,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">simulations<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> key.simulations,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">count<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> results.count<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        .<\/span><span style=\"color: #82AAFF\">sorted<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> $0.maxTile <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #EEFFFF\"> $1.maxTile <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> groupedData: <\/span><span style=\"color: #89DDFF\">[<\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">MaxTileFrequency<\/span><span style=\"color: #89DDFF\">&#93;]<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #FFCB6B\">Dictionary<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">grouping<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> maxTileFrequencyBySimulations, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                   <\/span><span style=\"color: #82AAFF\">by<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> $0.simulations<\/span><span style=\"color: #89DDFF\">})<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">   <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> marks:  <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">&#93;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #FFCB6B\">Array<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Set<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">maxTileFrequencyBySimulations.<\/span><span style=\"color: #82AAFF\">map<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> $0.maxTile <\/span><span style=\"color: #89DDFF\">}))<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">map<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">$0<\/span><span style=\"color: #89DDFF\">)}<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">sorted<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">$0<\/span><span style=\"color: #89DDFF\">)!<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">$1<\/span><span style=\"color: #89DDFF\">)!<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">    <\/span><span style=\"color: #545454; font-style: italic\">\/\/-----<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> body: <\/span><span style=\"color: #F78C6C\">some<\/span><span style=\"color: #EEFFFF\"> View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #82AAFF\">VStack<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">          <\/span><span style=\"color: #82AAFF\">VStack<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Zeros Weight:<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">Picker<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">selection<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> $zerosWeightMC, <\/span><span style=\"color: #82AAFF\">label<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;&quot;<\/span><span style=\"color: #89DDFF\">))<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">              <\/span><span style=\"color: #82AAFF\">ForEach<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">&#91;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">All<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">1024<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">2048<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">4096<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">8192<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">16384<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                      <\/span><span style=\"color: #82AAFF\">id<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> \\.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> weightMC <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                        <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">weightMC<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">tag<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">weightMC<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                .<\/span><span style=\"color: #82AAFF\">pickerStyle<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.segmented<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                .<\/span><span style=\"color: #82AAFF\">padding<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            AnimatedChart<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ VStack<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        .<\/span><span style=\"color: #82AAFF\">onChange<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">of<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> zerosWeightMC<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> oldValue, newValue <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            sampleAnalitics <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\">  groupedData<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">            <\/span><span style=\"color: #545454; font-style: italic\">\/\/ Re - Animating View<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">animateGraph<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">fromChange<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FF9CAC\">true<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ body<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> AnimatedChart: <\/span><span style=\"color: #F78C6C\">some<\/span><span style=\"color: #EEFFFF\"> View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">      <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> max <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> sampleAnalitics.values.<\/span><span style=\"color: #82AAFF\">flatMap<\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">$0<\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">map<\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">$0.count<\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">max<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">??<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">       <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">Chart<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">          <\/span><span style=\"color: #545454; font-style: italic\">\/\/  ForEach( groupedData.keys.sorted() , id:\\.self) { simulation in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">          <\/span><span style=\"color: #82AAFF\">ForEach<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\"> sampleAnalitics.keys.<\/span><span style=\"color: #82AAFF\">sorted<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> , <\/span><span style=\"color: #82AAFF\">id<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\">\\.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> simulation <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">            <\/span><span style=\"color: #545454; font-style: italic\">\/\/   ForEach(groupedData&#91;simulation&#93;!, id: \\.maxTile) { item in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">              <\/span><span style=\"color: #82AAFF\">ForEach<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">sampleAnalitics<\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">simulation<\/span><span style=\"color: #89DDFF\">&#93;!<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">id<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> \\.maxTile<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> item <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #82AAFF\">BarMark<\/span><span style=\"color: #89DDFF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                        <\/span><span style=\"color: #82AAFF\">x<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .value<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Max Tile<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">item.maxTile<\/span><span style=\"color: #89DDFF\">))<\/span><span style=\"color: #EEFFFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                        <\/span><span style=\"color: #82AAFF\">y<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .value<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Count<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, item.animate <\/span><span style=\"color: #89DDFF\">?<\/span><span style=\"color: #EEFFFF\"> item.count <\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    .<\/span><span style=\"color: #82AAFF\">annotation<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">position<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .top<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                        <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">item.count<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                            .<\/span><span style=\"color: #82AAFF\">foregroundColor<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.black<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                            .<\/span><span style=\"color: #82AAFF\">font<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.footnote<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">              <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">          <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">          .<\/span><span style=\"color: #82AAFF\">foregroundStyle<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">by<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\">.value<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Simulations<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">simulation<\/span><span style=\"color: #89DDFF\">)))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">          .<\/span><span style=\"color: #82AAFF\">position<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">by<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .value<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Simulations<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">simulation<\/span><span style=\"color: #89DDFF\">)))<\/span><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">        <\/span><span style=\"color: #545454; font-style: italic\">\/\/ MARK: Customizing Y-Axis Length<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        .<\/span><span style=\"color: #82AAFF\">chartYScale<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">domain<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #89DDFF\">...(<\/span><span style=\"color: #EEFFFF\">max <\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">        <\/span><span style=\"color: #545454; font-style: italic\">\/\/ MARK: Customizing X-Axis Length<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        .<\/span><span style=\"color: #82AAFF\">chartXScale<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">domain<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> marks<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        .<\/span><span style=\"color: #82AAFF\">chartLegend<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.visible<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        .<\/span><span style=\"color: #82AAFF\">aspectRatio<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #F78C6C\">1<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">contentMode<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .fit<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        .<\/span><span style=\"color: #82AAFF\">padding<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">       .<\/span><span style=\"color: #82AAFF\">onAppear<\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">           <\/span><span style=\"color: #82AAFF\">animateGraph<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ onAppear<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ some View<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">    <\/span><span style=\"color: #545454; font-style: italic\">\/\/------- animate ----<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">animateGraph<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF; font-style: italic\">fromChange<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #FFCB6B\">Bool<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FF9CAC\">false<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        sampleAnalitics <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> groupedData<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">for<\/span><span style=\"color: #EEFFFF\">  key <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><span style=\"color: #EEFFFF\"> groupedData.keys.<\/span><span style=\"color: #82AAFF\">sorted<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> bars <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\">  groupedData <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">key<\/span><span style=\"color: #89DDFF\">&#93;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">for<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">index, _<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><span style=\"color: #EEFFFF\"> bars.<\/span><span style=\"color: #82AAFF\">enumerated<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">                <\/span><span style=\"color: #545454; font-style: italic\">\/\/ For Some Reason Delay is Not Working<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">                <\/span><span style=\"color: #545454; font-style: italic\">\/\/ Using DispatchQueue Delay<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                DispatchQueue.main.<\/span><span style=\"color: #82AAFF\">asyncAfter<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">deadline<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .<\/span><span style=\"color: #82AAFF\">now<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">+<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Double<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">index<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">*<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">fromChange <\/span><span style=\"color: #89DDFF\">?<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0.03<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0.05<\/span><span style=\"color: #89DDFF\">))<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #82AAFF\">withAnimation<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\"> fromChange <\/span><span style=\"color: #89DDFF\">?<\/span><span style=\"color: #EEFFFF\"> .<\/span><span style=\"color: #82AAFF\">easeIn<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">duration<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0.8<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .<\/span><span style=\"color: #82AAFF\">interactiveSpring<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">response<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #F78C6C\">0.8<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">dampingFraction<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0.8<\/span><span style=\"color: #EEFFFF\">,<\/span><span style=\"color: #82AAFF\">blendDuration<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0.8<\/span><span style=\"color: #89DDFF\">)){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                        sampleAnalitics<\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">key<\/span><span style=\"color: #89DDFF\">&#93;!<\/span><span style=\"color: #EEFFFF\"> &#91;index&#93;.animate <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FF9CAC\">true<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ with<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ DispatchQueue<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ for<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ if<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">      <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ for<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #545454; font-style: italic\">\/\/ func<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">    <\/span><span style=\"color: #545454; font-style: italic\">\/\/---------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ View<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u0434\u043b\u044f <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">MonteCarloView<\/mark><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <strong>Monte Carlo<\/strong> \u0432 \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u0430:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#EEFFFF;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#212121\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import SwiftUI\nimport SwiftData\n\nstruct MonteCarloView: View {\n    @Query(sort: \\MonterCarloNew.time, order: .forward)  \n                                                 var items: &#91;MonterCarloNew&#93;\n    @Environment(\\.modelContext) private var context\n    @State private var zerosWeightMC: String = \"All\"\n    \n    var filteredItems: &#91;MonterCarloNew&#93; {\n        if zerosWeightMC == \"All\" { return  items }\n            return  items.compactMap { item in\n                return item.zerosWeightMC == Int(zerosWeightMC) ? item : nil\n            }\n        }\n    \n    var body: some View {\n        NavigationStack {\n          VStack {\n            Text (\"Zeros Weight:\")\n            Picker(\"\", selection: $zerosWeightMC) {\n              ForEach(&#91;\"All\",\"1024\", \"2048\", \"4096\", \"8192\",\"16384\"&#93;, \n                                                 id: \\.self) { weightMC in\n                        Text(\"\\(weightMC)\").tag(\"\\(weightMC)\")\n                    }\n                }\n                .pickerStyle(.segmented)\n                .padding()\n            }\n        List {        \/\/ zerosWeightMC\n         ForEach(groupByNExperiments(filteredItems), id: \\.0) { montes in\n            Section(header: Text(\"simulations = \\(montes.0)  \n                                   ZW = \\(( montes.1.first?.zerosWeightMC)!) \n                                               \\(montes.1.count)\")) {\n              ForEach(montes.1) { item in\n               HStack{\n                 Text( \"**\\(item.maxTile)**\").foregroundColor(.purple)\n                 Text(item.time.formatted(date: .numeric, time: .shortened))\n                 Text(\"**\\(item.score)**\").foregroundColor(.blue)\n                 Text(\"**\\(item.zerosWeightMC)**\").foregroundColor(.red)\n               }\n              }\n             }\n           }\n         }\n          .listStyle(.plain)\n          .navigationTitle(\"Monte Carlo (\\(items.count))\")\n          .toolbar{\n                ToolbarItem(placement: .topBarTrailing) { write}\n                ToolbarItem(placement: .topBarLeading) {read}\n            } \/\/ toolbar\n        } \/\/  Navigation\n        .task {\n            if items.count == 0 {\n                await asyncLoad()  \/\/ background actor\n            }\n        } \/\/ task\n    } \/\/ body\n    \n    private func asyncLoad () async {  \/\/ actor\n        let actor = LoadModelActor(modelContainer: context.container)\n        await actor.monteCarlosAsync (FilesJSON.monteCarlosFile)\n      \/\/  await actor.treeSearchAsync (FilesJSON.treeSearchFile)\n    }\n    \n    func groupByNExperiments(_ items: &#91;MonterCarloNew&#93;) -> \n                                               [(Int, &#91;MonterCarloNew&#93;)] {\n        let grouped = Dictionary(grouping: items, \n                                 by: { $0.numberSimulations})\n            return grouped.sorted(by: { $0.key &lt; $1.key })\n        }\n    \n    var write: some View {\n        Button(\"Write\") {\n            Task  {\n                writeJSON ()\n            }\n        }\n    }\n    var read: some View {\n        Button(\"Read\") {\n            Task  {\n                readJSON ()\n            }\n        }\n    }\n    \n    private func writeJSON () {. . . }\n    private func readJSON () {. . . }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-darker\" style=\"background-color: #212121\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">SwiftUI<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">SwiftData<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">struct<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">MonteCarloView<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">Query<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">sort<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> \\MonterCarloNew.time, order<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .forward<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                                 <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> items: <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">MonterCarloNew<\/span><span style=\"color: #89DDFF\">&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">Environment<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">\\.modelContext<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> context<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">State<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> zerosWeightMC: <\/span><span style=\"color: #FFCB6B\">String<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">All<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> filteredItems: <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">MonterCarloNew<\/span><span style=\"color: #89DDFF\">&#93;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #EEFFFF\"> zerosWeightMC <\/span><span style=\"color: #89DDFF\">==<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">All<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\">  items <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\">  items.<\/span><span style=\"color: #82AAFF\">compactMap<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> item <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> item.zerosWeightMC <\/span><span style=\"color: #89DDFF\">==<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">zerosWeightMC<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">?<\/span><span style=\"color: #EEFFFF\"> item <\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">nil<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> body: <\/span><span style=\"color: #F78C6C\">some<\/span><span style=\"color: #EEFFFF\"> View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #82AAFF\">NavigationStack<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">          <\/span><span style=\"color: #82AAFF\">VStack<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Zeros Weight:<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">Picker<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;&quot;<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">selection<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> $zerosWeightMC<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">              <\/span><span style=\"color: #82AAFF\">ForEach<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">&#91;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">All<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">,<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">1024<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">2048<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">4096<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">8192<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">,<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">16384<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\">&#93;, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                                 <\/span><span style=\"color: #82AAFF\">id<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> \\.<\/span><span style=\"color: #F78C6C\">self<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> weightMC <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                        <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">weightMC<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">tag<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">weightMC<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                .<\/span><span style=\"color: #82AAFF\">pickerStyle<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.segmented<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                .<\/span><span style=\"color: #82AAFF\">padding<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #82AAFF\">List<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #545454; font-style: italic\">\/\/ zerosWeightMC<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">         <\/span><span style=\"color: #82AAFF\">ForEach<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">groupByNExperiments<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">filteredItems<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">, <\/span><span style=\"color: #82AAFF\">id<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> \\.<\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> montes <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">Section<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">simulations = <\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">montes.0<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #C3E88D\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                                   ZW = <\/span><span style=\"color: #89DDFF\">\\((<\/span><span style=\"color: #EEFFFF\"> montes.1.first<\/span><span style=\"color: #89DDFF\">?<\/span><span style=\"color: #EEFFFF\">.zerosWeightMC<\/span><span style=\"color: #89DDFF\">)!)<\/span><span style=\"color: #C3E88D\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                                               <\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">montes.1.count<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">))<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">              <\/span><span style=\"color: #82AAFF\">ForEach<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">montes.1<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> item <\/span><span style=\"color: #89DDFF; font-style: italic\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">               <\/span><span style=\"color: #82AAFF\">HStack<\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                 <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">**<\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">item.maxTile<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #C3E88D\">**<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">foregroundColor<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.purple<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                 <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">item.time.<\/span><span style=\"color: #82AAFF\">formatted<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">date<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .numeric, <\/span><span style=\"color: #82AAFF\">time<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .shortened<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                 <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">**<\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">item.score<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #C3E88D\">**<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">foregroundColor<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.blue<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                 <\/span><span style=\"color: #82AAFF\">Text<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">**<\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">item.zerosWeightMC<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #C3E88D\">**<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">.<\/span><span style=\"color: #82AAFF\">foregroundColor<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.red<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">               <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">              <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">             <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">           <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">         <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">          .<\/span><span style=\"color: #82AAFF\">listStyle<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">.plain<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">          .<\/span><span style=\"color: #82AAFF\">navigationTitle<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Monte Carlo (<\/span><span style=\"color: #89DDFF\">\\(<\/span><span style=\"color: #EEFFFF\">items.count<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #C3E88D\">)<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">          .<\/span><span style=\"color: #82AAFF\">toolbar<\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">ToolbarItem<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">placement<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .topBarTrailing<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> write<\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">ToolbarItem<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">placement<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> .topBarLeading<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">read<\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ toolbar<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/  Navigation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        .<\/span><span style=\"color: #82AAFF\">task<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #EEFFFF\"> items.count <\/span><span style=\"color: #89DDFF\">==<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">asyncLoad<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #545454; font-style: italic\">\/\/ background actor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ task<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #545454; font-style: italic\">\/\/ body<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">asyncLoad<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">async<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #545454; font-style: italic\">\/\/ actor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> actor <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">LoadModelActor<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">modelContainer<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> context.container<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #EEFFFF\"> actor.<\/span><span style=\"color: #82AAFF\">monteCarlosAsync<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">FilesJSON.monteCarlosFile<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">      <\/span><span style=\"color: #545454; font-style: italic\">\/\/  await actor.treeSearchAsync (FilesJSON.treeSearchFile)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">groupByNExperiments<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">_<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">items<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">MonterCarloNew<\/span><span style=\"color: #89DDFF\">&#93;)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                               [<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #EEFFFF\">, &#91;MonterCarloNew&#93;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">] <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #F78C6C\">let<\/span><span style=\"color: #EEFFFF\"> grouped <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">Dictionary<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">grouping<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> items, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                                 <\/span><span style=\"color: #82AAFF\">by<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> $0.numberSimulations<\/span><span style=\"color: #89DDFF\">})<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> grouped.<\/span><span style=\"color: #82AAFF\">sorted<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">by<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\"> $0.key <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #EEFFFF\"> $1.key <\/span><span style=\"color: #89DDFF\">})<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> write: <\/span><span style=\"color: #F78C6C\">some<\/span><span style=\"color: #EEFFFF\"> View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #82AAFF\">Button<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Write<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">Task<\/span><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">writeJSON<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> read: <\/span><span style=\"color: #F78C6C\">some<\/span><span style=\"color: #EEFFFF\"> View <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #82AAFF\">Button<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Read<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #82AAFF\">Task<\/span><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #82AAFF\">readJSON<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">writeJSON<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">. . . <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F78C6C\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">readJSON<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #EEFFFF\">. . . <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0418 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <strong>Monte Carlo<\/strong> \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438<strong> <\/strong>\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-16-at-13.01.24.png\"><img loading=\"lazy\" decoding=\"async\" width=\"491\" height=\"1024\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-16-at-13.01.24-491x1024.png\" alt=\"\" class=\"wp-image-16204\" style=\"width:371px;height:auto\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-16-at-13.01.24-491x1024.png 491w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-16-at-13.01.24-144x300.png 144w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-16-at-13.01.24.png 666w\" sizes=\"auto, (max-width: 491px) 100vw, 491px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"font-weight: 400;\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Game2048ChatGPT \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432<strong> Expectimax <\/strong>&nbsp;\u0438 <strong>Monte Carlo<\/strong>&nbsp; \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u0434\u043b\u044f <strong>Monte Carlo<\/strong> \u0447\u0438\u0441\u043b\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">simulations<\/mark><\/code> = <strong>180<\/strong>, \u0432\u0435\u0441\u043e\u0432\u043e\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">zeroWeightMC<\/mark><\/code> = <strong>16 384<\/strong>,<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0434\u043b\u044f <strong>Expectimax<\/strong> \u0432\u0435\u0441\u043e\u0432\u043e\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">zeroWeight<\/mark><\/code> = <strong>11.7<\/strong><\/span><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 <a href=\"https:\/\/github.com\/BestKora\/Game2048ChatGPTStatistics\" title=\"\">GitHub.<\/a><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0445 &#8212; iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI&nbsp; \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI&nbsp; \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI&nbsp; \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 3. &hellip; <a href=\"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/\">\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[107,98,54,108],"tags":[112,113,31,56,110],"class_list":["post-16187","post","type-post","status-publish","format-standard","hentry","category-chatgpt","category-swiftdata","category-swiftui","category-108","tag-expectimax","tag-monte-carlo","tag-swift","tag-swiftui","tag-110"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.8 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0445 - iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 3. \u0418\u0418, - \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b\u0430 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a ChatGPT \u043f\u043e\u043c\u043e\u0433 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b Expectimax \u0438\" \/>\n\t<meta name=\"robots\" content=\"max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n\t<meta name=\"author\" content=\"tatiana.kornilova@gmail.com\"\/>\n\t<meta name=\"keywords\" content=\"ai algorithm expectimax,swiftui,\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u043e\u043d\u0442\u0435 \u043a\u0430\u0440\u043b\u043e,\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c expectimax,\u0438\u0433\u0440\u0430 2048\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.8\" \/>\n\t\t<meta property=\"og:locale\" content=\"ru_RU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"\u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. | \u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u043f\u0435\u043a\u0442 \u043b\u0435\u043a\u0446\u0438\u0439 \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 &quot; \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439&quot; 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 , 2023,  2024,  2025  \u0438 2026 \u0433\u0433., \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0439 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0435\u0439 \u043a\u0443\u0440\u0441\u043e\u0432 \u043a \u043d\u043e\u0432\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c Swift, Objective-C \u0438 iOS.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 ChatGPT \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 Expe\u0441timax \u0438 Monte Carlo \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048 | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0445 - iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 3. \u0418\u0418, - \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b\u0430 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a ChatGPT \u043f\u043e\u043c\u043e\u0433 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b Expectimax \u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2024-11-13T12:33:56+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2025-09-11T15:39:33+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 ChatGPT \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 Expe\u0441timax \u0438 Monte Carlo \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048 | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.\" \/>\n\t\t<meta name=\"twitter:description\" content=\"\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0445 - iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 3. \u0418\u0418, - \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b\u0430 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a ChatGPT \u043f\u043e\u043c\u043e\u0433 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b Expectimax \u0438\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\\\/#article\",\"name\":\"\\u0421\\u0442\\u0430\\u0442\\u0438\\u0441\\u0442\\u0438\\u043a\\u0430 \\u0441\\u043e\\u0437\\u0434\\u0430\\u043d\\u043d\\u044b\\u0445 ChatGPT \\u0430\\u043b\\u0433\\u043e\\u0440\\u0438\\u0442\\u043c\\u043e\\u0432 Expe\\u0441timax \\u0438 Monte Carlo \\u0434\\u043b\\u044f \\u0438\\u0433\\u0440\\u044b 2048 | \\u041e\\u0431\\u0443\\u0447\\u0430\\u044e\\u0449\\u0438\\u0439 \\u043a\\u0443\\u0440\\u0441 \\u043f\\u043e \\u0440\\u0430\\u0437\\u0440\\u0430\\u0431\\u043e\\u0442\\u043a\\u0435 iOS+Swift \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u0439.\",\"headline\":\"\\u0421\\u0442\\u0430\\u0442\\u0438\\u0441\\u0442\\u0438\\u043a\\u0430 \\u0441\\u043e\\u0437\\u0434\\u0430\\u043d\\u043d\\u044b\\u0445 ChatGPT \\u0430\\u043b\\u0433\\u043e\\u0440\\u0438\\u0442\\u043c\\u043e\\u0432 Expe\\u0441timax \\u0438 Monte Carlo \\u0434\\u043b\\u044f \\u0438\\u0433\\u0440\\u044b 2048\",\"author\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/author\\\/tatiana-lornilovagmail-com\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/StatisticsMonteCarlo.gif\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\\\/#articleImage\",\"width\":362,\"height\":744},\"datePublished\":\"2024-11-13T12:33:56+00:00\",\"dateModified\":\"2025-09-11T15:39:33+00:00\",\"inLanguage\":\"ru-RU\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\\\/#webpage\"},\"articleSection\":\"ChatGPT, SwiftData, SwiftUI, \\u0418\\u0418 \\u0430\\u043b\\u0433\\u043e\\u0440\\u0438\\u0442\\u043c\\u044b, Expectimax, Monte Carlo, Swift, SwiftUI, \\u0418\\u0418 2048\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/category\\\/swiftui\\\/#listItem\",\"name\":\"SwiftUI\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/category\\\/swiftui\\\/#listItem\",\"position\":2,\"name\":\"SwiftUI\",\"item\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/category\\\/swiftui\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\\\/#listItem\",\"name\":\"\\u0421\\u0442\\u0430\\u0442\\u0438\\u0441\\u0442\\u0438\\u043a\\u0430 \\u0441\\u043e\\u0437\\u0434\\u0430\\u043d\\u043d\\u044b\\u0445 ChatGPT \\u0430\\u043b\\u0433\\u043e\\u0440\\u0438\\u0442\\u043c\\u043e\\u0432 Expe\\u0441timax \\u0438 Monte Carlo \\u0434\\u043b\\u044f \\u0438\\u0433\\u0440\\u044b 2048\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\\\/#listItem\",\"position\":3,\"name\":\"\\u0421\\u0442\\u0430\\u0442\\u0438\\u0441\\u0442\\u0438\\u043a\\u0430 \\u0441\\u043e\\u0437\\u0434\\u0430\\u043d\\u043d\\u044b\\u0445 ChatGPT \\u0430\\u043b\\u0433\\u043e\\u0440\\u0438\\u0442\\u043c\\u043e\\u0432 Expe\\u0441timax \\u0438 Monte Carlo \\u0434\\u043b\\u044f \\u0438\\u0433\\u0440\\u044b 2048\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/category\\\/swiftui\\\/#listItem\",\"name\":\"SwiftUI\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/#person\",\"name\":\"tatiana.kornilova@gmail.com\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\\\/#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/33ccc19059014d8a7849c3621afa2b66a5f3e50ac7291c91c30ff35df5747628?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"tatiana.kornilova@gmail.com\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/author\\\/tatiana-lornilovagmail-com\\\/#author\",\"url\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/author\\\/tatiana-lornilovagmail-com\\\/\",\"name\":\"tatiana.kornilova@gmail.com\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/33ccc19059014d8a7849c3621afa2b66a5f3e50ac7291c91c30ff35df5747628?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"tatiana.kornilova@gmail.com\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\\\/#webpage\",\"url\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\\\/\",\"name\":\"\\u0421\\u0442\\u0430\\u0442\\u0438\\u0441\\u0442\\u0438\\u043a\\u0430 \\u0441\\u043e\\u0437\\u0434\\u0430\\u043d\\u043d\\u044b\\u0445 ChatGPT \\u0430\\u043b\\u0433\\u043e\\u0440\\u0438\\u0442\\u043c\\u043e\\u0432 Expe\\u0441timax \\u0438 Monte Carlo \\u0434\\u043b\\u044f \\u0438\\u0433\\u0440\\u044b 2048 | \\u041e\\u0431\\u0443\\u0447\\u0430\\u044e\\u0449\\u0438\\u0439 \\u043a\\u0443\\u0440\\u0441 \\u043f\\u043e \\u0440\\u0430\\u0437\\u0440\\u0430\\u0431\\u043e\\u0442\\u043a\\u0435 iOS+Swift \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u0439.\",\"description\":\"\\u0412 \\u043f\\u0440\\u0435\\u0434\\u044b\\u0434\\u0443\\u0449\\u0438\\u0445 \\u043f\\u043e\\u0441\\u0442\\u0430\\u0445 - iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u044f \\u0438\\u0433\\u0440\\u044b 2048 \\u0432 SwiftUI \\u0441 ChatGPT 4-o. \\u0427\\u0430\\u0441\\u0442\\u044c 1, iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u044f \\u0438\\u0433\\u0440\\u044b 2048 \\u0432 SwiftUI \\u0441 ChatGPT 4-o. \\u0427\\u0430\\u0441\\u0442\\u044c 2. \\u0410\\u043d\\u0438\\u043c\\u0430\\u0446\\u0438\\u044f \\u0438 UI, iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u044f \\u0438\\u0433\\u0440\\u044b 2048 \\u0432 SwiftUI \\u0441 ChatGPT 4-o. \\u0427\\u0430\\u0441\\u0442\\u044c 3. \\u0418\\u0418, - \\u044f \\u0440\\u0430\\u0441\\u0441\\u043a\\u0430\\u0437\\u0430\\u043b\\u0430 \\u043e \\u0442\\u043e\\u043c, \\u043a\\u0430\\u043a ChatGPT \\u043f\\u043e\\u043c\\u043e\\u0433 \\u0441\\u043e\\u0437\\u0434\\u0430\\u0442\\u044c \\u044d\\u0444\\u0444\\u0435\\u043a\\u0442\\u0438\\u0432\\u043d\\u044b\\u0435 \\u0418\\u0418 \\u0430\\u043b\\u0433\\u043e\\u0440\\u0438\\u0442\\u043c\\u044b Expectimax \\u0438\",\"inLanguage\":\"ru-RU\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/author\\\/tatiana-lornilovagmail-com\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/author\\\/tatiana-lornilovagmail-com\\\/#author\"},\"datePublished\":\"2024-11-13T12:33:56+00:00\",\"dateModified\":\"2025-09-11T15:39:33+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/#website\",\"url\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/\",\"name\":\"\\u041e\\u0431\\u0443\\u0447\\u0430\\u044e\\u0449\\u0438\\u0439 \\u043a\\u0443\\u0440\\u0441 \\u043f\\u043e \\u0440\\u0430\\u0437\\u0440\\u0430\\u0431\\u043e\\u0442\\u043a\\u0435 iOS+Swift \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u0439.\",\"description\":\"\\u0420\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439 \\u043d\\u0435\\u0430\\u0432\\u0442\\u043e\\u0440\\u0438\\u0437\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439 \\u043a\\u043e\\u043d\\u0441\\u043f\\u0435\\u043a\\u0442 \\u043b\\u0435\\u043a\\u0446\\u0438\\u0439 \\u0421\\u0442\\u044d\\u043d\\u0444\\u043e\\u0440\\u0434\\u0441\\u043a\\u043e\\u0433\\u043e \\u0443\\u043d\\u0438\\u0432\\u0435\\u0440\\u0441\\u0438\\u0442\\u0435\\u0442\\u0430 \\\" \\u0420\\u0430\\u0437\\u0440\\u0430\\u0431\\u043e\\u0442\\u043a\\u0430 iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u0439\\\" 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 , 2023,  2024,  2025  \\u0438 2026 \\u0433\\u0433., \\u0441\\u043e\\u043f\\u0440\\u043e\\u0432\\u043e\\u0436\\u0434\\u0430\\u0435\\u043c\\u044b\\u0439 \\u0440\\u0435\\u0448\\u0435\\u043d\\u0438\\u044f\\u043c\\u0438 \\u0437\\u0430\\u0434\\u0430\\u043d\\u0438\\u0439 \\u0438 \\u0434\\u043e\\u043f\\u043e\\u043b\\u043d\\u0435\\u043d\\u0438\\u044f\\u043c\\u0438, \\u0441\\u0432\\u044f\\u0437\\u0430\\u043d\\u043d\\u044b\\u043c\\u0438 \\u0441 \\u0430\\u0434\\u0430\\u043f\\u0442\\u0430\\u0446\\u0438\\u0435\\u0439 \\u043a\\u0443\\u0440\\u0441\\u043e\\u0432 \\u043a \\u043d\\u043e\\u0432\\u044b\\u043c \\u0432\\u0435\\u0440\\u0441\\u0438\\u044f\\u043c Swift, Objective-C \\u0438 iOS.\",\"inLanguage\":\"ru-RU\",\"publisher\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 ChatGPT \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 Expe\u0441timax \u0438 Monte Carlo \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048 | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","description":"\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0445 - iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 3. \u0418\u0418, - \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b\u0430 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a ChatGPT \u043f\u043e\u043c\u043e\u0433 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b Expectimax \u0438","canonical_url":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/","robots":"max-snippet:-1, max-image-preview:large, max-video-preview:-1","keywords":"ai algorithm expectimax,swiftui,\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u043e\u043d\u0442\u0435 \u043a\u0430\u0440\u043b\u043e,\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c expectimax,\u0438\u0433\u0440\u0430 2048","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/#article","name":"\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 ChatGPT \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 Expe\u0441timax \u0438 Monte Carlo \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048 | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","headline":"\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 ChatGPT \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 Expe\u0441timax \u0438 Monte Carlo \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048","author":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/author\/tatiana-lornilovagmail-com\/#author"},"publisher":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/#person"},"image":{"@type":"ImageObject","url":"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/11\/StatisticsMonteCarlo.gif","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/#articleImage","width":362,"height":744},"datePublished":"2024-11-13T12:33:56+00:00","dateModified":"2025-09-11T15:39:33+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/#webpage"},"isPartOf":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/#webpage"},"articleSection":"ChatGPT, SwiftData, SwiftUI, \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, Expectimax, Monte Carlo, Swift, SwiftUI, \u0418\u0418 2048"},{"@type":"BreadcrumbList","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper#listItem","position":1,"name":"Home","item":"https:\/\/bestkora.com\/IosDeveloper","nextItem":{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper\/category\/swiftui\/#listItem","name":"SwiftUI"}},{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper\/category\/swiftui\/#listItem","position":2,"name":"SwiftUI","item":"https:\/\/bestkora.com\/IosDeveloper\/category\/swiftui\/","nextItem":{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/#listItem","name":"\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 ChatGPT \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 Expe\u0441timax \u0438 Monte Carlo \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048"},"previousItem":{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/#listItem","position":3,"name":"\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 ChatGPT \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 Expe\u0441timax \u0438 Monte Carlo \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048","previousItem":{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper\/category\/swiftui\/#listItem","name":"SwiftUI"}}]},{"@type":"Person","@id":"https:\/\/bestkora.com\/IosDeveloper\/#person","name":"tatiana.kornilova@gmail.com","image":{"@type":"ImageObject","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/33ccc19059014d8a7849c3621afa2b66a5f3e50ac7291c91c30ff35df5747628?s=96&d=mm&r=g","width":96,"height":96,"caption":"tatiana.kornilova@gmail.com"}},{"@type":"Person","@id":"https:\/\/bestkora.com\/IosDeveloper\/author\/tatiana-lornilovagmail-com\/#author","url":"https:\/\/bestkora.com\/IosDeveloper\/author\/tatiana-lornilovagmail-com\/","name":"tatiana.kornilova@gmail.com","image":{"@type":"ImageObject","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/33ccc19059014d8a7849c3621afa2b66a5f3e50ac7291c91c30ff35df5747628?s=96&d=mm&r=g","width":96,"height":96,"caption":"tatiana.kornilova@gmail.com"}},{"@type":"WebPage","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/#webpage","url":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/","name":"\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 ChatGPT \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 Expe\u0441timax \u0438 Monte Carlo \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048 | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","description":"\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0445 - iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 3. \u0418\u0418, - \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b\u0430 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a ChatGPT \u043f\u043e\u043c\u043e\u0433 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b Expectimax \u0438","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/#website"},"breadcrumb":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/#breadcrumblist"},"author":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/author\/tatiana-lornilovagmail-com\/#author"},"creator":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/author\/tatiana-lornilovagmail-com\/#author"},"datePublished":"2024-11-13T12:33:56+00:00","dateModified":"2025-09-11T15:39:33+00:00"},{"@type":"WebSite","@id":"https:\/\/bestkora.com\/IosDeveloper\/#website","url":"https:\/\/bestkora.com\/IosDeveloper\/","name":"\u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","description":"\u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u043f\u0435\u043a\u0442 \u043b\u0435\u043a\u0446\u0438\u0439 \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \" \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439\" 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 , 2023,  2024,  2025  \u0438 2026 \u0433\u0433., \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0439 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0435\u0439 \u043a\u0443\u0440\u0441\u043e\u0432 \u043a \u043d\u043e\u0432\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c Swift, Objective-C \u0438 iOS.","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/#person"}}]},"og:locale":"ru_RU","og:site_name":"\u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. | \u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u043f\u0435\u043a\u0442 \u043b\u0435\u043a\u0446\u0438\u0439 \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 &quot; \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439&quot; 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 , 2023,  2024,  2025  \u0438 2026 \u0433\u0433., \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0439 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0435\u0439 \u043a\u0443\u0440\u0441\u043e\u0432 \u043a \u043d\u043e\u0432\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c Swift, Objective-C \u0438 iOS.","og:type":"article","og:title":"\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 ChatGPT \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 Expe\u0441timax \u0438 Monte Carlo \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048 | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","og:description":"\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0445 - iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 3. \u0418\u0418, - \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b\u0430 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a ChatGPT \u043f\u043e\u043c\u043e\u0433 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b Expectimax \u0438","og:url":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/","article:published_time":"2024-11-13T12:33:56+00:00","article:modified_time":"2025-09-11T15:39:33+00:00","twitter:card":"summary","twitter:title":"\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 ChatGPT \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 Expe\u0441timax \u0438 Monte Carlo \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048 | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","twitter:description":"\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0445 - iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI, iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 3. \u0418\u0418, - \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b\u0430 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a ChatGPT \u043f\u043e\u043c\u043e\u0433 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b Expectimax \u0438"},"aioseo_meta_data":{"post_id":"16187","title":null,"description":null,"keywords":[{"label":"AI algorithm Expectimax","value":"AI algorithm Expectimax"},{"label":"SwiftUI","value":"SwiftUI"},{"label":"\u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041c\u043e\u043d\u0442\u0435 \u041a\u0430\u0440\u043b\u043e","value":"\u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041c\u043e\u043d\u0442\u0435 \u041a\u0430\u0440\u043b\u043e"},{"label":"\u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c Expectimax","value":"\u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c Expectimax"},{"label":"\u0418\u0433\u0440\u0430 2048","value":"\u0418\u0433\u0440\u0430 2048"}],"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"titles":[],"descriptions":[],"socialPosts":{"email":[],"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2024-11-13 12:33:31","updated":"2026-02-22 20:11:14","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bestkora.com\/IosDeveloper\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bestkora.com\/IosDeveloper\/category\/swiftui\/\" title=\"SwiftUI\">SwiftUI<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 ChatGPT \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 Expe\u0441timax \u0438 Monte Carlo \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/bestkora.com\/IosDeveloper"},{"label":"SwiftUI","link":"https:\/\/bestkora.com\/IosDeveloper\/category\/swiftui\/"},{"label":"\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 ChatGPT \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 Expe\u0441timax \u0438 Monte Carlo \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048","link":"https:\/\/bestkora.com\/IosDeveloper\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d1%81%d1%82%d0%b8%d0%ba%d0%b0-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-chatgpt-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%be%d0%b2-expe%d1%81timax\/"}],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/posts\/16187","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/comments?post=16187"}],"version-history":[{"count":5,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/posts\/16187\/revisions"}],"predecessor-version":[{"id":17084,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/posts\/16187\/revisions\/17084"}],"wp:attachment":[{"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/media?parent=16187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/categories?post=16187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/tags?post=16187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}