http://qiita.com/Nabetani/items/cba03c96d1ea55f6e861
http://nabetani.sakura.ne.jp/hena/ord15elebubo/
異星の電光掲示板。
解き方自体は前やったエントロピー符号と同じです。
しかし今回は、単純に「00」を詰めると「110111101110」みたいな一意にならない値が出てしまうので注意が必要です。
と思ったけど別に注意するようなことは全くなかった。
preg_replace()とかでまとめてできないかと思ったけど無理だった。
かかった時間は45分くらい。
ところでBUBOって何ですかね。
http://nabetani.sakura.ne.jp/hena/ord15elebubo/
異星の電光掲示板。
解き方自体は前やったエントロピー符号と同じです。
しかし今回は、単純に「00」を詰めると「110111101110」みたいな一意にならない値が出てしまうので注意が必要です。
と思ったけど別に注意するようなことは全くなかった。
<?php class ELEBUBO{ /** * 異星の電光掲示板 * @param String 「2ed8aeed/34b0ea5b」みたいな文字列 * @return String 「LTRSUNTSJ」みたいな文字列 */ public function get($input){ // 入力を2進数に $input =explode('/', $input); $upper = sprintf('%032s', base_convert($input[0], 16, 2)); $under = sprintf('%032s', base_convert($input[1], 16, 2)); // 一列にする $string = ''; for($key=0;$key<strlen($upper); $key++){ $string .= $upper[$key] . $under[$key]; } // 置換 $search = ['00', '101110', '110111', '111011', '011110', '101101', '1101', '1110', '0111']; $replace = ['', 'T', 'U', 'N', 'S', 'Z', 'L', 'R', 'J']; $ret = ''; do{ foreach($search as $key=>$val){ if(strpos($string, $val) === 0){ $string = substr($string, strlen($val)); $ret .= $replace[$key]; continue 2; } } }while(strlen($string)); return $ret; } } // 以下はテスト $test = [ ['2ed8aeed/34b0ea5b', 'LTRSUNTSJ'], ['00000200/00000300', 'L'], ['00018000/00010000', 'R'], ['00002000/00006000', 'J'], ['00000700/00000200', 'T'], ['01400000/01c00000', 'U'], ['00003800/00002800', 'N'], ['000c0000/00180000', 'S'], ['00003000/00001800', 'Z'], ['132eae6c/1a64eac6', 'LRJTUNSZ'], ['637572d0/36572698', 'ZSNUTJRL'], ['baddb607/d66b6c05', 'LTJZTSSSN'], ['db74cd75/6dac6b57', 'ZZZTJZRJNU'], ['3606c2e8/1b0d8358', 'ZZSSLTJ'], ['ad98c306/e6cc6183', 'UZZZZZZ'], ['4a4aaee3/db6eeaa6', 'JJLLUUNNS'], ['ecd9bbb6/598cd124', 'TSSZZTTRR'], ['e0000002/40000003', 'TL'], ['a0000007/e0000005', 'UN'], ['c0000003/80000006', 'RS'], ['40000006/c0000003', 'JZ'], ['01da94db/00b3b6b2', 'TSUJLRSR'], ['76eeaaea/24aaeeae', 'TRNNUUNU'], ['1dacaeee/1566e444', 'NRJZUTTT'], ['26c9ac60/6c6d66c0', 'JSZLRJZS'], ['6c977620/36da5360', 'ZZLLTNZJ'], ['069aeae6/0db34eac', 'SJSLTUNS'], ['06d53724/049da56c', 'RRULRNJJ'], ['069b58b0/04d66da0', 'RLRSLZJR'], ['1b6eced4/11b46a9c', 'RZZTZNRU'], ['522e8b80/db6ad900', 'JLLJNLJT'], ['6546cdd0/376c6898', 'ZULSZRTL'], ['4e6d5b70/6ad9d620', 'LNSSURST'], ['37367772/65635256', 'SNSZNTNJ'], ['25535d58/377669cc', 'LUUSLTUZ'], ['0ae6a55d/0eacedcb', 'UNSUJUTJ'], ['76762edc/23536a88', 'TZNZJNRT'], /**/ ]; $elebubo = new ELEBUBO(); foreach($test as $key=>$data){ $answer = $elebubo->get($data[0]); if($answer !== $data[1]){ print('えらー'); } }うーん置換のあたりが微妙。
preg_replace()とかでまとめてできないかと思ったけど無理だった。
かかった時間は45分くらい。
ところでBUBOって何ですかね。
PR