আসল নম্বর


36

নির্দেশিকা

দৃশ্যপট

জন একটি গুরুত্বপূর্ণ সংখ্যা আছে, এবং তিনি চান না অন্যরা এটি দেখতে পারে।

তিনি নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করে নম্বরটি এনক্রিপ্ট করার সিদ্ধান্ত নিয়েছিলেন:

তার সংখ্যা সর্বদা একটি হ্রাস-না করে ক্রম (যেমন। "1123")

তিনি প্রতিটি অঙ্ককে ইংরেজি শব্দের মধ্যে রূপান্তরিত করেছিলেন। (যেমন। "123" -> "ONETWOTHREE")

এবং তারপরে, বর্ণগুলি এলোমেলোভাবে পুনরায় সাজান। (যেমন। "ONETWOTHREE" -> "ENOWTOHEETR")

জন অনুভব করেছিলেন যে এটি করতে তার সংখ্যা নিরাপদ। আসলে, এ জাতীয় এনক্রিপশন সহজেই ডিক্রিপ্ট করা যায় :(


কার্য

এনক্রিপ্ট করা স্ট্রিং গুলি দেওয়া আপনার কাজটি হ'ল এটি ডিক্রিপ্ট করে মূল নম্বরটি ফিরিয়ে দেওয়া।


বিধি

  • এটি কোড গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins
  • আপনি ধরে নিতে পারেন যে ইনপুট স্ট্রিংটি সর্বদা বৈধ
  • ইনপুট স্ট্রিংয়ে কেবল বড় হাতের অক্ষর থাকে
  • আসল সংখ্যাগুলি সর্বদা আরোহী ক্রমে সাজানো থাকে
  • আপনি স্ট্রিং বা পূর্ণসংখ্যার বিন্যাসে নম্বরটি ফিরে আসতে পারেন
  • অক্ষরগুলি কেবল একটি শব্দের মধ্যে বদলে যাবে, পুরো স্ট্রিংয়ের মধ্যে নয়।
  • সংখ্যাগুলি 1 থেকে 9 সহ অন্তর্ভুক্ত থাকবে ( ONEথেকে NINE)

সম্ভাব্য আনস্র্যাম্বলড স্ট্রিং

সংখ্যাগুলি থেকে স্ট্রিংগুলিতে রূপান্তরিত হওয়ার ঠিক পরে স্ট্রিংগুলির একটি তালিকা এখানে রয়েছে:

 1 -> ONE 
 2 -> TWO
 3 -> THREE
 4 -> FOUR
 5 -> FIVE
 6 -> SIX
 7 -> SEVEN
 8 -> EIGHT
 9 -> NINE

উদাহরণ

"NEO" -> 1

"ENOWOT" -> 12

"EONOTWHTERE" -> 123

"SNVEEGHEITNEIN" -> 789

"ENOOWTEERHTRUOFEVIFXISNEVESTHGIEENIN" -> 123456789

"NOEWOTTOWHEERT" -> 1223


5
সমস্ত পরীক্ষার ক্ষেত্রে, কেবলমাত্র একটি শব্দের মধ্যে বর্ণগুলি পরিবর্তিত হয়, শব্দের মধ্যে বর্ণ নয়। সবসময় কি তাই হবে?
xnor

1
@ xnor সর্বদা এটি হবে। আমি প্রশ্নটি সম্পাদনা করেছি।
আমোরিস

1
তারপরে আপনাকে এটি পরিবর্তন করতে হবে ".... (উদাঃ" ONETWOTHREE "->" TTONWOHREEE ")" "
J42161217

2
@ টেসেল্লাটিংহেকলার: পরবর্তী সংখ্যাটি পূর্ববর্তী পূর্বের মতো একই হতে পারে তখন একটি কঠোরভাবে ক্রমবর্ধমান ক্রম হয়। 1-1-1-2-2-3 (অ-কঠোরভাবে বৃদ্ধি) ২-০-৩-২-১৪ এর বিপরীতে (কঠোরভাবে বৃদ্ধি)
কোয়েটা_পিসউ_সৌ

1
প্রযুক্তিগতভাবে বলতে গেলে এটি কোনও এনকোডিং, এনক্রিপশন নয়, কারণ কোনও কী নেই no
প্যাট্রিক রবার্টস

উত্তর:


5

জেলি ,  38  37 বাইট

ḟ“RGS”O“OX‘,“¢©“¢¢¤‘yF×4/%74ị⁽Gל?9¤Ḍ

একটি মোনাডিক লিঙ্ক অক্ষরের তালিকা (স্ট্রিং) নিয়ে এবং পূর্ণসংখ্যা ফেরত।

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

পিটু 1998 এর জেলি উত্তরের জন্য একটি খুব আলাদা পদ্ধতি ব্যবহার করে , তবুও একই বাইট গণনা রয়েছে ( আমি সত্যিই ভেবেছিলাম এটি এটি কম হিসাবে শেষ হতে পারে )!

মূল সংখ্যার একঘেয়েত্বের উপর নির্ভর করে না (সুতরাং একটি ইনপুট HTREEWTONOEউদাহরণ হিসাবে কাজ করবে)।

কিভাবে?

প্রথমে নোট করুন যে নিজের শব্দটি (এবং এর ফলে কোনও অ্যানগ্রাম) সমস্ত কোনও রূপ, জিএস এবং এসএস অপসারণ করে এবং কোনও ওএসের পরিবর্তে দুটি অক্ষর ("12" বলুন) এবং কোনও অক্ষরের পরিবর্তে তিনটি অক্ষরের দ্বারা পরিবর্তন করা যেতে পারে ( "345") বলুন।

letters  -> -RGS  -> O:12, X:345
ONE         ONE      12NE
TWO         TWO      TW12
THREE       THEE     THEE
FOUR        FOU      F12U
FIVE        FIVE     FIVE
SIX         IX       I345
SEVEN       EVEN     EVEN
EIGHT       EIHT     EIHT
NINE        NINE     NINE

তারপরে আমরা আমাদের পছন্দ অনুসারে ("12345") উপর নির্ভর করে মডুলো গাণিতিক ব্যবহার করে 1 থেকে 9 নম্বরগুলিতে সেই অক্ষরের অর্ডিনালগুলির পণ্যটি ম্যাপ করতে পারি, তারপরে অঙ্কগুলির একটি পুনরায় সাজানো তালিকায় এগুলি সন্ধান করুন। কোডটি প্রথমে অক্ষরগুলিকে প্রথমে কাস্ট করে এবং তারপরে অধ্যাদেশগুলিকে প্রতিস্থাপন করে তবে এটি 37 বাইটে অক্ষরের সাথেও সম্ভব, যেমন "ডিআইএএই" ( এটি চেষ্টা করুন )।

ḟ“RGS”O“OX‘,“¢©“¢¢¤‘yF×4/%74ị⁽Gל?9¤Ḍ - link: list of characters
 “RGS”                                - literal ['R','G','S']
ḟ                                     - filter discard
      O                               - convert to ordinals
       “OX‘                           - code-page indices list = [79,88]
            “¢©“¢¢¤‘                  - code-page indices lists = [[1,6],[1,1,3]]
           ,                          - pair -> [[79,88],[[1,6],[1,1,3]]]
                    y                 - translate (replace 79s (Os) with [1,6]
                                                       and 88s (Xs) with [1,1,3])
                     F                - flatten into a single list
                       4/             - 4-wise reduce by:
                      ×               -   multiplication (product of each window of four)
                         %74          - modulo 74
                                   ¤  - nilad followed by link(s) as a nilad:
                             ⁽G×      -   base 250 literal = 18768
                                œ?9   -   permutation of [1,2,3,4,5,6,7,8,9] at that
                                      -   index in a lexicographically sorted list of
                                      -   all such permutations -> [1,5,8,2,4,9,7,6,3]
                            ị         - index into
                                    Ḍ - convert from decimal digits to an integer

আপনার উত্তর আক্ষরিক এই পৃষ্ঠার যে জন্য একটি সঠিক মান উপর শুধুমাত্র উত্তর: NINEONENIENOENNNIENOENNEINEONEINEONNENIENOINNEINENINNEINENIENNIENNNNIENNEININENIENNENINEINENINENNIEINNEINNENNIENIN
ম্যাজিক অক্টোপাস উরন

+ ইনফিনিটি পয়েন্ট।
ম্যাজিক অক্টোপাস আরন

ধন্যবাদ! (এটি আমাকে ছুঁড়েছিল কারণ মন্তব্যে কোড ব্লকের শূন্য প্রস্থের ফাঁকা জায়গা রয়েছে, তবে ( এটি কীভাবে কার্যকর হয় ))
জোনাথন অ্যালান

এটি যাইহোক কোনও বৈধ ইনপুট নয়;)।
ম্যাজিক অক্টোপাস আরন

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

