শব্দের থেকে অঙ্কের একটি স্ট্রিংকে পূর্ণসংখ্যায় রূপান্তর করুন


19

শীর্ষস্থানীয় শূন্যগুলিকে উপেক্ষা করে একটি সংখ্যা যুক্ত একটি স্ট্রিংকে একটি পূর্ণসংখ্যার রূপে রূপান্তর করুন।

উদাহরণ

  • "four two"-> 42
  • "zero zero zero one"-> 1

অনুমিতি

জমাগুলি অনুমান করতে পারে:

  1. ইনপুট স্ট্রিং স্পেস-বিভাজিত অঙ্ক শব্দের সমন্বয়ে গঠিত।
  2. সমস্ত শব্দ বৈধ ("শূন্য" এর পরিসরে .. "নয়") এবং ছোট হাতের অক্ষরে রয়েছে। খালি ইনপুট জন্য আচরণ নির্ধারিত।
  3. ইনপুট স্ট্রিং সর্বদা সীমার মধ্যে একটি স্বাক্ষরবিহীন সংখ্যা উপস্থাপন করে intএবং এটি কোনও খালি স্ট্রিং নয়।

স্কোরিং

কম বাইট ভাল হওয়ার সাথে বাইটে উত্তর দেওয়া হবে tes


3
সাইটে স্বাগতম। এখানে দুটি জিনিস রয়েছে যা আমরা সাধারণত প্রশ্নগুলি থেকে আশা করি যা এখানে অনুপস্থিত। সর্বাধিক গুরুত্বপূর্ণ হ'ল একটি উদ্দেশ্যমূলক স্কোরিং মাপদণ্ড যা সমস্ত চ্যালেঞ্জের থাকতে হবে।
গম উইজার্ড

3
এক্ষেত্রে এই প্রশ্নটি স্পেসিফিকেশনে খুব কম ars অস্পষ্টতা ছাড়াই আপনাকে যা জমা দিতে হবে তা ঠিক উল্লেখ করা উচিত। একটি বাক্য এবং একটি উদাহরণ কেবল চ্যালেঞ্জগুলির জন্য আমাদের স্বচ্ছতার মানগুলির উপর নির্ভর করে না।
গম উইজার্ড

3
ইতিমধ্যে যা বলা হয়েছে তার উপরে, আমাদের একটি স্যান্ডবক্স রয়েছে যেখানে ব্যবহারকারীরা তাদের চ্যালেঞ্জগুলি মূল পোস্ট করার আগে পোস্ট করতে পারেন। এইভাবে আপনি পোস্টগুলি তৈরি করার সময় কম তথ্য মিস করবেন। যদি আপনি যুক্তিসঙ্গত ইতিবাচক অভ্যর্থনা সহ সাইটের অন্যান্য সাম্প্রতিক পোস্টগুলি দেখেন তবে আমি মনে করি আপনি দেখতে পাবেন যে আপনার প্রশ্ন এবং সমাধান উভয়ই আমরা এখানে যা করি তার সাথে সামঞ্জস্য হয় না।
FryAmTheEggman

3
পেডেন্টিক হওয়ার ঝুঁকিতে, আমি এটি উল্লেখ করতে চাই যে এটি range "zero".."nine"পুরোপুরি নির্দিষ্ট নয়।
সম্পর্কহীন স্ট্রিং

4
বিরক্তিকরভাবে, বিল্টিন Interpreter@"SemanticNumber"ম্যাথমেটিকাতে ঠিক এটি করে - এটি শুরু করে স্ট্রিংগুলিতে ব্যর্থ হয় zero zero
গ্রেগ মার্টিন

উত্তর:


22

পিএইচপি , 74 বাইট

foreach(explode(' ',$argn)as$w)$n.='793251_8640'[crc32($w)%20%11];echo+$n;

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

