using System;using System.Collections.Generic;publicclassKata{publicstaticstringGrille(string message,int code){string bin = Convert.ToString(code,2);int m = message.Length;int b = m==0?0: bin.Length;if(m!=0&& b==0) m=0;char[] complete_bin =(m>b)?newchar[m]:newchar[b];char[] complete_message =(m>b)?newchar[m]:newchar[b];
List<char> lst =newList<char>();if(m>=b){//START
Array.Copy(message.ToCharArray(),complete_message,m);for(int i=0, j=0;i<m;i++){
complete_bin[i]=(i<(m-b))?'0': bin[j];
j =(i<(m-b))?0: j+1;}}else{//START
Array.Copy(bin.ToCharArray(),complete_bin,b);for(int i=0, j=0;i<b;i++){
complete_message[i]=(i<(b-m))?' ': message[j];
j =(i<(b-m))?0: j+1;}}//CHECKint count =0;foreach(char cb in complete_bin){if(cb =='1')
lst.Add(complete_message[count]);
count++;}
List<char> final =newList<char>();
count =0;foreach(char l in lst){if(l!=' ')
final.Add(lst[count]);
count++;}returnnewstring(final.ToArray());}}
答案3:
using System;using System.Linq;publicclassKata{publicstaticstringGrille(string m,int code)=>
String.Concat(m.Where((c,i)=>((long)1<< m.Length - i -1& code)!=0));}
答案4:
using System;using System.Text;publicclassKata{publicstaticstringGrille(string message,int code){string ret = String.Empty;int compareCode =1;for(int i = message.Length-1; i>=0; i--){if((compareCode&code)>0)
ret =message[i].ToString()+ ret;
compareCode<<=1;}return ret;}}
答案5:
using System;publicclassKata{publicstaticstringGrille(string message,int code){if(code ==0)returnstring.Empty;constint max_len =sizeof(int)*8;constint mask =(1<<(max_len -1));int len = message.Length > max_len ? max_len : message.Length;int msgOffset = len < max_len ?0: message.Length - max_len;char[] chars =newchar[len];int i =0;int n =0;
code <<= max_len - len;while(code !=0&& i < len){if(Convert.ToBoolean(code & mask)){
chars[n]= message[msgOffset + i];
n++;}
i++;
code <<=1;}returnnewstring(chars.AsSpan(0, n));}}
答案6:
using System;classKata{publicstaticstringGrille(string message,int code){constint max_len =sizeof(int)*8;if(code ==0)returnstring.Empty;if(message.Length > max_len)
message = message.Substring(message.Length - max_len);var len = message.Length;var chars =newchar[len];var n =0;for(int i =0; i < len; i++){if(Convert.ToBoolean((code >>(len -1- i))&1)){
chars[n]= message[i];
n++;}}returnnewstring(chars.AsSpan(0, n));}}
答案7:
using System;using System.Linq;publicclassKata{publicstaticstringGrille(string message,int code){var binary = Convert.ToString(code,2).PadLeft(message.Length,'0').Reverse().Take(message.Length).Reverse();returnstring.Concat(message.Zip(binary,(m, b)=> m *(b -'0')).Where(i => i >0).Select(i =>(char)i));}}
答案8:
using System;using System.Linq;using System.Collections.Generic;publicclassKata{publicstaticstringGrille(string message,int code){if(code ==0)return"0";int ln = message.Length;long c =(long)code;char[] arr = message.ToCharArray();
List<char> chs =newList<char>();int i =0;while(c >0&& i < ln){if((c &1)==1)
chs.Add(message[ln-1-i]);
c >>=1;
i++;}
chs.Reverse();returnnewstring(chs.ToArray());}}
using System;publicclassKata{publicstaticstringGrille(string message,int code){string bin = Convert.ToString(code,2);if(bin.Length < message.Length)
bin = bin.PadLeft(bin.Length +(message.Length - bin.Length),'0');elseif(bin.Length > message.Length)
message = message.PadLeft(message.Length +(bin.Length - message.Length),'_');string result ="";for(int i =0; i < message.Length; i++){if(bin[i]=='1')
result += message[i];}return result.Replace("_","");}}
烧烤吧!【难度:2级】:答案1:using System.Linq;using System;public class Kata { public static string Grille(string message, int code) { string mapper = (mapper = new string('0', message.Length) + Con...