10

পাইথন 2, 121 117 115 বাইট

def g(s,a=0,f=''):
 for c in s:
    a+=34**ord(c)%43;r='P!\x83u\x8eI\x92|Z'.find(chr(a))+1
    if r:f,a=f+`r`,0
 return f

-4 বাইট: এই সমস্ত গল্ফিংয়ের পরেও আমি একক-ব্যবহারের ভেরিয়েবলটি ইনলাইন করতে ভুলে গিয়েছি। মস্তিষ্ক বাতকর্ম.
-২ বাইট: ডাবল-স্পেস ইনডেন্ট → একক ট্যাব ইন্ডেন্ট (কোটি জনাথন স্যাক্সমানকে ধন্যবাদ); নোট করুন যে এটি উত্তরে সঠিকভাবে প্রদর্শন করে না।

অবহেলিত (পাইথন 3 এর সাথে সামঞ্জস্যপূর্ণ):

nums = [80, 33, 131, 117, 142, 73, 146, 124, 90]

def decode(str):
    acc = 0
    final = ''
    for c in str:
        acc += (34**ord(c))%43
        if acc in nums:
            final += str(1+nums.index(acc))
            acc=0
    return final

যাদু নম্বর অনুসন্ধানকারী:

#!/usr/bin/env python3
from itertools import count, permutations

def cumul(x):
    s = 0
    for v in x:
        s += v
        yield s

all_words = 'ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE'.split()

for modulo in range(1, 1000):
    for power in range(1, 300):
        combinations = []
        for word in all_words:
            my_combination = []
            for perm in permutations(word):
                my_combination += cumul(power**(ord(x)) % modulo for x in perm)
            combinations.append(my_combination)

        past_combinations = set(())
        past_intermediates = set(())
        collision = False
        for combination in combinations:
            final = combination[-1]
            if final in past_intermediates or any(intermediate in past_combinations for intermediate in combination):
                collision = True
                break
            past_combinations.add(final)
            past_intermediates.update(combination)

        if not collision:
            print("Good params:", power, modulo)
            print("Results:", ", ".join(str(x[-1]) for x in combinations))

ব্যাখ্যা:

আমার একটা অনুভূতি ছিল যে আমি ASCII বিটগুলি একসাথে ছিন্ন করতে পারি এবং আমার কোনও পূর্ণ শব্দ কখন ছিল তা নির্ধারণ করার জন্য সেগুলিকে একত্রে যোগ করতে পারি। মূলত আমি গণ্ডগোলের চেষ্টা করেছি3**ord(letter) এবং প্রত্যাশিত ফলাফলের সাথে তুলনা , তবে এটির ফলাফল খুব খুব বড় সংখ্যক। যদিও আমি কিছু প্যারামিটারকে সামান্য বল প্রয়োগ করা উপযুক্ত, যথা: মডুলাস (সংখ্যাগুলি কম তা নিশ্চিত করার জন্য) এবং একক গুণককে মডুলাসের পরিসীমাটির চারপাশে বিভিন্নভাবে ছড়িয়ে দিতে।

আমি গুণক ভেরিয়েবলটি শক্তিটিকে নিজেই প্রভাবিত করে একটি ভেরিয়েবলে পরিবর্তন করে শেষ করেছি কারণ (ট্রায়াল এবং ত্রুটি থেকে) যে কোনওরকম আমাকে সামান্য খাটো উত্তর দিয়েছিল।

এবং উপরে আপনি সেই নিষ্ঠুর-জোর করে এবং কিছুটা ম্যানুয়াল গল্ফিংয়ের ফলাফলগুলি দেখুন।

3**xমূলত বাছাইয়ের কারণ হ'ল আমি জানতাম আপনি সেখানে প্রতিটি সংখ্যক প্রতিনিধিত্ব করতে পারবেন। যে কোনও সংখ্যার সর্বাধিক পুনরাবৃত্ত অঙ্কগুলি হ'ল দুটি (থ্রাই, সেভেন, নিন, ইত্যাদি), তাই আমি প্রতিটি ইনপুটটিকে বেস -3 নম্বর হিসাবে ভাবার সিদ্ধান্ত নিয়েছি। এই ভাবে আমি পারেনি (মানসিকভাবে) তাদের ভালো কিছু যেমন প্রতিনিধিত্ব 10100000000010020000(তিন; একটি 1 tস্লট মধ্যে একটি 1 rস্লট মধ্যে একটি 1 hস্লট, এবং 2 eস্লট)। প্রতিটি সংখ্যা এইভাবে একটি অনন্য উপস্থাপনা পায় যা সহজেই স্ট্রিংটির পুনরাবৃত্তি করে এবং কয়েকটি সংখ্যার যোগ করে একত্রিত করা যায় এবং এটি অক্ষরের আসল ক্রম ছাড়াই স্বাধীন হয়। অবশ্যই, এটি আদর্শ সমাধান হিসাবে পরিণত হয়নি, তবে বর্তমান সমাধানটি এখনও এই ধারণাটি মাথায় রেখেই রচিত is


পাই 3 কে কি? ...
ক্যালকুলেটরফলাইন

ক্ষমা
প্রার্থনা

