Monday, February 20, 2012

ကိုးကုဋေကိုးသန်းကိုးသိန်းကိုးသောင်းကိုးထောင့်ကိုးရာ့ကိုးဆယ့်ကိုး

ကိုးကုဋေကိုးသန်းကိုးသိန်းကိုးသောင်းကိုးထောင့်ကိုးရာ့ကိုးဆယ့်ကိုး

ပြီးခဲ့တဲ့ တစ်ပတ်လောက်က သူငယ်ချင်းတစ်ယောက်က သူရေးထားတဲ့ ပရိုဂရမ် လေးကိုလာပြတယ်။ မှန်/မမှန် Test လုပ်ကြည့်ပေးပါလို့လည်းပြောတယ်။ ပရိုဂရမ်က ဘာမှတော့မဟုတ်ပါဘူး။ နံပါတ်တစ်ခု input သွင်းလိုက်ရင် အဲဒီ့နံပါတ်ကို စာအနေနဲ့ပြန်ပြပေးတာလေးပါပဲ။ "123" လို့ထည့်လိုက်ရင် "တစ်ရာ့နှစ်ဆယ့်သုံး" ဆိုပြီးတော့ပြန်ပြပေးတာလေးပါ။ သူက Java နဲ့ရေးထားပြီး ကျွန်တော့်ကို jar file ပဲပေးတယ်။ ပြီးတော့ သူက source code ကိုမပြဘူး။ ဘာလို့မပြတာလဲမေးတော့ သူက စပ်ဖြီးဖြီးနဲ့ပြန်ဖြေတယ်။ "ဟ ... logic က ဦးနှောက်ခြောက်အောင် စဉ်းစားထားရတာ။ ဒီလောက်ရအောင်ရေးဖို့ လွယ်တာမှတ်လို့။ တော်ကြာ source code ကြည့်ပြီး idea တွေခိုးသွားရင် ဘယ်လိုလုပ်မလဲ" ... တဲ့။ ကျွန်တော်ကလည်း "ဟားဟား ဒီ logic လေးများ၊ ခိုးစရာလား၊ ရေးပြမယ်၊ ပြီးမှ ဘယ်သူ့ code ပိုကောင်းလဲပြိုင်မယ်" ... ဆိုပြီးပြောလိုက်တာပေါ့။

ကျစ်ကျစ်လစ်လစ် လုပ်ပြီးသား Java code လေးရေးပြထားပါတယ်။

public static String getw(int n){
String w[]={"သုည","တစ်","နှစ်","သုံး","လေး","ငါး","ခြောက်","ခုနစ်","ရှစ်","ကိုး"},
t[]={"","ဆယ်","ရာ","ထောင်","သောင်း","သိန်း","သန်း"},
x="";
boolean s=false;
for(int i=0;i<7;i++){
  if(n%10>0)
   if(i<4){x=w[n%10]+t[i]+(s?"့ ":" ")+x;s=true;}
   else{x=w[n%10]+t[i]+" "+x;}
  n/=10;
}
return x;}




အခုပရိုဂရမ်လေးကတော့ သန်းဂဏန်းအထိပဲ ပြပေးတာပါ။ ကုဋေအထိပြမယ်ဆိုလည်း array ထဲမှာ "ကုဋေ" ထည့်ပေးလိုက်ပြီး looping မှာ "8" အထိလုပ်လိုက်ရုံပါပဲ။

ဘလော့မှာ မရေးဖြစ်တာတော်တော်ကြာပြီ။ အခုပြန်ရေးဖြစ်တော့ ... ဒီပိုစ့်လေးက ကျွန်တော့်ရဲ့ပိုစ့်တွေထဲမှာ coding ပါတဲ့ ပထမဆုံးပိုစ့်လေး ဖြစ်သွားပါတယ်။

2 comments:

  1. ဒီဟာေလးေကာ ဘယ္လုိျမင္လဲ လုပ္ပါဦး ဆရာ ဆရာ့အတိုင္းလုိက္ေရးတယ္မျဖစ္ေအာင္ကြ်န္ေတာ့္နည္းလမ္းအတုိင္း String နဲ.ပဲ ရေအာင္ Compact လုပ္လုိက္ပါတယ္ကြယ္

    // You can remove this method if you want, i made it so i can easily use parseInt .. :)

    public int Int(char input){
    return Integer.parseInt(input+"");
    }
    public String translate(String input){
    d = new String[] {"သုည","တစ္","ႏွစ္","သံုး","ေလး","ငါး","ေျခာက္","ခုႏွစ္","ရွစ္","ကိုး"};
    rlfe = new String[]{"ဆယ္","ရာ","ေထာင္","ေသာင္း","သိန္း","သန္း"};
    irlfe = new String[]{"ဆယ့္","ရာ့","ေထာင့္","ေသာင္း","သိန္း","သန္း"};
    c = input.toCharArray();
    if(input.matches("^[0-9]$")) tos = d[Int(c[0])];
    else if(input.matches("^[1-9][0-9]*$"))
    for(int i=0;i<c.length;i++)
    tos += (Int(c[i]) !=0?d[Int(c[i])]+(i<(c.length-1)?(input.substring(i+1).matches("^[0]*[1-9]+$")?irlfe[c.length-2-i]:rlfe[c.length-2-i]):""):"");
    return tos;
    }

    ReplyDelete