c
codeye
V1
2022/09/23阅读:10主题:默认主题
6 kyu Data Analysis Following Migration
感知器算法如何工作
故事 贵公司将过去20年的重要数据分阶段迁移到一个新的平台。然而,有些事情出了差错:一些重要的时间戳被弄乱了!看起来,一些服务器被设置为使用日/月/年格式。看起来,一些服务器被设置为使用dd/mm/yyyy日期格式,而其他服务器在迁移过程中使用mm/dd/yyyy格式。不幸的是,原始数据库在这个过程中被破坏了,而且没有备份可用...... 现在就看你如何评估损失了。
任务 你将收到以ISO yyyy-mm-dd
格式给出的[start_date, end_date]形式的记录列表,你的任务是计算这些记录有多少条。
正确的:日期不能有任何问题,月/日不能混淆,或者它不能以任何其他方式成为一个有效的时间戳;例如
["2015-04-04", "2015-05-13"]
可恢复:目前的形式是无效的,但原始的时间戳可以恢复,因为只有一种有效的组合可能;例如
["2011-10-08","2011-08-14"]
不确定:一个或两个日期是模糊的,它们可能会产生多个有效的时间戳,所以不能检索到原始的时间戳;例如:
["2002-02-07","2002-12-10"]
注意:原始记录总是定义一个非负的持续时间
在一个数组中返回你的发现。
[correct_count, recoverable_count, uncertain_count ]
例子
["2015-04-04", "2015-05-13"] --> 正确
# 这里没有(可能有)错误
["2013-06-18", "2013-08-05"] --> 正确
# 结束日期是不明确的,但这是唯一可能的有效版本
["2001-02-07", "2001-03-01"] --> 正确
# 两个日期都是模糊的,但这是唯一可能的有效版本
["2011-10-08", "2011-08-14"] --> 可恢复
# 开始日期是错误的,但可以被纠正因为只有一个可能的有效版本
["2009-08-21", "2009-04-12"] --> 可恢复
# 结束日期是错误的,但可以修正因为只有一个可能的有效版本
["1996-01-24", "1996-03-09"] --> 不确定
# 结束日期是模糊的(也可能是1996-09-03)
["2000-10-09", "2000-11-20"] --> 不确定
# 开始日期不明确(也可能是2000-09-10)
["2002-02-07", "2002-12-10"] --> 不确定
# 两个日期都是模糊的,并且有 多个可能的有效版本
数据科学经常遇到数据格式问题!
def candidates(ymd):
y, m, d = ymd.split('-')
return {ymd, f'{y}-{d}-{m}'}
def check_dates(records):
result = [0, 0, 0]
for start, end in records:
xs = [(dt1, dt2) for dt1 in candidates(start) for dt2 in candidates(end)
if dt1 <= dt2 and dt1[5:7] <= '12' >= dt2[5:7]]
i = 2 if len(xs) > 1 else xs[0] != (start, end)
result[i] += 1 # 2: uncertain, 1(True): recoverable, 0(False): correct
return result
super!
作者介绍
c
codeye
V1