पाठ के लिए कीपैड कोड!


15

इनपुट के रूप में एक स्ट्रिंग और एक ऐरे को देखते हुए, आपका कार्य टेक्स्ट को आउटपुट करना है इनपुट स्ट्रिंग तब प्रिंट होगी जब एक विशिष्ट कंप्यूटर कीपैड पर टाइप किया जाएगा। मोबाइल कीपैड में, एक अक्षर को बटन n बार दबाकर टाइप किया जाता है, जहां n बटन की लेबल पर अक्षर की स्थिति कहां है। तो, 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 बाइट्स थैंक्स @Neil।

आप कुछ बाइट्स को एक अस्थायी (जैसे l) में पत्र को संग्रहीत करके और फिर उपयोग करके बचा सकते हैं c?l:l.toUpperCase()
नील

@Neil। सरणी को ध्यान में रखते हुए पहले से ही लोअरकेस में है ... धन्यवाद :)
वाशिंगटन Guedes

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

जावास्क्रिप्ट ईएस 6 - 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 (#)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.