সেল ফোন কীবোর্ড টাইপিং


17

সেল ফোন কীবোর্ড টাইপিং

এই প্রশ্নটি কিছুক্ষণ আগে জিজ্ঞাসা করা হয়েছিল, তবে খারাপ চশমাগুলির কারণে এটি বন্ধ ছিল। সুতরাং, আমি আরও ভাল চশমা দিয়ে এটি আবার করছি। এই প্রশ্নটি সম্পর্কিত, তবে বিপরীত দিকে যায়।

টি 9 আসার আগে, একটি পাঠ্য বার্তায় একটি অক্ষর টাইপ করার জন্য, আপনি যে চরিত্রটি চেয়েছিলেন তা পেতে আপনাকে বেশ কয়েকটি বার কী চাপতে হয়েছিল। রেফারেন্সের জন্য, এখানে মানক ম্যাপিং:

+-------+-------+-------+
|   1   |   2   |   3   |
|  .?!1 |  ABC2 |  DEF3 |
+-------+-------+-------+
|   4   |   5   |   6   |
|  GHI4 |  JKL5 |  MNO6 |
+-------+-------+-------+
|   7   |   8   |   9   |
| PQRS7 |  TUV8 | WXYZ9 |
+-------+-------+-------+
|   *   |   0   |   #   |
|   ←   |SPACE 0|   →   |
+-------+-------+-------+

*ব্যাকস্পেস, 0এটি একটি স্পেস ( ' ') বা সংখ্যা 0এবং #বর্তমান চরিত্রটিকে নিশ্চিত করে। সরলতার স্বার্থে, সমস্ত চরিত্র বড় হাতের অক্ষরে।

আপনি যে কী-এর জন্য সম্ভাব্য অক্ষর মাধ্যমে একটি কী একাধিক বার নির্বাচিত চরিত্র চক্র চাপা কখন: 2 -> A, 22 -> B, 222 -> C, 2222 -> 2, 22222 -> A, ইত্যাদি। মনে রাখবেন যেহেতু *কেবল একটি বিকল্প রয়েছে তাই এটি বারবার টিপলে একাধিক ব্যাকস্পেস প্রবেশ করতে পারে। একটানা #একাধিক বার চাপলে কোনও প্রভাব নেই। একটি পথচলা #অপ্রয়োজনীয়।

অতিরিক্তভাবে, কী টিপানোর সাথে সাথেই যদি কোনও আলাদা কী টিপানো হয় তবে পূর্ববর্তী কীটিপ্রেস স্বয়ংক্রিয়ভাবে নিশ্চিত হয়ে যায়। সুতরাং, 223কার্যত অভিন্ন 22#3

আপনার চ্যালেঞ্জটি হ'ল কোনও সেল ফোন প্রদর্শিত হবে এমন কি স্ট্রেসের সাথে সম্পর্কিত কিপ্রেসের একটি সিরিজ অনুবাদ করা।

উদাহরণ

8#99999#055#33#999#22#666#2#777#3#1 -> T9 KEYBOARD
4433555#55566609666666677755533*3111 -> HELLO WORLD!
7##222#222**7#222#4 -> PPCG
00#0#00 -> 0 0

বিধি

লিডারবোর্ড

এই পোস্টের নীচে স্ট্যাক স্নিপেট উত্তরগুলি থেকে লিডারবোর্ড তৈরি করে) ক) ভাষা প্রতি সংক্ষিপ্ত সমাধানের তালিকা হিসাবে এবং খ) সামগ্রিক লিডারবোর্ড হিসাবে।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

## Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

## Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আপনি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের সমষ্টি বা আপনি পৃথকভাবে দোভাষী পতাকা দণ্ডের তালিকা করতে চান), নিশ্চিত করুন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

## Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও তৈরি করতে পারেন যা স্নিপেটে প্রদর্শিত হবে:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


1
আপনি কিভাবে সংখ্যা উত্পাদন করবেন? আপনার একটি উদাহরণে '9' নম্বর রয়েছে তবে আপনার স্পেসিফিকেশন ( 2 -> A, 22 -> B..., 2222 -> A....) কোনও সংখ্যা উত্পাদন করতে দেয় না।
সি কুইলি

1
@ সি কুইলি এই চিত্রটি অন্ধভাবে অনুলিপি করার জন্য আমি পেয়েছি যা এখনই ঠিক করা হয়েছে।
মেগো


1
@AlexA। কোনও ডুপ নয়, এটি স্ট্যান্ডার্ড ফোন নামপ্যাড ইনপুট, টি -9 অভিধানের অনুসন্ধান নয়।
মেগো