1
এটি সস্তা, তবে আপনি একটি দ্বিতীয় ট্যাবটির জন্য আপনার দ্বিতীয় ইন্ডেন্টেশন স্তর (দুটি স্পেস) সাব্বাইং করে 2 বাইট সংরক্ষণ করতে পারেন (যেহেতু এটি পাইথন 2) save [ tio.run/##NU7NCOJAGDy7T/… এটি অনলাইনে চেষ্টা করুন!]
কোটি জননাথ স্যাক্সমান

এছাড়াও, আপনি 6 আক্ষরিক ব্যবহার বাইট সংরক্ষণ করতে সক্ষম হতে পারেন \x83, \x8eএবং \x92স্ট্রিং।
ক্যালকুলেটরফলাইন

@CalculatorFeline দুর্ভাগ্যবশত আমার অনুবাদক মতো নয়: SyntaxError: Non-ASCII character '\xc2' in file <stdin> on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details। যদি আমি codingমন্তব্যটি সেখানে রাখি তবে এটি কাজ করে তবে এটি 15 টি অতিরিক্ত বাইট অর্জন করে।
স্কোর_উন্ডারে

6

পাইথন 2 , 131 127 বাইট

s=input()
for y in'WXGURFSOIZ':vars()[y]=s.count(y)
while Z<9:s+=[O-U-W,W,R-U,U,F-U,X,S-X,G,I-X-G-F+U][Z]*str(Z+1);Z+=1
print s

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

জাভাস্ক্রিপ্ট ড্রাকো 18 সমাধানের একটি সংশোধিত সংস্করণের ভিত্তিতে ।


কি আকর্ষণীয় ব্যবহার vars!
xnor

@ এক্সনর এটি ওভস ছিল কীভাবে আমাকে শিখিয়েছিল যে অন্যান্য গল্ফগুলির জন্য :)))
এমডাহুমনে

খুব চালাক. আমার উত্তরটি মানিয়ে নেওয়ার জন্য একটি +1 রাখুন (এটি মূলত ত্রুটিযুক্ত)
ড্রাকো 18

5

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

for($c=count_chars($argn);$i<9;)echo str_pad("",[$c[79]-$c[87]-$u=$c[85],$c[87],$c[72]-$g=$c[71],$u,$f=$c[70]-$u,$x=$c[88],$c[86]-$f,$g,$c[73]-$x-$f-$g][+$i],++$i);

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

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

পূর্ববর্তী পদ্ধতির উপর ভিত্তি করে প্রথমে সমান সংখ্যা এবং তারপরে বর্ধমান ক্রমে বিজোড় সংখ্যাগুলি পরীক্ষা করুন

for($z=[$o=($c=count_chars($argn))[87],$f=$c[85],$x=$c[88],$g=$c[71],$c[79]-$o-$f,$c[72]-$g,$v=$c[70]-$f,$c[86]-$v,$c[73]-$x-$v-$g];$i<9;)echo str_repeat(++$i,$z[_405162738[$i]]);

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

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

for(;$o=ord(WUXGOHFVN[$i]);$i++)for(;$r[$o]<count_chars($argn)[$o];$t[]=$i>3?2*$i-7:2+2*$i,sort($t))for(++$r[$o],$n=0;$q=ord(([TO,ORF,IS,HEIT,EN,TREE,IVE,SEEN,NIE][+$i])[$n++]);)$r[$q]++;echo join($t);

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


ব্যর্থENOOWTWTOWOT
টিটাস

@ টিটাস এখন ঠিক হয়ে গেছে। আমি প্রশ্নটি ভুল
বুঝেছি

হ্যাঁ উদাহরণগুলি কিছুটা বিভ্রান্তিকর। বাহ যে খরচ হয়েছে! তুমি কি তা ভেঙে ফেলবে ?!
তিতাস

@ টিটাস আমি মনে করি আপনার কাছে যাওয়ার পথে আমি অন্য কোনও উপায়
সন্ধানের সীমাতে পৌঁছেছি

1
$i++<9এবং এর $iপরিবর্তে $i<10এবং ++$i(-1 বাইট); (-4 বাইট) এর _405162738[$i]পরিবর্তে $i%2?$i/2+4:$i/2-1( $i/2+~($i%2*-5)খুব বেশি কাজ করবে, তবে এটি এক বাইট বেশি দিন))
টাইটাস

5

জাভাস্ক্রিপ্ট (ES6), 288 150 144 বাইট

q=s=>[u=(l=t=>s.split(t).length-1)`U`,l`O`-l`W`-u,l`W`,l`R`-w,u,f=l`F`-u,x=l`X`,l`S`-x,g=l`G`,l`I`-x-g-f].map((n,i)=>`${i}`.repeat(i&&n)).join``

const testCases = ['NEO', 'ENOWOT', 'EONOTWHTERE', 'SNVEEGHEITNEIN', 'ENOOWTEERHTRUOFEVIFXISNEVESTHGIEENIN']

testCases.forEach(testCase => console.log(testCase, q(testCase)))

অন্য দুটি তুলনায় দীর্ঘঅন্যান্য জেএস এন্ট্রিগুলির মধ্যে , তবে আমি ভেবেছিলাম যে আমি এমন একটি আকর্ষণীয় পদ্ধতির ঝরে যা যা অন্য কোনও ভাষায় কারও পক্ষে কাজ করতে পারে।

মূলত আমরা নিম্নলিখিতগুলি নির্ধারণ করতে পারি:

W -> 2
X -> 6
G -> 8
U -> 4

এই চিঠিগুলির যে কোনও ঘটনাই বোঝায় যে সেই সংখ্যাটি মূল সংখ্যায় বিদ্যমান। এখান থেকে আমরা বাকি অঙ্কগুলি কমাতে পারি:

R-U -> 3
F-U -> 5
S-X -> 7

দুটি জটিল মামলা সহ:

O-(U+W) -> 1
I-(X+G+(F-U)) -> 9

উভয় 1এবং 9অঞ্চল তুলনামূলকভাবে হার্ড। একের জন্য, Eকিছু শব্দের মধ্যে একাধিকবার ( SEVENদুটি আছে) যেমন দেখায় N( NINE) রয়েছে, তাই আমরা Oঅন্য দুটি জায়গায় যা ঘটে তা পরীক্ষা করে আটকে থাকি , ভাগ্যক্রমে উভয়ই সহজ।

নাইন এর জন্য, আপনি এটি কীভাবে টুকরো টুকরো টুকরো টুকরো করেন তা নয়টি কঠিন।

এইভাবে আমরা এই মানচিত্রটি দিয়ে শেষ করব:

[u=(l=t=>s.split(t).length-1)`U`,  //unused 0; precompute 'U's
 l`O`-l`W`-u,    //1
 l`W`,           //2
 l`R`-w,         //3
 u,              //4
 f=l`F`-u,       //5
 x=l`X`,         //6
 l`S`-x,         //7
 g=l`G`,         //8
 l`I`-x-g-f]     //9