এমন একটি সমাধান পাওয়ার চেষ্টা করেছিল যা বিদ্যমান উত্তরগুলি অনুলিপি করে না। আমি প্রতিটি শব্দের জন্য 32-বিট দৈর্ঘ্যের ( ক্র্যাক 32 ) সাইক্লিক রিডানডেন্সি চেকসাম বহুবচন পেয়েছি এবং তারপরে প্রতিটি সংখ্যার জন্য 0 থেকে 10 (অনুপস্থিত 6) থেকে অনন্য মানগুলি মিশ্রিত করতে এর জন্য একটি মোড 20 এবং Mod 11 করব। তারপরে সেই অনন্য মানটি ব্যবহার করে আমি আসল অঙ্কটি খুঁজে পাই।

| Word  | CRC32      | %20 | %11 | Equivalent digit |
|-------|------------|-----|-----|------------------|
| zero  | 2883514770 | 10  | 10  | 0                |
| one   | 2053932785 | 5   | 5   | 1                |
| two   | 298486374  | 14  | 3   | 2                |
| three | 1187371253 | 13  | 2   | 3                |
| four  | 2428593789 | 9   | 9   | 4                |
| five  | 1018350795 | 15  | 4   | 5                |
| six   | 1125590779 | 19  | 8   | 6                |
| seven | 2522131820 | 0   | 0   | 7                |
| eight | 1711947398 | 18  | 7   | 8                |
| nine  | 2065529981 | 1   | 1   | 9                |

আর একটি 74 টি বাইট সিআরসি 32 বিকল্প ব্যবহার করে %493%10: এটি অনলাইনে চেষ্টা করুন!

আর একটি 74 টি বাইট সিআরসি 32 বিকল্প ব্যবহার করে %2326%11: এটি অনলাইনে চেষ্টা করুন!


পিএইচপি , 74 বাইট

foreach(explode(' ',$argn)as$w)$n.=strpos(d07bfe386c,md5($w)[21]);echo+$n;

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

একই দৈর্ঘ্যের সহিত অন্য একটি বিকল্প md5শব্দের 22 তম অক্ষর গ্রহণ করে (কেবলমাত্র অক্ষর যা প্রতিটি শব্দের জন্য একটি অনন্য মূল্য দেয়) এবং তারপরে একটি অক্ষরে মানচিত্রের জন্য সেই অক্ষরটি ব্যবহার করে।


এটি একটি দুর্দান্ত উত্তর
হুয়ান সেবাস্তিয়ান লোজনো



6

জেলি ,  19  17 বাইট

Ḳµ7ị“*;nÄƲ]³Ṙ»i)Ḍ

একটি পূর্ণসংখ্যার লিঙ্ক অক্ষরের একটি তালিকা গ্রহণ করে যা একটি পূর্ণসংখ্যা দেয়।

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

আমার পাইথন 2 উত্তরের খুব সুন্দর একটি বন্দর।


আগে

ḲŒ¿€i@€“©¥q£½¤MÆÑ‘Ḍ

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

নেই খুব সম্ভবত একটি সংক্ষিপ্ত পথ, কিন্তু এই একটি উপায় যে প্রথম মনে এসেছে।


ক্রমহ্রাস এড়ানোর জন্য এনক্ল্যাক্ট স্ট্রিং থেকে শূন্য অপসারণ, কারণ খুঁজে পাওয়া যায়নি যে কোনওভাবেই শূন্য ... চালাক!
অবিকৃত স্ট্রিং

1
আহ আমি আপনাকে একই পদ্ধতিটি দেখতে পেয়েছি, দুর্দান্ত।
জোনাথন অ্যালান

5

পাইথন 3 , 107 , 91 , 77 , 90 বাইট

শ্রীওচিলিজম ও'জাইক দ্বারা -16 বাইট

নেতৃস্থানীয় শূন্যগুলি অপসারণ করতে +13 বাইট

