Balanced Symbol

ကၽြန္ေတာ္တို႔ေတြ ( ႏွင့္ ) အတြက္ကိုေတာ့ ေရးၿပီးပါၿပီ။ ေနာက္တဆင့္ အေနနဲ႔ {[ ႏွင့္ ]} ကို ထည့္ၿပီး ေရးဖို႔ လိုပါတယ္။ သခ်ာၤမွာ ကြင္းေတြက

{[()]}

ဆိုၿပီး ရွိပါတယ္။ ကၽြန္ေတာ္တို႔ လက္သည္းကြင္း အတြက္ ေရးၿပီးပါၿပီ။ အျခား ကြင္းေတြပါ ပါလာရင္ စစ္ဖို႔ အတြက္ ထပ္ၿပီး ျပင္ရပါမယ္။

အဲဒီအတြက္ ၿပီးခဲ့တဲ့ code အတိုင္း ေရးလို႔ မရေတာပါဘူး။

checkbalanced.py

from stack import Stack def parChecker(symbolString): s = Stack() balanced = True index = 0 while index < len(symbolString) and balanced: symbol = symbolString[index] if symbol in "([{": s.push(symbol) else: if s.is_empty(): balanced = False else: top = s.pop() if not matches(top,symbol): balanced = False index = index + 1 if balanced and s.is_empty(): return True else: return False def matches(open,close): opens = "([{" closers = ")]}" return opens.index(open) == closers.index(close) print(parChecker('{{([][])}()}')) print(parChecker('[{()]'))

ဒီ code ေလးကို တခ်က္ၾကည့္ရေအာင္။

ၿပီးခဲ့သည့္တုန္းကလိုပဲ ကၽြန္ေတာ္တို႔ ေရးထားတာပါ။ သို႔ေပမယ့္ အခု အခါမွာေတာ့ ( တစ္ခုတည္းက မဟုတ္ေတာ့ပါဘူး။ {[]} ပါ ထပ္ပါလာပါၿပီ။ ဒါေၾကာင့္ ကြင္းစေတြျဖစ္သည့္ ([{ ေတြ သာ ျဖစ္ခဲ့ရင္ stack ထဲ ထည့္ပါတယ္။ မဟုတ္ခဲ့ဘူးဆိုရင္ stack ထဲကေန pop လုပ္တာ တစ္ခုတည္း မရေတာ့ပါဘူး။ ေနာက္ဆံုးျဖည့္ထားတာက [ ျဖစ္ရင္ ကြင္းျပန္ပိတ္တာက ] ျဖစ္ကို ျဖစ္ရပါမယ္။ ဒါေၾကာင့္ အဖြင့္ ကြင္း မဟုတ္ခဲ့လို႔ အပိတ္ကြင္း သာ ျဖစ္ခဲ့ရင္ ေရွ႕ဘက္က ဖြင့္ထားတဲ့ ကြင္း နဲ႔ တူ မလား စစ္ဖို႔ လိုအပ္ပါတယ္။

top = s.pop()
if not matches(top,symbol):
    balanced = False

အဖြင့္ ျဖစ္ခဲ့ရင္ အပိတ္ျဖစ္သလား စစ္ဖို႔ matches ဆိုတဲ့ function ကို ေရးထားပါတယ္။

def matches(open,close):
    opens = "([{"
    closers = ")]}"
    return opens.index(open) == closers.index(close)

အဲဒီမွာ index ဆိုတာ ပါလာပါျပ႔ီ။ index ဆိုတာ ထည့္လိုက္တဲ့ စာလံုးက ဘယ္ေနရာမွာ ရွာေတြ႕ တယ္ဆိုတဲ့ နံပတ္ ျပန္လာတာပါ။

opens = "([{" closers = ")]}" print(opens.index("(")) print(opens.index("[")) print(closers.index("]")) print(closers.index("}"))

ဒါေၾကာင့္ အဖြင့္ ႏွင့္ အပိတ္ index တူသလား နဲ႔ လြယ္လင့္ တကူ စစ္ထားတာပါ။ သို႔မဟုတ္ရင္ if condition ႏွင့္ open က [ ျဖစ္ခဲ့ရင္ close က ] ျဖစ္ရမယ္ ဆိုၿပီး စစ္ေနဖို႔ လိုပါတယ္။ တစ္ခါတစ္ေလ programming ေရးသားရာမွာ ျဖတ္လမ္းေလးေတြ သံုးၿပီး အမ်ားႀကီး ေရးမယ့္ အစား အခုလို အတိုေလး ေရးလို႔ ရႏိုင္သည့္ နည္းလမ္းေလးေတြ ရွိပါတယ္။

အဖြင့္ နဲ႔ အပိတ္ က သာ မတူခဲ့ရင္ေတာ့ loop က ထြက္ၿပီး False ျပန္ေပးလိုက္ရံုပါပဲ။

results matching ""

    No results matching ""