9, বাইটগুলি সংরক্ষণ করে ভেরিয়েবল অ্যাসাইনমেন্ট সহ সিক্স, আইজিএইচটি এবং ফাইভ (5 ব্যাক-রেফারেন্সিং ফিউউআর সহ) ব্যাক-রেফারেন্স করতে সক্ষম। এর জন্য নীলকে ধন্যবাদ, এটি জেএসের বেশ কয়েকটি বৈশিষ্ট্য ব্যবহার করে আমি এর সাথে খুব অপরিচিত ( ('উদাহরণস্বরূপ, অর্ধেক টানা পিছনের দিকের টিকটিক্স ) এবং কোডটি দেওয়ার চেষ্টা করার আগে কাগজে ডুডল করলাম এমন ধারণার খুব কাছে এসে গেছে it (আমি 9 "" কী বাকী আছে "হিসাবে রেখেছি, এটি" "যদি আমি দেখি যে আমি Xএটি এবং একটি Sএবং Iস্ট্রিং থেকে অপসারণ করতে পারি তবে ..." যাতে চারটি সাধারণ মামলার পরে পরবর্তী 3 হয়ে যায় সহজ)।

এই এন্ট্রিটি আকর্ষণীয় হওয়ার কারণ হ'ল এটি কোনও শিফલ્ડ স্ট্রিংটিকে ইনপুট হিসাবে পরিচালনা করতে পারে । অর্থাত্ পৃথক শব্দগুলি পরিবর্তিত হওয়ার পরিবর্তে আমরা পুরো স্ট্রিংটি বদল করতে পারি, যা আমি ভেবেছিলাম জন প্রথমে করছিলেন:

q=s=>[u=(l=t=>s.split(t).length-1)`U`,l`O`-l`W`-u,l`W`,l`R`-w,u,f=l`F`-u,x=l`X`,l`S`-x,g=l`G`,l`I`-x-g-f].map((n,i)=>`${i}`.repeat(i&&n)).join``

const testCases = ['XENSENINEVSI']

testCases.forEach(testCase => console.log(testCase, q(testCase)))


1
দুর্দান্ত, তবে 9 টি গণনা করতে সমস্যা আছে ... আমি মনে করি এটি ixg-f + u হতে পারে
mdahmoune

@ এমদাহমৌনে শ্যুট, আপনি ঠিক বলেছেন আমি ওটা গণ্ডগোল করেছিলাম। : <
ড্র্যাকো 18

4 বাইট ব্যবহার করে s.split(t).length-1, 2 বাইট ব্যবহার করে সংরক্ষণ করুন s.repeat(n>0&&n)(কেন যাই হোক শূন্যের চেয়ে কম কেন? 7 বাইট সংরক্ষণ হয়) gএর ব্যাপ্তিতে একগুচ্ছ বাইটগুলি সংরক্ষণ করুন sযাতে আপনাকে এটি সর্বদা অতিক্রম করতে হবে না এবং আরও ভাল আপনি এটি ট্যাগযুক্ত টেমপ্লেট তৈরি করতে পারেন, যা মোট (9 সংশোধনের আগে) 55 টি বাইট সাশ্রয় করে। সংরক্ষণ করুন আরো temporaries পুনরাবৃত্তি মান সংরক্ষণ করে বাইট, এবং আমি ব্যবহার বন্ধ আরো কয়েকটি চাঁচা map: s=>[,(l=t=>s.split(t).length-1)`O`-l`W`-l`U`,w=l`W`,l`R`-w,u=l`U`,l`F`-u,x=l`X`,l`S`-x,g=l`G`,l`I`-x-g].map((n,i)=>`${i}`.repeat(n)).join``
নীল

@ নীল আমি নিশ্চিত নই কেন এন কখনই শূন্যের চেয়ে কম শেষ হয়েছিল, তবে তিনটি পরীক্ষার সময় এটি হয়েছিল। আমি একটি ত্রুটি পেয়েছি এবং তদন্ত করে দেখলাম যে এটির প্রয়োজন ছিল তবে আমি এখনও নিশ্চিত নই। আপনি যে মুখ্য লাইব্রেরির মানচিত্রটি পেয়েছেন তা জাভাস্ক্রিপ্টে রয়েছে কীভাবে পড়তে হয় তাও জানি না। : ডি
ড্রাকো 18

@ নীল আহ, ঠিক আছে, এন> 0 পরীক্ষা করার কারণ: যদি দুটি টিও হয় তবে তিনটি নেই। আর = 0, ডাব্লু = 1. 0-1 = -1। এক ঘন্টা আগে এটি বুঝতে আমার সমস্যা হয়েছিল, আমি জানতাম যে এটি 3-চকের সাথে সম্পর্কিত, তবে এটি কাজ করার জন্য একটি সময় শয়তান পাচ্ছিল (কফির অভাবে)।
ড্রাকো 18

4

গণিত, 133 বাইট

(s={};c=Characters;j=c@#;Table[If[FreeQ[j~Count~#&/@c[#[[i]]]&@ToUpperCase@IntegerName@Range@9,0],s~AppendTo~i],{i,9}];FromDigits@s)&


ইনপুট

"VENESGTHIEENNI"

আউটপুট

789


আপনি কি c@#[[i]]পরিবর্তে একটি অতিরিক্ত বাইট সংরক্ষণ করতে পারেন c[#[[i]]]? আপনি পোতা সিনট্যাক্স ব্যবহার করার মাধ্যমে অন্যদের বাইট সংরক্ষণ করতে সক্ষম হতে পারেন ~উপর Table
নম্বরমানিয়াক

4

সি #, 218 বাইট

সংক্ষিপ্ত সংস্করণ:

string q(string s){var n="ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE".Split(',');for(inti=0,j;;i++)for(j=0;n[i].IndexOf(s[j])>=0;){if(++j==n[i].Length){var r=++i+"";for(;j<s.Length;r+=++i)j+=n[i].Length;return r;}}}

প্রসারিত সংস্করণ:

string q(string s)
{
    var n = "ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE".Split(',');
    for (int i = 0, j; ; i++)
        for (j = 0; n[i].IndexOf(s[j]) >= 0;)
        {
            if (++j == n[i].Length)
            {
                var r = ++i + "";
                for (; j < s.Length; r += ++i)
                    j += n[i].Length;
                return r;
            }
        }
}

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

আমার প্রথম প্রবেশের কারণে, আমি নিয়ম সম্পর্কে অনিশ্চিত ... আমি ডি-ক্রিপ্টের জন্য ব্যবহৃত ক্লাসের আকারটিই গণনা করছি, কোডটি যা পরীক্ষা করে এটি ঠিক নয়?

সম্পাদন করা

এবং এটির মজাদার জন্য - আমি এখানে যা করতে শুরু করেছি তা সম্পূর্ণ নিয়মগুলি না পড়ে: এস - এটি আইডিয়নে দেখুন । এটি যখন ডি-ক্রিপ্ট করে তখনও যখন একটি অঙ্কের অক্ষরগুলি স্ট্রিংয়ের যে কোনও জায়গায় স্ক্র্যাম্ব করা যায়।

সম্পাদনা 2

TheLethalCoder এর টিপস অনুসারে সংক্ষিপ্ত করা হয়েছে। ধন্যবাদ!

সম্পাদনা 3

আর এখন টাইটাস আরও কয়েকটা বাইট শেভ করলেন। ধন্যবাদ!


2
হ্যালো এবং পিপিসিজিতে আপনাকে স্বাগতম! আপনাকে কেবল পদ্ধতিটি অন্তর্ভুক্ত করতে হবে, আপনি public staticএটি থেকে এটিকে সরাতে পারেন । আপনি যেমন একটি বেনাম পদ্ধতিতে রূপান্তর করতে পারেন s=>{<do stuff>return"";}। আপনি varকয়েকবার ব্যবহার করতে পারেন , ভেরিয়েবলগুলি একসাথে বাইটগুলি সঞ্চয় করে ঘোষণা করে int i=1,j;। একটি স্ট্রিং থেকে একটি অ্যারে তৈরি করা এবং এটিতে বিভাজন সাধারণত ছোট হয় (যদিও আমি এই ক্ষেত্রে পরীক্ষা করে দেখিনি) অর্থাৎ "ONE|TWO".Split('|')। আপনি এর <0পরিবর্তে==-1
TheLethalCoder


@ দ্য লেথলকোডার দুর্দান্ত টিপস, ধন্যবাদ!
সামওয়ান

মোটেই পরীক্ষিত হয়নি তবে আমি বিশ্বাস করি যে নিম্নলিখিতটি আপনার 221 বাইটের কোডের সমতুল্য:s=>{var n="ONE|TWO|THREE|FOUR|FIVE|SIX|SEVEN|EIGHT|NINE".Split('|');for(int i=0,j;++i<= 9;)for(j=0;n[i-1].IndexOf(s[j])<0;){if(++j==n[i-1].Length){var r=i+"";while(j<s.Length){j+=n[i].Length;r+=++i;}return r;}}return "";}
TheLethalCoder

সাইড নোটে আপনার টিআইও'র জন্য টিআইও ব্যবহার করা সাধারণত সহজ !
TheLethalCoder

3

জাভাস্ক্রিপ্ট (ES6), 142 139 বাইট

সংরক্ষণ 3 বাইট ধন্যবাদ নিল

বর্তমানে সংখ্যাগুলির সদ্ব্যবহার না করে সর্বদা আরোহী ক্রমে সাজানো হয়

f=s=>s?'ENO|OTW|EEHRT|FORU|EFIV|ISX|EENSV|EGHIT|EINN'.split`|`.findIndex(w=>[...s.slice(0,y=w.length)].sort().join``==w)+1+f(s.slice(y)):''

f=s=>s?'ENO|OTW|EEHRT|FORU|EFIV|ISX|EENSV|EGHIT|EINN'.split`|`.findIndex(w=>[...s.slice(0,y=w.length)].sort().join``==w)+1+f(s.slice(y)):''

const testCases = ['NEO', 'ENOWOT', 'EONOTWHTERE', 'SNVEEGHEITNEIN', 'ENOOWTEERHTRUOFEVIFXISNEVESTHGIEENIN']

testCases.forEach(testCase => console.log(testCase, f(testCase)))


কিসের অপেক্ষা?? "axbxc".split`x`.join``। এটাকে কীভাবে বলা হয়? গুগলে কিছু খুঁজে পাওয়া যাচ্ছে না।
কিওয়ার্টি

@ কিওয়ার্টি - এগুলি ট্যাগ টেমপ্লেট লিটারালস , একটি ES6 বৈশিষ্ট্য যা আমি কয়েকটি বাইট সংরক্ষণ করতে ব্যবহার করছি ক্ষেত্রে ক্ষেত্রে প্যারেনের প্রয়োজন নেই splitএবংjoin
ক্রেগ আয়র

আপনি এটি উত্তর দিয়েছেন। আমি ট্যাগযুক্ত টেম্পলেট আক্ষরিক জানি, কিন্তু আমি বুঝতে পারি নি যে আপনি এটি এই ফাংশনগুলিতেও ব্যবহার করতে পারেন। ধন্যবাদ.
কিওয়ার্টি

তারা একটু ভিন্ন, আপনি টেমপ্লেট লিটারেল আছে (যেমন x=`foo${5+5}bar`), তারা ট্যাগ থাকা যখন আপনি ডান বন্ধনী ছাড়াই ব্যবহার করে একটি ফাংশন কল: foo`foo${5+5}bar`যা একই হিসাবেfoo(['foo','bar'], 10)
ক্রেগ Ayre

1
f(s.slice(y))এটি সর্বদা একটি স্ট্রিং যাতে ''+এটির আগে আপনার প্রয়োজন হয় না।
নীল

2

জেলি , 38 বাইট

Dị“©ȯ¿w¶&ÇhṆỌƘ#Ȯʋ~¢CNẓ_»Ḳ¤FṢŒu
L3*Ç€iṢ

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

ব্যাখ্যা

L3*Ç€iṢ    Main link. Argument: s (string)
L            Get length of s.
 3*          Raise 3 to that power. This will always be greater than n.
   ǀ        Get the name of each of the numbers using the helper link.
     iṢ      Find the position of the sorted input.

Dị“©ȯ¿w¶&ÇhṆỌƘ#Ȯʋ~¢CNẓ_»Ḳ¤FṢŒu    Helper link. Argument: n (number)
D                                   Get digits of n.
  “©ȯ¿w¶&ÇhṆỌƘ#Ȯʋ~¢CNẓ_»            The string "one two (...) eight nine AA".
                        Ḳ           Split that string at spaces.
 ị                                  Get name of each digit in the list.
                          F         Flatten to a single string.
                           Ṣ        Sort the characters.
                            Œu      Make uppercase.

আপনার কোড নিয়ে একটি সমস্যা আছে। স্ট্রিংটিকে এতে "EIGHTNINE"প্রবেশ করার চেষ্টা করুন :)
আমোরিস

@ আমরিস 0 বাইটের জন্য স্থির হয়েছে।
পূর্বকুডারী

আমি মনে করি এটি "VENESGTHIEENNI"
J42161217

আমি দ্বিতীয় @ জেনি_ম্যাথি
আমোরিস

@ জেনি_ম্যাথি প্রোগ্রামটি খুব অদক্ষ এবং দীর্ঘ ইনপুটগুলির জন্য সময় এবং স্মৃতিশক্তি শেষ (আমি জানি, এটি সত্যিই খারাপ)। আপনি একটি ছোট ছোট উপরের বাউন্ড ব্যবহার করে এর 3সাথে প্রতিস্থাপন 2.2করতে পারেন, যা আপনাকে কার্য নীতিটি পরিবর্তন না করে সহজেই 789 গণনা করতে দেয়। 2দুর্দান্ত হবে তবে প্রচুর ছক্কা সহ কিছু নির্দিষ্ট ইনপুট সবেই ব্যর্থ হবে।
পুর্কাকুডারী

2

জাভাস্ক্রিপ্ট (ES6), 221 বাইট

s=>(m=btoa`8Ñ>Mc¾LtDáNQ!Q>HþHA7átþ4Ò`.split`+`.map(s=>RegExp(s.replace(/(.)\1*/g,c=>`(?=(.*${c[0]}){${c.length}})`))),t=0,r=0,[...s].map(c=>(t+=c,d=1,n=0,m.map((r,i)=>t.match(r)&&(d--,n=i)),d||(r=r*10+n+1,t=0))),r)

কোড স্নিপেট উদাহরণ:

f=

s=>(m=btoa`8Ñ>Mc¾LtDáNQ…!Q>H…þHA7átþ4Ò`.split`+`.map(s=>RegExp(s.replace(/(.)\1*/g,c=>`(?=(.*${c[0]}){${c.length}})`))),t=0,r=0,[...s].map(c=>(t+=c,d=1,n=0,m.map((r,i)=>t.match(r)&&(d--,n=i)),d||(r=r*10+n+1,t=0))),r)

console.log(f("NEO"))
console.log(f("ENOWOT"))
console.log(f("EONOTWHTERE"))
console.log(f("SNVEEGHEITNEIN"))
console.log(f("ENOOWTEERHTRUOFEVIFXISNEVESTHGIEENIN"))



2

রেটিনা , 88 বাইট

[EFIST]

^(ON|NO)*
$#1$*1
O

W
2
HR|RH
3
UR|RU
4
X
6
GH|HG
8
(NN)*$
$#1$*9
r`NV|VN
7
V
5

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

ব্যাখ্যা

  • প্রথমত, স্বতন্ত্রতার জন্য প্রয়োজন নেই এমন একগুচ্ছ অপ্রয়োজনীয় অক্ষর ফেলে দিন
  • 1 টি সামনের দিক থেকে বাছুন (এটি আমাদের অবিলম্বে বাকী ওস বাদ দেয় এবং 5, 7, 9 জগাখিচুড়ি করার আগে কিছু এনএস পরিষ্কার করে দেয়)
  • 2, 3, 4, 6, এবং 8 এখন তুচ্ছ
  • 9 টি হ'ল একটি ডাবল এনএন, সুতরাং আমরা 5 এবং 7 এর সাথে ডিল করার আগে এগুলি শেষ করুন
  • 7 টি ডান থেকে প্রতিস্থাপন করুন (তাই আমরা 57 এর পরিবর্তে ভিএনভি 75 কে কমিয়ে দেব না)
  • 5 এস অবশিষ্ট Vs হয়

আপনি% (G` হেডার যুক্ত করে থাকেন, আপনি মূল কোড ব্যবহার করতে পারেন এবং এটি আলাদাভাবে ইনপুটের প্রতিটি লাইনে মূল্যায়ন হবে: Tio
PunPun1000

ধন্যবাদ @ পুনপুন 1000 আমি অনুভব করেছি যে এটি করার একটি উপায় অবশ্যই আছে তবে তা দ্রুত খুঁজে না পাওয়ার পরে ছেড়ে দিয়েছি।
কিথেরন

1

পাওয়ারশেল , 182 বাইট

[regex]::Replace("$args",'(?<1>[ONE]{3z2>[TWO]{3z3>[THRE]{5z4>[FOUR]{4z5>[FIVE]{4z6>[SIX]{3z7>[SVEN]{5z8>[EIGHT]{5z9>[NIE]{4})'.replace('z','})|(?<'),{$args.groups.captures[1].name})

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

অবহেলিত তবে কোডিং করছে না:

[System.Text.RegularExpressions.Regex]::Replace("$args",

    '(?<1>[ONE]{3})       
    |(?<2>[TWO]{3})
    |(?<3>[THRE]{5})
    |(?<4>[FOUR]{4})
    |(?<5>[FIVE]{4})
    |(?<6>[SIX]{3})
    |(?<7>[SVEN]{5})
    |(?<8>[EIGHT]{5})
    |(?<9>[NIE]{4})'

    ,{$args.groups.captures[1].name}
)

যেমন (?<3>[THRE]{5})চরিত্র শ্রেণীর সাথে মেলে matchesTHRE মেলে, তাই এটি তাদের ক্রমবিন্যাসের সাথে মেলে, এবং এই অক্ষরের যে কোনও একটির সাথে পরের পাঁচবারের সাথে মিল করতে হবে এবং সংখ্যার সাথে মানচিত্রের জন্য ক্যাপচার গ্রুপটির নাম দেওয়া হয়েছে '3'।

})|(?<একটি জন্য পুনরাবৃত্তি পাঠ্য অদলবদল করে প্রাথমিক সংকোচনের z


1

সি ++, 296 , 288 বাইট

সংক্ষিপ্ত সংস্করণ:

#define T string
using namespace std;T N[]={"ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE"};T Q(T S){T R="";for(int i=0;i<9;i++){do{if(S.find(N[i])!=T::npos){S.erase(S.find(N[i]),N[i].size());R+=to_string(i+1);}}while(next_permutation(N[i].begin(),N[i].end()));}return R;}

পূর্ণ সংস্করণ:

#define T string
using namespace std;

T N[]={"ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE"};

T Q(T S)
{
    T R="";
    for(int i=0;i<9;i++)                             //for all possible                             
                                                     //codewords (ONE,TWO...NINE)   
    {
        do
        {   
            if(S.find(N[i])!=T::npos)                //if found in encrypted word
            {
                S.erase(S.find(N[i]),N[i].size());  //erase it from the word
                R+=to_string(i+1);                  //save integer to the result string
            }
                                                    //check next permuation of codeword  

        } while(next_permutation(N[i].begin(),N[i].end())); 
    }                                                   

    return R;
}

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

সম্পাদনা করুন:
1) 200-> 296 বাইটস, গণনায় N এর সংজ্ঞা এবং সংজ্ঞা সহ অন্তর্ভুক্ত 2) 296-> 288, ম্যাক্রো ব্যবহারের জন্য, জাকারিকে ধন্যবাদ


