• codewar 上做练习的一些感触


    废话

    在[codewar][1]上做练习,每次都是尽量快速地做完,然后赶着去看排名里面clever分最高的solution,看完每次都要感叹一下人家怎么可以写得这么简洁,甚至有一次我用了一段大约七八行的代码,别人只用了一行就搞定了。下午做了几个练习,依然是这样的感受,拎出来一个记下来鞭策一下自己。

    问题

    原题长这样:
    Vampire Numbers
    Our loose definition of Vampire Numbers can be described as follows:

    6 * 21 = 126
    # 6 and 21 would be valid 'fangs' for a vampire number as the 
    # digits 6, 1, and 2 are present in both the product and multiplicands
    
    10 * 11 = 110
    # 110 is not a vampire number since there are three 1's in the
    # multiplicands, but only two 1's in the product
    

    解决

    这是我写的代码:

    var vampire_test = function(a, b){
        var mul=(a*b).toString().split('').sort();
        var pro=(a.toString()+b.toString()).split('').sort();
        if(mul.length!==pro.length){
            return false;
        }else{
            for(var i=0;i<mul.length;i++){
                if(mul[i]!=pro[i])
                {
                    return false;
                }
            }
            return true;
        }
    }
    

    可以看出真的很大一段,虽然实现了功能......

    然后,这是clever最高分的solution:

    function vampire_test(a, b){
        return sortStr(a + '' + b) == sortStr(a * b + '');
    }
    function sortStr(v){ return v.split('').sort().join('') }
    

    总结

    我对比了一下,发现我的答案里,第一步和别人是类似的:将字符串转成数组然后排序,获得两个排过序的数组mul和pro。但是接着我最琐碎的一步在于进行mul和pro间的比较,因为引用类型的比较不能直接用“”进行,所以我只好挨个遍历值去比较。
    但是别人的solution里,又将排过序的数组join成字符串了,直接用“
    ”比较,简单多了。
    然后我回想了一下,发现自己经常想不起来用join这个函数,总是笨拙地在循环里用str+=“aaa”。
    比如说另外一个练习:
    Description:

    Here we have a function that help us spam our hearty laughter. But is not working! I need you to find out why...

    Expected results:

    spam(1);//hue
    spam(6);//huehuehuehuehuehue
    spam(14);//huehuehuehuehuehuehuehuehuehuehuehuehuehue
    

    这是我的做法:

    function spam(number){
        var str="";
        for(var i=1;i<=number;i++){
            str+="hue";
        }
        return str;
    }
    

    然后别人用join函数只用了一行代码就解决了:

    function spam(number){
        return Array(++number).join("hue");
    }
    

    说明

    join函数:

    定义和用法
    join() 方法用于把数组中的所有元素放入一个字符串。
    元素是通过指定的分隔符进行分隔的。

    语法
    arrayObject.join(separator)
    separator可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。
    [1]: http://www.codewars.com/

  • 相关阅读:
    bzoj3996: [TJOI2015]线性代数
    bzoj3319: 黑白树
    bzoj3745: [Coci2015]Norma
    bzoj2437: [Noi2011]兔兔与蛋蛋
    bzoj1110: [POI2007]砝码Odw
    bzoj4919: [Lydsy1706月赛]大根堆
    bzoj5085: 最大
    bzoj2721: [Violet 5]樱花
    Theoretical & Applied Mechanics Letters第2届编委会2015年度第1次全体编委会工作会议纪要(转自力学学会)
    法国石墨烯研究者成功合成二维材料锗烯
  • 原文地址:https://www.cnblogs.com/SheilaSun/p/4444951.html
Copyright © 2020-2023  润新知