PTA(BasicLevel)-1014 福尔摩斯的约会

一、问题描述

       大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;第 2 对相同的字符是 E ,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23 点由数字 0 到 9、以及大写字母 A 到 N 表示);后面两字符串第 1 对相同的英文字母 s 出现在第 4 个位置(从 0 开始计数)上,代表第 4 分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。

输入格式:

       输入在 4 行中分别给出 4 个非空、不包含空格、且长度不超过 60 的字符串。

输出格式:

       在一行中输出约会的时间,格式为 DAY HH:MM,其中 DAY 是某星期的 3 字符缩写,即 MON 表示星期一,TUE 表示星期二,WED 表示星期三,THU 表示星期四,FRI 表示星期五,SAT 表示星期六, SUN 表示星期日。题目输入保证每个测试存在唯一解。

 

二、解题思路

""" PAT-B 1014 福尔摩斯的约会
Input:
    3485djDkxh4hhGE
    2984akDfkkkkggEdsb
    s&hgsfdk
    d&Hyscvnm
Output:
    THU 14:04
"""
seqs_a = input()
seqs_b = input()
seqs_day1 = input()
seqs_day2 = input()

# From days[0] to daya[6] is equals to each day in a week
days = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]
day_in_week = {chr(ord("A")+i): days[i] for i in range(len(days))}

hours = [str(i) for i in range(10)]  # From 0-9 and A-N to represent 0-23 hour
hours.extend([chr(ord("A")+i) for i in range(14)])
hours = {hours[i]: str(i) for i in range(len(hours))}
for i in [str(i) for i in range(10)]:
    hours[i] = "0" + hours[i]

# Search for the first upper equaled alpha and second equaled char
cnt = 0  # the first identical char pair
first_chr = ""
second_chr = ""
for a, b in zip(seqs_a, seqs_b):
    # first char is a upper alpha
    if a == b:
        if cnt == 0 and a in day_in_week.keys():
            # round 1
            first_chr = a    # a must in A:G
            cnt = 1
        elif cnt == 1 and a in hours.keys():
            second_chr = a   # a must in char seq 0:N
            break

index = 0
for x, y in zip(seqs_day1, seqs_day2):
    if x == y and x.isalpha():
        break
    index += 1
minutes = ("0" + str(index)) if index < 10 else str(index)

print(day_in_week[first_chr], "{0}:{1}".format(hours[second_chr], minutes))
上一篇:定时器


下一篇:【leetcode】1124. Longest Well-Performing Interval