描述:
现有一个n行的字符串,每个子串的长度为n个字符。如:
s = “abcd\nefgh\nijkl\nmnop”
我们将会对这个方型字符串做一些转换操作:
主对角线对称: diag1Sym
-diag1Sym => “aeim\nbfjn\ncgko\ndhlp”顺时针旋转90度:rot90Clock
-rot90Clock => “miea\nnjfb\nokgc\nplhd”自身+主对角线对称: selfieAndDiag1
-selfieAndDiag1 => “abcd|aeim\nefgh|bfjn\nijkl|cgko\nmnop|dhlp”
-打印出来为
abcd|aeim
efgh|bfjn
ijkl|cgko
mnop|dhlp`
写出这三个操作方法,并且写一个oper(fct, s),参数s是输入的字符串,fct为diag1Sym,rot90Clock ,selfieAndDiag1 其中之一。
例如:
s = “abcd\nefgh\nijkl\nmnop”
oper(diag_1_sym, s) => “aeim\nbfjn\ncgko\ndhlp”
oper(rot_90_clock, s) => “miea\nnjfb\nokgc\nplhd”
oper(selfie_and_diag1, s) => “abcd|aeim\nefgh|bfjn\nijkl|cgko\nmnop|dhlp”
MyCode:
using System;
using System.Linq;
using System.Collections.Generic;
public class Opstrings
{
public static string Rot90Clock(string strng)
{
string retStr = Diag1Sym(strng);
return string.Join("\n", retStr.Split('\n').Select(i => string.Concat(i.Reverse())));
}
public static string Diag1Sym(string strng)
{
var sArr = strng.Split('\n');
var s = sArr[0];
List<string> retList = new List<string>();
for (int i = 0; i < s.Length; i++)
{
string retStr = "";
foreach (var j in sArr)
{
retStr += j[i];
}
retList.Add(retStr);
}
return string.Join("\n",retList.ToArray());
}
public static string SelfieAndDiag1(string strng)
{
string retStr = "";
var retStr1 = Diag1Sym(strng).Split('\n');
var retStr2 = strng.Split('\n');
for(int i = 0;i < retStr1.Length;i++)
{
retStr += retStr2[i] + "|" + retStr1[i] + "\n";
}
return retStr.Substring(0,retStr.Length - 1);
}
public static string Oper(Func<string,string> fct, string s)
{
return fct(s);
}
}
CodeWar:
using System;
using System.Linq;
public class Opstrings
{
public static string VertMirror(string s)
{
return string.Join("\n",s.Split('\n').Select(x=>string.Join("",x.Reverse())));
}
public static string HorMirror(string s)
{
return string.Join("\n",s.Split('\n').Reverse());
}
public static string Rot(string s) {
return string.Join("",s.Reverse());
}
public static String SelfieAndRot(string s)
{
return string.Join("\n",s.Split('\n').Select(x=>x+new string('.',x.Length)).Concat(
Rot(s).Split('\n').Select(x=>new string('.',x.Length)+x) ));
}
public static string Rot90Clock(string s)
{
return VertMirror(Diag1Sym(s));
}
public static string Diag1Sym(string s)
{
var arr=s.Split('\n').Select(x=>x.ToCharArray()).ToArray();
return string.Join("\n",Enumerable.Range(0,arr[0].Length).Select(i=>string.Join("",Enumerable.Range(0,arr[0].Length).Select(j=>arr[j][i]))));
}
public static string SelfieAndDiag1(string s)
{
var a=s.Split('\n');
var b=Diag1Sym(s).Split('\n');
return string.Join("\n",a.Select((x,i)=>x+"|"+b[i]));
}
public static string Oper(Func<string,string> fct, string s)
{
return fct(s);
}
}