OSDN Git Service

第一と第二で艦娘数が異なる連合艦隊の海戦ログを表示できないのを直す
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 2 Mar 2018 12:45:12 +0000 (21:45 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 2 Mar 2018 12:45:12 +0000 (21:45 +0900)
KancolleSniffer.Test/BattleLogProcessorTest.cs
KancolleSniffer/LogServer.cs

index 1a03e5a..912b346 100644 (file)
@@ -47,6 +47,18 @@ namespace KancolleSniffer.Test
         }\r
 \r
         [TestMethod]\r
+        public void CombinedUnbalanceLog()\r
+        {\r
+            var input = Enumerable.Repeat("", 38).ToArray();\r
+            input[11] = "龍鳳改(Lv97)・";\r
+            input[12] = "3/48・";\r
+            input[13] = "・夕立改(Lv148)";\r
+            input[14] = "・5/36";\r
+            var result = BattleLogProcessor.Process(input).ToArray();\r
+            PAssert.That(() => result[23] == "龍鳳改(Lv97)・夕立改(Lv148)");\r
+        }\r
+\r
+        [TestMethod]\r
         public void NormalLogWithKana()\r
         {\r
             var input = Enumerable.Repeat("", 38).ToArray();\r
index 2719359..4c6bae2 100644 (file)
@@ -237,8 +237,7 @@ namespace KancolleSniffer
 \r
         private static IEnumerable<string> GetCurrentMaterialRecord()\r
         {\r
-            return new[] {Logger.FormatDateTime(DateTime.Now)}.\r
-                Concat(MaterialHistory.Select(c => c.Now.ToString()));\r
+            return new[] {Logger.FormatDateTime(DateTime.Now)}.Concat(MaterialHistory.Select(c => c.Now.ToString()));\r
         }\r
 \r
         private static void SendFile(Socket client, string path, string mime)\r
@@ -339,30 +338,18 @@ namespace KancolleSniffer
                 var hp = data[i + 1];\r
                 try\r
                 {\r
-                    if (ship.Contains("・"))\r
-                    {\r
-                        var ships = ship.Split('・');\r
-                        var hps = hp.Split('・');\r
-                        var nowMax = hps[0].Split('/').Select(int.Parse).ToArray();\r
-                        if (ShipStatus.CalcDamage(nowMax[0], nowMax[1]) == ShipStatus.Damage.Badly)\r
-                            damaged.Add(ships[0]);\r
-                        nowMax = hps[1].Split('/').Select(int.Parse).ToArray();\r
-                        if (ShipStatus.CalcDamage(nowMax[0], nowMax[1]) == ShipStatus.Damage.Badly)\r
-                            damaged.Add(ships[1]);\r
-                    }\r
-                    else\r
-                    {\r
-                        var nowMax = hp.Split('/').Select(int.Parse).ToArray();\r
-                        if (ShipStatus.CalcDamage(nowMax[0], nowMax[1]) == ShipStatus.Damage.Badly)\r
-                            damaged.Add(ship);\r
-                    }\r
+                    damaged.AddRange(from entry in ship.Split('・').Zip(hp.Split('・'), (s, h) => new {s, h})\r
+                        where entry.h.Contains("/")\r
+                        let nm = entry.h.Split('/').Select(int.Parse).ToArray()\r
+                        where ShipStatus.CalcDamage(nm[0], nm[1]) == ShipStatus.Damage.Badly\r
+                        select entry.s);\r
                 }\r
                 catch (FormatException)\r
                 {\r
                     return data;\r
                 }\r
             }\r
-            return data.Take(23).Concat(new[] { string.Join("・", damaged) }).Concat(data.Skip(23));\r
+            return data.Take(23).Concat(new[] {string.Join("・", damaged)}).Concat(data.Skip(23));\r
         }\r
 \r
         private static readonly Regex Kana = new Regex(@"\([^)]+\)\(", RegexOptions.Compiled);\r