Coding_Gamesメモ_Chuck Norris

javaの学習にCoding_Games を知り、学習の記録としてメモ。
To debug:

System.err.println( );

を使うとデバックしやすくなる。(エラー出力は評価に影響しない)

内容

ASCII 文字を変換

ルール

ASCII 文字をバイナリに変換した後、'0' と ' ' の並びに変換する
'0' は識別用と数量の2種類があり、' ' で区切る。

  • バイナリが1の時 "0"
  • バイナリが0の時 "00"

識別用の'0'の後に、いくつ続くかを'0'の個数で表す。

例 'C' → "1000011"
1 が1つ "0 0"
0 が4つ "00 0000"
1 が2つ "0 00"
→"0 0 00 0000 0 00"

必ず1文字7桁のバイナリに変換すること

注意点
出題ページの

Second example, we want to encode the message CC (i.e. the 14 bits 10000111000011) :

の欄にあるように、文字が連続するときはすべてバイナリに直してから変換する必要がある。

使用したクラス

String

(byte) = String.getBytes()
文字列を1文字づつバイトコードに変換

(String) = new String( StringBuilder )
StringBuilder の内容でStringを作る

(char) = String.toCharArray()
文字列をchar配列として出力する

Integer

(String) = Integer.toBinaryString( int )
指定された数値を2進数の文字列として出力

2 → "10"
7 → "111"

StringBuilder

StringBuilder.insert( int , x )
x はboolean,char,int,String,Objectなど
intで指定された場所にx を挿入する

StringBuilder.append( x )
x はboolean,char,int,String,Objectなど
文字列の後ろにxを追加する

考え方
バイナリ形式の文字列を作る処理と、0 でできた文字列に変換する処理を分ける。

0でできた文字列に変換する処理は、1つ前の文字と同じ時は共通して出力用の文字列に0 を追加になる。

Coding_Games:https://www.codingame.com/
String (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html
Integer (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Integer.html
StringBuilder (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/StringBuilder.html