前几天朋友圈被“世界完全对称日”刷屏了——这个节日是指公历纪年日期中数字左右完全对称的日期。
这样的对称日,时间间隔并不固定,最近的四次分别是2010年1月2日(20100102)、2010年1月2日(20100102)、2011年11月2日(20111102)和2021年2月2日(20200202);但是再往前的一次居然要追溯到1380年8月31日,也就是明朝洪武十三年;还有之后的近几十年时间里,每十年都会有一个对称日。
出于好奇也为验证这些结论是否正确,我来写段代码验证一下结论;顺便也计算一下每个世纪有多少个对称日,以及对称日总数。根据定义对称日只能是8位数,所以只要在1000.1.1~9999.12.31之间寻找。代码如下:
输出结果:
10011001 10100101 10111101 10200201 10211201
10300301 10400401 10500501 10600601 10700701
10800801 10900901
1000-1100,Count: 12
11011011 11100111 11111111 11200211 11211211
11300311 11400411 11500511 11600611 11700711
11800811 11900911
1100-1200,Count: 12
12011021 12100121 12111121 12200221 12211221
12300321 12400421 12500521 12600621 12700721
12800821 12900921
1200-1300,Count: 12
13011031 13100131 13211231 13300331 13500531
13700731 13800831
1300-1400,Count: 7
1400-1500,Count: 0
1500-1600,Count: 0
1600-1700,Count: 0
1700-1800,Count: 0
1800-1900,Count: 0
1900-2000,Count: 0
20011002 20100102 20111102 20200202 20211202
20300302 20400402 20500502 20600602 20700702
20800802 20900902
2000-2100,Count: 12
21011012 21100112 21111112 21200212 21211212
21300312 21400412 21500512 21600612 21700712
21800812 21900912
2100-2200,Count: 12
22011022 22100122 22111122 22200222 22211222
22300322 22400422 22500522 22600622 22700722
22800822 22900922
2200-2300,Count: 12
2300-2400,Count: 0
2400-2500,Count: 0
2500-2600,Count: 0
2600-2700,Count: 0
2700-2800,Count: 0
2800-2900,Count: 0
2900-3000,Count: 0
30011003 30100103 30111103 30200203 30211203
30300303 30400403 30500503 30600603 30700703
30800803 30900903
3000-3100,Count: 12
31011013 31100113 31111113 31200213 31211213
31300313 31400413 31500513 31600613 31700713
31800813 31900913
3100-3200,Count: 12
32011023 32100123 32111123 32200223 32211223
32300323 32400423 32500523 32600623 32700723
32800823 32900923
3200-3300,Count: 12
3300-3400,Count: 0
3400-3500,Count: 0
3500-3600,Count: 0
3600-3700,Count: 0
3700-3800,Count: 0
3800-3900,Count: 0
3900-4000,Count: 0
40011004 40100104 40111104 40200204 40211204
40300304 40400404 40500504 40600604 40700704
40800804 40900904
4000-4100,Count: 12
41011014 41100114 41111114 41200214 41211214
41300314 41400414 41500514 41600614 41700714
41800814 41900914
4100-4200,Count: 12
42011024 42100124 42111124 42200224 42211224
42300324 42400424 42500524 42600624 42700724
42800824 42900924
4200-4300,Count: 12
4300-4400,Count: 0
4400-4500,Count: 0
4500-4600,Count: 0
4600-4700,Count: 0
4700-4800,Count: 0
4800-4900,Count: 0
4900-5000,Count: 0
50011005 50100105 50111105 50200205 50211205
50300305 50400405 50500505 50600605 50700705
50800805 50900905
5000-5100,Count: 12
51011015 51100115 51111115 51200215 51211215
51300315 51400415 51500515 51600615 51700715
51800815 51900915
5100-5200,Count: 12
52011025 52100125 52111125 52200225 52211225
52300325 52400425 52500525 52600625 52700725
52800825 52900925
5200-5300,Count: 12
5300-5400,Count: 0
5400-5500,Count: 0
5500-5600,Count: 0
5600-5700,Count: 0
5700-5800,Count: 0
5800-5900,Count: 0
5900-6000,Count: 0
60011006 60100106 60111106 60200206 60211206
60300306 60400406 60500506 60600606 60700706
60800806 60900906
6000-6100,Count: 12
61011016 61100116 61111116 61200216 61211216
61300316 61400416 61500516 61600616 61700716
61800816 61900916
6100-6200,Count: 12
62011026 62100126 62111126 62200226 62211226
62300326 62400426 62500526 62600626 62700726
62800826 62900926
6200-6300,Count: 12
6300-6400,Count: 0
6400-6500,Count: 0
6500-6600,Count: 0
6600-6700,Count: 0
6700-6800,Count: 0
6800-6900,Count: 0
6900-7000,Count: 0
70011007 70100107 70111107 70200207 70211207
70300307 70400407 70500507 70600607 70700707
70800807 70900907
7000-7100,Count: 12
71011017 71100117 71111117 71200217 71211217
71300317 71400417 71500517 71600617 71700717
71800817 71900917
7100-7200,Count: 12
72011027 72100127 72111127 72200227 72211227
72300327 72400427 72500527 72600627 72700727
72800827 72900927
7200-7300,Count: 12
7300-7400,Count: 0
7400-7500,Count: 0
7500-7600,Count: 0
7600-7700,Count: 0
7700-7800,Count: 0
7800-7900,Count: 0
7900-8000,Count: 0
80011008 80100108 80111108 80200208 80211208
80300308 80400408 80500508 80600608 80700708
80800808 80900908
8000-8100,Count: 12
81011018 81100118 81111118 81200218 81211218
81300318 81400418 81500518 81600618 81700718
81800818 81900918
8100-8200,Count: 12
82011028 82100128 82111128 82200228 82211228
82300328 82400428 82500528 82600628 82700728
82800828 82900928
8200-8300,Count: 12
8300-8400,Count: 0
8400-8500,Count: 0
8500-8600,Count: 0
8600-8700,Count: 0
8700-8800,Count: 0
8800-8900,Count: 0
8900-9000,Count: 0
90011009 90100109 90111109 90200209 90211209
90300309 90400409 90500509 90600609 90700709
90800809 90900909
9000-9100,Count: 12
91011019 91100119 91111119 91200219 91211219
91300319 91400419 91500519 91600619 91700719
91800819 91900919
9100-9200,Count: 12
92011029 92100129 92111129 92200229 92200229
92200229 92211229 92300329 92400429 92500529
92600629 92700729 92800829 92900929
9200-9300,Count: 14
9300-9400,Count: 0
9400-9500,Count: 0
9500-9600,Count: 0
9600-9700,Count: 0
9700-9800,Count: 0
9800-9900,Count: 0
9900-10000,Count: 0
Total: 333
由计算结果可知,之前讲的结论都是正确的;得出新结论有:
1 .有公元纪年以来,前20个世纪只有43个;
2. 从21世纪开始,每100年都有12个;
3. 9200-9300年,python程序重复计算9220.02.29了2次(14-2=2)。
所以,“完全对称日”总共有:43+12x24=331。
程序的执行结果是333个,错误的原因是9220.02.29重复计算了2次,后一个“92200229”实际上是9220.02.30,9220.02.31不存在的日子,不知道是不是python的datetime中转换引起的bug。
以上就是本文的全部内容了,通过灵活运用编程思维编写代码可以解答出很多看似疑难的复杂计算问题,想要学习更多编程知识可以观看教学视频系统地学习掌握。