Inaczej nie potrafię tego nazwać – robimy naprawdę dziwną funkcję. Przyda się do późniejszych zadań. Przerabiamy tak, aby wyniki nie były ustawione „na sztywno”.
Ok, nasza funkcja, ma działać w ten sposób:
function weirdFunc(sum){
if(sum === 0){
return {
num: 0,
carry: 0
};
} else if(sum === 1){
return {
num: 1,
carry: 0
};
} else if(sum === 2){
return {
num: 0,
carry: 1
};
} else if(sum === 3){
return {
num: 1,
carry: 1
};
}
}
Mamy wywalić wszystkie warunki i zostawić jeden return, który zwraca dobry wynik (pod warunkiem, że sum to liczba od 0 do 3 włącznie).
Zobaczmy, co możemy zrobić:
console.log(Math.floor(0/2)); //0
console.log(Math.floor(1/2)); //0
console.log(Math.floor(2/2)); //1
console.log(Math.floor(3/2)); //1
Wygląda na to, że sposób na carry już mamy. I nie jest ważne, przynajmniej na razie, czy to całkowicie rozumiemy czy metodą prób i błędów na to wpadliśmy. Robiąc takie ćwiczenia zrozumiemy koniec końców wszystko.
Ok, kolejna próba:
console.log(0 % 2); //0
console.log(1 % 2); //1
console.log(2 % 2); //0
console.log(3 % 2); //1
Czyli sposób na num też już mamy. Ok, funkcja do kupy:
function weirdFunc(sum){
if(sum === 0){
return {
num: 0,
carry: 0
};
} else if(sum === 1){
return {
num: 1,
carry: 0
};
} else if(sum === 2){
return {
num: 0,
carry: 1
};
} else if(sum === 3){
return {
num: 1,
carry: 1
};
}
}
function weridFunc_v2(sum){
return {
num: sum % 2,
carry: Math.floor(sum/2)
}
}
Wytłumaczenie:
- 2 i 3 dzielone bez reszty na 2 dają 1
- liczby parzyste (0,2) dają zerową resztę z dzielenia przez 2
- liczby nieparzyste (1,3) dają 1 jako resztę z dzielenia przez 2
Obiecuję, że w następnych lekcjach rozjaśni się nam po co to robimy…