উত্তর:


3

কে 5, 112 বাইট

{(20#'((" ";".?!"),((3*!6),19 22)_`c$65+!26),'$!10)[.*x]20!#1_x}'(){$[42=*y;(-#y)_x;35=*y;x;x,,y]}/{(&~0=':x)_x}

এটি সত্যিই একটি জগাখিচুড়ি, তবে আমি মনে করি এটি গল্ফ করার জন্য যথেষ্ট পরিমাণে জায়গা আছে।

প্রথমে আমাদের কীম্যাপটির জন্য একটি সারণী নির্মাণ করতে হবে। তাদের সাথে 2, 4 এবং 5 টি অক্ষরের ম্যাপযুক্ত কী রয়েছে, সুতরাং প্রতিটি এন্ট্রি 20 টি করে প্যাড করা চক্রাকারে এই টেবিলটিকে পরে সূচীকরণের প্রক্রিয়াটিকে সহজতর করে:

  (20#'((" ";".?!"),((3*!6),19 22)_`c$65+!26),'$!10)
(" 0 0 0 0 0 0 0 0 0 0"
 ".?!1.?!1.?!1.?!1.?!1"
 "ABC2ABC2ABC2ABC2ABC2"
 "DEF3DEF3DEF3DEF3DEF3"
 "GHI4GHI4GHI4GHI4GHI4"
 "JKL5JKL5JKL5JKL5JKL5"
 "MNO6MNO6MNO6MNO6MNO6"
 "PQRS7PQRS7PQRS7PQRS7"
 "TUV8TUV8TUV8TUV8TUV8"
 "WXYZ9WXYZ9WXYZ9WXYZ9")

তারপরে আমি ইনপুটটিকে রানগুলিতে ভাগ করেছি:

 {(&~0=':x)_x}"8#99999#055#33#999"
(,"8"
 ,"#"
 "99999"
 ,"#"
 ,"0"
 "55"
 ,"#"
 "33"
 ,"#"
 "999")

যখনই আমি * এর মুখোমুখি হই তখন যেকোনও # রান ছাড়ুন এবং স্ট্রিপ পিছনে চলে:

  (){$[42=*y;(-#y)_x;35=*y;x;x,,y]}/{(&~0=':x)_x}"8#99999#055#33#999"
(,"8"
 "99999"
 ,"0"
 "55"
 "33"
 "999")

এবং তারপরে আমি প্রতিটি রানের দৈর্ঘ্য এবং প্রথম উপাদানটির উপর ভিত্তি করে সেই সন্ধানের সারণিতে সূচক করতে প্রস্তুত to

সব একসাথে:

  {(20#'((" ";".?!"),((3*!6),19 22)_`c$65+!26),'$!10)[.*x]20!#1_x}'(){$[42=*y;(-#y)_x;35=*y;x;x,,y]}/{(&~0=':x)_x}"4433555#55566609666666677755533*3111"
"HELLO WORLD!"

সম্পাদনা:

5 বাইট সংরক্ষণ করুন:

0 3 6 9 12 15 19 22
((3*!6),19 22)

আপনি সংক্ষিপ্ত (20#'((" ";".?!"),0 3 6 9 12 15 19 22_`c$65+!26),'$!10)করতে পারেন (20#'((" ";".?!"),((3*!6),19 22)_`c$65+!26),'$!10)
kirbyfan64sos

হ্যাঁ, আমি আসলে কয়েক মিনিট আগে সন্ধান করেছি।
18 ই

3

পাইথন 2, 230 206 বাইট

import re
f=lambda a,b=dict(zip("0123456789*#"," 0~.?!1~ABC2~DEF3~GHI4~JKL5~MNO6~PQRS7~TUV8~WXYZ9~\b~".split("~"))):"".join([j and b[j][(len(i)-1)%len(b[j])]or b[i]for i,j in re.findall(r"((\d)\2*|.)",a)])

এটি একটি ফাংশন এফ তৈরি করে যা যুক্তি হিসাবে একটি কী-স্ট্রেসের স্ট্রিং গ্রহণ করে এবং সেল ফোনের সাথে সংশ্লিষ্ট স্ট্রিংটি প্রদর্শন করে। এটি তাদের সম্পর্কিত অক্ষরগুলির অভিধান ম্যাপিং কী হিসাবে optionচ্ছিক দ্বিতীয় যুক্তিটি গ্রহণ করে, যেমন {"0": "0", "1": "।?! 1", ...}

প্রথমত, কীপ্রেসের স্ট্রিংগুলি পুনরাবৃত্তি করা অক্ষর দ্বারা গোষ্ঠীভূত করা হয়, যেমন ["8", "#", "99999", "#", ...] । তারপরে, প্রতিটি গ্রুপের প্রথম অক্ষরটি দ্বিতীয় তর্ক হিসাবে যেমন অভিধানে ম্যাপ করা হয়, যেমন ডাব্লুএক্সওয়াইজেড 9-তে মানচিত্র । শেষ পর্যন্ত, গ্রুপটির দৈর্ঘ্য অভিধান থেকে মান হিসাবে অফসেট হিসাবে ব্যবহৃত হয়।

নোট করুন যে অফসেটটিতে অবশ্যই পুনরাবৃত্তি করা অক্ষরের গোষ্ঠীর দৈর্ঘ্যের উপর মডুলো ব্যবহার করা উচিত কারণ কীপ্রেসগুলি চক্র হতে পারে। এছাড়াও মনে রাখবেন # অক্ষরে ম্যাপ করা হয় \ 0 এবং শেষে শুধুমাত্র সরিয়ে দিয়েছি কারণ 99 # 99 হিসাবে একই নয় 9999

প্রশ্নের প্রতিটি উদাহরণের জন্য এখানে ফাংশনটির আউটপুট দেওয়া হচ্ছে:

>>> print f("8#99999#055#33#999#22#666#2#777#3#1")
T9 KEYBOARD.
>>> print f("4433555#55566609666666677755533*3111")
HELLO WORLD!
>>> print f("7##222#222**7#222#4")
PPCG
>>> print f("00#0#00")
0 0

3

জাভাস্ক্রিপ্ট, 214 184 168 162 বাইট

x=>(x.match(/(.)\1*/g,f='').map(a=>f=(l=a.length,v=' 0#.?!1#ABC2#DEF3#GHI4#JKL5#MNO6#PQRS7#TUV8#WXYZ9'.split`#`[a[0]])?f+v[--l%v.length]:a<'*'?f:f.slice(0,-l)),f)

এটি সম্ভবত কিছুটা ছোট করা যেতে পারে তবে আমি ফলাফলটি নিয়ে বেশ খুশি। অক্ষরগুলি এক বা একাধিকবার পুনরায় গ্রুপে বিভক্ত হয়, তারপরে অ্যারের মধ্য দিয়ে পদক্ষেপ নিয়ে প্রতিটি অক্ষরকে হ্যাশের মান অনুসারে ম্যাপ করে চূড়ান্ত স্ট্রিংয়ের সাথে যুক্ত করে। যদি এটি '#' এর কোনও সংখ্যক জুড়ে আসে তবে তা এড়িয়ে চলে। যদি এটি কোনও '*' জুড়ে আসে, এটি চূড়ান্ত স্ট্রিংয়ের শেষে থেকে তাদের সংখ্যাটি সরিয়ে দেয়।


0

পাইথন 2, 237 বাইট

Cr3 এর অভিধান ব্যবহার করা হচ্ছে তবে পুনরায় ছাড়াই।

def f(i):
 d=dict(zip("0123456789"," 0|.?!1|ABC2|DEF3|GHI4|JKL5|MNO6|PQRS7|TUV8|WXYZ9".split("|")))
 s,x,j='',i[0],0
 for c in i[1:]+'#':
  if c==x:j+=1
  else:
   if x>'/':s+=d[x][j%len(d[x])]
   j=0
  if c=='*':s=s[:-1]
  x=c
 return s

-1

পাইথন 2, 265 বাইট

এটা অনেক দীর্ঘ। আইও: স্টিডিন, স্টাটআউট

a=reduce(lambda q,w:q+" "+[w,""][w=="#"]if q[-1]!=w else q+w,raw_input()).split()
while "*" in a:del a[a.index("*")-1:a.index("*")+1]
print"".join([(lambda a:a[len(q)%len(a)-1])(" 0:.?!1:ABC2:DEF3:GHI4:JKL5:MNO6:PQRS7:TUV8:WXYZ9".split(":")[int(q[0])])for q in a])

তৃতীয় উদাহরণ, 7 ## 222 # 222 ** 7 # 222 # 4 , আপনার স্ক্রিপ্টটি একটি বাড়াতে হবে ValueError '*': বেস 10 সঙ্গে () int- এ জন্য অবৈধ আক্ষরিক।
cr3
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.