How to solve programming problem.
Programming problem တွေကိုဘယ်လို solve လုပ်ရမလဲပေါ့။ အဓိကပြောနေကျတဲ့ logic, logic ဆိုတာကို ဘယ်လို စဉ်းစားရမလဲ လေ့ကျင့်ယူရမလဲပေါ့ process ပေါ့။
၁. Problem ကိုသေသေချာချာနားလည်အောင်လုပ်ပါ၊ ဥပမာအနေနဲ. codewar က problem လေးကို အောက်မှာကြည့်ပါ။
Your task is to create a function called addArrays, which takes two arrays consisting of integers, and returns the sum of those two arrays.
The twist is that (for example) [3,2,9] does not equal 3 + 2 + 9, it would equal ‘3’ + ‘2’ + ‘9’ converted to an integer for this kata, meaning it would equal 329. The output should be an array of the the sum in a similar fashion to the input (for example, if the sum is 341, you would return [3,4,1]). Examples are given below of what two arrays should return.
[3,2,9],[1,2] –> [3,4,1]
[4,7,3],[1,2,3] –> [5,9,6]
[1],[5,7,6] –> [5,7,7]
If both arrays are empty, return an empty array.
In some cases, there will be an array containing a negative number as the first index in the array. In this case treat the whole number as a negative number. See below:
[3,2,6,6],[-7,2,2,8] –> [-3,9,6,2] # 3266 + (-7228) = -3962
အပေါ်က ပေးထားတဲ့ problem ကိုသေချာအရင် နားလည်အောင်လုပ်ရမှာပါ သူက array ၂ခုကို parameter အနေနဲ.ပေးမယ်
[1,2]+ [3,4] ဆိုရင် သူက 12+34 = 46 ဒါဆို အဖြေက [4,6] ဖြစ်ရမယ်ပေါ့။ Minus ဆိုရင် အဖြေရှေ.ဆုံးက အခန်းမှာ minus ပါရမယ်။
၂ ခုနက ကိုယ်နားလည်ထားတဲ့ Problem သည် တကယ်နားလည်တာဟုတ်မဟုတ် data သုံးလေး ခုလောက်နဲ.စမ်းကြည့်ပြီး တွက်ကြည့်ပေါ့ လက်နဲ.ပေါ့
၃ Problem ကိုအသေးဆုံးလေးတွေ အနေနဲ. ခွဲချလို.ရအောင်လုပ်ပါ၊ ဥပမာ ဒီ problem မှာဆိုရင် ဒီလိုခွဲချလို.ရမယ်
[1,2] ကနေ 12 ရအောင်လုပ်ဖို.ရယ်
နောက်တခုက 12+34 (ဒါကတော့လွယ်ပါတယ်) အပေါင်းသက်သက်ပဲ
နောက် ပေါင်းလဒ် 46 ကနေ [4,6] ဘယ်လိုရအောင် လုပ်မလဲ ဒီနေရာမှာ minus ပါလာရင်လဲ မှန်ရမယ်
၄ ခုနက subproblem လေးတွေကို ရှင်းဖို.လုပ်ပါ။
အပေါ်က sub problem လေးတွေမှာ
[1,2] => 12 ကို ရှင်းမယ်ဆိုပါစို.
ဒီနေရာတွေမှာ language သည် စကားပြောတယ် ဥပမာ ဒီ problem ကို Java မှာရှင်းတာနဲ. JS မှာရှင်းတာတူမှာမဟုတ်ဘူး။ JS နဲ.ရှင်းမယ်ဆိုပါစို.
[1,2] သည် array အဲ့တာ ဒါဆို 12 ရဖို. array ထဲက element တွေကို အစဉ်အလိုက်တိုင်း ချိိတ်လိုက်ရင် ရပြီပေါ့။ ချိတ်လိုက်ရင် ရတာက string အနေနဲ. ချိတ်ရမှာ
ဒီလိုပေါ့
‘1’+’2’= ’12’
ဒါဆို ’12’ ကို number ပြောင်းလိုက်ရင် 12 ရမယ်ပေါ့။
အဲ့တော့ sub problem လေးတွေ ထွက်လာပြီ ဒီလိုရမယ်
array ကို တခန်းချင်းသွားဖို.
string အနေနဲ. concat လုပ်ဖို.
ရလာတဲ့ string ကို number ပြန်ပြောင်းဖို.
JS array API တွေမသိဘူးဆိုပါစို. array တခန်းချင်းသွားမယ်ဆို for loopo ပတ်ရမယ်။ နောက် string အနေနဲ.concat မယ် ပြီးမှ string ကို number ပြောင်းမယ်
array ကို တခန်းချင်းသွားဖို. ဆို pusedo နဲ.စဉ်းစားရင်ဒီလိုလေးရမယ်
for(var i=0;i < arr.length;i++)
string အနေနဲ. element တွေကိုချိတ်မယ်ဆိုရင် ပထမဆုံး str variable တခုလိုမယ် ပြီးရင် loop ထဲမှာ
str+= arr[i]; ဒါဆို str သည် အစကတည်းက string ဖြစ်နေတဲ့ အတွက် concat လုပ်သွားမယ်။
ဒီလိုဖြစ်မယ်ပေါ့
var str = ”;
for(var i=0;i< arr.length;i++)
{
str+= arr[i];
}
ရလာတဲ့ str ကို number ပြောင်းရင် JS မှာ +str ဆိုရပြီ ဒါဆို ခုနက အားလုံးကို function လေးရေးကြည့်ရင် ဒီလိုရမယ်
function arrayToNum(arr)
{
var str = ”;
for(var i=0;i< arr.length;i++)
{
str+= arr[i];
}
return +str;
}
၅ subproblem တွေကို test ပါ
အဲ့ sub problem ရေးပြီးရင် မပြီးသေးဘူး စမ်းရဦီးမယ် ဒါဆို
arrayToNum([1,3]) ဆိုရင် 13 ရရမယ်။ arrayToNum([-1,6]) ဆိုရင် -16 ရရမယ်။
၆ စမ်းတဲ့နေရာမှာ edge case အကုန်စမ်းရမယ် ဥပမာ ခုနက လို positive တွေချည်းလုပ်တမဟုတ်ဘူး ဖြစ်နိုင်သမျှ number တွေအကုန်စမ်းတာ
ဒါဆို လောလောဆယ် ဒါမျိုးလုပ်လို.ရပြီ
arrayToNum([1,2]) + arrayToNum([2,0])
array 2 ခုကနေ value ပြောင်းတာ + သုံးတာပဲ
အဲ့ နောက်ဆုံး subproblem က number ကနေ array ကိုပြောင်းတာ
120 ဆိုရင် = [1,2,0] ဖြစ်မယ်။ လွယ်တဲ့နည်းစဉ်းစားကြည့်မယ် 120 ကို string ဖြစ်အောင် ပြောင်းလိုက်မယ် ‘120’ character တလုံးချင်းဆီကို array ထဲ push လိုက်မယ်။ ဒီနည်းက positive number မှာအိုကေတယ် negative number မှာမအိုကေတော့ဘူး။
အဲ့တော့ နောက်တမျိုး number တလုံးချင်းဆီကို 10 နဲ.စားမယ် ဘာလို.ဆိုတော့ base 10 မို.လို. ဒါဆို အကြွင်းကို ထဲ့လို.ရမယ်
ဥပမာ 31 ဆိုရင် 31%10 = 1 ကြွင်းမယ် စားလဒ်က 3
နောက်တခါကျခုနက စားလဒ် 3 ကို 3%10 နဲ.စားလိုက်ရင် 3 ကြွင်းမယ် စားလဒ်က 0
ဒါဆိုရင် အကြွင်းတွေ စီလိုက်ရင် 1,3 ဆိုပြီး ရမယ် ပြောင်းပြန်ပေါ့
31 ဖြစ်ချင်ရင် array ထဲမှာ ရှေ.ကနေ ထဲ့ထဲ့သွားမယ် ဥပမာ
အကြွင်း 1 = [1]
အကြွင်း 3 = [3,1]
အဲ့မှာ ပြဿနာက mius ဆိုရင် ရှေ.ဆုံးက zero ခန်းက ကောင်ကို minus ထဲ့ပေးရမယ် ဒါဆို အကြမ်းဖျင်းဒီလိုရမယ်။
function numberToArray(num)
{
var isMinus = num < 0;
var arr = [];
while(num!=0)
{
arr.unshift( Math.abs(parseInt(num%10)));
num = parseInt(num/10);
}
isMinus? arr[0] = -arr[0] : arr[0];
return arr;
}
မှန်လားဆိုပြီး ခုနက လိုစမ်းကြည့်မယ်။ Edge case, positive , negative number , zero အကုန်စမ်းမယ်။ ဒီနေရာမှာ ပြဿနာဘာတက်မလဲဆိုတော့ JS သည် double ကိုသုံးတော့ parseInt သုံးပြီး integer ဖြစ်အောင်ပြောင်းရမယ် whole number လိုချင်ရင် abs ကိုသုံးရမယ်။ Array ကို ရှေ.ကနေထဲ့ချင်တာဆို unshift သုံးရမယ် ။ဒါတွေသည် language ကိုမသိရင် မလုပ်နိုင်ဘူး။
၇ Sub problem လေးတွေစမ်းပြီးရင် whole problem အနေနဲ.ပြန်ပေါင်းပါ။
ဒါဆို whole problem ကို ဒီလိုရေးလို.ရပြီ
function arrayToNum(arr)
{
var str = ”;
for(var i=0;i< arr.length;i++)
{
str+= arr[i];
}
return +str;
}
function numberToArray(num)
{
var isMinus = num < 0;
var arr = [];
while(num!=0)
{
arr.unshift( Math.abs(parseInt(num%10)));
num = parseInt(num/10);
}
isMinus? arr[0] = -arr[0] : arr[0];
return arr;
}
function addArrays(array1, array2) {
var num1 = arrayToNum(array1);
var num2 = arrayToNum(array2);
return numberToArray(num1 + num2);
}
ဒါဆို စမ်းလို.ရပြီ အဖြေထွက်ပြီ
၈ Optimize လုပ်ပါ
ကျနော်တို.စဉ်းစားတဲ့ code တွေသည် များနေတယ်၊ အဲ့တာကိုလွယ်လွယ်လုပ်လို.ရတဲ့နည်း၇ှိမယ်ပေါ့။ ဥပမာ arrayToNum နေရာမှာ ဒီလိုရေးလို.ရမယ်
let arrayToNumber1 = parseInt(array1.join(”));
array.join သည် array element တွေအားလုံးကို string အနေနဲ. concat လုပ်လိုက်တာ ဒီနေရာမှာ ဘာမှမပေးတဲ့အတွက် အားလုံး string အနေနဲ. concat သွားမယ် နောက် parseInt သည် number ကိုမှ integer အနေနဲ.ပြောင်းတာ အာ့ဆို code သည် ဒီလိုဖြစ်သွားမယ်
function numberToArray(num)
{
var isMinus = num < 0;
var arr = [];
while(num!=0)
{
arr.unshift( Math.abs(parseInt(num%10)));
num = parseInt(num/10);
}
isMinus? arr[0] = -arr[0] : arr[0];
return arr;
}
function addArrays(array1, array2) {
let arrayToNumber1 = parseInt(array1.join(”));
let arrayToNumber2 = parseInt(array2.join(”));
return numberToArray(arrayToNumber1 + arrayToNumber2);
}
ပိုတိုသွားတာပေါ့။
၉ သေချာပြန်စမ်းပါ
ဒါကတော့ နောက်ဆုံး test case တွေအကုန်ပြန်စမ်းရမှာကိုပြောတာ
Original Post=>(https://www.facebook.com/thet.khine.587/posts/pfbid0HNDuGnumqRmXR8tjZ2iuBpB3dnvirequdVVQWMjhbxSkKcLd1Bh35th8KKhKCGjrl)