আপনাকে সংজ্ঞা দেওয়া উচিত Nএবং using namespace std;আপনার বাইট গণনাতে।
orlp

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

আমি এগুলি সব অন্তর্ভুক্ত করার জন্য পুনরায় সম্পাদনা করেছি। এন এর সংজ্ঞার জন্য আমি নিজেই নিশ্চিত নই, তবে নেমস্পেসের জন্য, আমি সাধারণত এটি অন্তর্ভুক্ত করি না (এটি লাইব্রেরির স্টাফ হিসাবে বিবেচনা করুন)। যদিও, বর্তমান
কোডটিতে

1
আপনি কয়েক বাইট সংরক্ষণ করতে একটি ম্যাক্রো সংজ্ঞায়িত করতে পারেন? repl.it/JY7k
জাকারি

1

রুবি, 138 114 110 বাইট

gsub(/#{"3ONE3TWO5THRE4FOUR4FIVE3SIX5SEVN5EIGHT4NIE".gsub(/(.)(\D+)/,'([\2]{\1})|')}/){(1..9).find{|i|$~[i]}}

বাইট গণনায় 1 টি বাইট অন্তর্ভুক্ত -p বিকল্পের ।

কি?

এই:

/#{"3ONE3TWO5THRE4FOUR4FIVE3SIX5SEVN5EIGHT4NIE".gsub(/(.)(\D+)/,'([\2]{\1})|')}/

একটি রেজেক্স আক্ষরিক যা স্ট্রিং অন্তরঙ্গনের মাধ্যমে মূল্যায়ন করে:

/([ONE]{3})|([TWO]{3})|([THRE]{5})|([FOUR]{4})|([FIVE]{4})|([SIX]{3})|([SEVN]{5})|([EIGHT]{5})|([NIE]{4})|/

যদি আমরা এটি নির্ধারণ করি regex, বাকি কোডটি উপলব্ধি করা কিছুটা সহজ $~:

gsub(regex){(1..9).find{|i|$~[i]}}

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


1

জাভা 8, 198 256 বাইট

s->{String r="",x=r;for(String n:"ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE".split(" ")){for(char c:n.toCharArray())x+="(?=.*"+c+")";x+="["+n+"]{"+n.length()+"}x";}for(int i=0,q;i<9;)for(q=(s+" ").split(x.split("x")[i++]).length-1;q-->0;)r+=i;return r;}

+58 বাইট .. পূর্ববর্তী সংস্করণটির রেগেক্সের কারণে সঠিকভাবে কাজ করা হয়নি (এটি "EEE" এর সাথেও মিলছিল; "EEN"; ইত্যাদি))

