チャック・ノリスがコンセプトとデザインした…ようなことが書いてあるが…。
とりあえず変換後は0ばっかりで読みにくさが有頂天。
さらに7bitなのに気づかなくて、かなり悩んだ。
下手したら詰んでた。
using System; using System.Linq; using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; /** * Auto-generated code below aims at helping you parse * the standard input according to the problem statement. **/ class Solution { static void Main(string[] args) { string MESSAGE = Console.ReadLine(); // Write an action using Console.WriteLine() // To debug: Console.Error.WriteLine("Debug messages..."); Console.Error.WriteLine(MESSAGE); //メッセージの確認用 Console.WriteLine(CNEncode(MESSAGE)); } //チャック・ノリスエンコード //引数 string m : メッセージ //戻り値 string : エンコード済みメッセージ public static string CNEncode(string m) { string bits = StringToBits(m); //ビット列をstringで取得 return BitsToPreCN(bits); } //メッセージをビット列に変換する //引数 string m : メッセージ //戻り値 string : string型のビット列 public static string StringToBits(string m) { string bits = null; byte[] bytes = Encoding.ASCII.GetBytes(m); //ASCIIコードでbyte型の配列に変換 foreach(byte b in bytes) { bits += Convert.ToString(b,2).PadLeft(7,'0'); //2進数化&上位ビットが0の場合表示されないので、0で埋める } return bits; } //ビット列をチャックノリス型に変換する(なんでこんなメソッド名にしたんだろう) //引数 string bits : ビット列 //戻り値 string : チャックノリスエンコードしたビット列 public static string BitsToPreCN(string bits) { string tes = null; int oc = 0; for(int i = 0; i < bits.Length-1; i++) { if(bits[i] != bits[i+1]) { //01や10のような場所を探す tes += BitNum(bits[i]); //ビットが0か1か tes += "".PadRight(i+1-oc, '0'); //連続してる分だけ0をつなげる tes += " "; //区切り用スペース oc = i+1; } } if(bits.Length-oc != bits.Length) { //終わり部分の処理 tes += BitNum(bits[bits.Length-1]); tes += "".PadRight(bits.Length-oc, '0'); } return tes; } //ビットが1か0かの判定 //引数 char c : 調べるビット //戻り値 string : ビットが0の場合00 ,1の場合0 public static string BitNum(char c) { return (c == '0' ? "00 " : "0 "); //ビットの判定 } }
Chuck Norris(チャック・ノリス) トーキングボブルヘッド
- 出版社/メーカー: アニメ/ホビー
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る