[1014]-福爾摩斯的約會

ajiang02發表於2020-01-07

題目解析傳送門:https://blog.csdn.net/LITTENg/article/deta...

public function test()
{
    // 字條Note
    $n1 = '3485djDkxh4hhGE';
    $n2 = '2984akDfkkkkggEdsb';
    $n3 = 's&hgsfdk';
    $n4 = 'd&Hyscvnm';

    // 轉換成:日期縮寫
    $week = ['A'=>'MON', 'B'=>'TUE', 'C'=>'WED', 'D'=>'THU', 'E'=>'FRI', 'F'=>'SAT', 'G'=>'SUN'];

    $flag = 0;                // 0日期 、 1小時
    $n1_len = strlen($n1);    // 字條n1的字串長度
    $n3_len = strlen($n3);    // 字條n3的字串長度

    // 迴圈比較n1 n2
    for ($i=0; $i < $n1_len ; $i++) {
        if ($flag == 0) {
            // 星期 && 同位置的字元相等 && 為字母 && 字元範圍是 A - G
            if ($n1[$i] === $n2[$i] && $n1[$i] >= 'A' && $n1[$i] <= 'G') {
                $res[] = $week[$n1[$i]];
                $flag = 1;
                continue;
            }
        } else {
            // 小時 && 同位置的字元相等 && 字元範圍是 0 - 9 、A - N
            if ($n1[$i] === $n2[$i] && preg_match('/[0-9A-N]/', $n1[$i])) {
                // ord($n1[$i]) - 65 + 9 + 1
                $res[] = ctype_alpha($n1[$i]) ? ord($n1[$i]) - 55 : '0' . $n1[$i];
                break;
            }
        }
    }

    // 迴圈比較n3 n4
    for ($i=0; $i < $n3_len; $i++) {
        // 分鐘 && 同位置的字元相等 && 為字母
        if ($n3[$i] === $n4[$i] && preg_match('/[a-zA-Z]/', $n3[$i])) {
            if (isset($res)) {
                // 字元位置就是分鐘:記錄相等字元的位置,從0開始
                $res[] = $i > 9 ? : '0' . $i;
                break;
            }
        }
    }

    echo $res[0] . ' ' . $res[1] . ':' . $res[2];
}

筆記:

PHP字元型別檢測的內建擴充套件:ctype

ctype_alnum — 做字母和數字字元檢測
ctype_alpha — 做純字元檢測
ctype_digit — 做純數字檢測
ctype_lower — 做小寫字元檢測
ctype_upper — 做大寫字母檢測
ctype_space — 做空白字元檢測

//測試是否是純數字
preg_match('/\d/', $char)
//測試是否是純字元
preg_match('/[a-zA-Z]/', $char)

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章