一百行以下有哪些給力代碼?
語言不限,給力種類不限。
請給出簡介、出處。
謝謝大家!相關問題:
一千行以下有哪些給力代碼?
有哪些值得學習的小型開源項目?
五千行以下有哪些值得學習的開源項目?
十萬行以下有哪些值得學習的開源項目?
99行的全局光照程序 smallpt,它使用蒙地卡羅路徑追蹤。
.1?Vec(0,1):Vec(1))%w).norm(), v=w%u;
我之前曾翻譯成不同語言去比較性能,見C++/C#/F#/Java/JS/Lua/Python/Ruby渲染比試。 這個問題這麼多人關注,好的答案居然這麼少 地圖炮開完,我給出我最喜歡的一百行以下給力代碼:#include &
#include &
#include &
}
};
Sphere spheres[] = {//Scene: radius, position, emission, color, material
Sphere(1e5, Vec( 1e5+1,40.8,81.6), Vec(),Vec(.75,.25,.25),DIFF),//Left
Sphere(1e5, Vec(-1e5+99,40.8,81.6),Vec(),Vec(.25,.25,.75),DIFF),//Rght
Sphere(1e5, Vec(50,40.8, 1e5), Vec(),Vec(.75,.75,.75),DIFF),//Back
Sphere(1e5, Vec(50,40.8,-1e5+170), Vec(),Vec(), DIFF),//Frnt
Sphere(1e5, Vec(50, 1e5, 81.6), Vec(),Vec(.75,.75,.75),DIFF),//Botm
Sphere(1e5, Vec(50,-1e5+81.6,81.6),Vec(),Vec(.75,.75,.75),DIFF),//Top
Sphere(16.5,Vec(27,16.5,47), Vec(),Vec(1,1,1)*.999, SPEC),//Mirr
Sphere(16.5,Vec(73,16.5,78), Vec(),Vec(1,1,1)*.999, REFR),//Glas
Sphere(600, Vec(50,681.6-.27,81.6),Vec(12,12,12), Vec(), DIFF) //Lite
};
inline double clamp(double x){ return x&<0 ? 0 : x&>1 ? 1 : x; }
inline int toInt(double x){ return int(pow(clamp(x),1/2.2)*255+.5); }
inline bool intersect(const Ray r, double t, int id){
double n=sizeof(spheres)/sizeof(Sphere), d, inf=t=1e20;
for(int i=int(n);i--;) if((d=spheres[i].intersect(r))d&
if (++depth&>5) if (erand48(Xi)&
Vec d = (u*cos(r1)*r2s + v*sin(r1)*r2s + w*sqrt(1-r2)).norm();
return obj.e + f.mult(radiance(Ray(x,d),depth,Xi));
} else if (obj.refl == SPEC) // Ideal SPECULAR reflection
return obj.e + f.mult(radiance(Ray(x,r.d-n*2*n.dot(r.d)),depth,Xi));
Ray reflRay(x, r.d-n*2*n.dot(r.d)); // Ideal dielectric REFRACTION
bool into = n.dot(nl)&>0; // Ray from outside going in?
double nc=1, nt=1.5, nnt=into?nc/nt:nt/nc, ddn=r.d.dot(nl), cos2t;
if ((cos2t=1-nnt*nnt*(1-ddn*ddn))&<0) // Total internal reflection
return obj.e + f.mult(radiance(reflRay,depth,Xi));
Vec tdir = (r.d*nnt - n*((into?1:-1)*(ddn*nnt+sqrt(cos2t)))).norm();
double a=nt-nc, b=nt+nc, R0=a*a/(b*b), c = 1-(into?-ddn:tdir.dot(n));
double Re=R0+(1-R0)*c*c*c*c*c,Tr=1-Re,P=.25+.5*Re,RP=Re/P,TP=Tr/(1-P);
return obj.e + f.mult(depth&>2 ? (erand48(Xi)&
很多答案都是抖機靈,代碼不直觀,也不是很有價值(混亂代碼的意義還不如鋼琴家們為炫技而寫的練習曲呢)
invSqrt居然好多人說,其實裡面的神奇數字有很多人分析了,比如這個問題0x5f3759df這個「黑魔法數」為什麼會這麼神奇?有什麼數學依據嗎? - Belleve 的回答
有人在stackexchange上開了個問題叫做Tweetable Mathematical Art(鏈接是:popularity contest),希望人們用三條twitter那麼長的代碼生成1024x1024的圖片,希望圖片盡量有美感。
為什麼是三條,因為題主給了一小段基礎代碼,其中有三個空函數分別生成RGB三個顏色,於是就有三個插入代碼的地方。代碼如下
#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); 從容不迫地就能壓到100行以內。 同時挑戰程序員編程、數學和審美的比賽來了。 大家交出的作品非常逆天,連著名大神Matrix67都表示讚歎(用三段 140 字元以內的代碼生成一張 1024×1024 的圖片)
FILE *fp;
int main(){
fp = fopen("MathPic.ppm","wb");
fprintf(fp, "P6
%d %d
255
", DIM, DIM);
for(int j=0;j&
這個
這是一張使用 diffusion-limited aggregation 模型得到的圖片,程序運行起來要耗費不少時間。代碼很有意思:巧妙地利用宏定義,打破了函數與函數之間的界限,三段代碼的字數限制便能合在一起使用了。
--------Matrix67(源代碼請看原問題或者matrix67的博客文章)
還有這個(奇怪牌小火龍?)
我覺得右下角看起來是個綠色的小火龍在噴火
這些代碼都挺直觀的,也能學到一些分形的知識。
原問題里有提供源代碼和編譯的指示,所以看官們也可以下載下來自己鼓搗鼓搗,做個酷到飛起的頭像來玩玩。
補:matrix67的博客也激勵了一些兄弟拓展新的形式,比如這個(Tweetable Mathematical Art 習作)看著簡單 其實不太好實現
下面這段代碼應該是世上最給力(但顯然不是最快的)計算Pi的演算法了(來自1988年的IOCCC大賽)
解釋:FF是面積,OO是直徑,Pi=4*面積/直徑/直徑
#define _ F--&>00||-F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f
",4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_
_-_-_-_
}
當初看到這段代碼的時候,直感嘆自己是太老實了。。。
void send(int* to, int* from, int count)
{
int n = (count+7)/8;
switch(count%8) {
case 0: do{ *to++ = *from++;
case 7: *to++ = *from++;
case 6: *to++ = *from++;
case 5: *to++ = *from++;
case 4: *to++ = *from++;
case 3: *to++ = *from++;
case 2: *to++ = *from++;
case 1: *to++ = *from++;
} while(--n&>0);
}
}
參考:https://en.wikipedia.org/wiki/Duff"s_device
這是……一個解釋器function $(C,E,K){if(!(C instanceof Array))return K("string"==typeof C?
E[C]:C);switch(C[0]){case"lambda":return K(function(K){return function(
){for(var e=Object.create(E),u=0;u&
不是針對最高票回答,但要提醒一下大家:千萬要記住,不要聽任何人說什麼把代碼貼到瀏覽器命令行去運行。除非你確切知道他的代碼是幹啥的。否則你的賬號說不定分分鐘就被人盜了……
有本書叫做hacker"s delight, 一個白頭髮老程序員所作,講述了各種位操作的奇技淫巧
*nix fork bomb
:(){ :|: };:
最短的俄羅斯方塊代碼,60行。出處: 60行代碼俄羅斯方塊[原創]-CSDN論壇-CSDN.NET-中國最大的IT技術社區
&&&&&
&&
using System;
public class HelloWorld
{
public static void Main()
{
Console.WriteLine("我是一百行以下最給力代碼");
}
}
雷神3的開平方演算法,當年看到直接跪了,據說出自MIT HACKMEM
http://www.cnblogs.com/pkuoliver/archive/2010/10/06/sotry-about-sqrt.html
不限給力種類?
sudo rm -rf /usr /lib/nvidia-current/xorg/xorg
出處:install script does rm -rf /usr for ubuntu · Issue #123 · MrMEEE/bumblebee-Old-and-abbandoned
90 行 C++ 實現一個 Lisp 解釋器:
http://howtowriteaprogram.blogspot.com/2010/11/lisp-interpreter-in-90-lines-of-c.html
在命令行中執行別人的代碼是一件很危險的事,請大家注意, 不僅限於本回答。
本頁面打開chrome命令行, 執行以下腳本, 可以給我+1.
Function("".replace(/.{8}/g,function(u){return String.fromCharCode(parseInt(u.replace(/u200c/g,1).replace(/u200d/g,0),2))}))();
PS:還可以執行下:
console.log("".length);
補充下原理, 可以參見: 「短」化你的代碼
輸出自身程序的程序
#include&
int main()
{
char *c="#include&
printf(c,10,10,10,34,c,34,10,10,10);
}
來自C語言比賽上的。
int gcd(int a, int b)
{
return b &>0?gcd(b, a%b):a;
}
(我發現拿到贊的很大部分原因是大家只能看懂這一個.)
# coding: utf-8
# 沒寫完...
import winsound
X = 1
Y = 0.5
_s = 392 * X
_L = 440 * X
D = 524 * X
R = 578 * X
M = 660 * X
F = 698 * X
S = 784 * X
L = 880 * X
T = 500
winsound.Beep (_L,T)
winsound.Beep (_L,T / 2)
winsound.Beep (_s,T / 2)
winsound.Beep (_L,T)
winsound.Beep (_L,T / 2)
winsound.Beep (_L,T / 2)
winsound.Beep (D,T )
winsound.Beep (R,T / 2)
winsound.Beep (D,T / 2)
winsound.Beep (_L,T * 2)
time.sleep(Y)
a=a+b;
b=a-b;
a=a-b;
data:text/html, &
How to Write a Spelling Corrector
Peter Norvig 用21行python寫的功能完備的拼寫檢查器
並有ruby等各種語言版本
haskell三行qsort算么(讀書少見笑了…)
推薦閱讀:
※維護一個五六百行的程序就已經力不從心了怎麼辦?
※寫代碼過程中最忌諱的是什麼?總感覺最近太過於急於求成?
※學會在紙上寫代碼,這很重要嗎?
※如何高效的學習 TensorFlow 代碼?