iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 10
0
Software Development

用JS來刷刷HackerRank系列 第 10

(10)HackerRank-Day 5: Template Literals、Arrow Functions(javaScript Answer)

題目
Day 5: Template Literals
舉例輸入

10
14

舉例輸出

10
14

解析
其實這個還蠻驚人的
``<=這個東西用這麼久我還真的不知道它可以拆開來丟進方法
照原題目這樣丟,會將${}做完分割符,並拆成兩個陣列,調適方法如下

sides`The area is: ${s1 * s2}.\nThe perimeter is: ${2 * (s1 + s2)}.`;
function sides(literals, ...expressions) {
    console.log(literals);
    // ["The area is: ", ".\nThe perimeter is: ", "."]
    console.log(expressions);
    //[140, 48]
}

好了,既然這裏明白了
那麼接下來那個看起來很複雜的運算也沒甚麼了
只是個正負號變換而已

function sides(literals, ...expressions) {
    const [a, p] = expressions;
    return [
        ((p - Math.sqrt(Math.pow(p,2) - (16 * a))) / 4),
        ((p + Math.sqrt(Math.pow(p,2) - (16 * a))) / 4),
    ]
    
}
 

題目
Day 5: Arrow Functions
舉例輸入

5
1 2 3 4 5

舉例輸出

3 4 9 8 15

解析
傳入一個陣列,遍歷該元素
若基數:*3
若偶數:*2
並組合成一個新陣列
一想到要把一個陣列經過處理變成新陣列,直接map不解釋

function modifyArray(nums) {
    return nums.map(num => num % 2 == 0 ? num * 2 : num * 3);
}

有沒有外星寫法?
有的,這應該只有本科系的人看得懂

function modifyArray(nums) {
    return nums.map(num => (num & 1) ? num * 3 : num * 2);
}

二進位的&算法
加上javascript真值表
把0拿去判斷會回傳false而達成

簡單說一下

2=>0010
1=>0001
&就是上下相同輸出1,不同輸出0
上面這題出現為0 因此執行三元運算子後半部*2

3=>0011
1=>0001
&就是上下相同輸出1,不同輸出0
上面這題出現為1 因此執行三元運算子前半部*3

本日心得


上一篇
(9)HackerRank-Day 4: Classes、Day 5: Inheritance(javaScript Answer)
下一篇
(11)HackerRank- Day 8: Create a Button、 Buttons Container(javaScript Answer)
系列文
用JS來刷刷HackerRank30

尚未有邦友留言

立即登入留言