যখন জীবন আপনাকে লেবু দেয়, তখন লেবু তৈরি করুন


21

চ্যালেঞ্জ

আপনার কোনো ইনপুট স্ট্রিং দেওয়া হবে, যে কোন জায়গায় শব্দ "Lemon"পাওয়া যায় এটা রূপান্তরিত করা উচিত "Lemonade" কিন্তুa , dএবং eবাক্যে ধার করা আবশ্যক অন্য কোথাও থেকে।


উদাহরণ

উদাহরণ ইনপুট:

আমি যখন ছোট ছিলাম তখন একটি লেবু পেয়েছিলাম

উদাহরণ আউটপুট:

আমি যখন ছোট ছিলাম তখন আমি একটি লেবু জল ছোঁড়া করি

লেমনেড মূল থেকে নিম্নোক্ত সুপারস্ক্রিপ্ট অক্ষর চুরি করে তৈরি করা হয়েছে

আমি foun একটি সরবৎ খবরে প্রকাশ ডব্লু এইচ এন আমার বয়স একটি ছাগলছানা

এটি কেবলমাত্র একটি সম্ভাব্য আউটপুট উদাহরণ, "ই", "ডি" এবং "ক", যে কোনও জায়গা থেকে নেওয়া যেতে পারে ( অবশ্যই শব্দটি বাদেlemon )


মন্তব্য

• যদি যথেষ্ট নয় e, aঅথবা dআপনি গুলি অবশ্যই আউটপুট কি দেওয়া চিঠি না-সক্ষম হন। উদাহরণস্বরূপ ইনপুট bdblemonআউটপুট হবেbblemond

lemonপাঠ্যটি সর্বদা স্বতন্ত্র হতে পারে না (প্রতিটি পক্ষের স্থান)। উদাহরণস্বরূপ আপনার শব্দটি lemonsইনপুটটিতে কোথাও থাকতে পারে এবং আউটপুট হওয়া উচিতlemonades

• ইনপুটটিতে যে কোনও সংখ্যক lemon, এমনকি 0 lemonটি (যে ক্ষেত্রে আউটপুট ইনপুটটির সমান হবে) থাকতে পারে

• আপনি আপনার লেবুকে বড় হাতের অক্ষর এবং ছোট হাতের অক্ষর দিয়ে তৈরি করতে পারেন, উদাহরণস্বরূপ leMonহয়ে উঠতে পারে leMonade, এবং adeধার নেওয়া যে কোনও ক্ষেত্রে হতে পারে (সুতরাং এটি হয়েও উঠতে পারে leMonADe)।
আপনি যে চিঠিটি ধার করেছিলেন তার ক্ষেত্রে অবশ্যই যখন আপনি ধার করেছিলেন তখন তা যা ছিল তা অবশ্যই রয়ে যাবে।
(উদাহরণ ইনপুট -> আউটপুট, he hAD lemOn-> h h lemOnADe)

Full একটি পূর্ণ প্রোগ্রাম হতে হবে না, একা একটি ফাংশন ভাল।

• আপনি ধরে নিতে পারেন ইনপুটটি কেবল সিপি 437 অক্ষর সেট হবে


কোড গল্ফ

এটি , তাই বাইটস সবচেয়ে কম সংখ্যক জয়!


ছদ্ম-TestCases

* দ্রষ্টব্য: প্রদত্ত যে কোনও ইনপুটটির জন্য একাধিক সম্ভাব্য আউটপুট থাকতে পারে যাতে আপনার প্রোগ্রামটি এই পরীক্ষাগুলির ক্ষেত্রে ঠিক যেমন আউটপুট না আসে, এটি কেবলমাত্র যুক্তি বুঝতে পারে তাই:

ইনপুট: ইএপডি লেমনস
আউটপুট: পি লেমনোডেস

ইনপুট: হ্যালো ওয়ার্ল্ড
আউটপুট: হ্যালো ওয়ার্ল্ড

ইনপুট: লেবু লেবু
আউটপুট: লেবু লেবু
* ( , , চিঠি কখনও অন্য "লেবু" থেকে গ্রহণ করা উচিত)ead

ইনপুট: তিনি ছিল
লেবু জল আউটপুট: এইচ এইচ লেবু অ্যাড

ইনপুট: আপনি লেবু পছন্দ করেন? তুমি আমাকে লেবুতে ছিলে!
আউটপুট: o আপনি লেবুকে পছন্দ করেন? আপনি এইচএমটি লেবু!

ইনপুট: এই লেবু
আউটপুট: লেবুএই

ইনপুট: 55ad লেবু
আউটপুট: 55 বি লেবু