ব্যাখ্যা:

এখানে চেষ্টা করুন।

s->{                     // Method with String as parameter and return-type
  String r="",           //  Result-String
         x=r;            //  Regex-String
  for(String n:"ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE".split(" ")){
                         //  Loop (1) from "ONE" through "NINE":
    for(char c:n.toCharArray())
                         //   Inner loop (2) over the characters of this String
      x+="(?=.*"+c+")";  //    Append regex-group `(?=\w*c)` where `c` is the capital character
                         //   End of inner loop (2) (implicit / single-line body)
    x+="["+n+"]{"+n.length()+"}x";
                         //   Append regex part `[s]{n}` where `s` is the String, and `n` is the length
  }                      //  End of loop (1)
  // The regex now looks like this, which we can split on "x":
  // (?=.*O)(?=.*N)(?=.*E)[ONE]{3}x(?=.*T)(?=.*W)(?=.*O)[TWO]{3}x(?=.*T)(?=.*H)(?=.*R)(?=.*E)(?=.*E)[THREE]{5}x(?=.*F)(?=.*O)(?=.*U)(?=.*R)[FOUR]{4}x(?=.*F)(?=.*I)(?=.*V)(?=.*E)[FIVE]{4}x(?=.*S)(?=.*I)(?=.*X)[SIX]{3}x(?=.*S)(?=.*E)(?=.*V)(?=.*E)(?=.*N)[SEVEN]{5}x(?=.*E)(?=.*I)(?=.*G)(?=.*H)(?=.*T)[EIGHT]{5}x(?=.*N)(?=.*I)(?=.*N)(?=.*E)[NINE]{4}x
  for(int i=0,q;i<9;)    //  Loop (3) from 0 through 9 (exclusive)
    for(q=(s+" ").split(x.split("x")[i++]).length-1;
                         //   Split the input on the current regex-part,
                         //   and save the length - 1 in `q`
        q-->0;           //   Inner loop (4) over `q`
      r+=i               //    And append the result-String with the current index (+1)
    );                   //   End of inner loop (4)
                         //  End of loop (3) (implicit / single-line body)
  return r;              //  Return the result-String
}                        // End of method

