02.10 面試官問:請拿出一段體現你水平的代碼時,該如何回答?

面試官:請拿出一段體現你水平的代碼。

候選人:公司寫的工程代碼不好給你看,平常畫的可以麼?例如:

面試官問:請拿出一段體現你水平的代碼時,該如何回答?

面試官:這什麼鬼?!

候選人:其實我想畫一顆皇后棋子⋯⋯

如何實現?

用 C 實現,只有一行一個語句,連空格 173 個字符:

main(a,l,r,m,i,j,k){returna?printf("%d",main(0,0,0,0,0,0,8)):j?i?main(0,l,r,m,i&i-1,1,k)+main(0,(l|i&-i)*2,(r|i&-i)/2,m|i&-i,0,0,k-1):0:k?main(0,l,r,m,~(l|r|m)&255,1,k):1;}

編譯執行:

$ gcc -w -include stdio.h a.c && ./a.out

92

這個解答從@Comzyh的回答 ,只是把迭代改成遞歸,以及用main()作為遞歸函數。

更新1:評論@霧雨魔理沙說到標準是不容許 main() 遞歸的,我再給一個標準一點的,兩個語句,連空格 154 個字符:

q(l,r,m,i,j,k){returnj?i?q(l,r,m,i&i-1,1,k)+q((l|i&-i)*2,(r|i&-i)/2,m|i&-i,0,0,k-1):0:k?q(l,r,m,~(l|r|m)&255,1,k):1;}main(){printf("%d",q(0,0,0,0,0,8));}

放不進一條 tweet。

更新2:去掉 k,147 個字符:

q(l,r,m,i,j){returnj?i?q(l,r,m,i&i-1,1)+q((l|i&-i)*2,(r|i&-i)/2,m|i&-i,0,0):0:m==255?1:q(l,r,m,~(l|r|m)&255,1);}main(){printf("%d",q(0,0,0,0,0));}

改為 n-queen,函數本身 117個字符,再加上打印 n=1...15(額外 61 個字符):

q(l,r,m,n,i,j){returnj?i?q(l,r,m,n,i&i-1,1)+q((l|i&-i)*2,(r|i&-i)/2,m|i&-i,n,0,0):0:m-n?q(l,r,m,n,~(l|r|m)&n,1):1;}

main(n){for(n=0;n++<15;)printf("%d ",q(0,0,0,(1<

輸出:

1 0 0 2 10 4 40 92 352 724 2680 14200 73712 365596 2279184

答案符合 A000170 - OEIS

(https://oeis.org/A000170)

面試官問:請拿出一段體現你水平的代碼時,該如何回答?

更新3:一行或 10 行都不好看,來個 20 行的。

面試官問:請拿出一段體現你水平的代碼時,該如何回答?

更新4:把 m==n?a:b 改成 m-n?b:a,省一個字符,116個字符:

q(l,r,m,n,i,j){returnj?i?q(l,r,m,n,i&i-1,1)+q((l|i&-i)*2,(r|i&-i)/2,m|i&-i,n,0,0):0:m-n?q(l,r,m,n,~(l|r|m)&n,1):1;}

main(n){for(n=0;n++<15;)printf("%d ",q(0,0,0,(1<

面試官:一堆亂碼就當代碼!有別的嗎?

候選人:有的有的,不如看看這個網站⋯⋯(https://www.shadertoy.com/view/XsdyWr

面試官:怎麼給我看視頻網站了?

候選人:這是我上年情人節畫的玫瑰花⋯⋯

面試官問:請拿出一段體現你水平的代碼時,該如何回答?

如何用計算幾何模型畫一束玫瑰花?

C 語言版本的源文件在 rose.c 。

https://github.com/miloyip/misc/blob/master/rose/rose.c

一些注意的地方如下:

1、生成的文本是 160x80 個字符,如命令行不能顯示這麼多字符,可重定向到文件(如 ),用編輯器打開。

2、要加入名字等字符,修改 146 行,如插入 "milo"(這裡接入"olim" 會好看一些),並把最後的 12.0f 改成 16.0f:

putchar(" .,-:;+=olim*#@@"[(int)(f(make2((x / 160.0f- 0.5f) * 2.0f, (y / 80.0f- 0.5f) * -2.0f)) * 16.0f)]);

3、第 143 行用ANSI轉義序列 改變文本顏色,需要終端支持。可按需修改顏色。

4、第 128、129 行是攝影機的位置和方向,建議修改。可在 ShaderToy 裡試好才改 C 文件。

面試官:夠了!你以為我們請畫家嗎?

候選人:其實我還真準備了一幅畫⋯⋯ (從包裡淘出一張A3紙)

面試官問:請拿出一段體現你水平的代碼時,該如何回答?

面試官:素描嗎?唉⋯⋯我們是請程序員啊。話說,Leon 是誰?你不是叫 Leon 吧?

候選人:Leon 是我做的機器人,這是他幫我畫的。

《寫生機器人》製作經驗分享(上)

地址:https://zhuanlan.zhihu.com/p/32084037

面試官:這是人工智能麼?

候選人:不是不是,只是些圖像處理和圖形學的小玩意,幾百塊的材料⋯⋯

面試官:我就知道你不會人工智能,就會玩玩具。但不要緊,你會編程吧?你聽說過 VC 六嗎?

候選人:Microsoft Visual C plus plus six?

面試官:我說「V-C-六」啊。

候選人:啊,以前念大二的時候有用過「V-C-六」來做人工智能的功課。

面試官問:請拿出一段體現你水平的代碼時,該如何回答?

《美綠中國象棋》製作過程及算法簡介

http://miloyip.com/2010/milo-chinese-chess/

面試官:厲害啊,你下了個遊戲來當功課啊。

候選人:不是啊,UI 都是自己用 OpenGL 畫的。

面試官:啥芝欸路,你不知道「V-C-六」有 「M-F-C」 嗎?

候選人:以前沒怎麼用⋯⋯

面試官:算了算了,其實我們也只是需要程序員處理一下數據,不太需要 MFC。不過啊,他們說想換用一個比較快的「J-S-O-N」庫,VC6 編譯不了,那個叫什麼 「拉屁 J-S-O-N」。你覺得能搞得定嗎?

候選人:RapidJSON 嗎?嗯⋯⋯有點難啊「V-C-六」的模板支持不太好。但我寫過一個 C 語言的,兼容性一定沒問題!

從零開始的 JSON 庫教程

https://zhuanlan.zhihu.com/p/22457315

面試官:那個啊,你抄那個沒問題吧?

候選人:雖然教程拖了這麼久還沒寫完,但代碼已經是完整的,沒問題的!

面試官:好吧,那你明天就上班抄這個吧!看你什麼都不懂,文體兩開花,就六塊吧!

候選人:六塊時薪?

面試官:六塊年薪!

面試官&候選人:樂快年新!

原文:https://www.zhihu.com/question/309675877/answer/587575915


分享到:


相關文章: