একটি ফোন নম্বরে রটারি ডায়াল ডাল গণনা করুন (চিঠিপত্র সহ)


34

আপনার দাদা-দাদীর দিনে, একটি ফোন নম্বর ডায়াল করার কাজটি এইভাবে রোটারি ডায়াল দিয়ে করা হয়েছিল :

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

অঙ্ক ডায়াল এন প্রয়োজন এন , যেমন "ডাল" এন জন্য = 0 যা দশ ডাল ছাড়া।

রোটারি ফোনের এমন বৈশিষ্ট্য রয়েছে যে বড় অঙ্কগুলি (8, 9, 0) ছোট অঙ্কগুলির (1, 2, 3) এর চেয়ে ডায়াল করতে বেশি সময় নেয়। প্রারম্ভিক অঞ্চল কোড মানচিত্র আঁকার ক্ষেত্রে এটি একটি গুরুত্বপূর্ণ বিবেচনা ছিল এবং কেন নিউইয়র্ক সিটির ভারী জনসংখ্যা (এবং ফোন লাইন) ঘনত্বের সাথে 212 (মাত্র 5 টি ডাল) পেয়েছে , যখন 907 (26 টি ডাল) খুব কম জনবসতিযুক্ত আলাস্কারে গিয়েছিল। স্পর্শ-স্বন ডায়ালিং জনপ্রিয় হয়ে উঠলে অবশ্যই এগুলি সমস্ত অপ্রাসঙ্গিক হয়ে ওঠে।

চ্যালেঞ্জ

যতটা সম্ভব বাইটে লিখুন, একটি প্রোগ্রাম বা ফাংশন যা টেলিফোন নম্বরযুক্ত স্ট্রিং (বা অক্ষরের ক্রম) হিসাবে ইনপুট হিসাবে নেয় এবং তার ঘূর্ণমান ডায়াল ডালের সংখ্যাকে আউটপুট করে। এগুলি নিম্নরূপ গণনা করতে হবে:

সংখ্যা

  • 1-9 অঙ্কগুলি ডালের সংখ্যা হিসাবে গণনা করে।
  • সংখ্যা 0 ডাল হিসাবে গণনা করা হয়।

চিঠিপত্র

নোট করুন যে ডায়ালের 2-9 অঙ্কগুলিতে ল্যাটিন বর্ণমালার বর্ণগুলি যুক্ত রয়েছে। এগুলি মূলত নামযুক্ত এক্সচেঞ্জের উদ্দেশ্যে করা হয়েছিল , তবে পরে ফোনফোর্ড এবং টেক্সট বার্তা ইনপুট সিস্টেমগুলির জন্য এটি পুনরায় বরাদ্দ করা হয়েছিল ।

আপনার অবশ্যই নিজের ফোন নম্বরগুলিতে অক্ষরের E.161 অ্যাসাইনমেন্টটি ব্যবহার করে চিঠিগুলি সমর্থন করবেন:

  • এ, বি, সি = ২
  • ডি, ই, এফ = 3
  • জি, এইচ, আই = 4
  • জে, কে, এল = 5
  • এম, এন, ও = 6
  • পি, কিউ, আর, এস = 7
  • টি, ইউ, ভি = 8
  • ডাব্লু, এক্স, ওয়াই, জেড = 9

আপনি ধরে নিতে পারেন যে ইনপুটটি ইতিমধ্যে কেস-ভাঁজ হয়ে গেছে, উপরের বা নিম্নতর ক্ষেত্রে।

অন্যান্য অক্ষর

আপনার অবশ্যই অক্ষরের ()+-./এবং স্থানের বিন্যাস বিভাজক হিসাবে নির্বিচারে ব্যবহারের অনুমতি দিতে হবে । আপনি পারে করার অনুমতি বেছে নেওয়া হয়েছে কোন যদি এটা বাস্তবায়ন করা আরো সহজ, এই কাজের জন্য অ আলফানিউমেরিক অক্ষর।

এই অক্ষরগুলি নাড়ি গণিতে অবদান রাখে না।

উদাহরণ কোড

পাইথনে একটি অ-গল্ফযুক্ত অনুসন্ধান টেবিল এবং ফাংশন:

