李显龙:会C++的新加坡总理

原创 2015年07月10日 19:56:33

40年前,获得一个数学学位后,在父亲的忠告下我继续深造计算机科学。他说这里有未来。后来事实证明,他是对的。我最后的一个项目是数年前用C++写的数独,或许这也说明我过时了。目前我的孩子都在IT圈内,两个毕业于MIT。其中一个拿起一本书给我看,上面写着:“想要更上一层楼,你该学习Haskell。”我想,有一天这会是我退休时的读物。

这是摘自新加坡总理李显龙的一段演讲。

李显龙C++写的数独程序:

#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 1

int 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;

}

李显龙:会C++的新加坡总理

40年前,获得一个数学学位后,在父亲的忠告下我继续深造计算机科学。他说这里有未来。后来事实证明,他是对的。我最后的一个项目是数年前用C++写的数独,或许这也说明我过时了。目前我的孩子都在IT圈内,两个...
  • a379039233
  • a379039233
  • 2015年05月05日 12:56
  • 573

2015年新加坡总理李显龙新加坡国庆50周年演讲中英文全文

8 August 2015 2015年8月8日   My Fellow Singaporeans,   各位同胞:   50 years ago, on th...
  • zhongguomao
  • zhongguomao
  • 2017年06月19日 14:45
  • 250

稳定高薪vs追求梦想,当你在犹豫时别人已经放弃新加坡绿卡!

回想整个创业之行,命途多舛无奈。当他告别故土,远走新加坡时,他笑称“自己是被家人踢出国门”的,一路上他并不孤单,因为他还随身携带着上百万的债务排解一路寂寞。...
  • kongki
  • kongki
  • 2015年11月19日 13:35
  • 2067

全球人才的纳斯达克SelfSell潜入英法、瑞士、新加坡“偷人”?

你是否愿意? 给你100万,出让你今后收入的5%,你是否愿意? 如同投资种子公司,如果在15年前投资阿里巴巴,到今天会得到巨额的财富回报。同样的,是否可以将投资对象从商业实体变换为人才,以...
  • ravenblockchain
  • ravenblockchain
  • 2017年12月18日 14:27
  • 96

《越南外资企业挂国旗自保 当地暴民烧错新加坡旗》

《越南外资企业挂国旗自保 当地暴民烧错新加坡旗》越南平阳省爆发反华暴乱,波及当地外资企业,不少新加坡、韩国、法国、日本企业也受到波及,其中新加坡国旗的图案与颜色,因与中国五星红旗相似,也遭示威民众当众...
  • u011678840
  • u011678840
  • 2014年05月15日 10:25
  • 1400

【强化学习】新加坡国立大学张戎:深度学习与强化学习

来源: https://cloud.tencent.com/developer/article/1006637 随着 DeepMind 公司的崛起,深度学习和强化学习已经成为了人工智能领域的热...
  • np4rHI455vg29y2
  • np4rHI455vg29y2
  • 2017年12月10日 00:00
  • 61

NTU NUS 申请经历

我的出国历程                 ——考研+出国全纪录 个人简历:本人,男,1989年出生,东北大学秦皇岛分校06级通信工程专业学生。在校期间曾获得校一等奖学金1次,二等奖学金...
  • The_star_is_at
  • The_star_is_at
  • 2016年10月24日 16:35
  • 5067

80后的地道IT人,谈谈新加坡和悉尼的10多年海外工作经历

原文地址:http://bbs.csdn.net/topics/390367655?page=1#post-393695730 80后的地道IT人,谈谈新加坡和悉尼的10多年海外工作经历 高考...
  • yazhouren
  • yazhouren
  • 2013年02月18日 10:27
  • 1821

AIOPS是什么,它的未来如何?

AIOps,也就是基于算法的IT运维(Algorithmic IT Operations),是由Gartner定义的新类别,源自业界之前所说的ITOA(IT Operations and Analyt...
  • EK02114FS
  • EK02114FS
  • 2017年12月13日 00:00
  • 91

一个程序员的跨洋找工作分享

出国有段时间了,分享一下
  • felomeng
  • felomeng
  • 2015年12月16日 05:12
  • 6865
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:李显龙:会C++的新加坡总理
举报原因:
原因补充:

(最多只允许输入30个字)