把 Logseq 的随手笔记自动发布到博客
今天把手机上的 Logseq 日记接到了博客,希望把发布的成本降到「写几句,再改一个标签」。
写作入口是两个模板:quick 记录小想法,blog 记录原文链接、RSS Pal 分享链接和自己的评论。
写完后把 #待发布 改成 #确认发布,沿用手机原有的 Git 同步。GitHub Actions 只提取明确选中的笔记块,转换成 Jekyll 文章,再交给 GitHub Pages 构建部署。
发布器会检查线上文章是否包含本次内容,确认后将 #已发布 和博客链接写回 Logseq。更新旧笔记时再次确认发布,会复用原来的网址;失败重试也不会重复生成文章。
构建过程中完成了 33 项测试,覆盖发布范围、格式转换、重试,以及发布期间手机继续编辑的情况。这篇笔记是第一次真实发文测试,用来验证从日记到博客、再回到日记的完整流程。
首轮真实页面检查暴露了日期跨天和段落粘连的问题,因此补了回归测试并修正转换逻辑。这次更新继续沿用同一个文章地址。
Kakuro:填字游戏遇上组合数学
你一定见过填字游戏:一个方格,空白处填字母,横竖都要拼成单词。Kakuro 是它的数字版本——格子里填 1 到 9 的数字,横向和纵向的每段连续格子(称为一个 block)都要满足指定的求和约束,并且同一个 block 内的数字不能重复。
规则就这三条:
- 每个白格填 1-9 中的一个数字
- 同一 block 内数字不重复
- 每个 block 的数字之和等于线索给出的目标值
下面这个小谜题展示了这些要素:
黑格上的斜线数字就是线索:斜线右下方是横向线索,左下方是纵向线索。
手推一遍
用一个 3 行 × 2 列白格的教学例题来说明推导过程:
col1 col2
row2: ? ? ← H0 横向线索 sum=3
row3: ? ? ← H1 横向线索 sum=11
row4: ? ? ← H2 横向线索 sum=4
↑ ↑
V0=7 V1=11
第一步: 纵向 V0 的 sum=7,长度 3,digits 1-9 不重复。枚举一下:\(\{1,2,4\}\) 和 \(\{1,3,3\}\)(重复,不合法)……其实只有 \(\{1,2,4\}\) 满足条件。这是一个”魔法块”——数字集合完全确定。
第二步: 横向 H0 的 sum=3,长度 2,唯一组合是 \(\{1,2\}\)——又是魔法块。
第三步: 格子 \((2,1)\) 处于 V0 和 H0 的交叉。V0 的数字集合 \(\{1,2,4\}\),H0 的数字集合 \(\{1,2\}\),交集是 \(\{1,2\}\),所以 \((2,1)\) 填 1 或 2。
第四步: H2 的 sum=4,长度 2,唯一组合是 \(\{1,3\}\)。格子 \((4,1)\) 也在 V0 里,V0 已经确定数字集合是 \(\{1,2,4\}\),与 H2 的 \(\{1,3\}\) 取交集得 \(\{1\}\)。所以 \((4,1)=1\)。
第五步: 由 \((4,1)=1\) 知 H2 的另一格 \((4,2)=3\) (因为 1+3=4)。V0 剩余的两格 \((2,1)+(3,1)=7-1=6\),且数字来自 \(\{1,2,4\}\setminus\{1\}=\{2,4\}\),所以 \((2,1)=2,(3,1)=4\) 或反过来。
第六步: H0 sum=3,已知 \((2,1)=2\) 的话 \((2,2)=1\);若 \((2,1)=4\) 则 \((2,2)=-1\) 不合法。于是唯一解是 \((2,1)=2,(2,2)=1\),从而 \((3,1)=4\)。
第七步: V1 sum=11,格子 \((2,2)+(3,2)+(4,2)=1+(3,2)+3=11\),所以 \((3,2)=7\)。验证 H1:\(4+7=11\),正确。
唯一解:
2 1
4 7
1 3
人能推导,计算机如何系统化?
五格骨牌的三染色问题:2339 种铺法里有多少种能上色?
引言
用 12 块五格骨牌平铺 6×10 矩形共有 2339 种方法——但如果我要求相邻骨牌颜色不同,连角都不能碰,还剩几种?
这是《The Art of Computer Programming》Volume 4B 中的习题 7.2.2.1-277,难度评级 [25](TAOCP 的评级范围 0–50,数字越大越难)。答案是:94 种,仅占约 4%。