• 11月23日 星期六

不好好写代码,就只能回去当总理了

不好好写代码,就只能回去当总理了

来源 | 程序员的那些事(ID:iProgrammer)

封面图 | CSDN下载自视觉中国

平常关注的技术博主,居然是新加坡总理的儿子!

最近,《Hands-on Scala Programming》的作者李浩毅在程序员圈子引发热议。原来他就是新加坡总理李显龙的儿子。

不好好写代码,就只能回去当总理了

(格子衫衬衣是不是很眼熟?)

据公开信息显示,李浩毅出于 1989 年,毕业于 MIT,计算机科学和工程学位。他是 Scala 社区的主要贡献者。

李浩毅的个人网站上自称,其开源项目在 Github 上有超过 10,000 Star,每个月的下载次数超过 7,000,000 次。自称擅长用 Scala 来构建分布式后端系统、高性能web 应用程序等。

有网友感叹,他一直关注的技术博主,原来是这样的身份背景。「这是我人生接触的第二个家里比我有权家里黄金遍地智商比我强还比我努力的人!」

不好好写代码,就只能回去当总理了

还有网友调侃说,要是李浩毅不好好写代码,就只有回去当坡县县长了。

不好好写代码,就只能回去当总理了不好好写代码,就只能回去当总理了不好好写代码,就只能回去当总理了

新加坡总理也是会编程的!

其实现任总理李显龙,也是有计算机科学文凭的。

不好好写代码,就只能回去当总理了

他在英国剑桥大学三一学院修读数学,1973 年拿过数学尖子生「Senior Wrangler」头衔,1974 年荣获数学一等荣誉及计算机科学文凭(优异)。

2015 年 5 月,李显龙曾经在一次创业者论坛上透露,他最后编写的程序是一个解决数独问题的程序。

不好好写代码,就只能回去当总理了

在帖子中,李显龙除了解释程序之外,还公开了数独程序的完整源码。有兴趣的童鞋,请看:

#include "stdio.h"
int InBlock[81], InRow[81], InCol[81];
const int BLANK = 0;const int ONES = 0x3fe; // Binary 1111111110
int Entry[81]; // Records entries 1-9 in the grid, as the corresponding bit set to 1int Block[9], Row[9], Col[9]; // Each int is a 9-bit array
int SeqPtr = 0;int Sequence[81];
int Count = 0;int LevelCount[81];

void SwapSeqEntries(int S1, int S2){ int temp = Sequence[S2]; Sequence[S2] = Sequence[S1]; Sequence[S1] = temp;}

void InitEntry(int i, int j, int val){ int Square = 9 * i + j; int valbit = 1 << val; int SeqPtr2;
// add suitable checks for data consistency Entry[Square] = valbit; Block[InBlock[Square]] &= ~valbit; Col[InCol[Square]] &= ~valbit; // Simpler Col[j] &= ~valbit; Row[InRow[Square]] &= ~valbit; // Simpler Row[i] &= ~valbit;
SeqPtr2 = SeqPtr; while (SeqPtr2 < 81 && Sequence[SeqPtr2] != Square) SeqPtr2++ ;
SwapSeqEntries(SeqPtr, SeqPtr2); SeqPtr++;}

void PrintArray{ int i, j, valbit, val, Square; char ch; Square = 0;
for (i = 0; i < 9; i++) { if (i % 3 == 0) putc('\n', stdout); for (j = 0; j < 9; j++) { if (j % 3 == 0) putc(' ', stdout); valbit = Entry[Square++]; if (valbit == 0) ch = '-'; else { for (val = 1; val <= 9; val++) if (valbit == (1 << val)) { ch = '0' + val; break; } } putc(ch,stdout); } putc ('\n', stdout); }}

void ConsoleInput{ int i, j; char InputString[80];
for (i = 0; i < 9; i++) { printf("Row[%d] : ", i + 1); scanf("%s", InputString);
for (j = 0; j < 9; j++) { char ch = InputString[j]; if (ch >= '1' && ch <= '9') InitEntry(i, j, ch - '0'); } }
PrintArray;}

void PrintStats{ int i, j, S;
printf("\nLevel Counts:\n\n");
S = 0; while (LevelCount[S] == 0) S++;
i = 0;
while (S < 81) { int Seq = Sequence[S]; printf("(%d, %d):%4d ", Seq / 9 + 1, Seq % 9 + 1, LevelCount[S]); if (i++ > 4){ printf("\n"); i = 0; } S++; }
printf("\n\nCount = %d\n", Count);}

void Succeed{ PrintArray; PrintStats;}

int NextSeq(int S){ int S2, Square, Possibles, BitCount; int T, MinBitCount = 100;
for (T = S; T < 81; T++) { Square = Sequence[T]; Possibles = Block[InBlock[Square]] & Row[InRow[Square]] & Col[InCol[Square]]; BitCount = 0; while (Possibles) { Possibles &= ~(Possibles & -Possibles); BitCount++; }
if (BitCount < MinBitCount) { MinBitCount = BitCount; S2 = T; } }
return S2;}

void Place(int S){ LevelCount[S]++; Count++;
if (S >= 81) { Succeed; return; }
int S2 = NextSeq(S); SwapSeqEntries(S, S2);
int Square = Sequence[S];
int BlockIndex = InBlock[Square], RowIndex = InRow[Square], ColIndex = InCol[Square];
int Possibles = Block[BlockIndex] & Row[RowIndex] & Col[ColIndex]; while (Possibles) { int valbit = Possibles & (-Possibles); // Lowest 1 bit in Possibles Possibles &= ~valbit; Entry[Square] = valbit; Block[BlockIndex] &= ~valbit; Row[RowIndex] &= ~valbit; Col[ColIndex] &= ~valbit; Place(S + 1);
Entry[Square] = BLANK; // Could be moved out of the loop Block[BlockIndex] |= valbit; Row[RowIndex] |= valbit; Col[ColIndex] |= valbit; }
SwapSeqEntries(S, S2);}

int main(int argc, char* argv[]){ int i, j, Square;
for (i = 0; i < 9; i++) for (j = 0; j < 9; j++) { Square = 9 * i + j; InRow[Square] = i; InCol[Square] = j; InBlock[Square] = (i / 3) * 3 + ( j / 3); }

for (Square = 0; Square < 81; Square++) { Sequence[Square] = Square; Entry[Square] = BLANK; LevelCount[Square] = 0; }
for (i = 0; i < 9; i++) Block[i] = Row[i] = Col[i] = ONES;
ConsoleInput; Place(SeqPtr); printf("\n\nTotal Count = %d\n", Count);
return 0;}不好好写代码,就只能回去当总理了

新勋章,新奖品,高流量,还有更多福利等你来拿~

不好好写代码,就只能回去当总理了

☞全民编程时代来临,程序员会被 AI 取代吗?

☞程序员惊魂 12 小时:“”引发线上事故

☞拿来就能用!Python 每天定时发送一句情话 | 原力计划

☞调查了 10,975 位 Go 语言开发者,我们有了这些发现!

☞架构师前辈告诉你:代码该如何才能自己写得容易,别人看得也不痛苦

☞“我想玩游戏!” 大佬:玩啥游戏,教你做一个智能贪吃蛇游戏!


上一篇新闻

新加坡伊顿专访:家族企业关注的是几代人,而不是一个季度的经营

下一篇新闻

在新加坡,毕业生平均薪资最高的专业,听说是它

评论

订阅每日新闻

订阅每日新闻以免错过最新最热门的新加坡新闻。