kakakakakku blog

Weekly Tech Blog: Keep on Learning!

HexspeakGenerater

Hexspeakが盛り上がってるみたいなので(Hyper-V的な意味で),任意の単語からHexspeakを生成するプログラムを書いてみた.今さら感たっぷりで特に意味はない.結局は変換ルールありきなので,生成結果が16進数にならなかった(10進数変換でExceptionが発生した)場合は,変換ルールを追加する必要がある.ちなみに動作優先で書いたので引数チェックはしてないし,replaceAllでStringオブジェクトがたくさんできちゃうし,イケてないところ満載だけどご容赦を.

Microsoftではサーバ用仮想化システムとしてHyper-Vを提供していますが、LinuxカーネルでHyper-Vをサポートするためのコード内に「big boobs(でかいおっぱい)」という単語を隠していたとして、謝罪と当該部分の修正を約束しました。

MicrosoftがLinuxカーネル内に卑猥な単語を隠していたとして謝罪 - GIGAZINE

HexspeakGenerater.java

package jp.kakku.mainlogic;

public class HexspeakGenerater {

	// 16進数接頭辞
	public static final String HEX_PREFIX = "0x";

	public static void main(String[] args) {

		// 変換文字列を受け取る
		String transBefore = args[0];
		String transAfter = transBefore;

		//
		// 単語からHexspeakを生成する
		//

		// 半角スペースを除去して,大文字に変換する
		transAfter = transAfter.replaceAll(" ", "").toUpperCase();

		// Hexspeakに変換する(ルールは必要に応じて追加する)
		transAfter = transAfter.replaceAll("AT", "8");
		transAfter = transAfter.replaceAll("G", "6");
		transAfter = transAfter.replaceAll("I", "1");
		transAfter = transAfter.replaceAll("L", "1");
		transAfter = transAfter.replaceAll("O", "0");
		transAfter = transAfter.replaceAll("S", "5");

		// 10進数変換で16進数になっているか確認し,16進数でなかった場合は処理を中断する
		try {
			Long.parseLong(transAfter, 16);
		} catch (NumberFormatException e) {
			System.out.println("NotHexError");
			System.exit(1);
		}

		// 変換結果を標準出力する
		System.out.println("------------------------------");
		System.out.println("[" + transBefore + "] -> [" + HEX_PREFIX + transAfter + "]");
		System.out.println("------------------------------");

	}

}

Wikipediaの特記すべきマジックナンバーでテストしてみる

>java jp.kakku.mainlogic.HexspeakGenerater "big boobs"
[big boobs] -> [0xB16B00B5]

>java jp.kakku.mainlogic.HexspeakGenerater "a bad babe"
[a bad babe] -> [0xABADBABE]

>java jp.kakku.mainlogic.HexspeakGenerater "cafe babe"
[cafe babe] -> [0xCAFEBABE]

>java jp.kakku.mainlogic.HexspeakGenerater "dead beef"
[dead beef] -> [0xDEADBEEF]

>java jp.kakku.mainlogic.HexspeakGenerater "defecated"
[defecated] -> [0xDEFEC8ED]

>java jp.kakku.mainlogic.HexspeakGenerater "face feed"
[face feed] -> [0xFACEFEED]

>java jp.kakku.mainlogic.HexspeakGenerater "feel dead"
[feel dead] -> [0xFEE1DEAD]

>java jp.kakku.mainlogic.HexspeakGenerater "coed"
[coed] -> [0xC0ED]

>java jp.kakku.mainlogic.HexspeakGenerater "bad cable"
[bad cable] -> [0xBADCAB1E]

>java jp.kakku.mainlogic.HexspeakGenerater "feed face"
[feed face] -> [0xFEEDFACE]

>java jp.kakku.mainlogic.HexspeakGenerater "dead dead"
[dead dead] -> [0xDEADDEAD]

>java jp.kakku.mainlogic.HexspeakGenerater "bead face"
[bead face] -> [0xBEADFACE]

>java jp.kakku.mainlogic.HexspeakGenerater "face bead"
[face bead] -> [0xFACEBEAD]

勝手に4文字にされちゃ困るんですけどー(笑)

"bad"を4文字枠で考えるために"BAAD"や"BADD"にされるとHexspeakGeneraterは対応できません!

>java jp.kakku.mainlogic.HexspeakGenerater "bad food"
[bad food] -> [0xBADF00D]

>java jp.kakku.mainlogic.HexspeakGenerater "bad cafe"
[bad cafe] -> [0xBADCAFE]