1
এরফ ... এর জন্য ভুল ফলাফল "ENOOWTEERHTRUOFEVIFXISNEVESTHGIEENIN":(
অলিভিয়ার গ্রাগোয়ার

হ্যাঁ, এটাই হ'ল এটি আমাকে +1 করতে বাধা দিয়েছে! আমার সমাধানটি 240 বাইট ছিল ... আপনি আমাকে মারার আগেই।
অলিভিয়ার গ্রাগোয়ার

@ অলিভিগ্রগ্রোয়েয়ার আপনার 240 বাইট সমাধান পোস্ট করতে নির্দ্বিধায় মনে হয়, কারণ আমি কোনও সমাধান খুঁজে পাচ্ছি না about এর অসুবিধাটি [ONE]{3}হ'ল এটি EENপরীক্ষার কেসটি শেষে আট এবং নাইন অংশের সাথেও মেলে .. এবং আমার সন্দেহ আছে যে একটি Regex মেলে এই সব: ENO|EON|NEO|NOE|OEN|ONEএছাড়াও সমরুপ ছাড়া EEE;EEN;EEO;...জন্য সব সংখ্যার যে খাটো 40 বাইট .. হয়তো আমি ব্যবহার করে কিছু করতে পারি না substringএবং সংখ্যার পরীক্ষণ বিপরীত, কিন্তু আমি সত্যিই এখন সময় এটা চিন্তা করতে হবে না ..
কেভিন ক্রুইজসেন

@ অলিভিয়ারগ্রোগোয়ার আপনার কাছে এখনও আপনার 240 বাইট উত্তর থাকলে তা নির্দ্বিধায় পোস্ট করুন।
সবেমাত্র

1
ঠিক আছে, দেখে মনে হচ্ছে আমি এই চ্যালেঞ্জটি পুনরায় করার সময় আরও ছোট্ট পথ খুঁজে পেয়েছি : পি
অলিভিয়ার

1

জাভা (ওপেনজেডিকে 8) , 181 বাইট

s->{String x="",r;for(int i=0,l;i<9;)for(r="ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE".split(",")[i++],l=r.length();s.matches("["+r+"]{"+l+"}.*");s=s.substring(l))x+=i;return x;}

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

কেভিন ক্রুইসেনের টিআইও টেম্পলেটটি পুনরায় ব্যবহার করার জন্য আমি স্বাধীনতা নিয়েছি । আশা করি আপনার আপত্তি নেই;)


আহা, আমার আগের মন্তব্যটি মনে রাখবেন না ... আপনি রেজিজের উপরে লুপের পরিবর্তে রেজিक्सটি তৈরি করেন। তবুও, আমি যদি প্রথমটি উত্তর ব্যবহার করি তবে আমার প্রথম উত্তরের সাথে ঘনিষ্ঠ ছিল s.substring। সবচেয়ে খারাপ দিকটি হ'ল, আমি s.substringআমার বর্তমান উত্তরটি ব্যবহার করছি , হ্যাঁ, আহ ভাল, আমার কাছ থেকে +1। এটা প্রায় সপ্তাহান্তে খুশি ..
কেভিন ক্রুইজসেন

1

05AB1E , 36 31 বাইট

‘€µ‚•„í†ìˆÈŒšï¿Ÿ¯¥Š‘#vyœN>UvyX:

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


এটি ডিবাগ দিয়ে চলেছে দেখুন: ডিবাগ সহ টিআইও

‘€µ‚•„í†ìˆÈŒšï¿Ÿ¯¥Š‘# | Push ['ONE', 'TWO', 'THREE', 'FOUR', 'FIVE', 'SIX', 'SEVEN', 'EIGHT', 'NINE']
vyœ                   | For each list of permutations of that word...
   N>U                | Push index + 1 into register X.          
      vyX:            | Replace each permutation with X.