code-golf  string  code-golf  parsing  internet  stack-exchange-api  code-challenge  kolmogorov-complexity  restricted-source  brain-flak  python  logic  pyth  code-golf  string  search  optimized-output  code-golf  tips  language-design  golfing-language  code-golf  tips  language-design  code-golf  number  sorting  pi  code-golf  math  number  code-golf  string  balanced-string  classification  brain-flak  code-golf  math  number-theory  decision-problem  code-golf  tips  code-golf  number  sequence  code-golf  balanced-string  brain-flak  code-golf  math  sequence  arithmetic  fibonacci  code-golf  math  parsing  code-golf  string  keyboard  code-golf  code-golf  string  source-layout  whitespace  code-golf  math  rational-numbers  code-golf  string  code-golf  string  code-golf  math  sequence  code-golf  number  floating-point  code-golf  string  decision-problem  subsequence  code-golf  string  kolmogorov-complexity  code-golf  string  permutations  balanced-string  brain-flak  code-golf  string  math  number  code-golf  string  primes  cipher  code-golf  string  ascii-art  chemistry  code-golf  ascii-art  grid  counting  code-golf  math  arithmetic  integer  code-golf  number  kolmogorov-complexity  code-golf  ascii-art  kolmogorov-complexity  sequence  metagolf  brain-flak  code-golf  ascii-art  kolmogorov-complexity  code-golf  string  whitespace 

উত্তর:


6

জাভাস্ক্রিপ্ট (ES6), 159 157 155 162 বাইট

সম্পাদনা করুন: +7 বাইটগুলি একটি ত্রুটি ছুঁড়ে মারার পরিবর্তে "প্রদত্ত বর্ণগুলির সাথে কী করতে সক্ষম হয়েছিল" আউটপুট দেয়


একটি পুনরাবৃত্ত ফাংশন যা পরিবর্তিত স্ট্রিংটি দেয়।

f=(s,a=s.split(/(lemon)/i),n=(a.length-1)*1.5)=>n?f(n,a.map((s,i)=>i&1|!n||(a[i]=s.replace([/a/i,/e/i,/d/i][n%3],c=>(a[--n/3<<1|1]+=c,''))))&&a,n-(n==s)):a.join``

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

এক্সপ্রেশনটি s.split(/(lemon)/i)ইনপুট স্ট্রিংটি বিভক্ত করে lemonতবে ফলাফলটিতে ক্যাপচার গ্রুপগুলি সংরক্ষণ করে।

উদাহরণস্বরূপ, "foo lemon bar LEMON baz".split(/(lemon)/i)অ্যারের উত্পাদন করবে [ 'foo ', 'lemon', ' bar ', 'LEMON', ' baz' ]

আমরা যাও recursively বারবার এই অ্যারের উপর, অক্ষর আহরণের a, dএবং eঅথবা একটি এমনকি অবস্থানে অবস্থিত এন্ট্রি থেকে তাদের বড় হাতের প্রতিরূপ, এবং তাদের একটি বিজোড় অবস্থানে অবস্থিত টি এন্ট্রির মধ্যে সংযোজন।

মন্তব্য

f = (                                   // given:
  s,                                    //   s = input string or previous value of 'n'
  a = s.split(/(lemon)/i),              //   a = split array, as described above
  n = (a.length - 1) * 1.5              //   n = total number of characters to be found
) =>                                    //
  n ?                                   // if there's still at least one character to find:
    f(                                  //   do a recursive call with:
      n,                                //     1) the current value of 'n'
      a.map((s, i) =>                   //     2) an updated version of 'a', where
        i & 1 | !n || (                 //       for even positions:
          a[i] = s.replace(             //         we look for the next character
            [/a/i, /e/i, /d/i][n % 3],  //           'a', 'e' or 'd' (case insensitive)
            c => (                      //           append it to
              a[--n / 3 << 1 | 1] += c, //           one of the entries at an odd position
              ''                        //           and remove it from the original entry
            )                           //           end of replace() callback
          )                             //         end of replace()
        )                               //       end of position condition
      ) && a,                           //     end of map() -> yield the updated 'a'
      n -                               //     3) the updated value of 'n', skipping the
      (n == s)                          //        current character if not found at all
    )                                   //   end of recursive call
  :                                     // else:
    a.join``                            //   success: join 'a' and return it

ডেমো


একটি পুনরাবৃত্তির-ত্রুটি নিক্ষেপ প্রথম নিয়ম সাথে সম্মত বলে মনে হচ্ছে না ( " যদি সেখানে যথেষ্ট নয় e, aঅথবা ds আপনাকে অবশ্যই আউটপুট কি ছিল দেওয়া চিঠি না-সক্ষম। উদাহরণস্বরূপ ইনপুট bdblemonআউটপুট wouldbblemond ")?
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন হুম, আপনি ঠিক বলেছেন আমি প্রায় নিশ্চিত ছিলাম যে ত্রুটি নিক্ষেপ করার প্রাথমিক অনুমতি ছিল। এটি কি প্রাথমিক পোস্টের অনুগ্রহকালীন সময়ে সম্পাদনা ছিল? (তা হয় বা আমি এটি স্বপ্ন দেখেছি)) যাইহোক, আমি এটি ঠিক করার চেষ্টা করব। লক্ষ্য করার জন্য ধন্যবাদ।
আর্নল্ড

