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]