先分享一个,应该很多人都看过了。前几天看编程之美,1.2的象棋问题中,题目大概是这样的,在将帅各自的3x3的格子中,将帅不能照面,问有哪些坐标可能。要求代码中只能使用一个变量。一种解法是:
BYTE i = 81;
while( i-- ){
if( i / 9 % 3 == i % 9 % 3)
continue;
printf("将 : %d , 帅 : %d \n", i / 9 +1, i % 9 +1 );
}
这段代码的巧妙之处就是用了一个变量i的取整和取余来模拟了一个9x9的循环嵌套,厉害!
那么问题来了,各位平时或者在项目中都写过,看见过哪些高端优雅的代码呢?分享出来小弟膜拜膜拜!
1
billwsy 2015-04-01 14:06:09 +08:00 via iPhone
a & -a 等等…
|
2
sciooga 2015-04-01 14:15:11 +08:00 1
两个课堂作业:
1.输入成绩 按高分到低分排序 并统计及格不及格人数: #include <iostream> using namespace std; int fun(int s[],int n,int *x) { int i,k; for(i=0;s[i];n+=s[i++]>60,*x=i-n); for (k=i; k; k--)if (s[k-1]<s[k]&&(s[k-1]+=s[k]-=s[k-1]=s[k]-s[k-1]))k=i; return n; } int main(void) { int *t = new int[1],a(0),b(0),tt(0); for(;t[tt-1]&&cout<<"请输入第"<<tt+1<<"位学生的成绩,输入0结束:";cin>>t[tt++]); cout<<fun(t, a, &b)<<"\t<--及格人数 不及格人数-->\t"<<b<<endl; for (; *t;cout<<*t<<"\t",t++,tt--); } 2.除 * newnode 外使用一个指针插入数据进链表,数据以小至大增加。 struct node * insert(node *head ,int x){ struct node * newnode; newnode = new node; if (head == NULL){ newnode -> data =x; newnode -> next =NULL; head = newnode; }else{ if (x < head -> data) x += head -> data -= x = head -> data - x ; struct node *p; //只使用这一个额外的指针 p = new node; p = head; while (p-> next!= NULL && p-> next ->data < x) p = p -> next; newnode-> data = x; newnode->next = p ->next; p->next = newnode; } return head; } 勉勉强强自我感觉还行...可以去看看 ACM 各大神的优美解题啊... |
3
sciooga 2015-04-01 14:15:48 +08:00
|
4
hyuwang 2015-04-01 14:23:28 +08:00
写Haskell 感觉自己整个人都很优雅:)
|
6
loading 2015-04-01 14:25:34 +08:00 via Android
判断是否为数字
function isNumber(x) { return x === +x } |
7
fkdtz 2015-04-01 14:28:44 +08:00
xxx是一个优雅的、简洁的、优秀的、强大的。。。。。。
看到这类的词汇真心难受。 |
8
ZackYang 2015-04-01 14:28:46 +08:00 8
不如把标题改成"大家都写过或者见过哪些只为炫技不管是否清晰的代码?"?
|
9
loading 2015-04-01 14:30:27 +08:00 via Android 2
最短判断是否为ie
if(-[1,]){ alert("这不是IE浏览器!"); }else{ alert("这是IE浏览器!"); 以前最短的IE判定借助于IE不支持垂直制表符的特性搞出来的。 var ie = !+"\v1"; 仅仅需要7bytes!参见这篇文章,《32 bytes, ehr ... 9, ehr ... 7!!! to know if your browser is IE》,讲述外国人是如何把IE的判定从32 bytes一步步缩简成7 bytes!的故事 但这纪录今年1月8日被一个俄国人打破了,现在只要6 bytes!它利用了IE与标准浏览器在处理数组的toString方法的差异做成的。对于标准游览器,如果数组里面最后一个字符为逗号,JS引擎会自动剔除它。详 var ie = !-[1,]; } 不知新ie是否可用,当时只能膜拜。 |
10
finian 2015-04-01 14:32:49 +08:00
readability matters
|
12
fkdtz 2015-04-01 14:34:43 +08:00
一点都不优雅,我只能联想到写这个的人真他妈闲的蛋疼,肯定是个怪咖。
|
13
TimLang 2015-04-01 14:36:11 +08:00 1
|
14
xsseroot 2015-04-01 14:36:23 +08:00
a++、++a
|
16
idblife 2015-04-01 14:41:20 +08:00
见过80年代的ibm工程师写的c语言,目前跑的还是相当棒
|
17
zjlsxulei OP @fkdtz 编程之美里面这道题,这个是第二种方法,书中的第一种解法用了将近五页来讲解怎么只用一个变量来解决问题。所以在看了第一种方法的复杂之后,突然看到第二个解法,有了对比之后,才发现第二种方法的确比第一种方法简洁太多,所以才这样感慨。: )
|
19
yukirock 2015-04-01 15:16:08 +08:00
|
22
acros 2015-04-01 16:14:49 +08:00 1
int random()
{ //纯随机,骰子投掷的 return 5; } |
23
vincentxue 2015-04-01 16:26:59 +08:00
|
24
iscraft 2015-04-01 16:51:17 +08:00
病毒 例如CIH
|
25
yuankui 2015-04-01 16:53:02 +08:00 via iPhone
半天让人看不明白的代码,也叫优雅?
就作吧! |
26
xpfd 2015-04-01 17:03:47 +08:00
在实际项目中谁要是用这样的代码,我铁定k他,逼着他改,代码在保证功能和效率的情况下,越易懂越好
写这样的代码就是给别人找麻烦 |
27
typcn 2015-04-01 17:04:01 +08:00
|
28
lushl9301 2015-04-01 17:15:32 +08:00
Haskell quicksort
|
31
ming2281 2015-04-01 21:11:22 +08:00
#the quickSort in Python
def quick_sort(src): if len(src) <= 1: return src pivotValue = src[0] leftSrc = quick_sort([x for x in src[1:] if x < pivotValue]) rightSrc = quick_sort([x for x in src[1 : ] if x > pivotValue]) return leftSrc + [pivotValue] + rightSrc #oneline fibonacci series fib = lambda n: n if n<2 else fib(n-1) + fib(n-2) 怎么Markdown? |
32
cfans1993 2015-04-01 21:18:54 +08:00 via Android
```c
while( sleep ){ money++; } ``` |
33
StrayBugs 2015-04-01 21:58:43 +08:00
在 lcc 中看到的内存对齐(向上取整)代码,跪着看的
#define roundup(x,n) (((x)+((n)-1))&(~((n)-1))) http://www.crimx.com/compiler/2014/03/21/lcc-source-learning/ |
34
Septembers 2015-04-02 03:13:52 +08:00 via Android
FSharp
|
35
kevinzhow 2015-04-02 05:39:55 +08:00
我写代码都是追求可读性
|
36
blue7wings 2015-04-02 09:25:20 +08:00
readability +1
|