সত্যই এটি সম্পাদিত হয়েছিল এমন ক্ষেত্রে আমার মন্তব্য করার আগে আমি ইতিহাসের দিকে ফিরে তাকালাম। আপনি ঠিক বলতে পারেন এটি প্রথম 5 মিনিটের মধ্যে সম্পাদিত হতে পারে, তবে কীভাবে এটি চেক করা যায় তার কোনও ধারণা নেই। এবং কোনও সমস্যা নেই, আপনার উত্তরটি এখনও বেশ চিত্তাকর্ষক, তাই আমি আগেই এটি +1 করব। আমার কোনও সন্দেহ নেই যে আপনি সমস্যাটি সমাধান করতে সক্ষম হবেন (আশা করি খুব বেশি বাইট তৈরি না করে)।
কেভিন ক্রুইজসেন

@ কেভিন ক্রুইজসেন এটি আপাতত by বাইটের জন্য নির্ধারিত।
আর্নল্ড

2
@ আর্নল্ড হ্যাঁ দুঃখিত আমি পোস্টটির প্রথম 2 মিনিটের মধ্যেই এটি সম্পাদনা করেছি হাহাহা, আমার ক্ষমা
আলবার্ট রেনশো

5

সিজেম, 130 বাইট

LqY5m*{"lemon"_eu}%3/:z{~?}f%{_@\/_:,[{1$+}*]);@f{[\]}@+\1a*}/\{1
=}$0f=\1$,{"ade"{__C#)\Ceu#)|(\0+We\)@_N=@+N\t\}fC}fN0a/L*1a/\.{}

এটি স্পষ্টতার জন্য দুটি লাইনে বিভক্ত; নিউলাইন গণনা করা হয় না।

pseudocode:

FLAG_1 = object()
FLAG_2 = object()
lemon_instances = [] # CJam: L
input_chars = list(all_input()) # CJam: q
lemons = [
    "LEMON", "LEMOn", "LEMoN", "LEMon", "LEmON", "LEmOn", "LEmoN", "LEmon",
    "LeMON", "LeMOn", "LeMoN", "LeMon", "LemON", "LemOn", "LemoN", "Lemon",
    "lEMON", "lEMOn", "lEMoN", "lEMon", "lEmON", "lEmOn", "lEmoN", "lEmon",
    "leMON", "leMOn", "leMoN", "leMon", "lemON", "lemOn", "lemoN", "lemon"
] # CJam: Y5m*{"lemon"_eu}%3/:z{~?}f%
for i in lemons: # CJam: { ... }/
    temp = input_chars.split(i) # CJam: _@\/
    lengths = temp.map(len) # CJam: _:,
    # Here, accum turns an array like [1,2,3] into [1,3,6].
    indices = accum(lengths) # CJam: [{1$+}*]
    indices.pop() # CJam: );
    temp2 = zip(temp, indices) # CJam: @f{[\]}
    lemon_instances = temp2 + lemon_instances # CJam: @+
    input_chars = join_array(temp, FLAG_1) # CJam: 1a*
lemon_instances.sort(key=lambda x: x[1]) # CJam: {1=}$
lemon_instances = [i[0] for i in lemon_instances] # CJam: 0f=
for i in range(len(lemon_instances)): # CJam: \1$,{...}fN
    for c in "ade": # CJam: "ade"{...}fC
        # list_index returns -1 if not found
        lower = list_index(input_chars, c)+1 # CJam: __C#)
        upper = list_index(input_chars, upper(c))+1 # CJam: \Ceu#)
        char_index = (lower or upper) - 1 # CJam: |(
        input_chars.append(FLAG_2) # CJam: \0+
        # -1 refers to the last element in the list
        swap_list_elements(input_chars, char_index, -1) # CJam: e\
        extracted = input_chars.pop() # CJam: )
        lemon_instances[i] += extracted # CJam: @_N=@+N\t\
remove_all(input_chars, FLAG_2) # CJam: 0a/L*
temp1 = input_chars.split(FLAG_1) # CJam: 1a/
# interleave([1, 2, 3], ["a", "b"]) gives [1, "a", 2, "b", 3]
temp2 = interleave(temp1, lemon_instances) # CJam: \.{}
print("".join(temp2))

আমি দুঃখ পেয়েছি এতে আরও উত্সাহ নেই, দুর্দান্ত উত্তর ইমো
অ্যালবার্ট রেনশো

4

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

i+`(?<!lemon)(a)(.*)(lemon)(?!a)
$2$3$1
i+`(lemon)(?!a)(.*)(?<!lemon)(a)
$1$3$2
i+(?<!lemona?)(d)(.*)(lemona?)(?![ad])
$2$3$1
i+`(lemona?)(?![ad])(.*)(?<!lemona?)(d)
$1$3$2
i+(?<!lemona?d?)(e)(?!(?<=le)mon)(.*)(lemona?d?)(?![ade])
$2$3$1
i+`(lemona?d?)(?![ade])(.*)(?<!lemona?d?)(e)(?!(?<=le)mon)
$1$3$2

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

অবশ্যই আমি এখানে কিছু ভুল করছি।

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