http://nabetani.sakura.ne.jp/hena/ord2/
配置済のテトリスです。
横に揃った行を削除して、消した結果を出力します。
何回ループ回してんだよ。
見たかんじビット演算使えば即座に解けるような内容だと思うんですよね。
しかし私はビット演算が苦手(というかまともに勉強したことがない)ので、入力を横に切って全部1だったら消すという超絶力業での回答です。
いやはや酷いもんだ。
かかった時間は1時間くらい。
「オフラインリアルタイムどう書く」の一覧
配置済のテトリスです。
横に揃った行を削除して、消した結果を出力します。
<?php
class TETRIS{
/**
* テトリス
* @param String 「ff-2f-23-f3-77-7f-3b」みたいな文字列
* @return String 「1f-03-00-1c-0d-0f-06」みたいな文字列
*/
public function get($input){
// 入力
$input = explode('-', $input);
$arr = array_fill(0, 8, '');
$arr2 = array_fill(0, count($input), '');
$ret = '';
// 横向きに切る
foreach($input as $key=>$val){
$tmp = sprintf('%08s', base_convert($val, 16, 2));
for($i=0; $i<8; $i++){
$arr[$i] .= $tmp[$i];
}
}
// 揃ってるところは消えて落ちる
foreach($arr as $key=>$val){
if(strpos($val, '0')=== false){
unset($arr[$key]);
array_unshift($arr, str_repeat('0', strlen($val)));
}
}
// 縦に戻す
foreach($arr as $key=>$val){
for($i=0; $i<strlen($val); $i++){
$arr2[$i] .= $val[$i];
}
}
// 文字列にして戻す
foreach($arr2 as $key=>$val){
$ret .= '-' . sprintf('%02s', base_convert($val, 2, 16));
}
return substr($ret, 1);
}
}
// テスト
$test = [
['ff-2f-23-f3-77-7f-3b', '1f-03-00-1c-0d-0f-06'],
['01', '00'],
['00', '00'],
['7a-4e', '0c-02'],
['56-b6', '08-14'],
['12-12-12', '00-00-00'],
['de-ff-7b', '0a-0f-05'],
['95-be-d0', '05-1e-20'],
['7c-b0-bb', '1c-20-2b'],
['7a-b6-31-6a', '3a-56-11-2a'],
['32-0e-23-82', '18-06-11-40'],
['ff-7f-bf-df-ef', '0f-07-0b-0d-0e'],
['75-df-dc-6e-42', '35-5f-5c-2e-02'],
['62-51-ef-c7-f8', '22-11-6f-47-78'],
['0c-47-8e-dd-5d-17', '04-23-46-6d-2d-0b'],
['aa-58-5b-6d-9f-1f', '52-28-2b-35-4f-0f'],
['ff-55-d5-75-5d-57', '0f-00-08-04-02-01'],
['fe-fd-fb-f7-ef-df-bf', '7e-7d-7b-77-6f-5f-3f'],
['fd-fb-f7-ef-df-bf-7f', '7e-7d-7b-77-6f-5f-3f'],
['d9-15-b5-d7-1b-9f-de', '69-05-55-67-0b-4f-6e'],
['38-15-fd-50-10-96-ba', '18-05-7d-20-00-46-5a'],
['fe-fd-fb-f7-ef-df-bf-7f', 'fe-fd-fb-f7-ef-df-bf-7f'],
];
$tetris = new TETRIS();
foreach($test as $key=>$data){
$answer = $tetris->get($data[0]);
if($answer !== $data[1]){
print('えらー');
}
}
言いたいことはわかる。何回ループ回してんだよ。
見たかんじビット演算使えば即座に解けるような内容だと思うんですよね。
しかし私はビット演算が苦手(というかまともに勉強したことがない)ので、入力を横に切って全部1だったら消すという超絶力業での回答です。
いやはや酷いもんだ。
かかった時間は1時間くらい。
「オフラインリアルタイムどう書く」の一覧
PR