using System;using System.Text;using System.Text.RegularExpressions;using System.Linq;using System.Collections.Generic;publicclassKata{publicstaticstringAlphabetWar(string fight){Regex rgx =newRegex(@"\w{0,1}[*+]\w{0,1}");
Dictionary<char,int> lefts =newDictionary<char,int>(){{'w',4},{'p',3},{'b',2},{'s',1}};
Dictionary<char,int> rights =newDictionary<char,int>(){{'m',4},{'q',3},{'d',2},{'z',1}};int leftPower =0;int rightPower =0;string afterBombing = rgx.Replace(fight,"");foreach(char c in afterBombing){if(lefts.ContainsKey(c)) leftPower += lefts[c];elseif(rights.ContainsKey(c)) rightPower += rights[c];}if(leftPower == rightPower)return"Let's fight again!";elsereturn(leftPower > rightPower)?"Left side wins!":"Right side wins!";}}
答案2:
using System.Text.RegularExpressions;using System.Collections.Generic;using System.Linq;publicclassKata{publicstaticstringAlphabetWar(string fight){string bombExploded = Regex.Replace(fight,@".?[*]+.?",@"___");
Dictionary<char,int> powers =newDictionary<char,int>(){{'w',-4},{'p',-3},{'b',-2},{'s',-1},{'m',4},{'q',3},{'d',2},{'z',1}};int totalPower = bombExploded.Where(x => powers.ContainsKey(x)).Select(x => powers[x]).Sum();return(totalPower ==0)?"Let's fight again!":(totalPower >0)?"Right side wins!":"Left side wins!";}}
答案3:
using System;using System.Collections.Generic;using System.Linq;publicclassKata{publicstaticstringAlphabetWar(string fight){int left =0;int right =0;int w =4;int p =3;int b =2;int s =1;int m =4;int q =3;int d =2;int z =1;string[] leftLetters ={"w","p","b","s"};string[] rightLetters ={"m","q","d","z"};char[] fightLetters = fight.ToCharArray();
List<char> aliveLetters = fightLetters.ToList();
Console.WriteLine("***START***");
Console.WriteLine(fight);
Console.WriteLine(fightLetters.Length);for(int i =0; i < fightLetters.Length; i++){string letter = fightLetters[i].ToString();if(letter =="*"){
Console.WriteLine(i);if(i ==0&& fightLetters.Length >1){
Console.WriteLine("i == 0 and length > 1");//aliveLetters.RemoveAt(i+1);
aliveLetters[i+1]= Convert.ToChar("-");}elseif(i == fightLetters.Length -1){
Console.WriteLine("i == length - 1");//aliveLetters.RemoveAt(i-1);
aliveLetters[i-1]= Convert.ToChar("-");}else{
Console.WriteLine("Standard");
aliveLetters[i+1]= Convert.ToChar("-");
aliveLetters[i-1]= Convert.ToChar("-");//aliveLetters.RemoveAt(i+1);//aliveLetters.RemoveAt(i-1);}}//Console.WriteLine(aliveLetters[i]);}for(int ii =0; ii < aliveLetters.Count; ii++){
Console.WriteLine("alive letters = "+ aliveLetters[ii]);string letter = aliveLetters[ii].ToString();if(leftLetters.Contains(letter)){//Console.WriteLine("left " + aliveLetters[i]);switch(letter){case"w":
left+=4;break;case"p":
left+=3;break;case"b":
left+=2;break;case"s":
left+=1;break;}}if(rightLetters.Contains(letter)){//Console.WriteLine("right " + aliveLetters[i]);switch(letter){case"m":
right+=4;break;case"q":
right+=3;break;case"d":
right+=2;break;case"z":
right+=1;break;}}}
Console.WriteLine("left = "+ left);
Console.WriteLine("right = "+ right);
Console.WriteLine("***END***");if(left > right){return"Left side wins!";}elseif(right > left){return"Right side wins!";}else{return"Let's fight again!";}//return "Have mercy!";}}
答案4:
using System.Text.RegularExpressions;using System.Linq;publicclassKata{publicstaticstringAlphabetWar(string fight){var score = Regex.Replace(fight,@"(\w?\*\w?)|[^zdqmsbpw]","").Select(c =>"wpbs_zdqm".IndexOf(c)-4).Sum();return score ==0?"Let's fight again!": score <0?"Left side wins!":"Right side wins!";}}
答案5:
using System.Text.RegularExpressions;publicclassKata{publicstaticstringAlphabetWar(string fight){conststring left ="sbpw";conststring right ="zdqm";int result =0;
fight = Regex.Replace(fight,@"\w?\*\w?",string.Empty);foreach(var c in fight){if(left.Contains(c.ToString())){
result +=(left.IndexOf(c.ToString())+1);}elseif(right.Contains(c.ToString())){
result -=(right.IndexOf(c.ToString())+1);}}if(result ==0)return"Let's fight again!";var rr = result >0?"Left":"Right";return $"{rr} side wins!";}}
答案6:
using System.Linq;using System.Collections.Generic;publicclassKata{privatestatic Dictionary<char,int> leftDict =newDictionary<char,int>(){{'w',4},{'p',3},{'b',2},{'s',1}};privatestatic Dictionary<char,int> rightDict =newDictionary<char,int>(){{'m',4},{'q',3},{'d',2},{'z',1}};publicstaticstringAlphabetWar(string fight){int left =0;int right =0;for(int i =0; i < fight.Length; i++){if(fight[i]!='*'&&(i ==0|| fight[i -1]!='*')&&(i == fight.Length -1|| fight[i +1]!='*')){
left+= leftDict.FirstOrDefault(kvp => kvp.Key == fight[i]).Value;
right += rightDict.FirstOrDefault(kvp => kvp.Key == fight[i]).Value;}}return left > right ?"Left side wins!": left < right ?"Right side wins!":"Let's fight again!";}}
答案7:
using System.Collections.Generic;using System.Text.RegularExpressions;publicclassKata{privatereadonlystatic Dictionary<char,sbyte> letters =newDictionary<char,sbyte>(){{'w',4},{'p',3},{'b',2},{'s',1},{'m',-4},{'q',-3},{'d',-2},{'z',-1}};privatestaticRegex rex =newRegex(@"\*{2,}", RegexOptions.Compiled);privatestaticRegex rex2 =newRegex(@"\*[a-z]", RegexOptions.Compiled);privatestaticRegex rex3 =newRegex(@"[a-z]\*", RegexOptions.Compiled);publicstaticstringAlphabetWar(string fight){
fight = rex3.Replace(rex2.Replace(rex.Replace(fight,"*"),"*_"),"_*");int result =0;foreach(char c in fight)
result += letters.ContainsKey(c)? letters[c]:0;return result ==0?"Let's fight again!": result >0?"Left side wins!":"Right side wins!";}}
using System;using System.Collections.Generic;publicclassKata{publicstaticstringAlphabetWar(string fight){// creating a dictionary with the left side letters and their power
IDictionary<string,int> leftPowerLetters =newDictionary<string,int>{["w"]=4,["p"]=3,["b"]=2,["s"]=1};// creating a dictionary with the right side letters and their power
IDictionary<string,int> rightPowerLetters =newDictionary<string,int>{["m"]=4,["q"]=3,["d"]=2,["z"]=1,};char[] letterArray = fight.ToCharArray();int leftSidePower =0;int rightSidePower =0;// going through each characterfor(int i=0; i<letterArray.Length; i++){for(int j=0; j<letterArray.Length; j++){// seeing if char is a bomb and killing the adjacent lettersif(letterArray[j]=='*'&& j ==0) letterArray[j +1]=' ';elseif(letterArray[j]=='*'&& j == letterArray.Length -1) letterArray[j -1]=' ';elseif(letterArray[j]=='*'&& j !=0&& j != letterArray.Length -1){if(letterArray[j -1]!='*') letterArray[j -1]=' ';if(letterArray[j +1]!='*') letterArray[j +1]=' ';}}// check if there is a left side power letter and add it to sumif(leftPowerLetters.ContainsKey(letterArray[i].ToString())){
leftSidePower += leftPowerLetters[letterArray[i].ToString()];}// check if there is a right side power letter and add it to sumelseif(rightPowerLetters.ContainsKey(letterArray[i].ToString())){
rightSidePower += rightPowerLetters[letterArray[i].ToString()];}}// return which side winsif(leftSidePower > rightSidePower)return"Left side wins!";elseif(rightSidePower > leftSidePower)return"Right side wins!";elsereturn"Let's fight again!";}}
答案10:
using System;using System.Text.RegularExpressions;publicclassKata{publicstaticstringAlphabetWar(string input){char[] battlefield = input.ToCharArray();for(int i =0; i < input.Length; i++){if(battlefield[i]=='*'){if(i !=0&& battlefield[i-1]!='*')
battlefield[i -1]='_';if(i != input.Length -1&& battlefield[i+1]!='*')
battlefield[i +1]='_';
battlefield[i]='_';}}returnFight(string.Join("", battlefield));}publicstaticstringFight(string input){int leftSidePower =0;int rightSidePower =0;foreach(var letter in input){switch(letter){case'w':
leftSidePower +=4;break;case'p':
leftSidePower +=3;break;case'b':
leftSidePower +=2;break;case's':
leftSidePower +=1;break;case'm':
rightSidePower +=4;break;case'q':
rightSidePower +=3;break;case'd':
rightSidePower +=2;break;case'z':
rightSidePower +=1;break;}}if(leftSidePower > rightSidePower)return"Left side wins!";elseif(rightSidePower > leftSidePower)return"Right side wins!";return"Let's fight again!";}}
字母战争 - 空袭 - 信大屠杀【难度:2级】:答案1: using System; using System.Text; using System.Text.RegularExpressions; using System.Linq; using System.Collections.Generic; public class Kata { public static s...