故事背景

在我的老家,西南边境的某个小县城,由于物资匮乏、基础设施落后,“赶集”这项活动不知撒播了多少年。以县城北部区域的四个城镇为界,每天都有一个集,暂时就叫A、B、C、D集吧。没有官方通知,也没有统一组织方,到了日子我们就会不约而同的前往集市,采购日子用品、炫点小吃、添置衣物、卖点家里的劳动剩下。
赶集的规则是“空三赶四”,ABCDABCD如此循环往复,就A集来说便是A _ _ _ A _ _ _ A。
在早些年间农忙时节,家里人不知白天黑夜地在田间地头劳动,根本记不住今夕是何年,为了确认今日是什么集,经常需要跑出家门问问其他邻居,亦或是看看路上有没有前往集市的“马的”。日子一天一天过,集市的规则就如二十四节气般从来没有紊乱过。
2020年新冠肆虐,为减少人员活动,许多自然村封村封路,更别提集市了。就这样集市暂停了一段时刻,待情况好转,集市康复了平常的热烈,还是固定的时刻、固定过的地址,我们又聚集在了一同。周期循环规则并没有由于集市暂停而被打断,这让我好生惊奇。

抽象一下

调查规则

其实上面现已给出规则了,便是ABCDABCD循环,每隔三天重复一个集。
假设第1天是A集,那么第5天、第9天都是A集,按常见程序数组从0开端的常规,那便是
第0天是A集,第4天、第8天都是A集。

如果我们已知2017-02-05是A集,要计算今日是什么集,其实便是计算今日距离2017-02-05相差多少天,然后对4取余,根据余数可得:

  • 余数为0便是A集
  • 余数为1便是B集
  • 余数为2便是C集
  • 余数为3便是D集

代码实现

Java

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Test {
    public static void main(String[] args) throws ParseException {
        String[] names = new String[]{"A集", "B集", "C集", "D集"};
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date standard = dateFormat.parse("2007-02-05");
        Calendar c1 = Calendar.getInstance();
        c1.setTime(standard);
        Calendar now = Calendar.getInstance();
        int diff = now.get(Calendar.DAY_OF_YEAR) - now.get(Calendar.DAY_OF_YEAR);
        System.out.println(names[diff % 4]);
    }
}

Go

package main
import (
	"fmt"
	"time"
)
const (
	STANDARD = "2017-02-05"
)
var names = []string{"A集", "B集", "C集", "D集"}
func main() {
	today := time.Now()
	standard, _ := time.Parse("2006-01-02", STANDARD)
	fmt.Println(names[int(today.Sub(standard).Hours()/24)%4])
}

快捷指令

代码改变生活(一)

最后

凭借一个简单的数学求余就能处理日子中的问题,即使现在常年在外,但每当回想起家园、回想起家园的集市,我还是会掏出手机看下今日是什么集,大约这便是乡愁吧!

Author:wangsy
Link:wangsy.me/2023/code-c…