一、问题描述
大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 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))