এই সংখ্যায় কতটি সিলেবল?


15

আমি ইংরেজীতে কথা বলার সময় আমি একটি নম্বর নিতে এবং এটিতে কতটি অক্ষরেখা রয়েছে তা জানতে আগ্রহী।

আসুন এটি ইতিবাচক পূর্ণসংখ্যার মধ্যে সীমাবদ্ধ করি যা এক হাজারেরও কম।

আমি ব্রিটিশ, সুতরাং এর পরে যখন কোনও শূন্য অংক থাকবে তখন আমরা একটি 'এবং' দিয়ে শত কলামটি অনুসরণ করব।

চ্যালেঞ্জ

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

পরীক্ষার কেস

|  N  | In words                             | Syllables |
|   1 | one                                  |         1 |
|   2 | two                                  |         1 |
|   3 | three                                |         1 |
|   4 | four                                 |         1 |
|   5 | five                                 |         1 |
|   6 | six                                  |         1 |
|   7 | sev-en                               |         2 |
|   8 | eight                                |         1 |
|   9 | nine                                 |         1 |
|  10 | ten                                  |         1 |
|  11 | el-ev-en                             |         3 |
|  12 | twelve                               |         1 |
|  13 | thir-teen                            |         2 |
|  14 | four-teen                            |         2 |
|  17 | se-ven-teen                          |         3 |
|  20 | twen-ty                              |         2 |
|  21 | twen-ty one                          |         3 |
|  42 | four-ty two                          |         3 |
|  73 | sev-en-ty three                      |         4 |
|  77 | sev-en-ty sev-en                     |         5 |
| 100 | one hund-red                         |         3 |
| 110 | one hund-red and ten                 |         5 |
| 111 | one hund-red and el-ev-en            |         7 |
| 555 | five hund-red and fif-ty five        |         7 |
| 700 | sev-en hund-red                      |         4 |
| 770 | sev-en hund-red and sev-en-ty        |         8 |
| 777 | sev-en hund-red and sev-en-ty sev-en |        10 |
| 999 | nine hund-red and nine-ty nine       |         7 |

1
আমরা কি স্ট্রিং বা অঙ্কের অ্যারে হিসাবে ইনপুট নিতে পারি?
ডেনিস

উত্তর:


11

পাইথন 2 , 84 83 74 67 বাইট

lambda n:4*(n>99)+2-n%~9/9-0x55561aaaab/4**(n%100)%4+`n`.count('7')

ধন্যবাদ বন্ধ golfing জন্য @xnor করার 9 16 বাইট!

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


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

lambda n:4*(n>99)+([-1]+10*[1]+[3,1]+7*[2]+8*([2]+9*[3]))[n%100]+`n`.count('7')

সোজা, কিন্তু দীর্ঘ।

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


আপনার 83-বাইট সমাধানের জন্য, আপনি পরিবর্তন -10করে ~9এবং শেষ বিটটিতে স্যুইচ করে 3 বাইট কেটে ফেলতে পারেন +(0<n%100!=12)-(n%100!=11), তবে এটি এখনও আপনার নতুন সমাধানের চেয়ে বেশি দীর্ঘ।
xnor


@ এক্সনর এটি সত্যই চালাক! min(n%100,13)%12/~9আমি আমার জেলি উত্তরটিও চেষ্টা করছিলাম এমন একটি পদ্ধতির সাথে আসলে সহায়তা করতে পারে।
ডেনিস

প্রকৃতপক্ষে, কেবল কোনও হার্ডকডযুক্ত ধ্রুবককে জিনিসকে কাঁপিয়ে তোলার ফলে আরও খাটো হয়ে যায়।
xnor

@ এক্সনোর আবার ধন্যবাদ!
ডেনিস

8

পার্ল 5 -p , 53 বাইট

$_=4*/.../+2*/[^0].$/+!/0$/+y/7//-/1[^1]$/-/12$/-/00/

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

কিভাবে

-p commandline flag reads input into $_

$_=4*/.../     # Hundreds place has minimum of 4 sylables (__ HUN-DRED AND),
               # match fails on number <100, and would add 0 here
  +2*/[^0].$/  # Tens place has two syllables if not 0 (__-TY or __TEEN),
               # match fails on numbers <10, and would add 0
  +!/0$/       # Ones place has one syllable if not 0 (__)
               # -- Now adjust for special cases --
  +y/7//       # add a syllable for every 7 present
  -/1[^1]$/    # remove a syllable for 10-19, except 11
  -/12$/       # remove another syllable for 12
  -/00/        # remove the syllable for AND if it's an even hundred

-p commandline flag outputs contents of $_


7

পাইথন 2 , 112 108 বাইট

f=lambda n:n>99and f(n/100)+3+f(n%100)-(n%100<1)or n>19and f(n/10)-~f(n%10)or int("01111112111312222322"[n])

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