PULSES = {
    '1': 1,
    '2': 2, 'A': 2, 'B': 2, 'C': 2,
    '3': 3, 'D': 3, 'E': 3, 'F': 3,
    '4': 4, 'G': 4, 'H': 4, 'I': 4,
    '5': 5, 'J': 5, 'K': 5, 'L': 5,
    '6': 6, 'M': 6, 'N': 6, 'O': 6,
    '7': 7, 'P': 7, 'Q': 7, 'R': 7, 'S': 7,
    '8': 8, 'T': 8, 'U': 8, 'V': 8,
    '9': 9, 'W': 9, 'X': 9, 'Y': 9, 'Z': 9,
    '0': 10
}

def pulse_count(phone_num):
    return sum(PULSES.get(digit, 0) for digit in phone_num)

উদাহরণ ইনপুট এবং আউটপুট

  • 911 11 ডলার
  • 867-5309 48 ডলার
  • 713 555 0123 → 42
  • +1 (212) PE6-5000 । 57
  • 1-800-FLOWERS । 69
  • PUZZLES 48 ডলার

আমি ধরে নিলাম যে সালিসি ASCII বিরামচিহ্ন এবং স্থানগুলি সাধারণত ফোন নম্বরগুলির জন্য ব্যবহৃত হয় ( +- ()*#.) অক্ষরের মতো অক্ষরগুলি বড় হাতের মধ্যে সীমাবদ্ধ থাকে। আমি ভুল হলে শুধরে.
অ্যাডম

1
@ অ্যাডাম: আমি প্রয়োজনীয় বিরামচিহ্নগুলি কেবল কয়েকটি সাধারণ বিভাজকের মধ্যে সীমাবদ্ধ করেছি। এটি ইচ্ছাকৃতভাবে অন্তর্ভুক্ত করে না *এবং #, যার টাচ-টোন ফোনে বিশেষ অর্থ রয়েছে এবং রোটারিগুলিতে ডায়ালযোগ্য নয়।
dan04

1
আমরা কি সর্ব-বড় হাতের পরিবর্তে অল-লোয়ারকেস ইনপুট ব্যবহার করতে পারি? আমরা কি স্ট্রিংয়ের পরিবর্তে অক্ষরের অ্যারে নিতে পারি?
গ্রিমি

1
আমি একজন সময় ভ্রমণকারী! আমি একজন সময় ভ্রমণকারী! আমি একজন সময় ভ্রমণকারী! আমি যখন ছোট ছিলাম আমি অবশ্যই এই জাতীয় ফোন ব্যবহার করতাম, স্পষ্টতই আমি আমার নিজের গ্র্যান্ডফাদার !!!!!!! যা আমি আসলে এটি সম্পর্কে চিন্তা করার সময় বেশ সুন্দর ick Bleah !!!
বব জার্ভিস - মনিকা

3
আমি দাদা। আমি 1950 এর দশকে এই জাতীয় ফোন ব্যবহার করেছি। এবং যখন আমি একটি গ্রামাঞ্চলের কোনও শহরে চলে এসেছি, আমি আবিষ্কার করেছি যে ফোন সংস্থা টাচ-টোন পরিষেবা দেয় না did এটি 1985 সালে ছিল! দুষ্টুমি করসি না! আমার দাদির পার্লারে একটি ফোন ছিল যাতে একটি হুক এবং ক্র্যাঙ্ক ছিল। আপনি কানের কানের কাছ থেকে কানের দুলটি সরিয়ে নিয়েছেন এবং স্যুইচবোর্ড অপারেটরটি পেতে ক্র্যাঙ্কটি ঘুরিয়ে দিয়েছেন। সরাসরি দূরত্বে ডায়ালিং সেট আপ করার সময় তাকে এটিকে প্রতিস্থাপন করতে হয়েছিল।
ওয়াল্টার মিট্টি

উত্তর:


25

05 এ বি 1 , 19 18 17 15 বাইট

AÁ0ªā6+žq÷9š‡þO

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

এটি π ব্যবহারের প্রথম উত্তর π আপনি কেন জিজ্ঞাসা করতে পারেন π কেন? ঠিক আছে, বর্ণগুলি ক্রম অনুসারে 22233344455566677778889999 এর সাথে যুক্ত। সর্বাধিক সংখ্যা 3 বার পুনরাবৃত্তি দেখুন, কিন্তু 7 বার 4 বার পুনরাবৃত্তি করুন। আপনি বলতে পারেন যে প্রতিটি অঙ্ক গড়ে (3 + 1/7) বার পুনরাবৃত্তি হয়। আমি অবাক হয়েছি যদি এমন কোনও সংখ্যা রয়েছে যা প্রায় 3 + 1/7 এবং 22/7 এর চেয়ে কম বাইট নেয় ...

এটি কেবল 4 9s দেয়, 4 9 এস নয়, তাই আমাদের এখনও জেডকে একটি বিশেষ কেস হিসাবে পরিচালনা করতে হবে।

A               # alphabet (abcdefghijklmnopqrstuvwxyz)
 Á              # rotate right (zabcdefghijklmnopqrstuvwxy)
  0ª            # append 0 (zabcdefghijklmnopqrstuvwxy0)

ā6+             # range [7..33]
   žq÷          # divide by π (22233344455566677778889991010)
      9š        # prepend 9 (922233344455566677778889991010)

‡               # transliterate the implicit input with the two lists above
                # this replaces z → 9, a → 2, … y → 9, 0 → 10
 þ              # remove all non-digits
  O             # sum

বড় হাতের বদলে ছোট হাতের কেন?
dan04

1
@ dan04 কারণ 05AB1E এর একটি ধাক্কা দেওয়ার জন্য অন্তর্নির্মিত রয়েছে "abcdefghijklmnopqrstuvwxyz", তবে এটির জন্য নয় "ABCDEFGHIJKLMNOPQRSTUVWXYZ"। আমি বর্ণমালাটি ইনপুটকে ছোট হাতের কাছে রূপান্তর না করে বড় হাতের কাছে রূপান্তর করতে পারতাম, তবে এটি একই বাইককন্ট।
গ্রিমি

1
আপনার প্রথম দুটি কমান্ড অপ্রয়োজনীয় করার জন্য আমি প্রশ্নটি সম্পাদনা করেছি।
dan04

3
@ জোনাঃ আমি কাঙ্ক্ষিত ক্রম পাওয়ার জন্য একটি ধ্রুবক দ্বারা একটি পরিসরকে বিভক্ত করার ধারণাটি দিয়ে শুরু করেছি, তারপরে 05 এবি 1 ই-তে "3 এর চেয়ে কিছুটা বেশি" প্রকাশের সর্বোত্তম উপায়ের সন্ধান করার সময় আমি মনে করি পাই একটি অন্তর্নির্মিত ছিল।
গ্রিমি

2
পাই ব্যবহারের জন্য +1
ড্র্যাকোনিস

9

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 51 বাইট

n=>n.Sum(x=>x>64?(x-59-x/83-x/90)/3:x>47?1-~x%~9:0)

@ রিসার্সিভকে ধন্যবাদ 1 বাইট সংরক্ষিত

@ এক্সপায়ার্ডডাটার পর্যবেক্ষণের জন্য 10 বাইট ধন্যবাদ সংরক্ষণ করা হয়েছে যা কেবল ইনপুটটিতে () +-/.থাকবে

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

n =>                     // Function taking input as string
  n.Sum(x =>             // Map each value 'x' through the following
    x>64 ?               //   If 'x' is an uppercase letter
      (x-59-x/83-x/90)/3 //     Take each char's ASCII value subtracted by 59, and subtract
                         //     one if the char is 'S' and one if the char is 'Z'
    : x>47 ?             //   Else if the char is a digit
      1-~x%~9            //   Take 1 - (-x - 1) % -10 (Maps 0 to 10, and 1-9 to themselves
    : 0                  //   Else, 0
  )                      // And sum it all up, then return it

4
-10হয় ~9যা প্রেক্ষাপটে কাজ করা উচিত।
পুনরাবৃত্তি

যে স্মার্ট @recursive, ধন্যবাদ
অজ্ঞতা প্রতিমূর্তি

1
এক্স <91 চেক অপ্রয়োজনীয় যেহেতু ইনপুটটিতে কেবল () + -। / স্পেস কী এবং সমস্ত সংখ্যার সমন্বয়ে গঠিত হবে <x 64 তাই আমরা x> 64 (সুতরাং -5 বাইট) যাচাই করে অক্ষরটি বড়হীন কিনা তা নির্ধারণ করতে পারি
মেয়াদোত্তীর্ণ ডেটা

একই <x 58 চেকের জন্য, যেহেতু 58-64 পরিসরের কোনও কিছুই ইনপুটটিতে থাকবে না
মেয়াদোত্তীর্ণ ডেটা


5

এপিএল (ডায়ালগ ইউনিকোড) , 27 বাইট এসবিসিএস

বেনামে ট্যাসিট প্রিফিক্স ফাংশন।

+/'@ADGJMPTW'∘⍸+11|(1⌽⎕D)∘⍳

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

(... )∘⍳ এটি ɩ : ndex * নিম্নলিখিত স্ট্রিং প্রতিটি অক্ষর এর
  সূচক 1 + + সর্বোচ্চ সূচক, IE 11 * উপাদান আছে যা পাওয়া যায় না পেতে
⎕D  ডিজিটের:"0123456789"

1⌽ চক্রাকারে এক ধাপ বাম দিকে ঘোরান; "1234567890"

11| 11 *
  * দিয়ে বিভাজন যখন বাকি থাকে তখন এটি সমস্ত অ-সংখ্যার জন্য 0 দেয়
... + এটি নিম্নলিখিতটিতে যুক্ত করুন:

'@ADGJMPTW'∘⍸ɩ nterval ɩ ndex * প্রতিটি অক্ষরের জন্য
  * সুতরাং [-∞, "@") 0 দেয়, [ "@", "একটি") 1 দেয়, [ "একজন", "ডি") 2 দেয়, ইত্যাদি
+/  সমষ্টি যে


5

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

lambda s:sum([(n-59-n/83-n/90)/3,1-~n%~9][n<58]for n in map(ord,s)if n>47)

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

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

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

lambda s:sum(1+'1xxxx2ABCx3DEFx4GHIx5JKLx6MNOx7PQRS8TUVx9WXYZ0'.find(c)/5for c in s)

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

একটি হার্ডকোডযুক্ত লুকিং স্ট্রিং ব্যবহার করে, প্রতিটি ব্লকের সাথে 5 টি অক্ষরের প্রতিটি ব্লক প্রতিটি মানকে 1 দিয়ে শুরু করে দেয় Bla ফাঁকা ফাঁকা স্থানগুলি ভরা হয় x, যা ইনপুটটিতে মূলধনযুক্ত হতে পারে না। ভাগ্যক্রমে, অক্ষরের -1জন্য স্ট্রিং উত্পাদিত হচ্ছে না .findযা শূন্যের যোগফল দেয়।


5

জাভাস্ক্রিপ্ট (নোড.জেএস) , ... 76 69 বাইট

s=>s.replace(/\w/g,q=>w+=1/q?+q||10:parseInt(q,35)*.32-1|0||9,w=0)&&w

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

-7 ধন্যবাদ @ আরনাউল্ড!

ব্যাখ্যা

 q |     1/q     |  +q  | parseInt(q,35)*.32 | parseInt(q,35)*.32-1|0 | Output
---+-------------+------+--------------------+------------------------+--------
 0 | Infinity(T) | 0(F) |         N/A        |           N/A          |   10
 1 |  1.0000(T)  | 1(T) |         N/A        |           N/A          |    1
 2 |  0.5000(T)  | 2(T) |         N/A        |           N/A          |    2
 3 |  0.3333(T)  | 3(T) |         N/A        |           N/A          |    3
 4 |  0.2500(T)  | 4(T) |         N/A        |           N/A          |    4
 5 |  0.2000(T)  | 5(T) |         N/A        |           N/A          |    5
 6 |  0.1666(T)  | 6(T) |         N/A        |           N/A          |    6
 7 |  0.1428(T)  | 7(T) |         N/A        |           N/A          |    7
 8 |  0.1250(T)  | 8(T) |         N/A        |           N/A          |    8
 9 |  0.1111(T)  | 9(T) |         N/A        |           N/A          |    9
 A |    NaN(F)   |  N/A |        3.20        |          2(T)          |    2
 B |    NaN(F)   |  N/A |        3.52        |          2(T)          |    2
 C |    NaN(F)   |  N/A |        3.84        |          2(T)          |    2
 D |    NaN(F)   |  N/A |        4.16        |          3(T)          |    3
 E |    NaN(F)   |  N/A |        4.48        |          3(T)          |    3
 F |    NaN(F)   |  N/A |        4.80        |          3(T)          |    3
 G |    NaN(F)   |  N/A |        5.12        |          4(T)          |    4
 H |    NaN(F)   |  N/A |        5.44        |          4(T)          |    4
 I |    NaN(F)   |  N/A |        5.76        |          4(T)          |    4
 J |    NaN(F)   |  N/A |        6.08        |          5(T)          |    5
 K |    NaN(F)   |  N/A |        6.40        |          5(T)          |    5
 L |    NaN(F)   |  N/A |        6.72        |          5(T)          |    5
 M |    NaN(F)   |  N/A |        7.04        |          6(T)          |    6
 N |    NaN(F)   |  N/A |        7.36        |          6(T)          |    6
 O |    NaN(F)   |  N/A |        7.68        |          6(T)          |    6
 P |    NaN(F)   |  N/A |        8.00        |          7(T)          |    7
 Q |    NaN(F)   |  N/A |        8.32        |          7(T)          |    7
 R |    NaN(F)   |  N/A |        8.64        |          7(T)          |    7
 S |    NaN(F)   |  N/A |        8.96        |          7(T)          |    7
 T |    NaN(F)   |  N/A |        9.28        |          8(T)          |    8
 U |    NaN(F)   |  N/A |        9.60        |          8(T)          |    8
 V |    NaN(F)   |  N/A |        9.92        |          8(T)          |    8
 W |    NaN(F)   |  N/A |       10.24        |          9(T)          |    9
 X |    NaN(F)   |  N/A |       10.56        |          9(T)          |    9
 Y |    NaN(F)   |  N/A |       10.88        |          9(T)          |    9
 Z |    NaN(F)   |  N/A |         NaN        |          0(F)          |    9

সমস্ত [space]().+-/ক্যাপচার করা হয় না /\w/g, সুতরাং তারা মোট প্রভাবিত করবে না।




4

রেটিনা 0.8.2 , 34 বাইট

T`WTPMJGDA`Rd
}T`L`2L
0
55
\d
$*
1

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা:

