導讀:自古英雄出少年,可惜不想當總理,只想當個程序員。
最近HackNext網站有一個貼子引發網友熱議,一位叫Lihaoyi的作者宣布自己剛剛寫了一本叫《動手Scala編程》的書,表示自己的書寫得不錯,書理論強項目多,希望喜歡Scala的朋友多捧場。
HackNext 網站上李浩毅的貼子
整本書約400多頁,將在2020年夏季正式發行,包括電子書,平裝和精裝幾個版本。跟帖網友非常欣賞作者寫的樣章,并為他的技術和文筆贊口不絕。
有的人在后面一堆跟帖中寫了一句:“沒有人告訴你,他的祖父創建了這個國家”。
原來這位Lihaoyi就是現任新加坡總理李顯龍的兒子——李浩毅。
李浩毅的Twitter頭像
據公開資料顯示,李浩毅出生于 1989 年,畢業于麻省理工學院(MIT),計算機科學和工程學位。他還是 Scala 社區的主要貢獻者。
李浩毅簡歷 https://lihaoyi.com/resume
李浩毅的個人網站上自稱,其開源項目在 Github 上有超過 10,000 Star,每個月的下載次數超過 7,000,000 次。自稱擅長用 Scala 來構建分布式后端系統、高性能Web 應用程序等。
有同學不禁感嘆,他一直關注的技術博主,原來是這樣的身份證和背景。「這是我人生接觸的第二個家里比我有權家里黃金遍地智商比我強,還比我努力的人!」
還有一些網友調侃說,要是李浩毅不好好寫代碼,就只有回去當坡縣的縣長了。
李顯龍也是會編程的
將門無犬子,李浩毅的父親現任總理李顯龍同志,也是有計算機科學文憑的,還是一位響當當的技術極客。
40年前,獲得一個數學學位后,在父親的忠告下我繼續深造計算機科學。他說這里有未來。后來事實證明,他是對的。
我最后的一個項目是數年前用C++寫的數獨,或許這也說明我過時了。目前我的孩子都在IT圈內,兩個畢業于MIT。其中一個拿起一本書給我看,上面寫著:“想要更上一層樓,你該學習Haskell。”我想,有一天這會是我退休時的讀物。
這是李顯龍的一段演講,令人驚訝的不僅僅是他會寫一些C++代碼,還有他知道Haskell是什么。新加坡的網友如是說:
作為一名新加坡人,我自豪于我政府的趨勢方向。并且我驚訝他們竟然提到了Haskell/LYAHFGG和C++,Balakrishnan部長是怎么找時間去涉獵硬件和編程的?這些高級公務員不應該是非常忙的嗎?
雖然美國總統奧巴馬曾經寫過一個“Hello World”程序,但只能算是“打醬油”。
李顯龍在一次創業者論壇上透露,他最后編寫的程序是一個解決數獨問題的程序。
演講結束后,很多人要求李顯龍公開那段代碼,他在Facebook上發布了一個截屏,如下圖示。
李顯龍在Facebook上曬的C++程序代碼
“這段程序很簡單,只能以命令提示符的形式運行。”他寫道,“逐行輸入數據后(例如1-3-8---6),求解器就會輸出答案(如果有多個答案,則會輸出所有答案)、搜索答案所花費的步驟,以及一些搜索統計數據。”
李顯龍還提供了一個指向Google Drive的鏈接,里面包含了這段代碼及其輸出示例和編譯后的Windows可執行文件。
以下是整段程序源代碼,感興趣的同學可以品鑒一小下:
#include "stdio.h"int InBlock[81], InRow[81], InCol[81];const int BLANK = 0;
const int ONES = 0x3fe; // Binary 1111111110int Entry[81]; // Records entries 1-9 in the grid, as the corresponding bit set to 1
int Block[9], Row[9], Col[9]; // Each int is a 9-bit arrayint 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 consistencyEntry[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 PossiblesPossibles &= ~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 loopBlock[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;
}
網友評論:李顯龍總理已晉升新一代男神
包子精是咸菜餡的:人家有劍橋的diploma in computer science。可怕的是他還有劍橋的1st class honor in Math 和哈佛的Master in public admin。。。
smart is the new sexy啊。給龍男神跪了。
美拉洋洋:人家總理是劍橋數學系的,這點東西不算什么
尋常夢中:總理您歇歇、這種問題就留給小的們解決吧
JJUNSU:程序員還是有前途的【居然能當上總理
ChorizoGelato:仰觀學霸的世界我們亞歷山大。
清仔_Veslyn:我靠,不好意思說自己會寫程序
BELL-Sherlocked:早上被刷屏了....有點厲害......畢竟是劍橋出身的大學霸。真是全面響應smartnation國策從我做起從領袖做起
CyanZero:難怪我倆同事早上一直在吱哇亂叫的掃描代碼找bug
__EATING:Smart is the new sexy
大白:程序寫不好,總理當到老!
21CTO綜合程序員那些事,海外社交媒體等,一并致謝。
推薦閱讀:
?
他,用了8年,從程序員到CTO再到天使投資人蝶變記
?
剝開浮躁表面,直指金融科技內心
?
二本畢業生逆襲成大廠架構師的成長心得
?
波波老師: 解決微服務的數據一致性分發問題?
? ?END ? ??
#接力技術,鏈接價值#
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!
總結
以上是生活随笔為你收集整理的程序写不好,总理当到老!的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。