কীপ্যাড কোড টেক্সট!


14

একটি স্ট্রিং এবং একটি অ্যারে ইনপুট হিসাবে দেওয়া, আপনার কাজটি পাঠ্যটি আউটপুট দেওয়া হয় যা একটি সাধারণ মোবাইল কীপ্যাডে টাইপ করার সময় ইনপুট স্ট্রিং প্রিন্ট করবে। একটি মোবাইল কীপ্যাডে, বার বার একটি বোতাম টিপে একটি চিঠি টাইপ করা হয়, যেখানে এনটি সেই অবস্থান যেখানে বোতামের লেবেলে চিঠিটি থাকে। সুতরাং, 22আউটপুট করা উচিত b

কীপ্যাড


বিধি

  • সহায়ক অ্যারেতে অক্ষর মানচিত্র ( [" ",".,!","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]) থাকবে। এটি আপনাকে কিছু বাইট সংরক্ষণ করতে দেওয়া হবে।

  • #প্রতীক ক্ষেত্রে টগল হবে। প্রাথমিক মামলা কম হবে। সুতরাং 2#3আউটপুট করা উচিত aD

  • এটি 0একটি স্থান যুক্ত করবে। সুতরাং, 202আউটপুট করা উচিত a a

  • একই সংখ্যার বোতামে থাকা একটি নতুন অক্ষর শুরু করতে ইনপুট স্ট্রিংয়ে একটি স্থান ( ) থাকবে। উদাহরণস্বরূপ টাইপ করার জন্য aa, ইনপুট স্ট্রিংটি হবে 2 2

  • এটি গ্যারান্টিযুক্ত যে ইনপুট স্ট্রিং সর্বদা একটি বৈধ কীপ্যাড কোড হবে।


ইনপুট

আপনার ভাষা যেভাবেই সমর্থন করে আপনি ইনপুট নিতে পারেন।


আউটপুট

আপনি যেভাবে চান ফলাফল আউটপুট করতে পারেন। ফাংশন returnএছাড়াও অনুমোদিত।


পরীক্ষার কেস

#4440555#666888330#999#66688111 -> "I Love You!"
#6#33777 7779990#222#4477744477778627777111 -> "Merry Christmas!"
#44#27 79990#66#3390#999#332777111 -> "Happy New Year!"


এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী!



4
আমি মনে করি yearগত পরীক্ষার ক্ষেত্রে মূলধনটি ভুল।
মালটিসেন

1
আমাদের কী লুপিং বিবেচনা করতে হবে? পছন্দ করুন, 2222-> অবৈধ বা 2222-> খ?
কুয়েলিন লি

@ মালটিসেন হ্যাঁ, আপনি ঠিক বলেছেন। আমি প্রশ্নটি সম্পাদনা করেছি। এটা ইশারা জন্য ধন্যবাদ। :)
অর্জুন

আগ্রহের বাইরে, ##ডাবল স্পেস কি হ্যান্ডেল করা দরকার?
নীল

উত্তর:



3

জাভাস্ক্রিপ্ট, 105 99 বাইট

f=
(s,a)=>s.replace(/#| ?((.)\2*)/g,(m,n,d)=>d?(l=a[d][n.length-1],x?l:l.toUpperCase()):(x=!x,''),x=1)

a=['  ','.,!','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']

F=s=>console.log( f(s,a) )
F('#4440555#666888330#999#66688111')
F('#6#33777 7779990#222#4477744477778627777111');
F('#44#27 79990#66#3390#999#332777111');

  • 6 বাইট বন্ধ ধন্যবাদ @ নিল।

আপনি একটি অস্থায়ী (যেমন l) অক্ষরে সংরক্ষণ করে এবং তারপরে কিছু বাইট সংরক্ষণ করতে পারেন c?l:l.toUpperCase()
নীল

@Neil। অ্যারে বিবেচনা করে ইতিমধ্যে ছোট হাতের অক্ষরে রয়েছে ... ধন্যবাদ :)
ওয়াশিংটন গুডেস

2

পার্ল 6 ,  119  97 বাইট

মানচিত্র ভিত্তিক সমাধান 119 বাইট

->$_,\a{my$u=0;[~] map {/'#'/??{$u+^=1;|()}()!!(&lc,&uc)[$u](a[.substr(0,1)].substr(.chars-1,1))},.comb(/(\d)$0*|'#'/)}

চেষ্টা করে দেখুন

প্রতিস্থাপন ভিত্তিক সমাধান 97 বাইট

->$_,\a{my$u=0;S:g/(\d)$0*|./{$0??(&lc,&uc)[$u](a[$0].substr($/.chars-1,1))!!($u+^=$/eq'#')x 0}/}

চেষ্টা করে দেখুন

সম্প্রসারিত:

->     # pointy block lambda

  $_,  # input string
  \a   # helper array

{

  my $u = 0;

  S                        # substitute (implicit against 「$_」)
  :global
  /

    | (\d) $0*             # digit followed by same digit
    | .                    # everything else

  /{

    $0                     # is 「$0」 set (digit)


    ??                     # if so then
        (&lc,&uc)[$u](     # call either 「lc」 or 「uc」

          a[$0]            # get the value from the input array
          .substr(         # select the correct character
            $/.chars - 1,
            1
          )

        )


    !!
        (
          $u +^= $/ eq '#' # numeric xor $u if 「#」 was matched
        ) x 0              # string repeated zero times (empty string)

  }/
}

2

জাভাস্ক্রিপ্ট ES6 - 124 বাইট

Golfed:

f=h=>a=>(o=c="")+a.match(/#|(.)\1*/g).forEach(e=>e==" "?0:e=="#"?c=!c:(n=h[e[0]][e.length-1])*(o+=c?n.toUpperCase():n))?o:0;

f=h=>a=>(o=c="")+a.match(/#|(.)\1*/g).forEach(e=>e==" "?0:e=="#"?c=!c:(n=h[e[0]][e.length-1])*(o+=c?n.toUpperCase():n))?o:0;

console.log(f(["  ",".,!","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"])("#4440555#666888330#999#66688111"));
console.log(f(["  ",".,!","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"])("#6#33777 7779990#222#4477744477778627777111"));
console.log(f(["  ",".,!","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"])("#44#27 79990#66#3390999332777111"));

Ungolfed:

f=(a,h)=>{
    //out string
    o="";
    //uppercase or lowercase (initialized as "" and then inverted in golfed version)
    c=0;
    //split it into array of instructions, which are sets of repeated characters, or # solely alone
    a.match(/#|(.)\1*/g).forEach((e)=>{
        e==" "?0:
            e=="#" ? (c=!c) : ( ()=>{ //lambda added because two statements ungolfed, multiplied in the golfed version
                    n=h[e[0]][e.length-1];
                    o+=c?n.toUpperCase():n;
                })()
    })
    return o;
}

1

জাভাস্ক্রিপ্ট, 301 বাইট

(a,b)=>{u="l";p=[];r="";a.split``.map((c,i)=>p.push(c!=a[i-1]?" "+c:c));p.join``.trim().replace('   ', ' ').split` `.map(l=>{if(l=="#"){u=(u=="l"?b.forEach((y,j)=>b[j]=y.toUpperCase())||"u":b.forEach((y,j)=>b[j]=y.toLowerCase())||"l")}else{if(l!="  "){r+=b[+l[0]][l.length-1]}else{r+=" "}}});return r}

f=(a,b)=>{u="l";p=[];r="";a.split``.map((c,i)=>p.push(c!=a[i-1]?" "+c:c));p.join``.trim().replace('   ', ' ').split` `.map(l=>{if(l=="#"){u=(u=="l"?b.forEach((y,j)=>b[j]=y.toUpperCase())||"u":b.forEach((y,j)=>b[j]=y.toLowerCase())||"l")}else{if(l!="  "){r+=b[+l[0]][l.length-1]}else{r+=" "}}});return r}

console.log(f("#4440555#666888330#999#66688111 ",["  ",".,!","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]));
console.log(f("#6#33777 7779990#222#4477744477778627777111",["  ",".,!","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]));
console.log(f("#44#27 79990#66#3390#999#332777111",["  ",".,!","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]));

আমি জানি এটি খুব দীর্ঘ, তবে এটি আমার পক্ষে সেরা।


1

ভি , 60 বাইট

Í /|
ͨ䩨±*©/½a[submatch(1)][len(submatch(2))]
Í|
ò/#
g~$x

(একটি ছাপিয়ে যায় না ½<Ctrl+r>a)

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা করা


Í /|                                          #Replace all " " with "|"
ͨ䩨±*©                                      #Replace all (\d)(\1*)
        /½                                    #With =
          ^Ra                                 #(Inserts the passed array)
             [submatch(1)][len(submatch(2))]  #Index into the array
Í|                                            #Replace all "|" with "" (second ò implied)
ò   ò                                         #Recursively (until breaking)
 /#                                           #Go to the next #
g~$                                           #Toggle case until the of the line
   x                                          #Delete current char (#)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.