-4 বাইট, শেগিকে ধন্যবাদ


2
এছাড়াও, আপনার [2]*7অংশটি ব্যর্থ হবে 17, যেহেতু এটি 2 ( sev-en-teen) এর পরিবর্তে 3 হওয়া উচিত ।
কেভিন ক্রুজসেন

2
-4 বাইট জন্য 17 একটি ফিক্স সহ,
রোমশ

@ শেগি ধন্যবাদ :)
টিফিল্ড

@ কেভিন ক্রুজসেন এখনই স্থির করেছেন (শেগিকে ধন্যবাদ)
টিফিল্ড


6

ওল্ফ্রাম ভাষা 101 115 বাইট

s=StringSplit;Length[Join@@(WordData[#,"Hyphenation"]&/@Join@@s/@
s[IntegerName@#,"-"])]+Boole[#>100&&#~Mod~100!=0]&

ব্যাখ্যা

(বদলে StringSplitজন্য s)

Length[Join@@(WordData[#,"Hyphenation"]&/@Join@@
StringSplit/@ StringSplit[IntegerName@#,"-"])]+Boole[#>100&&#~Mod~100!=0]&

IntegerNameআমেরিকান ইংলিশে সংখ্যাটি উপস্থাপন করে (অর্থাত্ "এবং" 100 এর চেয়ে বেশি সংখ্যায় অন্তর্ভুক্ত Eg) উদাহরণস্বরূপ 777-> "seven hundred seventy-seven

StringSplit[IntegerName@#,"-"] রেন্ডারিংয়ে যে কোনও হাইফেন সরিয়ে দেয়।

StringSplit/@ শব্দগুলিতে রেন্ডারিংকে বিভক্ত করে।

Join@@ এম্বেড থাকা তালিকা ছাড়াই শব্দের একটি সহজ তালিকা রেখে দেয় (যে ক্ষেত্রে হাইপেন উপস্থিত হয়েছিল)।

WordData[#,"Hyphenation"] একটি শব্দকে তার শব্দাবলীতে বিভক্ত করে।

Join@@ সমস্ত শব্দের একটি উচ্চারণের একটি সহজ তালিকা রেখে দেয়।

Length সিলেবলগুলি গণনা করে

+Boole[#>100&&#~Mod~100!=0]1100 এর চেয়ে বেশি সংখ্যক (ব্রিটিশ ইংরাজী রেন্ডারিংয়ে নিযুক্ত অতিরিক্ত "এবং" সংখ্যার অবিচ্ছেদ্য গুণাবলী বাদ দিয়ে) সংখ্যার সিলেবল গণনায় যোগ হয়।


6

জাভা 11, 105 102 বাইট

n->(""+"".repeat(8)).charAt(n%100)+(n+"").split("7",9).length-(n>99?2:6)

মুদ্রণযোগ্য অক্ষরগুলির বোঝা থাকে।

-3 বাইট ধন্যবাদ @ অলিভিগ্রগ্রোয়ারকে ধন্যবাদ ।

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

ব্যাখ্যা:


n->               // Method with integer as both parameter and return-type
  (""
                  //  Push string with ASCII-value digits 46666666666867777777
 +"".repeat(8))
                  //  Appended with 8 times a string with ASCII-value digits 7888888888
   .charAt(n%100) //  Take the (input modulo-100)'th character of this string (as integer)
  +(n+"").split("7",9).length
                  //  Count the amount of 7s in the input + 1
  -(n>99?         //  And if the input is larger than 99:
     2            //   Subtract 2 (-1 for the 7s+1 count; -5 to map the ASCII-digits to:
                  //               4 → -1; 6 → 1; 7 → 2; 8 → 3;
                  //               and +4 for the inputs above 99)
    :             //  Else:
     6)           //   Subtract 6 (-1 for the 7s+1 count and -5 to map the ASCII-digits to:
                  //               4 → -1; 6 → 1; 7 → 2; 8 → 3)

1
102 বাইট পরিবর্তন করে .split("7",-1)থেকে .split("7",9), এবং -6+(n>99?4:0)করতে -(n>99?2:6)
অলিভিয়ার গ্রাগোয়ার

1
@ অলিভিয়ারগ্রোওয়ের ধন্যবাদ সম্পূর্ণরূপে মিস হয়েছে -(n>99?2:6), তবে এটি এখন খুব স্পষ্ট যে আপনি এটি নির্দেশ করেছেন। আর -1থেকে 9সীমিত ইনপুট আকার আমি মনে হতো না, তাই ধন্যবাদ কারণে!
কেভিন ক্রুইজসেন

5

05 এ বি 1 ই , 34 31 বাইট

т%U7¢I€Ā`Iт@3*X_(X20@X12Q(X11QO

এটি অনলাইনে চেষ্টা করুন বা সমস্ত [1,999]পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

উল্লিখিত সমস্ত চেক সহ এর ফলাফল 1 টি সত্যবাদী এবং 0 টি ভুয়া জন্য হবে।

т%         # Take modulo-100 of the (implicit) input
           #  i.e. 710 → 10
  U        # Pop and store it in variable `X`
7¢         # Count the amount of 7s in the (implicit) input
           #  i.e. 710 → 1
I€Ā        # Trutify each digit in the input (0 if 0; 1 otherwise)
   `       # And push all of the mapped values to the stack
           #  i.e. 710 → [1,1,0]
Iт@        # Check if the input is larger than or equal to 100
           #  i.e. 710 → 1 (truthy)
   3*      # Multiply that result by 3 (for 'hund-red and')
           #  i.e. 1 → 3
X_         # Check if variable `X` is 0
           #  i.e. 10 → 0 (falsey)
  (        # And negate that (to remove 'and' when #00)
           #  i.e. 0 → 0
X20@       # Check if variable `X` is larger than or equal to 20 (for '-ty')
           #  i.e. 10 → 0 (falsey)
X12Q       # Check if variable `X` is exactly 12
           #  i.e. 10 → 0 (falsey)
    (      # And negate that (to remove 'teen')
           #  i.e. 0 → 0
X11Q       # Check if variable `X` is exactly 11 (for 'el-ev-en' minus 'one one')
           #  i.e. 10 → 0 (falsey)
O          # Sum everything on the stack (and output implicitly)
           #  i.e. [1,1,1,0,3,0,0,0,0] → 6

এটি 700 পরীক্ষার কেস ব্যর্থ করে। 'সেভেন হান্ড্রেড' এর 4 টি শব্দের অক্ষর রয়েছে, এটি 5 এ ফিরে
আসবে

@ এজেফারাডে এখনই ঠিক করা উচিত। ঘটনাক্রমে ছিল I(ইনপুট) পরিবর্তে X(ইনপুট mod 100) যখন চেক যদি এটা এর +1 জন্য 20 চেয়ে বড় ব্যাপার ty
কেভিন ক্রুইজসেন

আমি দুঃখিত, এটি 'একশ' এর জন্য 0
ফেরায়

@ এজেফারাডে আবার স্থির করা হয়েছে .. >(ইনপুট 100 এর চেয়ে বড় কিনা তা পরীক্ষা করুন) এর সাথে প্রতিস্থাপন করা হয়েছে @(ইনপুট 100 এর চেয়ে বড় বা সমান কিনা তা পরীক্ষা করুন)। সম্ভবত আমার আরও কিছু পরীক্ষার কেস পোস্ট করার আগে আরও যত্ন সহকারে পরীক্ষা করা উচিত ছিল .. এর জন্য দুঃখিত ..
কেভিন ক্রুইজসেন

4
যাইহোক, একটি রুবিক্স কিউব উপরের টুপি প্রেম!
এজেফারাডে

5

কাঠকয়লা , 39 31 বাইট

I⁻⁺↨E謬Iι²№θ7I§⁺”)∨∧⌈a¡↶”×0⁸⁰N

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

I⁻⁺

সিলেবলের সংখ্যার সমন্বয় গণনা করুন এবং ফলাফলটিকে স্ট্রিং হিসাবে আউটপুট দেয়।

↨E謬Iι²

প্রতিটি শূন্য অংককে 1 এ পরিবর্তন করে শুরু করুন এবং তারপর বেস 2 হিসাবে ডিকোডিং করুন এটি বেশিরভাগ ইনপুটগুলির জন্য সঠিক উত্তর দেয়।

№θ7

প্রতিটি জন্য 1 যোগ করুন 7

I§⁺”)∨∧⌈a¡↶”×0⁸⁰N

আক্ষরিক স্ট্রিং নিন 10000000001021111111এবং 80 টি শূন্য যুক্ত করুন, তারপরে ইনপুট দ্বারা চক্রাকারে সূচক করুন এবং সেই অঙ্কটি বিয়োগ করুন।


4

জেলি , 28 25 23 বাইট

9ḊŻ;2+⁵Żċ%ȷ2$ạDṠḄƊ+Dċ7Ɗ

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

কিভাবে এটা কাজ করে

9ḊŻ;2+⁵Żċ%ȷ2$ạDṠḄƊ+Dċ7Ɗ  Main link. Argument: n (integer in [1, ..., 999])

9                        Set the return value to 9.
 Ḋ                       Dequeue; yield [2, 3, 4, 5, 6, 7, 8, 9].
  Ż                      Zero; yield [0, 2, 3, 4, 5, 6, 7, 8, 9].
   ;2                    Concat 2, yield [0, 2, 3, 4, 5, 6, 7, 8, 9, 2].
     +⁵                  Add 10; yield [10, 12, 13, 14, 15, 16, 17, 18, 19, 12].
       Ż                 Zero; yield [0, 10, 12, 13, 14, 15, 16, 17, 18, 19, 12].
         %ȷ2$            Yield n % 1e2.
        ċ                Count the occurrences of the modulus in the array.
                 Ɗ       Combine the three links to the left into a monadic chain.
              D            Decimal; convert n to its array of digits in base 10.
               Ṡ             Take the sign of each decimal digit (0 or 1).
                Ḅ            Convert the array of signs from base 2 to integer.
             ạ           Compute the abs. difference of the results to both sides.
                      Ɗ  Combine the three links to the left into a monadic chain.
                   D       Decimal; convert n to its array of digits in base 10.
                    ċ7     Count the number of 7's.

3

পিএইচপি , 190 158 145 141 137 বাইট

<?for($j=$p=0;$p<strlen($i=$argv[1]);)$j+=str_split($i)[$p++]>0;echo$j+substr_count($i,7)+3*($i>99)-!($i%=100)+($i>19)-($i==12)+($i==11);

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

কেভিন ক্রুইজসেনের সমাধানের একটি বন্দর (দুর্ভাগ্যক্রমে এটি পিএইচপি-তে একই বক্রতা নেই :))

- 32 45 শেজি ধন্যবাদ!

-3 কেভিন ক্রুজিসেনকে ধন্যবাদ!


তাই অনেক সঞ্চয় এখানে তৈরি হবে! এখানে মাত্র কয়েকটি খুব দ্রুত
শ্যাগি

1
145 বাইট । আপনি সংক্ষিপ্ত ট্যাগ ব্যবহার করে আরও কয়েকটি বাইট সংরক্ষণ করতে পারেন তবে টিআইওতে কীভাবে সেগুলি ব্যবহার করবেন তা আমি মনে করতে পারি না। (দ্রষ্টব্য: আমি আমার ফোনে তাই সমস্ত ইনপুট পরীক্ষা করিনি have)
শেগি

1
@Shaggy 2 আরও বেশি বাইট যখন ব্যবহার পরিবর্তন করা যাবে >99এবং >19পরিবর্তে >=100এবং >=20
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন আসলে এটি 3 টি বাইট সংরক্ষণ করে কারণ এটি 100 থেকে 99 পর্যন্ত :)
এন কে 1406

আমি প্রতিধ্বনির শুরুতে ভেরিয়েবলটি রেখে অন্য একটি বাইট সংরক্ষণ করতে সক্ষম হয়েছি।
NK1406

2

05 এ বি 1 ই , 24 বাইট

ডেনিসের জেলি উত্তর পোর্ট

8L>Ć¾šT+¾šsт%¢sSĀJCαs7¢+

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

ব্যাখ্যা

8L>                       # push range [2 ... 9]
   Ć                      # enclose, append head
    ¾š                    # prepend 0
      T+                  # add 10 to each
        ¾š                # prepend 0
          sт%¢            # count occurrences of input % 100 in this list
              sS          # push input split into a list of digits
                Ā         # truthify, check each if greater than 0
                 JC       # convert from base-2 to base-10
                   α      # absolute difference
                    s7¢+  # add the amount of 7's in the input

1

05 এ বি 1 ই , 26 বাইট

€ĀJCI7¢•Ž¢Γ}Þ±6u•¾80׫Iè(O

@ নীল এর কাঠকয়লা উত্তর বন্দর , সুতরাং আপনি এই উত্তর পছন্দ হলে পাশাপাশি তাকে upvote নিশ্চিত করুন!

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

সংক্ষিপ্ত পূর্ণসংখ্যা •Ž¢Γ}Þ±6u•বিকল্পভাবে •8JA•b2TÌǝএকই বাইট-কাউন্টের জন্য হতে পারে ।

ব্যাখ্যা:

€Ā                   # Trutify every digit in the (implicit) input
                     # (0 remains 0; everything else becomes 1)
  J                  # Join it together to a single string
   C                 # Convert from binary to integer
I7¢                  # Count the amount of 7s in the input
•Ž¢Γ}Þ±6u           # Push compressed integer 10000000001021111111
          ¾80׫      # Append 80 "0"s
               Iè    # Index the integer (with automatic wraparound) into it
                 (   # Negate the result
O                    # Sum all values on the stack (and output implicitly)

আমার এই 05AB1E উত্তরটি দেখুন (বিভাগটি বড় সংখ্যার সংকোচন কিভাবে করবেন? ) কেন •Ž¢Γ}Þ±6u•তা বোঝার জন্য 10000000001021111111

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.