有沒有一段代碼,讓你覺得人類的智慧也可以璀璨無比?
不一定要是完整演算法,就是那種看著看著就覺得嗨爆了,驚為天人的結構或語句。
當然是這個啦!
用三段 140 字元以內的代碼生成一張 1024×1024 的圖片
原文 by Matrix67
Kyle McCormick 在 StackExchange 上發起了一個叫做 Tweetable Mathematical Art 的比賽,參賽者需要用三條推這麼長的代碼來生成一張圖片。具體地說,參賽者需要用 C++ 語言編寫 RD 、 GR 、 BL 三個函數,每個函數都不能超過 140 個字元。每個函數都會接到 i 和 j 兩個整型參數(0 ≤ i, j ≤ 1023),然後需要返回一個 0 到 255 之間的整數,表示位於 (i, j) 的像素點的顏色值。舉個例子,如果 RD(0, 0) 和 GR(0, 0) 返回的都是 0 ,但 BL(0, 0) 返回的是 255 ,那麼圖像的最左上角那個像素就是藍色。參賽者編寫的代碼會被插進下面這段程序當中(我做了一些細微的改動),最終會生成一個大小為 1024×1024 的圖片。
// NOTE: compile with g++ filename.cpp -std=c++11
#include &
#include &
#include &
#define DIM 1024
#define DM1 (DIM-1)
#define _sq(x) ((x)*(x)) // square
#define _cb(x) abs((x)*(x)*(x)) // absolute value of cube
#define _cr(x) (unsigned char)(pow((x),1.0/3.0)) // cube root
unsigned char GR(int,int);
unsigned char BL(int,int);
unsigned char RD(int i,int j){
// YOUR CODE HERE
}
unsigned char GR(int i,int j){
// YOUR CODE HERE
}
unsigned char BL(int i,int j){
// YOUR CODE HERE
}
void pixel_write(int,int); 我選了一些自己比較喜歡的作品,放在下面和大家分享。 首先是一個來自 Martin Büttner 的作品:
FILE *fp;
int main(){
fp = fopen("MathPic.ppm","wb");
fprintf(fp, "P6
%d %d
255
", DIM, DIM);
for(int j=0;j&
它的代碼如下:
unsigned char RD(int i,int j){
return (char)(_sq(cos(atan2(j-512,i-512)/2))*255);
}
unsigned char GR(int i,int j){
return (char)(_sq(cos(atan2(j-512,i-512)/2-2*acos(-1)/3))*255);
}
unsigned char BL(int i,int j){
return (char)(_sq(cos(atan2(j-512,i-512)/2+2*acos(-1)/3))*255);
}
同樣是來自 Martin Büttner 的作品:
這是目前暫時排名第一的作品。它的代碼如下:
unsigned char RD(int i,int j){
#define r(n)(rand()%n)
static char c[1024][1024];return!c[i][j]?c[i][j]=!r(999)?r(256):RD((i+r(2))%1024,(j+r(2))%1024):c[i][j];
}
unsigned char GR(int i,int j){
static char c[1024][1024];return!c[i][j]?c[i][j]=!r(999)?r(256):GR((i+r(2))%1024,(j+r(2))%1024):c[i][j];
}
unsigned char BL(int i,int j){
static char c[1024][1024];return!c[i][j]?c[i][j]=!r(999)?r(256):BL((i+r(2))%1024,(j+r(2))%1024):c[i][j];
}
下面這張圖片仍然出自 Martin Büttner 之手:
難以想像, Mandelbrot 分形圖形居然可以只用這麼一點代碼畫出:
unsigned char RD(int i,int j){
float x=0,y=0;int k;for(k=0;k++&<256;){float a=x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y&>4)break;}return log(k)*47;
}
unsigned char GR(int i,int j){
float x=0,y=0;int k;for(k=0;k++&<256;){float a=x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y&>4)break;}return log(k)*47;
}
unsigned char BL(int i,int j){
float x=0,y=0;int k;for(k=0;k++&<256;){float a=x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y&>4)break;}return 128-log(k)*23;
}
Manuel Kasten 也製作了一個 Mandelbrot 集的圖片,與剛才不同的是,該圖描繪的是 Mandelbrot 集在某處局部放大後的結果:
它的代碼如下:
unsigned char RD(int i,int j){
double a=0,b=0,c,d,n=0;
while((c=a*a)+(d=b*b)&<4n++&<880)
{b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}
return 255*pow((n-80)/800,3.);
}
unsigned char GR(int i,int j){
double a=0,b=0,c,d,n=0;
while((c=a*a)+(d=b*b)&<4n++&<880)
{b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}
return 255*pow((n-80)/800,.7);
}
unsigned char BL(int i,int j){
double a=0,b=0,c,d,n=0;
while((c=a*a)+(d=b*b)&<4n++&<880)
{b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}
return 255*pow((n-80)/800,.5);
}
這是 Manuel Kasten 的另一作品:
生成這張圖片的代碼很有意思:函數依靠 static 變數來控制繪畫的進程,完全沒有用到 i 和 j 這兩個參數!
unsigned char RD(int i,int j){
static double k;k+=rand()/1./RAND_MAX;int l=k;l%=512;return l&>255?511-l:l;
}
unsigned char GR(int i,int j){
static double k;k+=rand()/1./RAND_MAX;int l=k;l%=512;return l&>255?511-l:l;
}
unsigned char BL(int i,int j){
static double k;k+=rand()/1./RAND_MAX;int l=k;l%=512;return l&>255?511-l:l;
}
這是來自 githubphagocyte 的作品:
它的代碼如下:
unsigned char RD(int i,int j){
float s=3./(j+99);
float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;
return (int((i+DIM)*s+y)%2+int((DIM*2-i)*s+y)%2)*127;
}
unsigned char GR(int i,int j){
float s=3./(j+99);
float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;
return (int(5*((i+DIM)*s+y))%2+int(5*((DIM*2-i)*s+y))%2)*127;
}
unsigned char BL(int i,int j){
float s=3./(j+99);
float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;
return (int(29*((i+DIM)*s+y))%2+int(29*((DIM*2-i)*s+y))%2)*127;
}
這是來自 githubphagocyte 的另一個作品:
這是一張使用 diffusion-limited aggregation 模型得到的圖片,程序運行起來要耗費不少時間。代碼很有意思:巧妙地利用宏定義,打破了函數與函數之間的界限,三段代碼的字數限制便能合在一起使用了。
unsigned char RD(int i,int j){
#define D DIM
#define M m[(x+D+(d==0)-(d==2))%D][(y+D+(d==1)-(d==3))%D]
#define R rand()%D
#define B m[x][y]
return(i+j)?256-(BL(i,j))/2:0;
}
unsigned char GR(int i,int j){ 最後這張圖來自 Eric Tressler: 這是由 logistic 映射得到的 Feigenbaum 分岔圖。和剛才一樣,對應的代碼也巧妙地利用了宏定義來節省字元: unsigned char GR(int i,int j){ unsigned char BL(int i,int j){ 真心佩服PID!!!暫時絕對是我覺得最驚艷的東西了。 下面來大概介紹下這個演算法。 PID 對應的就是 比例(Proportion)、積分(Integration)、微分(Differentiation),對應著上面的圖,意思就是。通過一個輸入量(偏差值),經過比例、積分、微分、的運算後(應用時不一定需要三個步驟都有)得到一個輸出量(結果)。再把這個輸出量直接給執行部件,執行操作。此後通過,感測器得到實際值時,再於目標值作差,傳給輸入量。接著,一直循環下去。直到你所需要控制的那個量慢慢逼近,達到你設定的目標值為止。 連續形式的時域表達式
#define A static int m[D][D],e,x,y,d,c[4],f,n;if(i+j&<1){for(d=D*D;d;d--){m[d%D][d/D]=d%6?0:rand()%2000?1:255;}for(n=1
return RD(i,j);
}
unsigned char BL(int i,int j){
A;n;n++){x=R;y=R;if(B==1){f=1;for(d=0;d&<4;d++){c[d]=M;f=f&
}
unsigned char RD(int i,int j){
#define A float a=0,b,k,r,x
#define B int e,o
#define C(x) x&>255?255:x
#define R return
#define D DIM
R BL(i,j)*(D-i)/D;
}
#define E DM1
#define F static float
#define G for(
#define H r=a*1.6/D+2.4;x=1.0001*b/D
R BL(i,j)*(D-j/2)/D;
}
F c[D][D];if(i+j&<1){A;B;G;a&
}
經典的東西往往是簡單的!而PID控制演算法恰好就符合了這一點,短短一個公式,十多航。
在工業應用中,PID及其衍生演算法幾乎是應用最廣泛的演算法。而它問世的六十、七十年以來,一直在使用,仍未淘汰。至於在我們學生當中,假如對PID足夠熟悉,對PID的參數整定熟練的話,我覺得參加電子設計(控制類),飛思卡爾智能車,機器人比賽等這類的比賽,獲獎的壓力肯定會小很多很多。其他類型的創新項目只要涉及到控制類的,問題也應該不大了吧。至於其他領域,我就不太清楚了,畢竟也沒太多接觸。
首先,這些介紹都是之前做比賽或是電子設計時,從網上搜集到的各種資料(仔細看完應該可以大概入門了吧)。 所以假如有侵犯個人版權之類的,請聯繫我。我會立刻改正,並補上作者。畢竟是第一次完整答題,有什麼問題,請大家提出,謝謝~
不廢話,進入正題,開啟搬運工模式
******************************************************************************************
第一,就是這張圖了
最簡單的例子就是,利用PWM,編碼器的反饋量來對小車的車速形成一個閉環控制。
而我們實際實用時,只需要在公式中定義 、 、 這三個變數。
(實在實在不好意思,後天有一門考試。現在還沒好好複習完.....考完再好好整理更新,行嘛?)
下面是一段不完整的程序,還未整理。中間的motorgun,對應的就是PID這個公式。直接可以把一個角度感測器傳進來的角度值 通過計算得到一個數字後,把它賦給電機的PWM值。隨後經過多次運算,實際角度值就能慢慢接近目標角度值。
void PID (void)
{
NOWPOS = GET_POS(); // 通過感測器獲得當前值
MOTOGUN = 0; //
pid.LastError = NOWPOS - pid.SetPoint; // 用當前值減去目標的,得到輸入的那個偏差
pid.SumError+= pid.LastError; // 中間積分項的累加
MOTOGUN = pid.P*pid.LastError +
pid.I*pid.SumError +
pid.D* (pid.LastError - pid.PrevError);//此處是PID的公式!!
pid.PrevError = pid.LastError;
MOTOR(MOTOGUN); //直接把計算值給了電機PWM程序
}
我先提到這,假如大家對PID特別感興趣,可以先到網上查找。實在不好意思~~
mame/quine-relay · GitHub
突然發現已經100種語言了,想看50種語言的進50分支。
璀璨無比談不上,反正讓我震驚了會兒,原來可以這樣玩
分享幾個第一次看到就被它的優美深深震撼到的代碼:
1、線性求逆元:
for (int i = 2; i &< MAXN; i++)
inv[i] = mul(inv[mod%i], mod - mod / i, mod);
僅僅兩行代碼,就實現了在$O(n)$的時間內求出1到n對模m的逆元有木有!?
2、求最大公因數:
int gcd(int x, int y){return y ? gcd(y, x%y) : x;}
第一次接觸到這樣的代碼時,我的內心是這樣的:
wtf???黑人問號.jpg
3、樹狀數組
對於單點修改區間求和,樹狀數組可謂達到了時空複雜度的極限,甚至不多用額外一位元組存儲空間。來看看它的實現:
修改:
void add(int i, int x){
for (;i &<= n; i += i -i)tree[i] += x;
}
查詢:
int sum(int i){
int ret = 0;
for(; i; i -= i -i)ret +=tree[i];
return ret;
}
表示記性不好的我看完一遍也記住了呢。
4、zkw線段樹
對於單點修改區間查詢的線段樹,zkw大神實力教你如何1分鐘內碼出代碼:
修改:
void set(int x, int value){
val[x += treeLen] = value;
while (x &>&>= 1)pushUp(x);
}
查詢:
int query(int l,int r){
int ret = 0;
for (l += treeLen - 1, r += treeLen +1; l ^ r ^ 1; l &>&>= 1, r &>&>= 1){
if (~l 1)ret = min(ret, val[l^1]);
if (r 1)ret = min(ret, val[r ^ 1]);
}
return ret;
}
以上都是一些十分基礎但真的讓你讚不絕口的演算法和數據結構。還有一些稍微複雜一些的栗子,由於手機碼代碼太不方便了,就以後再更吧。(如果有筆誤打錯的地方歡迎指正哈)
5、後綴數組的DC3演算法,反正學完它的一瞬間我是明白了,天才和普通人的智商差距簡直比人和狗還大啊。。。
6、快速傅里葉變換的數論版本(即NTT):學完後有種想去數學系的衝動(還好後來冷靜下來了)。費馬素數群的性質居然和複數完美吻合,不得不說是一種奇蹟啊。
7、主席樹:這是fotile巨佬考場上發明這種數據結構,用於在$O(log n)$的時間複雜度內解決序列區間第k大問題,以及區間內元素的排名。個人感覺他比劃分樹的設計巧妙多了,有一種自然的美感。
8、Pollard因數分解演算法:如果你真的把關於時間複雜度的證明一步步看完後,相信你會有一種豁然開朗的感覺。這個演算法真正高的地方在於把生日悖論和遞推式循環節巧妙的結合在一起,最後運用遞推方程主定理的理論,使得時間複雜度達到了看似不可能的期望$n^0.25$的數量級。
其實現在感覺一切和數據結構或數學有關的演算法都是非常優美的,前者在於設計的精巧性,後者在於證明的環環相扣,達到引人入勝的效果。
int find(int x){
return x==Fa[x]?x:Fa[x]=find(Fa[x]);
}
一行並查集
不管從演算法內涵到代碼表示都簡直精緻優雅到炸大一上編程導論,最後一個project老師讓我們用Java寫一個能print itself的程序。。查閱wiki最後千辛萬苦寫出來以後覺得真是。。智慧。。
參見 Quine (computing)
客戶的機器有在國內的有在國外的,aws 的機器本機看不到公網 ip,需要判斷機器到底在國內還是國外,再來判斷後面腳本的執行路徑。想了很多辦法,包括往我們的伺服器發一個請求我們通過ip判斷地理位置之類的等等,最後的解決方案:
# Guess your location, you know it.
location="oversea"
curl --connect-timeout 1 https://google.com 2&>1 &>/dev/null
ret=$?
if [ $ret -ne 0 ]; then
location="cn"
else
.......
機智如中國人
我在這裡提供我見識到的三個精彩演算法的解析,強烈地推薦給初學的演算法愛好者,它們可能會令你眼界大開,同時堅定你在演算法大道上勇往直前的信念。
#3. 二進位是人類的好朋友,在線的樹的最近公共祖先(LCA)演算法:
利用數的二進位表示可以產生很多加速演算法,online-LCA是其中之一。許多演算法的加速是對數率的,就是利用了數的二進位表示。
首先定義二維數組:prede[N+1][B+1], N表示樹的結點的數量,結點以數字1到N代指,B滿足條件:2^(B)&>=N
令fa[i]表示結點i的父結點,那麼prede[i][b]的含義是:
prede[i][0] = fa[i];
prede[i][b] = prede[prede[i][b-1]][b-1]; // b &>= 1
也就是說,prede[i][b]指的是從結點i往上走2^(b)步,所到達的結點。如果走到了盡頭,就令prede[i][b]為0。
我們只需要O(NlogN)的複雜度,就可以完成prede的初始化。此外,我們還需要預處理出所有結點的高度,也就是depth[i],定義為:
depth[root] = 0;
depth[i] = depth[fa[i]] + 1;
當遇到詢問LCA(x, y),我們只需要採取如下行動,就可以O(logN)的代價獲得答案:
int lca(int x, int y) {
if (depth[x] &> depth[y]) swap(x, y);
for(int i = B; i &>= 0; i --){
//令x和y高度一致
if (depth[prede[y][i]] &>= depth[x]) y = prede[y][i];
}
//注意此時有可能出現x == y,那麼LCA(x,y) == x,下方的for
//就不起作用了。
for(int i = B; i &>= 0; i --){
//如果prede[x][i]和prede[y][i]不相同,說明這兩者的高度
//都大於所求的LCA(x,y),也就是在LCA(x,y)的下方,此時令
//x和y一同往根部以2^(i)的步數爬升
if (prede[x][i] != prede[y][i]) x = prede[x][i], y = prede[y][i];
}
if (x == y) return x; //此時LCA(x,y) = x
return prede[x][0]; //此時x和y有共同的父結點
}
上述代碼的精髓在於兩個for(int i = B; i &>= 0; i --),這裡利用了數的二進位表示。可以證明,對於任何嚴格小於2^(B+1)的非負整數t,下面的代碼運行之後可以令a == t,
#2. 集合之交,樹狀數組,動態更改、查詢數組前綴和演算法。 實現樹狀數組所需的代碼極為簡易,實際上它是一棵殘缺的線段樹,它可以實現一部分線段樹的功能(但凡可以化為區間求和的問題基本上都能解決),但是畢竟不如線段樹功能完整,有興趣的讀者應該學習一下線段樹的知識。 問題描述:利用預處理的前綴和數組pre[N + 1],我們可以O(1)的代價對靜態的數組A[N + 1]求取區間和: pre[i] = A[0] + A[1] + A[2] + ... + A[i]; A[a] + A[a+1] + A[a+2] + ... + A[b] = pre[b] - pre[a-1];int a = 0;
for(int i = B; i &>= 0; i --){
if(a + (1&<&
但是當需要對數組A進行動態的更改時,上述代碼就失效了。我們需要一種演算法,可以動態地更改以及查詢前綴和數組pre[N+1]。下面首先展示樹狀數組的代碼,然後解釋其數學原理,它的插入和查詢的代價都是O(logN):
int Count[BiggestN+1], N; //使用前令Count所有元素為0,規定A[0]沒有數
//據,也就是說數據從A[1]開始存,pre[0]總為零
//實現功能A[i] += add
void insert(int i, int add)
{
while( i &<= N )
{
Count[i] += add;
i += i(-i);
}
}
//返回pre[i]的值
int query(int i)
{
int num = 0;
while( i &> 0 )
{
num += Count[i];
i -= i(-i);
}
return num;
}
演算法中最關鍵的語句是位操作i(-i),讀者在稿紙上算一算就可以知道:
i -= i(-i)的功能是令i的最低的非0位變為0;
i += i(-i)的功能是令i的最低的非0位變為0,並往更高一位進一。
理解樹狀數組的行為,需要構造兩個集合:
Define lowbit(i) = i(-i);
up(a) = {a, a1, a2, ...}, ai = a(i-1) + lowbit(a(i-1));
down(a) = {a, a1, a2, ..., 0}, ai = a(i-1) - lowbit(a(i-1));
可以證明,對於任何a &<= b的正整數對(a,b),up(a)和down(b)的交集都有且僅有一個元素。對這個定理進行含糊的說明是很容易的,a == b的情況不必考慮,a &< b時,總有一個最大的i,使得b的第i位大於a的第i位(也就是b的第i位是1,而a的第i位是0),那麼對b產生down(b),對a產生up(a),它們的唯一交集就是(1&<&
有了上述定理,我們就不難意會insert函數和query函數的作用了。
#1. 機器浮點數的秘密,"巧奪天工"的完美實例,基於標準浮點數的快速開平方倒數演算法
這是一個公開的秘密,這是一個所有程序員得以欣賞的智慧之美。她在許多程序員的心目中高居「最美代碼」的第一位,所有溢美之詞都無法表達他們所感受到的震撼。
一定會有許多人想在這裡貼這段代碼,少年,來我這裡,我幫你揭開她神秘的面紗。
公式太多,貼圖講解。
Vote Me Up If You Like My Answer ^_^
//其實樓上好多代碼和演算法我都看不懂……滾去學習了。
//但是這個答案里的東西拿來裝(嗶——)真的很棒。
&這些拿來唬人真的挺方便的…尤其是那些不懂編程的…反正我當年不懂編程的時候一直覺得這是外星人的黑科技…&
這個如何?看了你就明白。但願知乎沒把圖片壓壞。
顯然知乎把圖片壓縮了……並不能獲得圖片里藏著的東西……容我把圖片上傳到網盤去。
warez.jpg_免費高速下載
下載圖片,修改後綴為rar,自己查看裡面的內容。看了以後你們會回來點贊的吧……
大一第一次看的時候真的是被驚艷到啊……感興趣的可以自己搜索Warez
Warez出品的精品動畫
不收藏是你的錯!最經典力作!!近25萬倍的壓縮的精品!!!
每年,世界各地著名的Warez組織都會推出一個小的動畫片來比較,僅僅是用來炫耀其實力。64K的3D動畫。要知道,一首普通的MP3,通常就有4000K左右,一張普通的JPG壓縮圖片也要30-40K,而這個僅有63K的3D動畫,你花半個小時也看不完而且不重複帶音樂.
推薦配置:2G/512M/GF4Ti或ATi9600、128M以上。
prophecy《彗星撞地球》2000年時的最經典力作!相信大多網友對這個演示是相當熟悉了將1.9G的數據壓縮為64K,其3D渲染和聲效卻令人震撼,尤其是已64K的大小竟然演示了近30分鐘的不重複3D影片,其技術令人震驚~因為,事實上,這個動畫的真正容量超過15G,也就是說這個Warez組織把它壓縮了25萬倍。註:系統必須安裝有directx8.0才行。因為動畫支持DX8.0加速。
按A鍵可縮小,按S鍵放大,按F鍵快速放,按R鍵重放……
圖片…內容本身跟壓縮包沒有任何關係了…你可以隨便換個什麼,就是把兩個東西放在一起糊弄人的。
搜索一下這個 copy /b 輸入圖片1.jpg+輸入文件2.rar 輸出圖片.jpg 你瞬間就掌握了一門裝逼技能…
當年還有小夥伴寫成了界面程序…找不到了。
把下面的代碼複製保存進 1.txt,然後在DOS環境(xp win7用cmd,win8 64位不支持)中轉到存儲txt的位置,輸入debug&>1.txt
e100 33 f6 bf 0 20 b5 10 f3 a5 8c c8 5 0 2 50 68 13 1 cb e 1f be a1 1 bf 0 1
e11b 6 57 b8 11 1 bb 21 13 89 7 4b 4b 48 79 f9 ad 86 e0 8b c8 bd ff ff e8 20
e134 0 3d 0 1 74 1a 7f 3 aa eb f3 2d ff 0 50 e8 f 0 5a f7 d8 8b d8 26 8a 1 aa
e14f 4a 75 f9 eb de cb 57 bb 21 13 8b c1 40 f7 27 f7 f5 8b fb ba 11 1 4f 4f 4a
e168 39 5 7f f9 52 8b c5 f7 25 f7 37 2b c8 95 f7 65 2 f7 37 95 2b e8 fe e fe
e181 10 79 6 c6 6 fe 10 7 46 d0 14 d1 d1 d1 e5 79 ec 5a b8 11 1 ff 7 4b 4b 48
e19b 3b d0 75 f7 5f c3 83 f7 83 a6 5d 59 82 cd b2 8 42 46 9 57 a9 c5 ca aa 1b
e1b4 4f 52 b4 92 3f ab 6e 9e a8 1d c6 3 fc e 6a e7 ae bb 5f 7b 10 b8 b4 f7 8
e1cd e2 bf 36 4e 39 9d 79 29 3f a f9 36 52 16 fb 5 e8 e5 a6 c2 e9 b0 43 d3 a3
e1e6 cf d3 fd fd cb d1 4c 5e e0 63 58 86 bb 3e 9 c1 20 bc cc 91 a3 47 81 70 b3
e1ff d6 1a 9e c2 c9 12 e7 4e ad f4 5f e3 30 e9 9 39 d7 e8 f9 f4 d2 44 e8 d7 22
e218 be e2 ce 88 25 cf 30 4a a8 29 ae 3f 47 c6 2d 85 e9 73 54 13 b e6 e0 34 65
e231 e2 50 8a 89 18 5f ce 70 99 3 5f 42 bf eb 7 ae d0 ca 5 22 8d 22 a5 b7 f0
e24a 90 81 bc 7a bc dc 5 db c0 6a 2 e5 57 38 be 60 cb ac ba a5 3b 9d f1 77 38
e263 a6 84 d1 3c af 49 d8 6a 45 a2 76 60 21 12 c0 c2 44 f2 5e bb e5 37 a9 2b
e27b ec 4a 8c 4c f2 f7 a9 58 71 2b ba 6d d6 6a e5 60 46 e0 da e5 b9 90 e5 a3
e293 f7 7f 31 60 58 f0 c4 88 10 4e 3c a3 ee 4e 11 55 8f a 92 eb db ad 7a 9c f
e2ac db 5a 28 96 da 87 ae 91 91 2d e3 5e ea df 6 95 71 67 71 40 ce d1 2e 31 6d
e2c5 c1 9c d8 6a 76 9b 4a e8 36 44 d6 76 d 30 5 ff d4 1b ac 1f 32 65 31 bf 55
e2de 26 b a4 55 e1 5d 5e 16 ed 97 48 6c 77 fb 81 86 e f9 18 bd d4 f4 8b de 1d
e2f7 ba d 47 75 3 89 4b 3e dc 27 86 1c d0 17 89 48 d1 a6 8d d4 2b 54 4e 8f b0
e310 2 e1 6b 1a 75 78 ea 21 91 13 c0 cf 78 a0 ab f3 35 c6 b4 c8 90 8d d7 45 e7
e329 c 5b a4 ba 52 10 64 f5 4a 50 b7 ec 46 22 15 23 84 30 81 5c df 61 5a 8f 67
e342 c4 63 57 6d f7 26 92 a3 1f e5 3 a5 0 54 41 8 48 7c 26 90 33 82 9c 91 b0
e35b ab 78 5d df 99 e0 b9 fc 5 36 ac d9 49 91 ab 20 a2 63 48 89 ce 5c 60 64 f0
e374 63 d9 a8 38 3b d3 e6 4c 8c 23 34 4e 20 51 93 5e 6d b4 7a 22 9b 4c f2 d3
e38c c4 f8 3 6f 47 40 f4 f8 45 9b 83 f3 83 6 31 d0 0 17 82 83 dc 67 f9 62 77
e3a5 90 3b d9 ec f3 55 96 b8 d9 db 79 55 f1 e5 8c 5e f2 e5 2e b0 b 6e e2 81 25
e3be 93 8e b5 dd 5b 46 f9 af ed 6 12 cf c9 1d f0 f7 3b 16 2d c6 58 73 8d e9 5f
e3d7 fd 5a b6 a1 94 4d 1a 8 ff eb b7 6 80 c7 86 83 b6 b9 fd 1c e0 c c3 2e a0
e3f0 2f b 3e 3 6b 29 e1 27 85 1c ea 6d df b3 a3 ed 65 4a 9a 59 3b 54 e 4b ae
e409 9e 27 f0 4d 3b c 4c 46 b7 e5 57 1b 1f 1f bb 80 86 f5 b7 ef 73 52 bf 2c c7
e422 ed a b7 81 2 f3 90 3e ee cc 6c eb f 38 1 6c 68 b1 d 45 78 b2 f f6 83 b0
e43c c4 33 df b1 d1 91 98 1e 81 a5 e2 59 9f f4 8c b6 72 8 a7 8c f6 e a3 b2 1f
e455 d9 d3 23 f0 7c 5e 5f 68 61 8b 45 da 1d 91 ec 8d 4e ea 1a 38 85 94 aa ac
e46d f2 4 f6 c4 e5 92 8e 9a 4e 83 e1 73 e8 cf 2a 5c 2b 7e f1 30 2 8a e6 28 1a
e486 3b ce bc 96 aa 7f eb 87 cd 8b 96 2d 9 59 7a a0 1a 43 62 9a 9e 4f ff 8e d9
e49f ce d6 a4 70 79 cd 65 fa 2e 92 14 29 f7 6c 74 4b 49 60 80 bb ff 41 bb 2d
e4b7 60 33 3f 98 77 9a 1 ee a6 a3 da bc ba e9 f3 72 f4 7c c3 59 2 a6 44 a4 c8
e4d0 c8 54 93 ce bd 69 bb b9 43 21 2c c4 ea 4a 5c 3f 75 60 f2 b4 91 ca 9 82 e3
e4e9 a e9 a6 20 b9 76 50 ed 47 e9 fe 6d 41 34 13 2f 28 2f 4e f4 da e 3c 78 6c
e502 b1 79 87 45 98 a4 d4 c3 b3 29 c2 4a 8b ed a6 54 e2 1b 31 62 60 ff 2c 1d
e51a 21 0 15 b2 4e 5c c 2 d 83 fa a2 f3 8a 5 12 72 4a c7 44 7c 91 d4 be b a f2
e535 70 52 fb b4 a2 df 89 de ff c4 96 73 c9 c ed d3 c9 8e 5c dc 8e d1 3b de 8c
e54e 53 a2 8b f9 e9 91 dd d6 df 6e 74 d1 dd 34 60 8f 9e 32 7f 3b ec 79 a3 83
e566 45 78 b4 2f 1c 50 7b 7a 97 b0 9d 2d c dd 8a 26 cd 7d 8c 4c 5a 8a 4c f9 a4
e57f 11 f9 2c 6c 92 e9 b5 cb 56 89 8c be f6 64 fa 25 43 fa 6f e2 c8 3a 18 a8
e597 f0 e9 f4 c2 86 e6 2b 44 67 4a b9 34 9 ed 5f 33 42 62 d4 8a 1e 5b 31 67 cd
e5b0 3d 71 6d 83 fd 36 20 69 ea 1 c3 e6 e6 de 99 aa 7 11 5b 59 8a 1f 43 83 52
e5c9 ea 5d 8c 6a 69 c7 3 eb 4e 3b 88 a5 5f b1 6e 27 5f 3 5c 28 c 9b 6c c3 f8
e5e2 e5 b9 d6 11 d6 8b fa 5c 8 c7 1 eb 45 db f3 6c 9f 16 46 61 51 ed df f bb
e5fb c0 c4 1e 64 68 98 4 79 30 94 72 df d4 cd 1f 7f 72 c6 82 2e 79 47 4e 8c 4b
e614 a2 c7 e2 36 df 76 fd a4 b6 4e db 96 40 3b 8b b5 d4 85 64 c6 0 2c ad 9d 27
e62d 14 99 82 4b bc 9 fa 94 b5 db 7c 98 eb b 13 a7 b0 79 1d 7e c5 45 aa 20 49
e646 be ff 9d 64 0 5d c ec 6 5 ad f2 38 6b ed 7a d6 b2 c7 2e 6a a6 12 4b ff 55
e660 20 3b a 77 f b9 0 9d 57 4a ad ce a4 d3 ff 1 4f fb 53 54 88 f 1 ed 4b 56
e67a 15 c8 dc 28 bf f2 72 d4 10 1f 99 42 69 9e 78 e2 47 82 93 31 d0 2d be 9f
e692 93 93 9a 1b 80 c0 10 c 53 78 a0 26 2a 96 4f 74 4b 16 c7 9c 8d ad ac fb 16
e6ab 15 c6 fd c9 a4 14 48 62 47 20 c9 41 ed 61 f8 9b f8 ff ba 39 50 65 87 ee
e6c3 bd ce 95 c0 fb a5 7e d8 cd 27 fd 2c 74 3 c1 1b 89 b9 51 d5 e3 da ef 9e 6
e6dc f0 aa a9 a7 fb 87 4c 5d cd ff 65 36 8c 73 6f 9 c6 78 9a b6 77 db df 81 68
e6f5 3b b8 ae 5d e1 af d4 e6 66 8c d6 a4 83 9f 37 3c 1 dc a2 a6 57 c2 20 1b 90
e70e 75 df cd a5 62 a5 36 79 fb 35 8a 9b b0 a0 a5 c3 37 6f 80 72 bc 52 30 8d
e726 9f 7a 64 d3 7 41 45 d8 68 97 f2 aa 1c a1 6c 7c 9d 32 7d ad 15 b1 53 e3 33
e73f 8a ed e9 49 d4 cf dc 96 22 37 36 11 9d 7f f0 4d e0 62 31 b1 c7 69 c4 79
e757 ac 20 1 e8 3c 6a 8c 32 cb 52 63 36 68 f4 10 2b 9c 21 4f df 5d 60 92 39 91
e770 e2 f9 c9 7d ca 48 3 3f 21 dd 6c f 23 2e 61 3a 9f ba c3 f9 4e 7 ea ed ef
e789 71 4a 72 3a ed 23 3d 77 b5 ed d5 1d f6 a4 99 fa ef 98 dd 2 98 80 b6 7c a3
e7a2 62 96 7b 8e bf 7b 81 9f 9a ce 3f 12 40 2e 25 db 84 16 dd 2e 86 f f4 b2 7e
e7bb 5e b4 14 6a f3 29 b1 a4 57 d5 a8 17 6f 87 a4 74 5b 9b 17 79 f1 ec 33 c8
e7d3 f0 1d b2 7e a8 4d 95 7f 5f 9 d5 1a 5a 45 f4 41 c6 d 3f eb 66 2a c0 e8 5b
e7ec 3c bd 50 ad f1 53 9d 2e 45 9a d8 7d 2c 17 a8 6e 15 48 13 39 53 ed 3d 78
e804 ad f 3a 65 a3 3e 2e fa ca 7 94 4a 1f b4 d8 7e 47 8a 8e de e7 7e 34 c1 69
e81d 7f 6a aa 66 58 18 31 24 72 13 22 34 8a 56 36 87 df c2 d 8e 3f 71 a2 5f 25
e836 8b 8d 4 78 fd c9 45 d1 55 79 c1 9f 13 84 1b c8 5 db 95 d0 7c 64 96 20 51
e84f c4 e0 5e ee 47 8a 11 ac fb 9 e0 bb 40 db 86 84 12 93 b9 c9 f2 9c 63 47 c9
e868 eb ad 1 3e fa 6d 3f a 64 5b 58 56 27 f ca 5d e0 30 bc 3e 10 5d ec 17 28
e881 85 5 51 8e 95 a3 94 3a a8 f1 96 f2 f 29 5c 97 dc 47 db 9d 6c 63 e8 e7 f0
e89a e4 a 70 f8 f1 47 54 d3 2d 32 7c ef bb 9a b4 1b 0 2b d6 dd e7 30 b a2 75
e8b3 c7 f5 d0 31 d7 d2 8a b0 ac 1c 6d 60 3a f7 c2 db 1e 6d 7 f6 8f 35 88 e5 7f
e8cc 3c 26 81 34 a0 32 a3 25 18 6e 73 b2 a0 f1 cb 86 61 e7 65 8b 76 98 19 6f
e8e4 c0 62 9b a3 cc 18 5e 40 12 97 2b d0 15 79 de 19 ea df 7a 59 2f b5 d7 39
e8fc 52 e2 6 f1 3 a0 a5 d9 1b 88 93 4d 30 c8 2d f5 db 55 ea 85 6f a 3f dc bd
e915 57 15 6a a3 a3 3e 8e ad 2d da a0 ca 75 7c 57 8b c5 cb b 1d 2c 8e c6 96 2e
e92e 6d 59 83 7d 64 72 ca 80 2e 6 a4 ff f6 f2 d5 1e 7 4 ba 34 6e 9 86 25 aa 4e
e948 e0 7f f5 32 47 3e 7c 43 d8 28 c4 1c 11 1d bd 33 3 b5 ca 13 43 34 2 b1 a0
e961 57 ed 9d 3c 23 d4 45 b2 6e 81 6e af 3e 67 90 be 59 a5 45 34 53 46 85 d1
e979 25 ee 7d cb a4 db 12 c3 aa 17 61 9a fb 66 40 76 fe 3a 69 96 c0 91 14 a7
e991 5d cc 9f f6 73 59 ee b8 55 97 20 26 ff 99 ec 72 41 b5 27 21 6e ae 8a d0
e9a9 e4 d3 da 6f c4 53 c5 f8 b3 a7 a1 5d 66 93 d8 b1 89 40 23 92 c0 90 fb cb
e9c1 e7 6b 4e 51 0 5d 57 f7 cd 1 e2 88 bf 44 9f ef c4 33 ce fa 46 46 a1 86 b
e9da 7a 84 66 66 b9 2 ec 10 c6 a1 d4 c1 18 33 b1 d1 2 18 ad 2f 53 e4 b9 33 59
e9f3 be 3c af 80 4c 8a d5 76 c 3b a7 e2 97 94 15 75 4d 17 d5 97 cf f9 4a d0 6e
ea0c bb 27 20 fc f1 f5 9 a8 df 4d b6 5d f0 1d 69 3b 76 35 82 a4 f3 56 64 39 5b
ea25 6b b3 7 e7 5 8e 82 11 22 a8 1a db c8 3e 67 4a 3 7e 72 51 d6 3d 1a 1c f6
ea3e b8 da 4b 18 8a 15 9d d0 a4 84 96 3e cd 3 f9 3a 30 f3 fb 8f 6e 2 73 eb 52
ea57 93 95 cf dc 6f 48 fb ab d2 a9 70 b4 e2 23 8d 72 86 a8 fa 78 98 1d c5 fe
ea6f 8a 51 88 2b b7 58 b0 ca ae 40 8a 33 32 75 1 6 c0 d4 b7 da 2a a7 bb ad f7
ea88 48 98 5a bc d3 d1 e6 16 97 c3 80 ab 73 ac 32 11 41 1f d 5d aa 0 dc d9 6e
eaa1 fc 30 6 ef 11 60 27 a2 5f eb 5f b9 35 8 23 4 be 10 c0 85 3e 55 b3 82 fd
eaba f7 c3 24 9f 2d 83 94 32 36 de ff 7c 87 7f 4a 80 7 2 23 cf a4 52 eb 3e 19
ead3 a0 b4 a 94 1a 40 58 d9 16 6d c0 64 c4 69 ed 60 46 65 cb df 58 38 0 51 c3
eaec ad a0 37 e4 cf ab f7 6c 24 7d 9 48 65 4a 9f 91 ad 1c 79 a4 a1 78 55 c e8
eb05 44 5b d ef 51 bd ea 2d a7 42 57 ab 3a 4f 2 b 3 19 6a 4d 72 76 5c 97 0 6c
eb1f c5 5d bc dd e7 81 cf 8d 34 38 50 3c 98 58 cc 41 aa 99 90 af fe 4e 96 77
eb37 ed 54 18 ce 2c d1 5d 34 cb 79 50 ff 28 96 44 e0 51 64 6 a8 b7 6e 8c 62 c4
eb50 66 95 81 4f 8c f6 26 ba ea 5d d2 79 b1 e4 e9 29 fc a fd b3 85 8c e6 52 dd
eb69 33 bd 5d c7 39 ef 6 ef 9e a6 6a 61 9c 9f d5 54 b4 fa a1 d4 10 9b ff 7e 33
eb82 11 52 99 c7 26 6e a1 36 8a ad ee 48 7a 2c 7f d5 b7 27 8a 6b 37 c 71 39 85
eb9b 9c ba a8 a 17 b9 d0 51 56 95 c2 3b 5 a7 31 c5 8b 5c 95 6e 4c 89 6f 17 ef
ebb4 d4 5a a 77 65 e1 49 b2 e8 72 ac 3c f0 6b 71 fa 3 c7 ca fc ad f9 55 22 ec
ebcd 58 2f 1c fa 29 cf 73 b4 ad 51 5c f8 66 70 59 5d 70 3e d1 3f c4 eb ec f1
ebe5 7 78 6a 93 67 9f 44 fc cb 5b 95 ff 74 c0 b7 42 77 26 c9 aa 8c ed 39 a2 db
ebfe 9c b3 eb 3d 4a 1e 9b 89 e4 d8 a8 27 74 ef a3 ed a5 24 5d bb ab d0 fe a1
ec16 29 ab df 75 a a6 23 0 cc f1 14 72 9b 1a 55 7e e5 d1 da 98 dc c4 cf ab 34
ec2f ba 8d de 4a 59 6 13 dd d8 44 3c e bb 56 95 ae 97 e2 3b 49 e5 9a 6b a2 53
ec48 c1 33 35 24 1b 33 17 c3 8a 8c 12 3d 3d 4e 5b 75 22 30 67 4f a0 5d 3a 78
ec60 88 a 11 35 7 b1 77 42 32 a8 c3 bb 20 fb 98 5 d6 ac e7 3a 63 35 90 93 9e
ec79 44 24 2e 1b d7 8c aa 29 53 4d d9 ab eb e6 1 56 c4 fd 54 a3 bd 14 5b b0 8f
ec92 ce be 23 24 93 c4 48 18 a3 e7 4 5 4b 78 cc 79 dd 3 56 a4 ed dd 5f 98 41
ecab 1b 68 4c c1 bb 41 c2 1e 3e 94 8e ef 28 1e b 76 e 4f 36 b1 c 6e e2 18 17
ecc4 20 fc 35 40 1f e4 6d a4 18 bb bc d5 9e ea 85 86 af af 63 d4 13 66 92 c4
ecdc 2b 69 84 ca 23 2b d3 66 81 6b 81 73 26 4 85 36 21 4c 49 44 75 64 39 16 3c
ecf5 ed e0 6d 44 75 45 30 43 68 c0 78 fc d0 17 b eb 81 3e c3 ba 1b f 4d ae c5
ed0e 55 1f c 39 12 5d 8 65 f1 34 59 de dd 98 56 17 43 38 66 49 9a eb db c1 87
ed27 51 38 cc b7 5f 98 fd 43 be 2d bb 74 f3 f8 f2 36 3d a4 34 a5 7e d2 26 cc
ed3f 84 1f ea 56 f0 80 18 69 4d 88 41 fc 56 fd 41 3b 1e e 9 27 4f f6 3b 62 4e
ed58 5a 1b 2a 4e 85 8c b2 4f 79 ef 59 4e e 73 3d bd c4 ca 60 e7 4a 47 90 b5 8
ed71 2a f0 4e dc ba 66 ae 48 2b 31 73 a2 11 c 32 ff 54 14 77 6b d6 58 4b bf ee
ed8a f6 6a bc dd 1 88 d da a9 f 81 24 c5 f8 72 9a db d5 c8 2a 80 a9 16 d7 c6
eda3 b1 91 c0 a9 95 40 b5 b3 a8 2a 28 c6 92 16 ab 54 7d f8 93 5f 3a 17 c8 45
edbb a9 f0 e0 71 23 76 53 38 a5 a1 cc d4 f1 f2 3c 2b 46 43 a1 d5 ba e d7 19 7a
edd4 c2 e1 8f 67 1d d 98 9d a1 79 9d 1b 20 7f 4d e7 bf f9 ff fe aa 28 ab 8f c
eded 4d 50 33 e3 26 fc 3c 3 3a 2b 26 12 f7 1 8f ee 97 4c e6 6 2b d9 1f a1 4a
ee06 77 44 d4 8b b7 3e 5e 2d 18 c3 54 68 99 a8 8d 92 96 9e 9d ab 33 38 ff b8
ee1e ee 78 c6 7b b5 84 95 d3 6 27 ae 5d 27 38 a 38 8e f0 1 a5 96 4b d7 9b 42
ee37 e5 6f 57 75 4c e9 78 2d 5b ec b6 d2 29 e2 a8 92 95 9c 65 2a 3e bf 8d e0
ee4f bf b3 ac c8 e 7e 13 af 88 26 7d 48 5a c7 39 29 36 d2 90 e8 3b 3 d0 61 1a
ee68 d2 e8 a8 f ba 8e a1 9f df 12 ab 54 7 23 98 de 62 af 4c 7e d4 fb 6b 2 6e
ee81 40 40 37 b7 73 f2 d8 81 be 29 d2 99 c0 73 25 1a 3c 92 75 6e bd d7 79 79
ee99 4 14 c0 4e 99 57 66 93 74 ec b0 29 7c df 61 b0 3 3a d1 c3 fa a4 f7 f 9f
eeb2 d3 f 0 b9 2a 5a 3a c5 88 25 b8 b9 cc 82 3 57 3a e1 7b 51 75 70 a6 74 1a
eecb ca cb 3 18 68 ca 77 fe 1b ad cd 68 7f 36 85 fc b7 4f a0 11 da 69 fa 79 87
eee4 d6 b9 21 dd 3e 70 db dc 84 d4 6e d1 20 4 af f6 32 a2 8e d 54 25 fe 7 54
eefd e 7a 74 4b a0 4b f7 f4 e8 74 22 e9 98 70 fb 25 2e f4 64 57 75 28 85 45 53
ef16 3a 2e e2 3c 54 36 e9 29 6 67 59 43 10 7e c1 49 cd 5e f9 97 a 58 5f 8a 11
ef2f 4f 3d 9a e2 2b 22 58 fa be fc 69 91 7a 8c 3f 77 9f c9 3b 54 26 23 93 b3
ef47 85 de ae f5 bd c5 47 4c c4 cd 5e ad bc 8f ba 31 f6 e4 70 fb 6e a7 96 d5
ef5f ad 10 80 39 43 97 4f 10 cc 1b 8f 8d cd 4c 63 4 d8 1e 85 70 41 6c a8 eb df
ef78 7f 36 c5 60 a7 12 9 16 73 fe 75 3a 2d 40 29 7d aa a 5c 2 29 23 0 a6 e5 6b
ef92 24 6d 9b 20 e5 7 cb 40 b0 38 59 9c a7 69 6a 70 d3 38 ef e2 b2 11 3e ea 2a
efab f9 2b 2e 43 1d 65 cf d6 1b ef 83 5a 5f e6 c5 62 16 ca 5e 4c a6 39 e4 53
efc3 2d 23 d2 5e 7e 15 54 8a 8 b7 3d bb 88 59 b9 9e a2 7c 42 1f a2 77 3c 5b 9
efdc 6d fa 8f 21 46 1a 3e ed ce 49 56 1d 29 2d 70 3 a7 6f 75 ac 1 87 ff 27 86
eff5 73 49 28 85 2d 97 7a 84 e 37 3d 86 10 21 4c e2 74 62 6b 51 70 8f 15 72 f3
e100e 81 b2 a9 9d 8a 63 ad 1b d5 aa 8a dc 96 3c e7 47 16 51 fc 87 50 9 b7 60
e1026 29 33 52 fb b0 df 70 c5 65 4a 60 3b c d7 a8 29 47 51 f7 8a 77 f3 99 3f
e103e 38 16 60 de 68 27 b2 24 7 62 a2 fd 40 86 b2 75 c3 3c 2f 3d fa 9 d9 a9 9a
e1057 71 3c ce 46 94 0 f9 bc 46 7f b8 2e 85 7f 7d d3 8d ea b4 63 81 59 10 bb
e106f 57 d0 b6 ab e1 83 74 1e 25 d5 73 78 18 b1 60 62 c f4 76 8d 17 d5 ed 23
e1087 23 e4 f6 32 64 5a 61 9 63 f6 92 57 d5 29 40 d6 3b ba 63 72 18 0 25 1b 7
e10a0 ee 7f 25 4a fa 6 74 19 46 e3 e8 89 7a c6 56 54 a7 43 13 4e bf 97 a5 6f
e10b8 99 2f ac 33 4d fa 58 3a 5a a a4 1a 74 62 c8 4f 3b 78 9 d7 ee 7e ee 2d 69
e10d1 30 40 ea 47 82 3b 85 8e 3 23 8f 74 4e 8 35 ab 74 4 1 57 d5 85 b1 6b 1e
e10ea f4 7d 1e d2 1e b3 fe f3 12 10 32 39 51 48 2d 6f e5 d3 a3 8c 8 8g
rcx
fff
n1.com
w
q
花費一天一夜寫了一個巨複雜的代碼,測試我同時發微信的三個女生跟我交往的可能性。
裡面涵蓋了我苦心計算的各種友好度估分,回復微信長度,回復等待時間,有沒有圖片,語音,女孩主動程度,
每個都有分值。
以及我發送微信過去,預計收到的微信長度,等待時間。
我還導出微信,整理了一個我的經典套話100句。
供我沒話題說的時候隨機選擇。
經過我一禮拜的實驗修正,使得女生回復我的時間,內容長度誤差在10%以內。
還可以導出一堆EXCEL圖表供我分析。
我每天晚上樂此不疲的和她們三個聊天做實驗修改我的參數。
裡面一個女孩的對我友好度逐漸遠超其他女孩。
超過我設計的100分上限。果斷約出來強行牽手
(雖然是程序員也知道表白死,堅決不表白,直接拉手)
最後追到這個小姑娘,完全符合我的預算。
哥那段代碼絕對壯絕古今。
我認為我那段代碼的最終版已經把追女孩上升到一個模式化。
完全可預計結果。我簡直無敵了。
後面因追到女生後一高興刪除了,後面分手懶得再寫了。
分手原因是我加班太多。她家人喜歡公務員。。。
long long ago;
using ak47;
double kill;
Y組合子可以允許你不使用遞歸語法定義遞歸函數,用CoffeeScript實現一個就長這樣:
Y = (f) -&> #the Y combinator
((x) -&> (x x)) ((x) -&> (f ((y) -&> ((x x) y))))
然後,你可以用它來定義斐波那契數列:
fib = Y (f) -&>
(n) -&>
if n &< 2 then n else f(n-1) + f(n-2)
然後,你可以列印出前10個斐波那契數試試:
log -&> list map(fib) range(10)
這裡可以試玩哦(注意不要列印超過30個,因為這是指數複雜度的!):Try Coffee
這段代碼有意思的地方在於:Y和fib兩個函數的定義都沒有使用遞歸語法,卻就這麼自然而然地定義出了遞歸函數,所以你可以從中感受到兩件事情:
1,遞歸是一件如此普遍的事情,以至於編程語言根本不用刻意實現這樣的語法,它就自然而然地存在了
2,人類的智慧真是深不可測(以及FP的水好深。。。)
所以你知道為什麼Paul Graham要把自己的公司叫Y Combinator了吧,現在google這個詞搜到的都是他的公司,取這名字是不是很賤!
當然lambda演算里還有很多有趣的東西,Y Combinator僅僅是冰山一角 :)
參見:不動點組合子
Mike"s World-O-Programming
0 引言
這個題我已經留坑很久很久了,但是最近忙於趕一篇論文,5月31日是投稿截止日期。今天終於是把論文寫完了,於是準備把留的坑都填一填。
前輩們已經把很多經典的、讓人眼前一亮的代碼展示出來了。我雖然不是碼農,但也經常會看一些奇怪的代碼。這裡我列舉五個我覺得最有趣、最好玩的代碼給大家。這些代碼一部分已經在之間的回答給出了,但為了Self-Contained,我也把這些已經給出的代碼再次展示出來,並給出原始答案的鏈接、作者以及出處。
前方多圖預警,超長答案預警,建議在WiFi環境下觀看。
=============================
1. 真正改變世界的演算法:向傑出的數學和計算機科學家們致敬
真正改變世界的是那些依託於數學的,真正高大上的代碼。知乎er @張狗狗提到的「支配世界的10個演算法」(The real 10 algorithms that dominate our world,The real 10 algorithms that dominate our world)就是10個這類典型的演算法。讓我驚喜的是,這10個演算法中竟然有4個與密碼學相關(RSA演算法,安全Hash演算法,整數分解演算法,隨機數生成演算法)。難道說真正掌控世界的是密碼學嘛(笑)。作為一個密碼學研究者,我感覺很激動啊!具體的內容 知乎er@張狗狗已經回答的非常詳細了,請大家參考他的答案(有沒有一段代碼,讓你覺得人類的智慧也可以璀璨無比? - 張狗狗的回答)。作為致敬,我僅列出這10個演算法,並請大家一起像這些傑出的科學家們致敬。
- 三種排序演算法。歸併排序(Mergesort),提出者:約翰·馮·諾尼曼(John von Neumann),現代計算機創始人;快速排序(Quicksort),提出者:托尼·霍爾(Tony Hoare),1980年圖靈獎獲得者;堆排序(Heapsort),基於計算機基本數據結構堆(Heap)的排序方法。
- 傅里葉變換(Fourier Transform),提出者:約瑟夫·傅立葉(Joseph Fourier),溫室效應的發現者,名字被刻在埃菲爾鐵塔的72位法國科學家與工程師的其中一位。小行星10101號以傅里葉命名;快速傅里葉變換(Fast Fourier Transform),原始提出者:約翰·卡爾·弗里德里希·高斯(Carolus Fridericus Gauss),歷史上最重要的數學家之一,被譽為「數學王子」。
- Dijkstra最短路徑演算法(Dijkstra Shortest Path Algorithm)。提出者:艾茲赫爾·戴克斯特拉(Edsger Wybe Dijkstra),1972年圖靈獎獲得者。
- RSA公鑰密碼體制(RSA Public Key Cryptosystem)。提出者:羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)。他們為2002年圖靈獎獲得者。
- 安全Hash演算法(Secure Hash Algorithm)。一些經典的安全Hash演算法及其提出者們。MD5演算法,提出者:羅納德·李維斯特(Ron Rivest),2002年圖靈獎獲得者。SHA家族(SHA-1,SHA-224,SHA-256,SHA-384,SHA-512),提出者:美國國家安全局(National Security Agency)。值得注意的是,MD5以及SHA-1演算法在2005年由中國密碼學家王小雲、殷益群、於紅波從理論上破解。王小雲因「國際通用Hash函數的破解」獲頒陳嘉庚科學獎信息技術科學獎。
- 整數分解(Integer Factorization)。該問題已可以在量子計算機上以多項式複雜度解決,被稱為秀爾演算法(Shor Algorithm),提出者:彼得·威廉·秀爾(Peter Williston Shor),1998年奈望林納獎(Nevanlinna Prize,計算機科學的數學方面重要貢獻獎,每4年一屆,得獎者在獲獎當年不得大於40歲)獲得者。
- 鏈接分析(Link Analysis)。提出者:Gabriel Pinski、Francis Narin。
- 比例積分微分演算法(Proportional Integral Derivative Algorithm)。提出者:尼古拉斯·米諾爾斯基(Nicolas Minorsky)。
- 數據壓縮演算法(Data Compression Algorithms)。包括數據壓縮、圖像壓縮等等。
- 隨機數生成器(Random Number Generation)。
=============================
2. 數學拯救計算機科學演算法:Quake III源代碼中的玄機
很多知乎er們都提到了一個神奇的數0x5f3759df( @高城 , @陸天培 等)。追溯這個數的來源,我們就要談到一個經典遊戲Quick III了。Quick III從現在的眼光看來實在不是一個很精細的遊戲。但是在當時,Quick III的畫質簡直是狂暴酷炫掉渣天。在Quick系列,Doom系列,及其3D引擎出現之前,有誰能想到計算機也可以顯示如此神奇的3D效果呢?
這個3D引擎的開發者是約翰·卡馬克(John Carmack)。他是美國電子遊戲程序員,ID Software(一個著名遊戲開發公司)的創始人之一。他在1999年,被時代雜誌評選為科技領域50大影響力人物榜單,並列名列第10位。為表彰他的在電子遊戲和電視遊戲領域所作出的傑出貢獻,卡馬克稱為第四位進入互動藝術和科學學院(The Academy of Interactive Arts and Science)名人堂的人物。我們來看看其餘人物的名字吧(美國互動藝術與科學學院(AIAS)名人堂_smile_新浪博客):
- 宮本茂:任天堂公司,《超級馬里奧兄弟》的創始人。
- 丹妮·邦頓·貝瑞:名人堂遊戲《M·U·L·E》的製作人。
- 席德·梅爾:FiraxisGames公司,《文明》系列的製作人。
- 鈴木裕:世嘉公司,眾多街機遊戲的製作人。
- 威爾·賴特:Maxis公司,《模擬城市》系列的製作人。
- 坂口博信:Square Enix公司,《最終幻想》系列的製作人。
- 理查德·加略特:NCsoft / DestinationGames公司,《創世紀》系列的製作人。
- 彼得·莫利紐克斯:牛蛙公司,《上帝也瘋狂》,《主題公園》,《主題醫院》,《地牢守護者》製作人。
- 特里普·霍金斯:3DO公司,《魔法門》系列,《英雄無敵》系列,《玩具兵》系列製作人。
- 麥克:暴雪公司,《魔獸世界》製作人。
卡馬克在計算機領域最重要的貢獻是,極大限度地壓榨計算機計算性能,實現了一系列令人驚嘆的數學函數。其中最知名的就是很多知乎er們提到的開平方取倒數演算法,這個演算法的基本原理是牛頓迭代法。原文出處來自一個Sqrt函數引發的血案。
float Q_rsqrt( float number )
{
long i;
float x2, y;
const float threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
i = * ( long * ) y;
i = 0x5f3759df - ( i &>&> 1 ); // what the fuck?
y = * ( float * ) i;
y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed
#ifndef Q3_VM
#ifdef __linux__
assert( !isnan(y) ); // bk010122 - FPE?
#endif
#endif
return y;
}
看看這段代碼吧,只用了2次疊代,而且其實根本上就沒用疊代,因為算一次直接就得到結果了。這個函數的效率比C庫函數中執行sqrt()函數再取倒數要快4倍。
為什麼能得到如此令人驚嘆的效果呢?這段代碼最讓人費解的就是下面這行代碼:
i = 0x5f3759df - ( i &>&> 1 ); // what the fuck?
這個0x5f3759df是個什麼鬼?牛頓迭代法的原理是先猜測一個值,然後從這個值開始進行疊代。因此,猜測的值越准,疊代的次數越少。卡馬克選了0x5f3759df這個值作為猜測的結果,再加上後面的移位演算法,得到的y非常接近1/sqrt(n)。這樣,我們只需要2次牛頓迭代法就可以達到我們所需要的精度。
普渡大學的數學家Chris Lomont看了以後覺得有趣,決定要研究一下卡馬克弄出來的這個猜測值有什麼奧秘。在精心研究之後,Lomont從理論上也推導出一個最佳猜測值,和卡馬克的數字非常接近, 0x5f37642f。Lomont計算出結果以後非常滿意,於是拿自己計算出的起始值和卡馬克的神秘數字做比賽,看看誰的數字能夠更快更精確的求得平方根。結果是卡馬克贏了...
Lomont怒了,採用暴力方法一個數字一個數字試過來,終於找到一個比卡馬克數字要好上那麼一丁點的數字,雖然實際上這兩個數字所產生的結果非常近似,這個暴力得出的數字是0x5f375a86。
Lomont為此寫下一篇論文,"Fast Inverse Square Root"(這裡原文給出的地址有誤,論文的地址為http://www.files.sauliaus.info/InvSqrt.pdf)。
感謝開源GPL協議,Quick III的源代碼已經公開,我們可以目睹一下Quick III的風采了。源代碼下載地址為:ftp://ftp.idsoftware.com/idstuff/source/quake3-1.32b-source.zip。這個地址需要翻牆才能下載。而那個傳說中的代碼,位於game/code/q_math.c中。
=============================
3. 二進位的神奇應用:基於位運算的代碼系列
看到了Quick III中神奇的代碼,想必知乎er們也對二進位和位運算的神奇有了一些感覺了。我最開始覺得二進位運算很有趣,是因為Leetcode中的一道題:Single Number(Single Number)。題目如下:
Given an array of integers, every element appears twice except for one. Find that single one.
問題在於,如何在線性複雜度下實現呢?這裡就要用到與或運算了。
二進位運算還有哪些神奇的應用呢?Stanford的一個Ph.D學生Sean Eron Anderson(Sean Anderson)自己維護了一個網站,裡面列舉了一大堆二進位運算的神奇應用,鏈接為:Bit Twiddling Hacks。
我們來簡單看幾個運算:
1. 計算一個整數的符號:
int v; // we want to find the sign of v
int sign; // the result goes here
// CHAR_BIT is the number of bits per byte (normally 8).
sign = -(v &< 0); // if v &< 0 then -1, else 0.
// or, to avoid branching on CPUs with flag registers (IA32):
sign = -(int)((unsigned int)((int)v) &>&> (sizeof(int) * CHAR_BIT - 1));
// or, for one less instruction (but not portable):
sign = v &>&> (sizeof(int) * CHAR_BIT - 1);
2. 檢測兩個整數的符號是否一致:
int x, y; // input values to compare signs
bool f = ((x ^ y) &< 0); // true iff x and y have opposite signs
3. 計算一個整數的絕對值:
int v; // we want to find the absolute value of v
unsigned int r; // the result goes here
int const mask = v &>&> sizeof(int) * CHAR_BIT - 1;
r = (v + mask) ^ mask;
@高城還提到了Google Code上面的一個基於浮點數標準的快速演算法庫,裡面也用到了各種二進位運算,鏈接為:fastapprox -
Fast approximate functions。
=============================
4. 能不能把代碼寫的夠混亂:世界混亂C代碼大賽
後面的幾個就是比較好玩的東西了。首先我們來看看計算機學科的怪胎們是怎麼玩壞C語言的。 @毛草提到了一個神奇的代碼,通過計算代碼本身的面積,來計算圓周率的近似值。這個代碼來自世界混亂C代碼大賽(International Obfuscated C Code Contest,IOCCC)。這個大賽的宗旨是,在C語言本身可以執行的條件下,看誰能寫出最有創意的最讓人難以理解的C語言代碼。代碼的長度要求限制在4kb以內。大賽的官方鏈接為:The International Obfuscated C Code Contest。
第23屆IOCCC競賽已經在2014年10月27日結束,但是我似乎找不到源代碼。我們來看看第22屆IOCCC競賽中的代碼中又沒有什麼好玩的東西吧。因為有些代碼知乎上顯示的不太好,我用截圖的形式給出。
Best Painting Tool(http://www.ioccc.org/2013/birken/hint.html)
Most Lazy SKLer (Most lazy SKIer)
Best Use of 1 Infinite Loop (Best use of 1 Infinite Loop)
下面是以前一些比較有趣的代碼:
2012,Most Elementray Use of C(Most elementary use of C)
2012,Most Functional (Most functional)
1998,Best of Show (Carl Banks" Blog: IOCCC Flight Simulator)
=============================
5. 數學也可以畫圖:用公式繪製任意圖形
還記得一直在電視上播放的百歲山廣告嗎?很多人都說看不懂那個廣告。其實那個廣告參考了1650年著名數學家笛卡爾與瑞典公主克莉絲汀相戀的故事。具體的故事我就不再贅述了。最後,笛卡爾寫給克莉絲汀的情書中出現了這樣的公式:
這個公式對應的幾何圖形為心形,是著名的「心形線」。笛卡爾用這樣一種方式,通過數學表達了對克莉絲汀的深深愛意。這封情書最後也被收錄到歐洲笛卡爾博物館中。
浪漫的故事到此為止,這引發了一個有趣的問題:我們能不能用數學公式,來構造任意幾何圖形呢?這個問題實際上是有解的。有人真的研究了這個問題,並給出了肯定的答案。鏈接如下:http://blog.wolfram.com/2013/05/17/making-formulas-for-everything-from-pi-to-the-pink-panther-to-sir-isaac-newton/。我們來看一看一些有趣的圖形吧~具體的生成演算法課參考上面給出的鏈接。
美國隊長曲線(Captain America-like curve)
檯燈曲線(Luxo Jr.like curve)
a^2 + b^2 = c^2
牛頓曲線
=============================
以上。
#define _ -F&<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f
",4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_
_-_-_-_
}
用一段形狀是圓形的程序,通過計算代碼本身的面積,計算圓周率的近似值
來源:International Obfuscated C Code Contest
http://www.ioccc.org/1988/westley.c
-----------------------------
解釋:每一行的第一個_會作為
執行。由於執行過程中F永遠小於0,所以-F&<0對每一行不成立。於是||左邊不成立,右邊的表達式--F& 執行。由於F一直小於0,--F&<0在本程序中永遠成立。所以右半部份不會被執行。也就是這一行指令只相當於執行--F。 因此,在本程序執行完畢後,--F的執行次數為_出現的次數,也就是該圓的面積(因為該程序的代碼布局),OO--的執行次數為該圓的直徑(因為每行執行一次)。 運行後輸入程序(記住字母大寫): 然後輸入命令: 即可求解斐波拉契數列。 再來一段我寫的空戰遊戲: WINXP下(或者DOSBOX: D-Fend Reloaded )在DOS窗口中運行DEBUG,然後把橫線下的內容複製、粘貼到DEBUG窗口中,回車就可以見到了。 -F &< 0 || --F&
--F &< 0 || --F &< OO--;
24行內實現 BASIC語言(老外寫的):#define O(b,f,u,s,c,a)b(){int o=f();switch(*p++){X u:_ o s b();X c:_ o a b();default:p--;_ o;}}
#define t(e,d,_,C)X e:f=fopen(B+d,_);C;fclose(f)
#define U(y,z)while(p=Q(s,y))*p++=z,*p=" "
#define N for(i=0;i&<11*R;i++)m[i]
#define I "%d %s
",i,m[i]
#define X ;break;case
#define _ return
#define R 999
typedef char*A;int*C,E[R],L[R],M[R],P[R],l,i,j;char B[R],F[2];A m[12*R],malloc
(),p,q,x,y,z,s,d,f,fopen();A Q(s,o)A s,o;{for(x=s;*x;x++){for(y=x,z=o;*z*y==
*z;y++)z++;if(z&>o!*z)_ x;}_ 0;}main(){m[11*R]="E";while(puts("Ok"),gets(B)
)switch(*B){X"R":C=E;l=1;for(i=0;i&
++;if(j1||!Q(" ",F))*d++=*s;s++;}*d--=j=0;if(B[1]!="=")switch(*B){X"E":l=-1
X"R":B[2]!="M"(l=*--C)X"I":B[1]=="N"?gets(p=B),P[*d]=S():(*(q=Q(B,"TH"))=0,p
=B+2,S()(p=q+4,l=S()-1))X"P":B[5]=="""?*d=0,puts(B+6):(p=B+5,printf("%d
",S
()))X"G":p=B+4,B[2]=="S"(*C++=l,p++),l=S()-1 X"F":*(q=Q(B,"TO"))=0;p=B+5;P[i
=B[3]]=S();p=q+2;M[i]=S();L[i]=l X"N":++P[*d]&<=M[*d](l=L[*d]);}else p=B+2,P[
*B]=S();l++;}X"L":N printf(I)X"N":N free(m[i]),m[i]=0 X"B":_ 0 t("S",5,"w",N
fprintf(f,I))t("O",4,"r",while(fgets(B,R,f))(*Q(B,"
")=0,G()))X 0:default:G()
;}_ 0;}G(){l=atoi(B);m[l]free(m[l]);(p=Q(B," "))?strcpy(m[l]=malloc(strlen(p
)),p+1):(m[l]=0,0);}O(S,J,"=",==,"#",!=)O(J,K,"&<",&<,"&>",&>)O(K,V,"$",&<=,"!",&>=)
O(V,W,"+",+,"-",-)O(W,Y,"*",*,"/",/)Y(){int o;_*p=="-"?p++,-Y():*p&>="0"*p&<=
"9"?strtol(p,p,0):*p=="("?p++,o=S(),p++,o:P[*p++];}
10 A=1
20 B=1
30 FOR I=1 TO 10 DO
40 C=A+B
50 PRINT A
60 A=B
70 B=C
80 NEXT I
90 END
RUN
--------------------------------------------------------------------
e100 e8 5f 0 e8 4c 1 e8 ed 0 b8 0 4c cd 20 f f 0 8 7 1 7 1 6 7 7 1 0 f 1 0 0
e11f 0 fe c2 cb c4 c1 8a d3 c5 df 8a cc c5 d8 8a da c6 cb d3 c3 c4 cd 86 8a
e137 c8 d3 8a d9 c1 d3 dd c3 c4 ce 99 9a 9a 9a ea c2 c5 de c7 cb c3 c6 84 c9
e14f c5 c7 a7 a0 0 87 97 8a ef f2 ec e5 f8 e9 ef 8a 97 87 0 66 60 b8 0 11 a3
e168 e 1 5 80 bb a3 16 1 5 0 1 a3 10 1 5 80 0 a3 12 1 5 10 2 a3 14 1 8b 3e 10
e185 1 fc b9 80 2 33 c0 f3 aa 1e 33 c0 8e d8 8e c0 be 24 0 66 ad 1f 66 a3 18
e19e 1 8c c8 66 c1 e0 10 b8 1d 2 bf 24 0 fa 66 ab b0 34 e6 43 b8 87 0 e6 40
e1b7 8a c4 e6 40 fb 66 33 c0 1e 7 b8 13 0 cd 10 be 7e 3 bb 0 0 8b 3e 16 1 ac
e1d1 3c c0 73 4 aa 43 eb 9 24 3f 50 ac 59 f3 aa 43 43 80 fb 9b 72 e9 33 c0 cd
e1ea 1a 81 e2 ff 7f 89 16 1c 1 66 61 c3 33 c0 8e c0 66 a1 18 1 bf 24 0 fa 66
e203 ab b0 34 e6 43 33 c0 e6 40 e6 40 fb 66 33 c0 b8 3 0 cd 10 1e 7 e8 4d 0
e21c c3 60 1e 6 8c c8 8e d8 8e c0 33 c0 e4 60 8b c8 83 e1 7f 8b 1e 10 1 3 d9
e235 24 80 f6 d0 c1 e8 7 88 7 e4 61 c 80 e6 61 24 7f e6 61 b0 20 e6 20 7 1f
e24e 61 cf c3 c3 60 b4 2 b7 0 ba d 0 cd 10 b3 3 be 54 1 e8 9 1 61 e8 b1 1 c3
e269 be 20 1 e8 fe 0 33 c0 cd 16 c3 60 8b 36 e 1 bf 40 1f b9 c0 5d fc b8 0 a0
e283 8e c0 f3 a5 e 7 61 c3 60 8b 3e e 1 b9 c0 5d e 7 33 c0 fc f3 ab 61 c3 c8
e29d 0 0 0 60 8b 4e 4 8b 56 6 8a 46 8 81 f9 40 1 73 1a 81 fa 96 0 73 14 8b 3e
e2b8 e 1 8b da c1 e2 8 c1 e3 6 3 da 3 d9 3 fb 88 5 61 c9 c3 c8 2 0 0 60 8b 1e
e2d4 16 1 ba 0 0 83 6e 4 8 83 6e 6 8 c7 46 fe f 0 b9 0 0 33 c0 8a 7 43 3c 0
e2f0 74 1e 50 8b 46 6 83 7e 8 0 74 4 3 c2 eb 3 3 46 fe 50 8b 46 4 3 c1 50 e8
e30b 8f ff 83 c4 6 41 83 f9 10 72 d3 ff 4e fe 42 83 fa 10 72 c7 8b 4e 4 8b 56
e324 6 61 c9 c3 c8 0 0 0 52 66 a1 1c 1 66 69 c0 35 4e 5a 1 66 40 66 a3 1c 1
e33e 66 c1 e8 10 66 25 ff 7f 0 0 99 f7 7e 4 8b c2 5a c9 c3 c8 0 0 0 8b 1e 12
e358 1 b9 20 0 b8 0 0 83 3f 0 74 7 83 c3 10 40 49 75 f4 c9 c3 fc ac 3c 0 74 a
e373 b4 e 34 aa 60 cd 10 61 eb f1 c3 c3 0 1d 19 c4 0 19 1d c1 c4 c7 0 c2 19
e38c c4 0 19 0 c1 c4 c4 0 c2 70 0 19 c1 c4 c2 28 1d c2 70 28 70 0 c3 70 c2 28
e3a6 c2 70 c2 28 c2 19 70 c2 28 c6 70 28 70 19 c2 28 c3 70 c2 28 19 28 c2 70
e3be c2 0 c2 70 19 c3 28 70 c3 28 19 28 70 c4 0 70 19 28 70 28 c3 70 28 19 70
e3d7 c6 0 1d 70 0 28 0 70 0 70 1d c7 0 1d 70 0 28 36 70 0 70 1d c7 0 1d c2 0
e3f2 28 36 70 c2 0 1d c9 0 28 70 19 c2 70 cb 0 28 70 19 c2 70 cb 0 28 c4 70
e40b cc 0 28 c2 70 cd 0 28 19 cf 0 70 c8 0 c8 32 0 0 56 57 c7 46 fe 9c 2 c7
e425 46 fc cd 2 c7 46 fa 28 3 c7 46 f8 51 3 c6 46 f1 1 c6 46 f0 0 c6 46 ef 0
e43f 66 c7 46 e8 0 0 0 0 c7 46 e2 a0 0 c7 46 e0 78 0 c7 46 d2 0 0 c7 46 ce 0
e45a 0 a1 10 1 89 46 ec a1 14 1 89 46 f6 a1 12 1 89 46 f4 c7 46 de 0 0 8b 76
e474 f6 eb 38 68 40 1 ff 56 fa 59 89 4 68 c8 0 ff 56 fa 59 5 ce ff 89 44 2 83
e48e 7e de 35 7d c c7 44 4 1 0 c7 44 6 17 0 eb a c7 44 4 2 0 c7 44 6 1c 0 ff
e4aa 46 de 83 c6 8 83 7e de 50 7c c2 e9 94 3 66 8b 46 e8 66 89 46 e4 eb 14 66
e4c3 60 33 c0 cd 1a 8b c1 66 c1 e0 10 8b c2 66 89 46 e4 66 61 66 8b 46 e4 66
e4db 2b 46 e8 66 83 f8 c 72 de 66 8b 46 e4 66 89 46 e8 b8 8b 2 ff d0 c7 46 de
e4f4 50 0 8b 76 f6 eb 36 8a 44 6 50 ff 74 2 ff 34 ff 56 fe 83 c4 6 8b 44 4 1
e50e 44 2 81 7c 2 96 0 7e 14 68 40 1 ff 56 fa 59 89 4 6a 3c ff 56 fa 59 f7 d8
e528 89 44 2 ff 4e de 83 c6 8 83 7e de 0 75 c4 8b 5e ec 80 7f 4b 0 74 f 83 6e
e542 e2 2 83 7e e2 0 7d 5 c7 46 e2 0 0 8b 5e ec 80 7f 4d 0 74 10 83 46 e2 2
e55c 81 7e e2 40 1 7e 5 c7 46 e2 40 1 8b 5e ec 80 7f 48 0 74 f 83 6e e0 3 83
e576 7e e0 0 7d 5 c7 46 e0 0 0 8b 5e ec 80 7f 50 0 74 10 83 46 e0 2 81 7e e0
e590 96 0 7e 5 c7 46 e0 96 0 8b 5e ec 80 7f 1 0 74 3 e9 b0 2 8b 5e ec 80 7f
e5aa 1d 0 74 33 80 7e f0 0 75 31 c6 46 f0 1 ff 56 f8 c1 e0 4 8b 7e f4 3 f8 80
e5c4 7e ef 2 7d 1c fe 46 ef c7 5 2 0 8b 46 e2 89 45 8 8b 46 e0 5 f7 ff 89 45
e5de a eb 4 c6 46 f0 0 c7 46 de 0 0 8b 7e f4 e9 a3 1 8b 45 8 89 46 d6 8b 45 a
e5f9 89 46 d4 8b 5 89 46 d0 3d 1 0 74 b 3d 2 0 75 3 e9 a7 0 e9 6b 1 83 7d 2 0
e615 74 6d 8b 46 d6 2b 46 e2 89 46 da 83 7e da 0 7d 5 f7 d8 89 46 da 8b 46 d4
e62e 2b 46 e0 89 46 d8 83 7e d8 0 7d 5 f7 d8 89 46 d8 83 7e da d 7d a 83 7e
e647 d8 d 7d 4 c6 46 f1 0 6a 2 ff 56 fa 59 40 1 46 d4 81 7e d4 a0 0 7e 5 c7
e661 46 d0 0 0 6a 8 ff 56 fa 59 b c0 75 25 8b 46 d6 3b 46 e2 7e 5 b8 ff ff eb
e67b 3 b8 1 0 1 46 d6 eb 10 ff 45 4 8b 45 4 3d 28 0 7e 5 c7 46 d0 0 0 8b 45 2
e697 8b 55 4 83 e2 1 b c2 75 3 e9 d8 0 6a 1 ff 76 d4 ff 76 d6 ff 56 fc 83 c4
e6b1 6 e9 c7 0 8b 46 d4 5 fb ff 89 46 dc eb 27 6a 9 ff 76 dc 8b 46 d6 5 fb ff
e6cb 50 ff 56 fe 83 c4 6 6a 9 ff 76 dc 8b 46 d6 5 3 0 50 ff 56 fe 83 c4 6 ff
e6e5 46 dc 8b 46 d4 5 5 0 3b 46 dc 7f ce 83 6e d4 4 83 7e d4 ec 7d 8 c7 46 d0
e6ff 0 0 fe 4e ef c7 46 dc 0 0 8b 46 f4 89 46 f2 eb 65 8b 5e f2 83 3f 1 75 56
e719 83 7f 2 1 75 50 83 7e d0 0 74 4a 8b 46 d6 2b 47 8 89 46 da 83 7e da 0 7d
e733 5 f7 d8 89 46 da 8b 5e f2 8b 46 d4 2b 47 a 89 46 d8 83 7e d8 0 7d 5 f7
e74c d8 89 46 d8 83 7e da f 7d 19 83 7e d8 f 7d 13 8b 5e f2 c7 47 2 0 0 c7 46
e766 d0 0 0 fe 4e ef ff 46 ce ff 46 dc 83 46 f2 10 83 7e dc 20 7c 95 8b 46 d6
e77f 89 45 8 8b 46 d4 89 45 a 8b 46 d0 89 5 ff 46 de 83 c7 10 83 7e de 20 7d
e798 3 e9 54 fe 6a 14 ff 56 fa 59 b c0 75 3b ff 56 f8 c1 e0 4 8b 56 f4 3 d0
e7b1 89 56 f2 8b 5e f2 c7 7 1 0 c7 47 2 1 0 c7 47 4 0 0 68 40 1 ff 56 fa 59
e7cc 8b 5e f2 89 47 8 6a a ff 56 fa 59 5 ec ff 8b 5e f2 89 47 a b8 96 0 2b 46
e7e6 ce 89 46 d4 83 7e d4 0 7d 5 c7 46 d4 0 0 8b 46 d4 89 46 de eb 11 6a 4 ff
e800 76 de 68 3f 1 ff 56 fe 83 c4 6 ff 46 de 81 7e de 96 0 7c e8 81 7e d2 8c
e819 0 7d f c6 46 f1 1 8b 46 d2 25 1 0 89 46 da eb 5 c7 46 da 1 0 83 7e da 0
e834 74 e 6a 0 ff 76 e0 ff 76 e2 ff 56 fc 83 c4 6 b8 74 2 ff d0 ff 46 d2 80
e84d 7e f1 0 74 3 e9 63 fc 80 7e f1 0 75 2e 66 8b 46 e8 66 89 46 e4 eb 14 66
e866 60 33 c0 cd 1a 8b c1 66 c1 e0 10 8b c2 66 89 46 e4 66 61 66 8b 46 e4 66
e87e 2b 46 e8 66 3d d0 2 0 0 72 dc 5f 5e c9 c3 ff 53 4b 59 57 49 4e 44 30 35
g
--------------------------------------------------------------------
遊戲運行於DOS環境,所以不必當心它是個病毒 :-),用方向鍵控制運行,CTRL發射激光,
如果運行在WINXP下面,粘貼操作只需要點擊DEBUG窗口的圖標,選「編輯」即可。
遊戲效果:
我 2004年實現的豎版空戰射擊遊戲,整個代碼 1K以內。
------------
Win7下 DosBox的用法(沒有 WinXP和 VmWare時):
- 下載安裝 D-Fend Reloaded 最新版(帶GUI和 FreeDOS 的DosBox) 並運行
- 複製遊戲代碼(橫線中內容)保存到 C:Users用戶名D-Fend ReloadedVirtualHDgame.txt
- 雙擊 D-Fend Reloaded窗口中的 DosBox,啟動DosBox窗口
- 按CTRL_F12將CPU Speed調到10000以上
- 輸入命令:debug &< C:game.txt,按回車啟動遊戲
int find(p) {
for (int i : adjacent[p]) {
if (!cover[i]) {
int q = link[i];
link[i] = p;
cover[i] = true;
if (q == -1 || find(q)) return 1;
link[i] = q;
}
}
return 0;
}
int bimatch() {
int total = 0;
memset(link, -1, sizeof(link));
for (int i = 0 ; i &< nLeft; ++i) {
memset(cover, false, sizeof(cover));
total += find(i);
}
return total;
}
上面代碼實現了求二分圖最大匹配的匈牙利演算法。當時看懂這段代碼後我驚呆了。完全沒有炫技,就是簡單直白地把該寫的寫出來,美得如此自然。
不用臨時變數交換兩個數的值
a = a ^ b;
b = b ^ a;
a = a ^ b;
再補一個蓄水池抽樣(reservoir sampling):
在超大數據流的情況下,如何隨機抽取其中一行。
因為數據量很大,並不想先讀取一次數據,獲得數據量n, 然後第二次再根據概率選擇數據。
而這個演算法的核心思路就是:
所以:
讀第一行文件時,保留第一行在內存里,這個概率是 1/1.
讀第二行,用1/2的概率來確定這一行要不要替換內存里存著的那一行,
讀第三行,用1/3的概率來確定這一行要不要替換內存,
讀第四行,用1/4的概率來確定這一行要不要替換內存,
。。。。。
一直讀到n行,用1/n的概率來確定這一行要不要替換內存里的那一行。
這個時候,內存里留下的那一行就是隨機選取出來的那一行。
不信?你看!
.....
p.s. 這兩個演算法都是編程珠璣(Programming pearls)里的例子。
另外還有logn 時間複雜度求斐波那契數列.Atom-MIKU,一個來自二次元的程序員鼓勵師,讓程序員用代碼為二次元人物 Miku 充能,大家腦補一下程序員的手指在鍵盤上飛舞,Miku 在屏幕中飛舞的場景,簡直非常感人,並且超級可愛哦!
傳送門:代碼託管 項目管理 WebIDE 企業服務
&清除緩存&
曾經看過一個用10行python可以美顏妹子照片的程序。這種非常強。
推薦閱讀:
※深度學習方面的學術交流平台?
※985 本科大二,計算機專業,為什麼很多專科的都比自己懂得多?
※在大學四年是否適合讀大磚頭的技術書?
※機器學習領域是否已經達到飽和?