V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zjlsxulei
V2EX  ›  程序员

大家都写过或者见过哪些高端优雅的代码?

  •  
  •   zjlsxulei ·
    uestcxl · 2015-04-01 13:55:50 +08:00 · 5791 次点击
    这是一个创建于 3524 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先分享一个,应该很多人都看过了。前几天看编程之美,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的循环嵌套,厉害!

    那么问题来了,各位平时或者在项目中都写过,看见过哪些高端优雅的代码呢?分享出来小弟膜拜膜拜!

    36 条回复    2015-04-02 09:25:20 +08:00
    billwsy
        1
    billwsy  
       2015-04-01 14:06:09 +08:00 via iPhone
    a & -a 等等…
    sciooga
        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 各大神的优美解题啊...
    sciooga
        3
    sciooga  
       2015-04-01 14:15:48 +08:00
    hyuwang
        4
    hyuwang  
       2015-04-01 14:23:28 +08:00
    写Haskell 感觉自己整个人都很优雅:)
    billwsy
        5
    billwsy  
       2015-04-01 14:25:26 +08:00 via iPhone
    @hyuwang 被Monid折腾的够惨…
    loading
        6
    loading  
       2015-04-01 14:25:34 +08:00 via Android
    判断是否为数字
    function isNumber(x) {
    return x === +x
    }
    fkdtz
        7
    fkdtz  
       2015-04-01 14:28:44 +08:00
    xxx是一个优雅的、简洁的、优秀的、强大的。。。。。。

    看到这类的词汇真心难受。
    ZackYang
        8
    ZackYang  
       2015-04-01 14:28:46 +08:00   ❤️ 8
    不如把标题改成"大家都写过或者见过哪些只为炫技不管是否清晰的代码?"?
    loading
        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是否可用,当时只能膜拜。
    finian
        10
    finian  
       2015-04-01 14:32:49 +08:00
    readability matters
    zjlsxulei
        11
    zjlsxulei  
    OP
       2015-04-01 14:33:54 +08:00
    @ZackYang 的确。。好多“优雅”无注释的代码对别人来说一时半会儿很难理解。。
    fkdtz
        12
    fkdtz  
       2015-04-01 14:34:43 +08:00
    一点都不优雅,我只能联想到写这个的人真他妈闲的蛋疼,肯定是个怪咖。
    xsseroot
        14
    xsseroot  
       2015-04-01 14:36:23 +08:00
    a++、++a
    zjlsxulei
        15
    zjlsxulei  
    OP
       2015-04-01 14:37:38 +08:00
    @xsseroot 想到了php的 $a++ 和 ++$a 。。。
    idblife
        16
    idblife  
       2015-04-01 14:41:20 +08:00
    见过80年代的ibm工程师写的c语言,目前跑的还是相当棒
    zjlsxulei
        17
    zjlsxulei  
    OP
       2015-04-01 14:44:43 +08:00
    @fkdtz 编程之美里面这道题,这个是第二种方法,书中的第一种解法用了将近五页来讲解怎么只用一个变量来解决问题。所以在看了第一种方法的复杂之后,突然看到第二个解法,有了对比之后,才发现第二种方法的确比第一种方法简洁太多,所以才这样感慨。: )
    hyuwang
        18
    hyuwang  
       2015-04-01 14:55:09 +08:00
    @billwsy 哈哈哈满脑子wtf
    yukirock
        19
    yukirock  
       2015-04-01 15:16:08 +08:00
    megoo
        20
    megoo  
       2015-04-01 15:41:44 +08:00
    @TimLang 类lisp语法么?怎么看不出美感来?
    Yokira
        21
    Yokira  
       2015-04-01 16:11:18 +08:00
    @loading
    -[1,] 可以判断出IE8以下包括IE8,
    好神奇~
    acros
        22
    acros  
       2015-04-01 16:14:49 +08:00   ❤️ 1
    int random()
    {
    //纯随机,骰子投掷的
    return 5;
    }
    iscraft
        24
    iscraft  
       2015-04-01 16:51:17 +08:00
    病毒 例如CIH
    yuankui
        25
    yuankui  
       2015-04-01 16:53:02 +08:00 via iPhone
    半天让人看不明白的代码,也叫优雅?
    就作吧!
    xpfd
        26
    xpfd  
       2015-04-01 17:03:47 +08:00
    在实际项目中谁要是用这样的代码,我铁定k他,逼着他改,代码在保证功能和效率的情况下,越易懂越好

    写这样的代码就是给别人找麻烦
    lushl9301
        28
    lushl9301  
       2015-04-01 17:15:32 +08:00
    Haskell quicksort
    zjlsxulei
        29
    zjlsxulei  
    OP
       2015-04-01 18:20:04 +08:00
    @xpfd 是的,实际项目中还是需要简洁高效比较好啊,平时写着玩或者娱乐一下,可以写点好玩的
    zjlsxulei
        30
    zjlsxulei  
    OP
       2015-04-01 18:24:34 +08:00
    @typcn 那个空格好精髓
    ming2281
        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?
    cfans1993
        32
    cfans1993  
       2015-04-01 21:18:54 +08:00 via Android
    ```c
    while( sleep ){
    money++;
    }
    ```
    StrayBugs
        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/
    Septembers
        34
    Septembers  
       2015-04-02 03:13:52 +08:00 via Android
    FSharp
    kevinzhow
        35
    kevinzhow  
       2015-04-02 05:39:55 +08:00
    我写代码都是追求可读性
    blue7wings
        36
    blue7wings  
       2015-04-02 09:25:20 +08:00
    readability +1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2507 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:44 · PVG 23:44 · LAX 07:44 · JFK 10:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.