T`WTPMJGDA`Rd

বর্ণগুলিকে WTPMJGDAঅঙ্কগুলিতে রূপান্তর করুন 9..0

}T`L`2L

বাকী সমস্ত অক্ষর 1 এর সাথে শাফল করুন এবং সমস্ত অক্ষরকে অঙ্কে রূপান্তরিত না করা পর্যন্ত পুনরাবৃত্তি করুন।

0
55

প্রতিস্থাপন 0সঙ্গে 55হিসাবে তারা ডাল ডায়াল করতে একই সংখ্যক নিতে।

\d
$*
1

ডিজিটাল যোগফল নিন।


3

K4 , 44 বাইট

সমাধান:

+/(1+(1+&(5#3),4 3 4),!10)(.Q.A,1_.Q.n,"0")?

উদাহরণ:

q)k)+/(1+(1+&(5#3),4 3 4),!10)(.Q.A,1_.Q.n,"0")?"911"
11
q)k)+/(1+(1+&(5#3),4 3 4),!10)(.Q.A,1_.Q.n,"0")?"867-5309"
48
q)k)+/(1+(1+&(5#3),4 3 4),!10)(.Q.A,1_.Q.n,"0")?"+1 (212) PE6-5000"
57
q)k)+/(1+(1+&(5#3),4 3 4),!10)(.Q.A,1_.Q.n,"0")?"1-800-FLOWERS"
69

ব্যাখ্যা:

নিষ্পাপ পদ্ধতির, সম্ভবত বেশ গল্ফযোগ্য। চরিত্রের অনুসন্ধানের সূচক, অনুসন্ধানের স্কোর, যোগফল।

+/(1+(1+&(5#3),4 3 4),!10)(.Q.A,1_.Q.n,"0")? / the solution
                                           ? / lookup
                          (               )  / do this together
                                       "0"   / string "0"
                                      ,      / join with
                                  .Q.n       / string "0123456789"
                                1_           / drop first
                               ,             / join with
                           .Q.A              / "A..Z"
  (                      )                   / do this together
                      !10                    / range 0..9
                     ,                       / join with
     (              )                        / do this together
               4 3 4                         / list (4;3;4)
              ,                              / join with
         (5#3)                               / list (3;3;3;3;3)
        &                                    / where, creates list 0 0 0 1 1 1 2 2 etc
      1+                                     / add 1
   1+                                        / add 1
+/                                           / sum up


3

সি (জিসিসি) , 94 89 86 80 বাইট

পরামর্শগুলির জন্য সিলিংক্যাট, নলহ্নহোফ এবং রোজমকে ধন্যবাদ।

c;f(char*s){c=*s-48;s=*s?(c<10U?c?c:10:c-17<26U?(c-11-c/35-c/42)/3:0)+f(s+1):0;}

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


লুপের পরিবর্তে পুনরাবৃত্তি ব্যবহার করে 80 বাইট

সুপারিশ c<43Uপরিবর্তেc-17<26U
ceilingcat

2

বাশ , 256 বাইট

আপনি প্রতিস্থাপন করতে পারেন (( … ))সঙ্গে নির্মান letঅভিন্ন বাইট গণনা জন্য। কেস স্টেটমেন্টগুলি হ্রাস করার জন্য একটি ভাল অ্যালগরিদম হতে পারে তবে এটি এখনও পাওয়া যায় নি। কিছুটা পুনর্নির্মাণের সাহায্যে আপনি এটিকে একটি ফাংশনও বানাতে পারেন (তবে function fname { … }উপরে বা লেজ ছাড় না দিয়ে আপনি একই বা কম বাইটে না )।

read p;while ((${#p}>0));do case ${p:0:1} in ([1-9]) ((d+=${p:0:1}));; ([0]) ((d+=10));; ([ABC) ((d+=2));; ([P-S]) ((d+=7));; ([W-Z]) ((d+=9));;([DEF]) ((d+=3));; ([GHI]) ((d+=4));; ([JKL]) ((d+=5));; ([MNO]) ((d+=6));; (?) d=$d; esac;p=${p#?};done;echo $d

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

মানচিত্রের চরিত্রের কৌশলটি ব্যবহার করে একটি আরও ভাল সমাধান এর ব্যবহার করে tr সরঞ্জামটি :

[ত্রির সাথে ব্যাশ], 173 বাইট

read p;p=$(echo $p|tr A-Z 22233344455566677778889999);while ((${#p}>0));do case ${p:0:1} in ([1-9]) ((d+=${p:0:1}));; ([0]) ((d+=10));; (?) d=$d; esac;p=${p#?}; done;echo $d

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


আমি অবশ্যই একটি অ্যালগরিদম মিস করেছি এজেডে কিছু স্ট্রিং প্রতিস্থাপন / অনুবাদ করা। এটি ভাল হবে। আমি মামলা অনুসারে উপরোক্ত সংশোধন করব।
পিজেএফ

while((${#p}))কাজ করে, তিনটি বাইট সংরক্ষণ করে। c=${p:0:1};case c in ([0-9]) ((d+=c?c:10));;অন্য 16 টি সংরক্ষণ করে tr -dc 0-9the টিআর পাইপলাইনে যুক্ত হওয়ার সাথে আপনার মোটেই কেস স্টেটমেন্টের দরকার নেই এবং সংযোজনটি whileশর্তে ভাঁজ করা যেতে পারে &&
ওহ মাই গুডનેસ

ধন্যবাদ ওএমজি আমি প্রায়শই টার্নারি অ্যাসাইনমেন্ট ব্যবহার করি না তাই আমি এটি মিস করেছি। মোছার পরিপূরকের পাশাপাশি আকর্ষণীয় ব্যবহার (তবে এটি আমার সমাধানের মতো অন্য কোনও চরিত্রকে অগ্রাহ্য করে। আমি এটিকে 133 বাইটে নামিয়ে আনতে পেরেছি: read p;p=$(echo $p|tr A-Z 22233344455566677778889999|tr -dc [0-9]);while ((${#p}));do c=${p:0:1}&&((d+=c?c:10));p=${p#?};done;echo $d
পিজেএফ

1
118: p=$(head -1|tr A-Z 22233344455566677778889|tr -dc 0-9);while((${#p}));do((d+=(c=${p:0:1})?c:10));p=${p#?};done;echo $d.. শেষ তিনটি 9 এর দরকার নেই কারণ দ্বিতীয় যুক্তি খুব সংক্ষিপ্ত থাকলে ট্রাম শেষ প্রতিস্থাপনের অক্ষরটি পুনরায় ব্যবহার করবে।
ওহ মাই গুডનેસ

1
প্রথম উদাহরণটি কয়েকটি অপ্রয়োজনীয় জায়গাগুলি সরিয়ে 256 থেকে 236 এ নামানো যেতে পারে। read p;while((${#p}>0));do case ${p:0:1} in ([1-9])((d+=${p:0:1}));;([0])((d+=10));;([ABC)((d+=2));;([P-S])((d+=7));;([W-Z])((d+=9));;([DEF])((d+=3));;([GHI])((d+=4));;([JKL])((d+=5));;([MNO])((d+=6));;(?)d=$d;esac;p=${p#?};done;echo $d
স্টিভ

2

জেলি , 33 24 বাইট

7r32:ØP«9Ṿ€ØAżFyfØDV€o⁵S

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

একটি মোনাডিক লিঙ্ক তার যুক্তি হিসাবে একটি স্ট্রিং গ্রহণ করে এবং ডালের সংখ্যা ফিরিয়ে দেয়। @ গ্রিমির 05AB1E উত্তর দ্বারা অনুপ্রাণিত হয়ে পুনরায় লিখেছেন তাই এগুলি আপোভেশন করতে ভুলবেন না!


2

পাওয়ারশেল , 109 102 87 বাইট

$(switch -r($args|% t*y){\d{$_}[A-Y]{("{0}"-f(.313*$_-18))[0]}[Z]{9}0{10}})-join'+'|iex

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

সম্পাদনা: চর -> ইনটি -> স্ট্রিংয়ের জন্য কিছু স্ট্রিং ফর্ম্যাটিং সহ একটি রেইগেক্স স্যুইচটির জন্য @ মজির ধারণাটি ব্যবহৃত হয়েছে এবং কেবল প্রথম 'অঙ্ক' ধরবে

মূল:

[char[]]"$args"|%{$a+=(48,(('22233344455566677778889999')[$_-65],(58,$_)[$_-ne48])[$_-lt64])[$_-gt47]-=48};$a

আমি <100 বাইট পাওয়ার আশা করছিলাম, তাই আমি আরও কিছু করতে পারি কিনা তা দেখার জন্য আমি এটি দেখতে থাকব keep সংখ্যাটির স্ট্রিং অপসারণ করার একটি উপায় সম্ভবত রয়েছে

দুঃখিত, যদি আমি বুলিয়ান ইনডেক্সিং স্টেটমেন্ট দিয়ে অ্যারেগুলিকে নেস্ট করেছিলাম তবে এটি বিভ্রান্তিকর হয় তবে -

ব্যাখ্যা:

[char[]]"$args"|%{ইনপুট একটি স্ট্রিং হিসাবে casted পড়ে এবং তারপর একটি গৃহস্থালি অ্যারে থেকে এটি explodes এবং একটি জন্য-প্রতিটি পরীক্ষণ সঙ্গে লুপ শুরু ()[$_-gt47]যদি থাকে দেখতে ()+-./প্রবেশ করানো হয় (সমস্ত ASCII অক্ষর মান <48)
নোট: PowerShell গ্রহণ $trueএবং $falseহিসাবে 1এবং0 অ্যারে সূচকের জন্য যথাক্রমে

তারপরে আমরা 48প্রতীকগুলির জন্য পাবো , বা:
('22233344455566677778889999'[$_-65],(58,$_)[$_-ne48])[$_-lt64]

[$_-lt64]একটি সংখ্যা বা একটি অক্ষর (এখানে সব অধিকৃত মূলধন) জন্য চেক। যদি এটি কোনও চিঠি থাকে তবে এটিকে '22233344455566677778889999'[$_-65]0-25 এ অ্যারেতে সূচি থেকে পরিবর্তন করে ডাল মান (একটি চর হিসাবে) আউটপুট করুন। : চরিত্র একটি সংখ্যা হয়, তাহলে আমরা পরিবর্তে তাকান (58,$_)[$_-ne48]পরীক্ষা করার 0এবং outputting 58বা শুধু সাংখ্যিক গৃহস্থালির কাজ নিজেই।

সমস্ত কিছু জুড়ে $a+= ... -=48একটি সংখ্যার ভেরিয়েবল initial এ শুরু করে 0এবং পরে আউটপুট যুক্ত করে। আউটপুট হল একটি সংখ্যার ascii চর মান, সুতরাং বিয়োগ করুন48

দ্রষ্টব্য: যদি ইনপুটটি একটি প্রতীক ছিল, আমরা $a+=48-48কার্যকরভাবে এটি উপেক্ষা করে পাই । যদি তা হয় তবে 0আমরা $a+=58-48আমাদের +10 পেতে পারি

শেষ অবধি, ;$aপ্রতিটি লুপের জন্য কেবল আমাদের চূড়ান্ত মান পোস্টকে আউটপুট করে


আপনি কয়েক বাইট সংরক্ষণ করতে পারেন অনলাইনে চেষ্টা করুন!
মজজি

আহ, হ্যাঁ আমার কিছু অতিরিক্ত বন্ধনী ছিল =এবং সেখানে ছিল, এটি সমাধান করার জন্য আমার পূর্ববর্তী পদ্ধতিগুলি ছেড়ে গিয়েছিল, ধরা দেওয়ার জন্য ধন্যবাদ! যদিও আমি এর t*yআগে দেখিনি , আপনি ব্যাখ্যা করতে পারলেন কেন এটি স্ট্রিংকে একটি চরিত্রের অ্যারেতে বিস্ফোরিত করতে কাজ করে?
সাইনোসয়েড



-fএবং সাথে ভাল ধারণা [0]
mazzy

2

পাওয়ারশেল , 95 85 79 bytes

দ্বারা অনুপ্রাণিত nwellnhof এর উত্তর

সিনুসয়েডের উত্তর[0] থেকে অনুপ্রাণিত ।

$(switch -r($args|% t*y){\d{$_}0{10}[A-Y]{"$(.313*$_-18)"[0]}Z{9}})-join'+'|iex

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

নিবন্ধভুক্ত সংস্করণ:

$(
    switch -r($args|% toCharArray){
        \d    {$_}
        0     {10}
        [A-Y] {"$(.313*$_-18)"[0]}
        Z     {9}
    }
)-join '+'|Invoke-Expression
key .313*$_-18 "$(...)"[0]
--- ---------- -----------
  A      2.345 2
  B      2.658 2
  C      2.971 2
  D      3.284 3
  E      3.597 3
  F      3.910 3
  G      4.223 4
  H      4.536 4
  I      4.849 4
  J      5.162 5
  K      5.475 5
  L      5.788 5
  M      6.101 6
  N      6.414 6
  O      6.727 6
  P      7.040 7
  Q      7.353 7
  R      7.666 7
  S      7.979 7
  T      8.292 8
  U      8.605 8
  V      8.918 8
  W      9.231 9
  X      9.544 9
  Y      9.857 9

1
Team effort! :D
Sinusoid



0

Python 3, 134 123 bytes

f=lambda n:sum(map(int,n.translate(n.maketrans('ADGJMPTWBEHKNQUXCFILORVYSZ','23456789'*3+'79','()+-./ '))))+10*n.count('0')

Try it online!

-11 bytes thanks to @dan04


1
By rearranging the letters to 'ADGJMPTWBEHKNQUXCFILNRVYSZ', you can reduce the string of numbers to '23456789'*3+'79'.
dan04
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.