2022年顺子日期计数:Python编程挑战与解决方案

问题描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123; 而 20221023 则不是一个顺子日期,它一个顺子也没有。小明想知道在整个 2022 年份中,一共有多少个顺子日期?

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512M


来自: 3.顺子日期 – 蓝桥云课

我的题解

from datetime import datetime, timedelta

def judge_shunzi_date(year):
    """
    判断指定年份中包含多少个顺子日期(由连续数字组成的日期,如123或234)。
    
    参数:
    - year: int类型,指定的年份。
    
    返回值:
    - int类型,该年份中包含的顺子日期数量。
    """
    # 初始化起始日期和结束日期
    start_date = datetime(year, 1, 1)
    end_date = datetime(year, 12, 31)
    current_date = start_date
    result = []
    while current_date <= end_date:
        # 判断当前日期是否为顺子日期
        if string_lis[0] in current_date.strftime('%Y%m%d') or string_lis[1] in current_date.strftime('%Y%m%d'):
            result.append(current_date.strftime('%Y%m%d'))
        # 进入下一天
        current_date += timedelta(days=1)
    return len(result)


if __name__ == '__main__':
    string_lis = ['012', '123']  # 定义顺子日期的可能组合
    print(judge_shunzi_date(2022))  # 输出2022年中包含的顺子日期数量

AI 题解

ChatGLM-4.0

为了解决这个问题,我们可以遍历2022年中的每一天,检查每一天的日期表示中是否存在连续的三个数字构成顺子。下面是Python代码示例:

from datetime import datetime, timedelta

def is_shunzi(date_str):
    # 检查字符串中是否存在连续的三个数字(顺子)
    for i in range(len(date_str) - 2):
        if int(date_str[i]) + 1 == int(date_str[i+1]) and int(date_str[i]) + 2 == int(date_str[i+2]):
            return True
    return False

def count_shunzi_dates(year):
    count = 0
    start_date = datetime(year, 1, 1)
    end_date = datetime(year, 12, 31)
    
    current_date = start_date
    while current_date <= end_date:
        # 获取日期的字符串表示,形如 '20220101'
        date_str = current_date.strftime('%Y%m%d')
        # 检查是否为顺子日期
        if is_shunzi(date_str):
            count += 1
        # 增加一天
        current_date += timedelta(days=1)
    
    return count

# 计算并输出2022年的顺子日期数量
print(count_shunzi_dates(2022))

运行上面的代码,它会遍历2022年的每一天,并检查是否存在连续的三个数字。如果存在,那么这一天就被视为顺子日期,然后计算总共有多少个这样的日期。

请注意,由于代码需要遍历整个年份的每一天,它的运行时间可能会接近1秒的限制。如果性能是一个问题,可以尝试优化is_shunzi函数,减少不必要的计算。但是,由于题目中的限制条件,这段代码应该可以在规定的时间和内存限制内运行完成。

ERNIE-3.5

要解决这个问题,我们可以遍历2022年的所有日期,并检查每个日期是否包含顺子。以下是一个Python脚本,用于计算2022年中顺子日期的数量:

def is_straight_date(date_str):
    # 将日期字符串转换为整数列表
    digits = [int(d) for d in date_str]
    
    # 检查所有的三位数组合是否包含顺子
    for i in range(len(digits) - 2):
        if digits[i] + 1 == digits[i+1] and digits[i+1] + 1 == digits[i+2]:
            return True
    
    return False

def count_straight_dates_in_year(year):
    count = 0
    
    # 遍历该年份的每一天
    for month in range(1, 13):
        for day in range(1, 32):
            # 构建日期的字符串表示
            date_str = f"{year}{month:02d}{day:02d}"
            
            # 检查该日期是否为顺子日期
            if is_straight_date(date_str):
                count += 1
    
    return count

# 计算2022年的顺子日期数量
year = 2022
answer = count_straight_dates_in_year(year)
print(f"在{year}年中,一共有{answer}个顺子日期。")

这段代码定义了两个函数:is_straight_date用于检查单个日期是否为顺子日期,count_straight_dates_in_year用于计算给定年份中顺子日期的总数。

注意:由于我们遍历了每个月的每一天,并且检查了每一天是否为顺子日期,因此该脚本可能不满足最大运行时间的限制(1秒)。对于这个问题,可以通过优化算法来减少检查次数,比如预先计算哪些日期可能有顺子,然后再进行检查。然而,由于该问题没有给出具体的日期范围限制,并且2022年只有365天,上述简单方法在实践中可能仍然足够快。

如果确实需要更快的解决方案,可以考虑使用并行处理或其他优化手段。不过,这超出了问题的直接要求,并且可能需要根据具体环境进一步定制实现。

百川大模型

为了解决这个问题,我们可以编写一个Python脚本来检查2022年中的每一天是否包含至少一个顺子(即连续的三个数字)。下面是一个可能的解决方案:

# 定义函数来检查一个日期字符串是否包含顺子
def has_shunzi(date_str):
    for i in range(len(date_str) - 2):
        if int(date_str[i]) + 1 == int(date_str[i+1]) and int(date_str[i+1]) + 1 == int(date_str[i+2]):
            return True
    return False

# 初始化计数器
count = 0

# 遍历2022年的每一天
for month in range(1, 13):
    for day in range(1, 32):
        # 构造日期字符串
        date_str = f'2022{month:02d}{day:02d}'
        # 如果日期包含顺子,增加计数器
        if has_shunzi(date_str):
            count += 1

# 输出结果
print(count)

这段代码首先定义了一个has_shunzi函数,该函数接受一个日期字符串并检查是否存在顺子。然后,我们初始化一个计数器count,接着遍历2022年的每个月和每天,构建相应的日期字符串,并调用has_shunzi函数进行检查。如果日期包含顺子,我们就增加计数器。最后,打印出总的顺子日期数量。

请注意,这个脚本没有考虑闰年和每个月具体的天数,因此在实际应用中可能需要进一步的调整以正确处理所有日期。此外,对于大月份(如1月、3月、5月、7月、8月、10月和12月),天数应该设置为31天,而对于小月份(如4月、6月、9月和11月),天数应该设置为30天,2月的天数取决于是否是闰年。由于题目要求的是2022年,因此2月应该是28天。

天工 AI 对话

from datetime import date, timedelta

def is_shunzi_date(year, month, day):
    date_str = f"{year}{month:02d}{day:02d}"
    for i in range(len(date_str) - 2):
        if date_str[i:i+3] == ''.join(map(str, range(int(date_str[i]), int(date_str[i]) + 3))):
            return True
    return False

s = date(2022, 1, 1)
e = date(2022, 12, 31)
day = timedelta(days=1)
count = 0

while s <= e:
    if is_shunzi_date(s.year, s.month, s.day):
        count += 1
    s += day

print(count)

存档地址:https://www.yuque.com/worthstudy/study/stiuaf6ylrgv24vx?singleDoc# 《顺子日期》

© 版权声明
THE END
喜欢就点赞支持一下吧,如果觉得不错或日后有所需要,可以收藏文章和关注作者哦。
点赞0打赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容