আমি কেবলমাত্র আমার চেয়ে আপনার সবুজ চিহ্নটি রাখার পরামর্শ দিচ্ছিলাম এবং আমি একটি বাগ লক্ষ্য করেছি: FURONESEVফেরৎ FUR1SEV:(
জোনাথন অ্যালান

1

পার্ল 5 , 102 + 1 (-n) = 103 বাইট

for$i(map{"[$_]{".length.'}'}ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE){$,++;print$,while(s/^$i//)}

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


নিস! ঠাট দম্পতি যে সাহায্য: map{...}সঙ্গে প্রায়শই প্রতিস্থাপিত হতে পারে map...,, lengthএবং y///cহয় সাধারণত বিনিমেয় খুব (সবসময় ছোট যখন কাজ করছে না $_যদিও!) পরিবর্তে while, ++$,x s/^$i//খাটো, এবং যদি আপনি পরিবর্তন -nকরতে -pআপনি `$ \` পরিবর্তে সংযুক্ত করতে পারবেন ডাকার print! এটি অনলাইন চেষ্টা করুন!
ডম হেস্টিংস

এছাড়াও, আমি আশা করি আপনি কোনও পরামর্শ পোস্ট করতে আমার আপত্তি করবেন না, আপনি যদি পছন্দ করেন তবে আমি বিরত থাকব। :)
ডম হেস্টিংস

0

পাইথন 3 , 238 236 বাইট

def f(s):
 e=''
 while len(s):
  for i in range(9):
   for r in[''.join(p)for p in permutations('ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE'.split()[i])]: 
    if s[:len(r)]==r:e+=str(i+1);s=s[len(r):]
 return e
from itertools import*

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


নিষ্ঠুর-শক্তি সমাধান, অঙ্কের অ-হ্রাসহীনতা গ্রহণ করবেন না।


@ মিঃ কে ধন্যবাদ এক্সকোডার 2 বাইট সংরক্ষণের জন্য!


আপনাকে def f(s):আপনার বাইট গণনাতে অন্তর্ভুক্ত করতে হবে , এটি কোনও বেনামে ফাংশন নয়
মিঃ এক্সকোডার

এছাড়াও আপনি এর while len(s)>0সাথে প্রতিস্থাপন করতে পারেনwhile len(s)
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার সেই ব্যাখ্যাটির জন্য ধন্যবাদ
চেস ভোগেলি

আপনি ঘোষণাকে e-1 বাইটের জন্য ফাংশন শিরোনামে স্থানান্তর করতে পারেন । এছাড়াও, execএবং তালিকা বোঝার ইনডেন্টেশনে বাইট সংরক্ষণ করতে পারে।
ক্যালকুলেটরলাইন

0

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

for($a=count_chars($argn);$c=ord($s[++$p]?:$s=[OWU,W,HG,U,FU,X,SX,G,N17.$p=0][$i-print str_repeat($i++,$x)]);)$x=$a[$i+48]+=($p?-1:1)*$a[$c];

পুরানো সংস্করণ, 151 বাইট :

for($a=count_chars($argn,1);$s=[OWU,W,HG,U,FU,X,SX,G,N17][+$i++];print str_repeat($i,$a[$i+48]))for($p=0;$c=ord($s[$p]);)$a[$i+48]+=($p++?-1:1)*$a[$c];

1 থেকে 9 পর্যন্ত অঙ্কগুলি লুপ করে, শব্দের মধ্যে স্বতন্ত্র অক্ষর গণনা করা এবং অ-অনন্য অক্ষরগুলি গণনা বিয়োগ করে, চলতে চলতে অঙ্কটি মুদ্রণ করা।
যদিও এটি চলতে চলতে মুদ্রণ করা হচ্ছে, ডিজিটের গণনাগুলি অবশ্যই অবশ্যই সংরক্ষণ করতে হবে9 কাজ করার ।

পাইপ হিসাবে চালনা করুন-nR বা এটি অনলাইন চেষ্টা করুন

এটি ডিজিটের গণনাগুলির $a[$i]পরিবর্তে $a[$i+48]এএসসিআইআই 1এবং ব্যবহার করতে আরও 4 টি বাইট সঞ্চয় করবে save7 (উদ্ধৃতিতে) অঙ্কের অক্ষরের পরিবর্তে নিজের জন্য ।

ভাঙ্গন

for(
    $a=count_chars($argn,1);                # count character occurences in input
    $s=[OWU,W,HG,U,FU,X,SX,G,N17][+$i++];   # loop through digit names
    print str_repeat($i,$a[$i+48])              # print digit repeatedly
)
    for($p=0;$c=ord($s[$p]);)                   # loop through name
        $a[$i+48]+=                                 # add to digit count
        ($p++?-1:1)*                                # (add first, subtract other)
        $a[$c];                                     # character occurences

ONEএকটি দিয়ে কেবল শব্দ নয় O, সুতরাং এটির জন্য গণনাগুলি W(কেবল উপস্থিত হওয়া TWO) এবং U(কেবলমাত্র উপস্থিত হতে হবে FOUR) এবং আরও অনেকগুলি প্রয়োজন ।
NINEবিশেষ, কারণ আমি যদি অক্ষরগুলি ব্যবহার করি তবে কেবল বিয়োগ করার কোনও উপায় নেই (যার প্রয়োজন হবে I-X-G-F+UবাN-O-S+W+U+X ), তাই আমি পরিবর্তে অঙ্কগুলি ব্যবহার করি use

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

$a=count_chars($argn);foreach([W2O,U4FOR,X6SI,G8I,F5I,O1,R3,S7,I9]as$s)for(${$s[$p=1]}+=$n=$a[ord($s)];$c=ord($s[++$p]);)$a[$c]-=$n;while($$i--?print$i:$i++<9);

সমস্ত আপার কেস ইনপুট ধরে; অক্ষরগুলি জুড়ে স্ক্যাম্বল হতে পারে।
পাইপ হিসাবে চালনা করুন-nR বা এটি অনলাইনে চেষ্টা করুন

ব্যাখ্যা

অঙ্কের শব্দের মধ্য দিয়ে লুপ করে, তাদের অনন্য অক্ষরগুলি গণনা করে the ইনপুটটিতে এবং প্রক্রিয়াটিতে অন্যান্য অক্ষরের সংখ্যা হ্রাস করে। "অন্যান্য অক্ষর" পারে শব্দের অন্য সমস্ত অক্ষর বোঝাতে ; তবে কেবল সেগুলি বিবেচনা করে পরে 19 বাইট সংরক্ষণ করা হবে।

রূপান্তর str_repeatএকটি মিলিত লুপ করতে লুপ 5 বাইট সংরক্ষিত হয়েছে।

এবং ডিজিট কাউন্টের জন্য ভেরিয়েবল ভেরিয়েবল ব্যবহার করে আরও 8 টি সংরক্ষণ করা হয়।

ভাঙ্গন

$a=count_chars($argn);                              # count character occurences in input
foreach([W2O,U4FOR,X6SI,G8I,F5I,O1,R3,S7,I9]as$s)   # loop through digit names
    for(${$s[$p=1]}+=                                   # 2. add to digits count
        $n=$a[ord($s)];                                 # 1. get count of unique character
        $c=ord($s[++$p]);)                              # 3. loop through other characters
        $a[$c]-=$n;                                         # reduce character count
while(
    $$i--?print$i                                       # print digit repeatedly
    :$i++<9);                                       # loop through digits
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.