面試官:請拿出一段體現你水平的代碼。
候選人:公司寫的工程代碼不好給你看,平常畫的可以麼?例如:
面試官:這什麼鬼?!
候選人:其實我想畫一顆皇后棋子⋯⋯
如何實現?
用 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
閱讀更多 Java識堂 的文章