lambda s:int(''.join(map(lambda w:str('zeontwthfofisiseeini'.index(w[:2])//2),s.split())))

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



সুন্দর! এইভাবে, আমি এমনকি
ডেলিফিমিটটিকে

1
চ্যালেঞ্জের আপডেটের সাথে এটি আর বৈধ নয় কারণ এতে শীর্ষস্থানীয় শূন্য রয়েছে। :(
গম উইজার্ড


1
@ মোভ্যাটিকা আপনার ফিক্সটি ভুল। lstripপদ্ধতি স্ট্রিং যা এর যুক্তি হিসাবে দেওয়া হয় প্রতিটি চরিত্র পটির, তাই "আট দুই" "দুই ight", হয়ে ওঠে যেমন "ই" ছিনতাই হয়। এছাড়াও, "শূন্য শূন্য শূন্য" এর "0" মুদ্রণ করা উচিত, কোনও ত্রুটি দেওয়া উচিত নয়।
নেমপ্লেয়ার



3

05 এ বি 1 ই , 18 16 বাইট

#ε6è}.•ƒ/ÿßÇf•Åβ

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

ব্যাখ্যা:

#                 # Split the (implicit) input-string on spaces
 ε  }             # Map each string to:
  6è              #  Get the character at 0-based index 6 (with automatic wraparound)
     .•ƒ/ÿßÇf    # Push compressed string "rothuvsein"
              Åβ  # Convert the characters from custom base-"rothuvsein" to an integer
                  # (after which the top of the stack is output implicitly as result)

আমার এই 05AB1E টিপটি দেখুন (বিভাগটি কীভাবে স্ট্রিংগুলি সংকুচিত করবেন? ) কেন .•ƒ/ÿßÇf•তা বোঝার জন্য "rothuvsein"



3

05 এ বি 1 ই , 17 16 বাইট

•D±¾©xWÄ0•I#HèTβ

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

অন্যান্য 05AB1E উত্তরের সাথে নিখুঁত টাই , তবে সম্পূর্ণ ভিন্ন পদ্ধতির ব্যবহার করে।

•D±¾©xWÄ0•               # compressed integer 960027003010580400
          I#             # split the input on spaces
            H            # convert each word from hex (eg "one" => 6526)
             è           # index (with wrap-around) into the digits of the large integer
              Tβ         # convert from base 10 to integer

3

রেটিনা 0.8.2 , 46 45 বাইট

\w+
¶$&$&$&
%7=T`r\ot\huvs\ein`d`.
\D

^0+\B

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

\w+
¶$&$&$&

প্রতিটি শব্দ তার নিজস্ব লাইনে রাখুন এবং এটিকে তিনবার করুন।

%7=T`r\ot\huvs\ein`d`.

@ আনলেটেড স্ট্রিংয়ের স্ট্রিং ব্যবহার করে প্রতিটি লাইনের 7th ম অক্ষরটি লিপ্যন্তরেণ করুন।

\D

বাকি সমস্ত অ-অঙ্কের অক্ষর মুছুন।

^0+\B

নেতৃস্থানীয় শূন্যগুলি মুছুন (তবে কমপক্ষে একটি সংখ্যা রেখে দিন)।

পূর্ববর্তী 46-বাইট আরও traditionalতিহ্যগত সমাধান:

T`z\wuxg`E
on
1
th
3
fi
5
se
7
ni
9
\D

^0+\B

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

T`z\wuxg`E

শব্দ zero, two, four, sixএবং eightস্বতন্ত্র অক্ষর থাকা zwuxg। এগুলি সমান সংখ্যায় লিখিত করুন।

on
1
th
3
fi
5
se
7
ni
9

বিজোড় অঙ্কগুলির জন্য, কেবলমাত্র প্রতিটি শব্দের প্রথম দুটি অক্ষর পৃথকভাবে মেলে।

\D

বাকি সমস্ত অ-অঙ্কের অক্ষর মুছুন।

^0+\B

নেতৃস্থানীয় শূন্যগুলি মুছুন (তবে কমপক্ষে একটি সংখ্যা রেখে দিন)।


2

জেলি , 20 18 17 বাইট

Ḳ7ị“*;nÄƲ]³Ṙ»iƲ€Ḍ

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

-202729 এর স্ট্রিং কমপ্রেসারের মাধ্যমে "rothuvsein" চালানো থেকে -2 বাইট

-1 জোনাথন অ্যালান এর শূন্য-মুক্ত এনক্ল্যাক্ট স্ট্রিং চুরি করে এবং এটিকে একটি প্রান্তিকভাবে ভিন্ন কাঠামোগত প্রোগ্রামে রেখে বাইট।

Ḳ                    Split the input on spaces,
              Ʋ€     for each word
             i       find the 1-based index (defaulting to 0)
   “*;nÄƲ]³Ṙ»        in "othuvsein"
 7ị                  of the element at modular index 7,
                Ḍ    and convert from decimal digits to integer.


2

জাপট , 13 বাইট

¸mg6 ì`Ψuv 

চেষ্টা করে দেখুন

দেখে মনে হচ্ছে অন্য সবাই আমাকে একই ধারণাটিতে পরাজিত করেছে - সংকোচনের জন্য সর্বোত্তম স্ট্রিং জোর করে জোর করে স্ক্রিপ্ট লেখার ঝামেলা বাঁচাতে 1,000,000পেরেছিল , কেবল এটি সন্ধান করতে, সূচি পর্যন্ত (এটি প্রথম দিকে ছিল, আমার ছিল না) ক্যাফিন এখনও!), "রোথুসেন" একমাত্র সম্ভাব্য স্ট্রিং!

¸mg6 ì`...     :Implicit input of string
¸              :Split on spaces
 m             :Map
  g6           :  Character at index 6 (0-based, with wrapping)
     ì         :Convert from digit array in base
      `...     :  Compressed string "rothuvsein"

সংকুচিত স্ট্রিং codepoints এ অক্ষর রয়েছে 206, 168, 117, 118, 160& 136


1
... আপনি কি 1000000 পর্যন্ত চেষ্টা করেছেন? অঙ্কের নামগুলির দৈর্ঘ্যের এলসিএমি 60, সুতরাং এর বাইরে চেষ্টা করার কোনও মানে নেই (60টি 0, 61 থেকে 1, ইত্যাদি সমান)।
গ্রিমি

1
@ গ্রিমি, এটা খুব তাড়াতাড়ি ছিল, আমার কাছে এখনও আমার ক্যাফিন ছিল না! সমস্ত সম্ভাবনা উত্পন্ন করার জন্য আমি যে স্ক্রিপ্টটিতে লিখিত হয়েছিল তাতে এক মিলিয়ন প্লাগিং করা অন্য কোনও সংখ্যার মতোই সহজ ছিল এবং আমাকে এলসিএম-তে গণিত করতে বাঁচিয়েছিল।
শেগি

2

রুবি , 63 বাইট , 52 বাইট , 50 বাইট

p $*.map{|d|'rothuvsein'.index (d*3)[6]}.join.to_i

-2 কালি টিপ মান্য করার জন্য ধন্যবাদ


কোড গল্ফ স্বাগতম! রুবিতে, $*একটি উপাধি ARGV, তাই অতিরিক্ত বাইটগুলি সংরক্ষণ করতে এটি নির্দ্বিধায় অনুভব করুন।
মান কালি

2

টি-এসকিউএল, ১১০ বাইট

SELECT 0+STRING_AGG(CHARINDEX(LEFT(value,2),'_ontwthfofisiseeini')/2,'')
FROM STRING_SPLIT((SELECT*FROM i),' ')

লাইন বিরতি কেবল পঠনযোগ্যতার জন্য।

ইনপুটটি টেবিলের মাধ্যমে নেওয়া হয় আমি, আমাদের আইও নিয়ম অনুসারে । আমি স্ট্রিং ভেরিয়েবলকে প্রাক-পপুলেটেড করে 14 বাইট সংরক্ষণ করতে পারতাম, তবে কেবলমাত্র যদি ভাষাটির অন্য কোনও ইনপুট পদ্ধতি না থাকে তবেই এটি অনুমোদিত।

ব্যাখ্যা:

  1. STRING_SPLIT ইনপুট স্ট্রিং নেয় এবং এটি ফাঁকা জায়গায় পৃথক করে
  2. CHARINDEXপ্রথম 2 টি অক্ষর নেয় এবং স্ট্রিংয়ে (1-ভিত্তিক) অবস্থান প্রদান করে '_ontwthfofisiseeini''ze'শূন্যের জন্য স্ট্রিং নেই এবং "পাওয়া যায়নি" এর জন্য 0 প্রদান করে। আন্ডারস্কোরটি নিশ্চিত করে যে আমরা কেবল দুটি এর গুণক পেয়েছি।
  3. চূড়ান্ত সংখ্যা পেতে 2 দ্বারা ভাগ করুন
  4. STRING_AGG কোনও বিভাজক না করে আবার অঙ্কগুলি টুকরো টুকরো করে
  5. 0+INT তে অন্তর্নিহিত রূপান্তরকে বাধ্য করে এবং যে কোনও নেতৃস্থানীয় শূন্যকে বাদ দেয়। 1*কাজ করবে।

2

x86 মেশিন কোড, 46 বাইট

Hexdump:

57 53 33 c0 33 ff f6 01 0f 75 15 6a 0a 5b 99 f7
f3 6b ff 0a 03 fa 33 c0 38 01 75 0f 97 5b 5f c3
69 c0 26 2b aa 6e 32 01 c1 e8 02 41 eb d8

এটি একটি fastcallফাংশন - স্ট্রিংয়ের মধ্যে একটি পয়েন্টার গ্রহণ করেecx এবং ফলাফলটি ফেরত দেয় eax

হ্যাশিং ফাংশনটি যাদু সংখ্যায় গুণ করে 1856645926 , XORইনপুট বাইট সহ একটি করে এবং ডান বিট দিয়ে শিফট করে।

নোক্লোবার রেজিস্টারগুলি সংরক্ষণ এবং পুনরুদ্ধার করা ( ediএবংebx ) 4 বাইট নিয়েছিল, তবে আমি এটি বাস্তবায়নের জন্য আরও কার্যকর উপায় পাইনি। 10 ধ্রুবক স্টোর ebxকরা বিশেষত বিরক্তিকর ছিল!

সংশ্লিষ্ট কোড বাইটের সাথে বিশৃঙ্খলা:

57                   push        edi  ; edi = result
53                   push        ebx  ; we use ebx to store the constant 10
33 C0                xor         eax,eax  
33 FF                xor         edi,edi  
    myloop:
F6 01 0F             test        byte ptr [ecx],0Fh  ; check for end of word
75 15                jne         myhash
6A 0A                push        0Ah  
5B                   pop         ebx  
99                   cdq              ; prepare 64-bit dividend in edx:eax
F7 F3                div         eax,ebx  ; find the remainder of division by 10
6B FF 0A             imul        edi,edi,0Ah
03 FA                add         edi,edx  ; update the result
33 C0                xor         eax,eax  ; reset the hash temporary variable
38 01                cmp         byte ptr [ecx],al  ; check for end of input (here al=0)
75 0F                jne         mycontinue
97                   xchg        eax,edi  ; set the return register
5B                   pop         ebx  ; restore registers
5F                   pop         edi  ; restore registers
C3                   ret  
    myhash:
69 C0 26 2B AA 6E    imul        eax,eax,6EAA2B26h  ; hashing...
32 01                xor         al,byte ptr [ecx]  ; hashing...
C1 E8 02             shr         eax,2  ; hashing...
    mycontinue:
41                   inc         ecx  ; next input byte
EB D8                jmp         myloop

সমতুল্য কোড কোড:

int doit(const char* s)
{
    int result = 0;
    unsigned temp = 0;
    while (true)
    {
        int c = *s++;
        if ((c & 15) == 0)
        {
            temp %= 10;
            result = result * 10 + temp;
            temp = 0;
            if (c == 0)
                break;
            else
                continue;
        }
        temp *= 1856645926;
        temp ^= c;
        temp >>= 2;
    }
    return result;
}

আপনি কিভাবে যাদু নম্বর খুঁজে পেলেন?
স্পার্ক্লার

আমি আমার সি কোড ব্যবহার করে একটি অনুসন্ধান করেছি - সমস্ত 32-বিট নম্বর এবং সমস্ত শিফট চেষ্টা করেছি। মাত্র কয়েক সম্ভাবনার রয়েছে - কোডে 2000000000. পরিসীমা আপ একমাত্র পাওয়া
anatolyg

আপনি একটি বাইট সংরক্ষণ করতে এডি এর পরিবর্তে এডিএক্স ব্যবহার করতে পারেন (আইডিভের আগে এডেক্স পুশ করুন, এর পরে পপ ইক্স করুন, ইবিএক্সের সাথে ইমুল করুন, এডএক্সে ইক্স যুক্ত করুন) একটি বাইট সংরক্ষণ করুন।
পিটার ফেরি

1

পরিষ্কার , 88 বাইট

import StdEnv,Text
$s=toInt{#i\\n<-split" "s,c<-:"rothuvsein"&i<-['0'..]|c==(n+n+n).[6]}

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

ভারী জোনাথন অ্যালান এর উত্তর উপর ভিত্তি করে । / এর
পরিবর্তে সূচকের জন্য একটি বোধগম্যতা ব্যবহার করে ।indexOfelemIndex



1

কাঠকয়লা , 19 বাইট

I⍘⭆⪪S §ι⁶rothuvsein

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

    S               Input string
   ⪪                Split on spaces
  ⭆                 Map over words and join
       ι            Current word
      §             Cyclically indexed
        ⁶           Literal `6`
 ⍘       rothuvsein Custom base conversion
I                   Cast to string for implicit print

1

শক্তির উৎস , 48 বাইট

+-join($args|%{'rothuvsein'.indexof(($_*3)[6])})

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

rothuvseinঅন্যদের মতো একই কৌশল ব্যবহার করুন , জনাথন অ্যালানকে ধন্যবাদ। স্প্ল্যাটিংয়ের মাধ্যমে ইনপুট আর্গুমেন্টগুলি আশা করে, যা টিআইও-তে পৃথক কমান্ড-লাইন আর্গুমেন্ট হিসাবে প্রকাশিত হয়।


1

কোটলিন, 83 বাইট

fun String.d()=split(' ').fold(""){a,b->a+"rothuvsein".indexOf((b+b+b)[6])}.toInt()

আপনি চাইলে +1 বাইট সমর্থন করুন toLong()

অন্যদেরও একই rothuvsein কৌতুক, kotlin এর চমৎকার কিছু মূল্যবান বাইট ধন্যবাদ সংরক্ষণ toInt()এবং fold()। আমি কেবল এই অনুভূতিটি কাঁপতে পারি না যে আরও কিছু বাইট যদিও শেভ করা যায় ...



1

উইন্ডোজ ব্যাচ, 169 বাইট

@setlocal enabledelayedexpansion
@set z=zeontwthfofisiseeini
:a
@set b=%1
@for /l %%c in (0,2,18)do @if "!b:~0,2!"=="!z:~%%c,2!" set/aa=a*10+%%c/2&shift&goto a
@echo %a%


0

ভিবিএ, 160 বাইট

Function e(s)
s = Split(s, " ")
For i = LBound(s) To UBound(s)
s(i) = Int((InStr("ontwthfofisiseeini", Left(s(i), 2)) + 1) / 2)
Next
e = Val(Join(s, ""))
End Function

শূন্য বাদে একটি স্ট্রিংয়ে প্রথম দুটি অক্ষর মেলে।


0

বেকন , 83 72 বাইট

এই স্ট্রিংটি ডাব্লু $ তে সরবরাহ করা হয়েছে বলে ধরে নেওয়া, এই কোডটি প্রতিটি শব্দের অনন্য 2 অক্ষরের উপর ভিত্তি করে একটি নিয়মিত অভিব্যক্তি ব্যবহার করে "zeontwthfofisiseeini" তে সূচকটি দেখায়। এরপরে সূচকটি 2 দ্বারা ভাগ করা হয় সঠিক ফলাফল প্রদান করে।

FOR x$ IN w$:r=r*10+REGEX("zeontwthfofisiseeini",LEFT$(x$,2))/2:NEXT:?r
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.