รหัส KeyPad เป็นข้อความ!


14

รับสายอักขระและอาร์เรย์เป็นอินพุตงานของคุณคือส่งข้อความที่ป้อนสตริงที่จะพิมพ์เมื่อพิมพ์บนแป้นพิมพ์แบบพกพาทั่วไป ใน Mobile Keypad ตัวอักษรจะถูกพิมพ์โดยการกดปุ่ม n ครั้งโดยที่ n คือตำแหน่งที่ตัวอักษรอยู่ที่ป้ายชื่อของปุ่ม ดังนั้นควรเอาท์พุท22b

ปุ่มกด


กฎระเบียบ

  • อาร์เรย์ตัวช่วยจะมีผังแสดงชุดอักขระ ( [" ",".,!","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]) สิ่งนี้จะได้รับเพื่อช่วยให้คุณประหยัดบางไบต์

  • #สัญลักษณ์จะสลับกรณี กรณีเริ่มต้นจะต่ำกว่า ดังนั้นควรเอาท์พุท2#3aD

  • 0จะเพิ่มพื้นที่ ดังนั้นควรเอาท์พุท202a a

  • จะมีช่องว่าง ( ) ในอินพุตสตริงเพื่อเริ่มตัวอักษรใหม่ที่อยู่บนปุ่มตัวเลขเดียวกัน ตัวอย่างพิมพ์aa, 2 2สายป้อนจะ

  • เป็นที่แน่นอนว่าอินพุตสตริงจะเป็นรหัส KeyPad ที่ถูกต้องเสมอ


อินพุต

คุณสามารถป้อนข้อมูลในสิ่งที่ภาษาของคุณสนับสนุน


เอาท์พุต

คุณสามารถแสดงผลลัพธ์ในแบบที่คุณต้องการ ฟังก์ชั่นที่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ในกรณีทดสอบครั้งสุดท้ายผิด
Maltysen

1
เราต้องพิจารณาการวนซ้ำหรือไม่? เช่น 2222-> ไม่ถูกต้องหรือ 2222-> b?
Kuilin Li

@Maltysen ใช่คุณพูดถูก ฉันแก้ไขคำถามแล้ว ขอบคุณที่ชี้นำ :)
Arjun

ไม่สนใจว่า##ต้องจัดการหรือเว้นวรรคสองครั้งหรือไม่
Neil

คำตอบ:


4

Pyth - 31 ไบต์

สิ่งใหม่ที่สำคัญทำให้ฉันเสียค่าใช้จ่ายมากเกินไป

ss.emr!FZk@@QsedthdfndeTrb8cz\#

Test Suite


3

JavaScript, 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

@Neil เมื่อพิจารณาอาร์เรย์ที่มีตัวพิมพ์เล็กอยู่แล้ว ... ขอบคุณ :)
Washington Guedes

2

Perl 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

JavaScript ES6 - 124 ไบต์

แข็งแรงเล่นกอล์ฟ:

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

JavaScript, 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

V , 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.