慕容玖
橘子数学社区核心成员
2021年12月02日 12:00
今天是2021年12月2日,若将其写成年月日相连的八位数:20121202,则从左往右读和从右往左读是一样的,这样的数称为回文数,因此今天便是一个回文日. 下面我们就来介绍回文日的几个事实.
本文考虑的日期都用八位数表示,年份都写成四位数的形式,不足的用0补足,比如公元212年写成0212,公元30年写成0030,公元12年5月13日就是00120513.
今天是第83个回文日
从公元纪年开始到今年年底, 共有83个回文日,而今天就是第83个.
import datetime
start_date = datetime.date(1, 1, 1)
end_date = datetime.date(2021, 12, 31)
delta = datetime.timedelta(days=1)
r=[]
date = start_date
while date <= end_date:
x = date.strftime('%Y%m%d')
if len(x)<8:
x = '0'*(8-len(x)) + x
if str(x)[:: 1] == str(x)[::-1]:
r.append(date)
print(x)
date += delta
len(r)
outputs:
83
3000年回文日分布
将公元1年到公元3000年内的回文日按照每100年进行统计,统计后的分布直方图如图所示,从图表中可以看出,回文日都集中在每个千年的头几个世纪. 也就是公元100,200,300;1000,1100,1200,1300;2000,2100,2200年后的100年内. 而其他世纪竟然都没有回文日.
year_arr = [i.year for i in r]
import numpy as np
hist,bins = np.histogram(year_arr,30,[0,3000])
from matplotlib import pyplot as plt
plt.hist(year_arr, bins, color='#0504aa', alpha=0.6, rwidth=0.85)
plt.title("100years comparing")
plt.grid(axis='y', alpha=0.75)
plt.show()
距离最近的两个回文日
统计公元1年到公元3000年内的回文日,从结果可以看出,距离最近的两个回文日并不唯一,竟然有17对,今天20211202与上一个回文日20200202,也在其内,它们相距仅669天,即1年10个月.
start_date = datetime.date(1, 1, 1)
end_date = datetime.date(2999, 12, 31)
delta = datetime.timedelta(days=1)
date_arr=[]
date = start_date
while date <= end_date:
x = date.strftime('%Y%m%d')
if len(x)<8:
x = '0'*(8-len(x)) + x
if str(x)[:: 1] == str(x)[::-1]:
date_arr.append(date)
date += delta
delta_arr = []
for i in range(1,len(date_arr)):
delta= date_arr[i]-date_arr[i-1]
delta_arr.append(delta.days)
delta_min = min(delta_arr)
delta_min_indexes = [i for i, j in enumerate(delta_arr) if j == delta_min]
for i in range(0,len(delta_min_indexes)):
print(date_arr[delta_min_indexes[i]].strftime('%Y-%m-%d')+'~~'+date_arr[delta_min_indexes[i]+1].strftime('%Y-%m-%d'))
outputs:
110-01-10~~111-11-10
120-02-10~~121-12-10
210-01-20~~211-11-20
220-02-20~~221-12-20
310-01-30~~311-11-30
1010-01-01~~1011-11-01
1020-02-01~~1021-12-01
1110-01-11~~1111-11-11
1120-02-11~~1121-12-11
1210-01-21~~1211-11-21
1220-02-21~~1221-12-21
2010-01-02~~2011-11-02
2020-02-02~~2021-12-02
2110-01-12~~2111-11-12
2120-02-12~~2121-12-12
2210-01-22~~2211-11-22
2220-02-22~~2221-12-22
距离最远的两个回文日
统计公元1年到公元3000年内的回文日,竟然只有一对,1380年08月31日~~2001年10月02日. 从14世纪到21世纪,相差了620年之多.
start_date = datetime.date(1, 1, 1)
end_date = datetime.date(2999, 12, 31)
delta = datetime.timedelta(days=1)
date_arr=[]
date = start_date
while date <= end_date:
x = date.strftime('%Y%m%d')
if len(x)<8:
x = '0'*(8-len(x)) + x
if str(x)[:: 1] == str(x)[::-1]:
date_arr.append(date)
date += delta
delta_arr = []
for i in range(1,len(date_arr)):
delta= date_arr[i]-date_arr[i-1]
delta_arr.append(delta.days)
print(delta_arr)
delta_max = max(delta_arr)
delta_max_indexes = [i for i, j in enumerate(delta_arr) if j == delta_max]
print(delta_max_indexes)
for i in range(0,len(delta_max_indexes)):
print(date_arr[delta_max_indexes[i]].strftime('%Y-%m-%d')+'~~'+date_arr[delta_max_indexes[i]+1].strftime('%Y-%m-%d'))
outputs:
1380-08-31~~2001-10-02
1
发布于3 年前
橘子老君
level4
暂无评论
展开所有评论
发表评论
1
发布于3 年前
慕容玖
level4
暂无评论
展开所有评论
发表评论