{"id":1269,"date":"2017-06-15T05:45:07","date_gmt":"2017-06-15T11:45:07","guid":{"rendered":"http:\/\/agiltools.com\/blogsp\/?p=1269"},"modified":"2017-07-02T20:36:47","modified_gmt":"2017-07-03T02:36:47","slug":"fighters","status":"publish","type":"post","link":"http:\/\/agiltools.com\/blogsp\/fighters\/","title":{"rendered":"Fighters!"},"content":{"rendered":"<div id=\"dslc-theme-content\"><div id=\"dslc-theme-content-inner\"><p>El problema original fue publicado por la revista InfORMS en Octubre de 2014.\u00a0A continuaci\u00f3n su versi\u00f3n en espa\u00f1ol.<\/p>\n<p>Cuatro combatientes debaten entre\u00a0qui\u00e9n de ellos es el m\u00e1s fuerte. La figura 1 muestra a los cuatro combatientes: Allan, Barry, Charles y Dan.<br \/>\nCada luchador tiene diferentes habilidades de ataque y resistencia. Al inicio de la batalla tienen diferentes puntos de resistencia:\u00a0Allan tiene 10, Barry tiene 12, Charles tiene 16 y Dan tiene\u00a018. Adem\u00e1s, cada luchador tiene diferentes puntos de ataque: Allan tiene 4, Barry tiene 3, Charles tiene 2 y Dan tiene 1.<br \/>\nLa batalla tiene lugar en varias rondas, cada\u00a0una\u00a0consistente en un solo ataque. En cada ronda, una\u00a0atacante aleatorio y un defensor aleatorio son elegidos.<br \/>\nCuando el atacante ataca a un defensor, el defensor pierde\u00a0puntos de resistencia en la cantidad equivalente a los puntos de ataque del contrincante. Por ejemplo, si Allan es el atacante\u00a0y\u00a0Barry es el defensor, Barry perder\u00eda cuatro puntos de\u00a0resistencia.<br \/>\nLos combatientes contin\u00faan atacando y defendiendo aleatoriamente\u00a0en las rondas siguientes hasta que s\u00f3lo queda un luchador,\u00a0quien entonces es declarado ganador. Se elimina un luchador\u00a0de la batalla cuando sus puntos de vida se convierten en cero (o menos).<br \/>\nPregunta: \u00bfQu\u00e9 peleador es m\u00e1s probable que gane la\u00a0batalla?<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1270\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2017\/06\/fighters.png\" alt=\"\" width=\"727\" height=\"334\" srcset=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2017\/06\/fighters.png 727w, http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2017\/06\/fighters-300x138.png 300w\" sizes=\"(max-width: 727px) 100vw, 727px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Un simple ejercicio de simulaci\u00f3n, la respuesta se publicar\u00e1 en una semana.<\/p>\n<p>&nbsp;<\/p>\n<h2>Respuesta<\/h2>\n<p>En el link de final de p\u00e1gina se encuentra una macro sencilla que permite simular m\u00faltiples repeticiones de un combate entre los cuatro jugadores. El c\u00f3digo que realiza la simulaci\u00f3n se explica a continuaci\u00f3n: En s\u00edntesis, una vez borrado el resultado de la ronda anterior, se elige un atacante y un defensor de manera aleatoria y se hace un ataque por un valor entre 1 y el m\u00ednimo entre el n\u00famero de puntos de defensa y el n\u00famero de puntos de ataque. Este valor se resta al jugador de defensa y se repite el proceso hasta que solo quede un jugador con puntos. Esto se contabiliza dentro del tablero de mando al inicio del archivo. Al final, luego de al menos 1000 repeticiones, se establece el jugador que m\u00e1s partidas ha ganado, que bajo las configuraciones descritas arriba es <strong>Charles con una probabilidad del 32.5%<\/strong>.<\/p>\n<pre class=\"lang:vb decode:true\" title=\"Fight\">Sub start()\r\nDim rng As Range\r\nDim sim As Worksheet\r\nSet sim = Sheets(\"sim\")\r\nsim.Range(\"B4:F4\").Select\r\nSelection.ClearContents\r\nRange(\"A1\").Select\r\nfrm1.Show\r\nIf frm1.Label2.Caption = 999 Then\r\n    Exit Sub\r\nEnd If\r\nFor t = 1 To frm1.TextBox1.Value\r\nsim.Range(\"A8:I2000\").Select\r\nSelection.ClearContents\r\nsim.Range(\"A1\").Select\r\nflag = 999\r\ni = 1\r\nWhile flag &gt; 1\r\n    If i = 1 Then\r\n        v = 4\r\n    Else\r\n    Set rng = sim.Range(Cells(i + 6, 6), Cells(i + 6, 9))\r\n    Maximum = Application.WorksheetFunction.Max(rng)\r\n    v = Application.WorksheetFunction.CountIf(rng, \"&gt;0\")\r\n    End If\r\n   flTemp = 1\r\n   While flTemp = 1\r\n   atacker = Int(Rnd() * 4) + 1\r\n   If (sim.Cells(i + 6, 5 + atacker) &gt; 0) Then\r\n    flTemp = 999\r\n    atackName = sim.Cells(1, 1 + atacker)\r\n   End If\r\n   Wend\r\n   flTemp = 1\r\n   While flTemp = 1\r\n   target = Int(Rnd() * 4) + 1\r\n   If (sim.Cells(i + 6, 5 + target) &gt; 0 And target &lt;&gt; atacker) Then\r\n    flTemp = 999\r\n    targetName = sim.Cells(1, 1 + target)\r\n   End If\r\n   Wend\r\n   sim.Cells(i + 7, 1) = i\r\n   sim.Cells(i + 7, 2) = atackName\r\n   sim.Cells(i + 7, 3) = targetName\r\n   If (i = 1) Then\r\n    sim.Cells(i + 7, 4) = sim.Cells(2, 1 + target)\r\n    sim.Cells(i + 7, 5) = sim.Cells(3, 1 + atacker)\r\n    sim.Cells(i + 7, 6) = sim.Cells(2, 2)\r\n    sim.Cells(i + 7, 7) = sim.Cells(2, 3)\r\n    sim.Cells(i + 7, 8) = sim.Cells(2, 4)\r\n    sim.Cells(i + 7, 9) = sim.Cells(2, 5)\r\n    If sim.Cells(2, 1 + target) - sim.Cells(i + 7, 5) &lt; 0 Then\r\n        sim.Cells(i + 7, 5 + target) = 0\r\n    Else\r\n        sim.Cells(i + 7, 5 + target) = sim.Cells(2, 1 + target) - sim.Cells(i + 7, 5)\r\n    End If\r\n   Else\r\n    sim.Cells(i + 7, 4) = sim.Cells(i + 6, 5 + target)\r\n    sim.Cells(i + 7, 5) = sim.Cells(3, 1 + atacker)\r\n    sim.Cells(i + 7, 6) = sim.Cells(i + 6, 6)\r\n    sim.Cells(i + 7, 7) = sim.Cells(i + 6, 7)\r\n    sim.Cells(i + 7, 8) = sim.Cells(i + 6, 8)\r\n    sim.Cells(i + 7, 9) = sim.Cells(i + 6, 9)\r\n    If sim.Cells(i + 6, 5 + target) - sim.Cells(i + 7, 5) &lt; 0 Then\r\n        sim.Cells(i + 7, 5 + target) = 0\r\n    Else\r\n        sim.Cells(i + 7, 5 + target) = sim.Cells(i + 6, 5 + target) - sim.Cells(i + 7, 5)\r\n    End If\r\n   End If\r\n   'sim.Cells(i + 8) = i\r\n    Set rng = sim.Range(Cells(i + 7, 6), Cells(i + 7, 9))\r\n    Maximum = Application.WorksheetFunction.Max(rng)\r\n    v = Application.WorksheetFunction.CountIf(rng, \"&gt;0\")\r\n    If v &lt; 2 Then\r\n        flag = 1\r\n        tSim = 0\r\n        For k = 1 To 4\r\n            If sim.Cells(i + 7, 5 + k) &gt; 0 Then\r\n                winner = sim.Cells(7, 5 + k)\r\n                wc = k + 1\r\n            End If\r\n            tSim = tSim + sim.Cells(4, 1 + k)\r\n        Next k\r\n        sim.Cells(4, wc) = sim.Cells(4, wc) + 1\r\n        sim.Cells(4, 6) = tSim + 1\r\n    End If\r\n    i = i + 1\r\nWend\r\nNext t\r\nMsgBox (\"Done!\")\r\nEnd Sub\r\n<\/pre>\n<p><a href=\"http:\/\/agiltools.com\/Resources\/Fighters.zip\">Descarga del archivo de Excel.<\/a><\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><div class=\"sd-content\"><ul><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-1269\" class=\"share-twitter sd-button share-icon\" href=\"http:\/\/agiltools.com\/blogsp\/fighters\/?share=twitter\" target=\"_blank\" title=\"Click to share on Twitter\"><span>Twitter<\/span><\/a><\/li><li class=\"share-facebook\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-facebook-1269\" class=\"share-facebook sd-button share-icon\" href=\"http:\/\/agiltools.com\/blogsp\/fighters\/?share=facebook\" target=\"_blank\" title=\"Click to share on Facebook\"><span>Facebook<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>El problema original fue publicado por la revista InfORMS en Octubre de 2014.\u00a0A continuaci\u00f3n su versi\u00f3n en espa\u00f1ol. Cuatro combatientes debaten entre\u00a0qui\u00e9n de ellos es el m\u00e1s fuerte. La figura 1 muestra a los cuatro combatientes: Allan, Barry, Charles y Dan. Cada luchador tiene diferentes habilidades de ataque y resistencia. Al inicio de la batalla [&hellip;]<\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><div class=\"sd-content\"><ul><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-1269\" class=\"share-twitter sd-button share-icon\" href=\"http:\/\/agiltools.com\/blogsp\/fighters\/?share=twitter\" target=\"_blank\" title=\"Click to share on Twitter\"><span>Twitter<\/span><\/a><\/li><li class=\"share-facebook\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-facebook-1269\" class=\"share-facebook sd-button share-icon\" href=\"http:\/\/agiltools.com\/blogsp\/fighters\/?share=facebook\" target=\"_blank\" title=\"Click to share on Facebook\"><span>Facebook<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"spay_email":""},"categories":[7],"tags":[133,22,6],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/posts\/1269"}],"collection":[{"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/comments?post=1269"}],"version-history":[{"count":3,"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/posts\/1269\/revisions"}],"predecessor-version":[{"id":1277,"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/posts\/1269\/revisions\/1277"}],"wp:attachment":[{"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/media?parent=1269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/categories?post=1269"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/tags?post=1269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}