Good vs Evil
Good vs Evil
Description
Middle Earth is about to go to war. The forces of good will have many battles with the forces of evil. Different races will certainly be involved. Each race has a certain 'worth' when battling against others. On the side of good we have the following races, with their associated worth:
- Hobbits - 1
- Men - 2
- Elves - 3
- Dwarves - 3
- Eagles - 4
- Wizards - 10
On the side of evil we have:
- Orcs - 1
- Men - 2
- Wargs - 2
- Goblins - 2
- Uruk Hai - 3
- Trolls - 5
- Wizards - 10
Although weather, location, supplies and valor play a part in any battle, if you add up the worth of the side of good and compare it with the worth of the side of evil, the side with the larger worth will tend to win.
Thus, given the count of each of the races on the side of good, followed by the count of each of the races on the side of evil, determine which side wins.
Input:
The function will be given two parameters. Each parameter will be a string separated by a single space. Each string will contain the count of each race on the side of good and evil.
The first parameter will contain the count of each race on the side of good in the following order:
- Hobbits, Men, Elves, Dwarves, Eagles, Wizards.
The second parameter will contain the count of each race on the side of evil in the following order:
- Orcs, Men, Wargs, Goblins, Uruk Hai, Trolls, Wizards.
All values are non-negative integers. The resulting sum of the worth for each side will not exceed the limit of a 32-bit integer.
Output:
Return ""Battle Result: Good triumphs over Evil" if good wins, "Battle Result: Evil eradicates all trace of Good" if evil wins, or "Battle Result: No victor on this battle field" if it ends in a tie.
using System; using System.Linq; public class Kata { public static string GoodVsEvil(string good, string evil) { string result = "Battle Result: Good triumphs over Evil"; int[] goodValue = { 1, 2, 3, 3, 4, 10 }; int[] evilValue = { 1, 2, 2, 2, 3, 5, 10 }; int[] goodCount = good.Split(' ').Select(x => Convert.ToInt32(x)).ToArray(); int[] evilCount = evil.Split(' ').Select(x => Convert.ToInt32(x)).ToArray(); int goodSum = Enumerable.Range(0, goodValue.Length).Aggregate(0, (sum, x) => sum + goodValue[x] * goodCount[x]); int evilSum = Enumerable.Range(0, evilValue.Length).Aggregate(0, (sum, x) => sum + evilValue[x] * evilCount[x]); if (goodSum == evilSum) { result = "Battle Result: No victor on this battle field"; } else if (goodSum < evilSum) { result = "Battle Result: Evil eradicates all trace of Good"; } return result; } }
其他人的解法:
using System; public class Kata { public enum GoodRacesValues { Hobbits = 1, Men = 2, Elves = 3, Dwarves = 3, Eagles = 4, Wizards = 10 } public enum EvilRacesValues { Orcs = 1, Men = 2, Wargs = 2, Goblins = 2, UrukHai = 3, Trolls = 5, Wizards = 10 } public static string GoodVsEvil(string good, string evil) { string[] goodArmyValues = good.Split(' '); string[] evilArmyValues = evil.Split(' '); int goodArmyForces = Kata.CalculateForces<GoodRacesValues>(goodArmyValues); int evilArmyForces = Kata.CalculateForces<EvilRacesValues>(evilArmyValues); return Kata.GetBattleResult(goodArmyForces, evilArmyForces); } public static int CalculateForces<T>(string[] armyValues) { int i = 0; int totalForces = 0; foreach(T raceValue in Enum.GetValues(typeof(T))) { totalForces += Convert.ToInt32(raceValue) * int.Parse(armyValues[i]); ++i; } return totalForces; } public static string GetBattleResult(int goodArmyForces, int evilArmyForces) { if (goodArmyForces > evilArmyForces) { return "Battle Result: Good triumphs over Evil"; } else if (goodArmyForces < evilArmyForces) { return "Battle Result: Evil eradicates all trace of Good"; } else { return "Battle Result: No victor on this battle field"; } } }
using System; using System.Linq; public class Kata { public static string GoodVsEvil(string good, string evil) { var gWorth = new[] { 1, 2, 3, 3, 4, 10 }; var eWorth = new[] { 1, 2, 2, 2, 3, 5, 10 }; var g = good.Split(' ').Select(int.Parse).Zip(gWorth, (f, s) => f * s).Sum(); var b = evil.Split(' ').Select(int.Parse).Zip(eWorth, (f, s) => f * s).Sum(); return (g > b) ? "Battle Result: Good triumphs over Evil" : ((g == b) ? "Battle Result: No victor on this battle field" : "Battle Result: Evil eradicates all trace of Good"); } }
作者:Chuck Lu GitHub |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2014-07-10 Win7系统中如何查看当前文件被哪一个程序占用了