স্কোয়াশ-অদ্বিতীয় লিগাচার


17

এখানে ইউনিকোডে কিছু সাধারণ লিগাচারের একটি তালিকা রয়েছে (যেগুলি আমি ডেবিয়ানে আমার রচনা কী দিয়ে তৈরি করতে পারি):

Orig  Ascii  Lig
ae    [ae]   æ
AE    [AE]   Æ
oe    [oe]   œ
OE    [OE]   Œ
ij    [ij]   ij
IJ    [IJ]   IJ
ff    [ff]   ff
fi    [fi]   fi
fl    [fl]   fl
ffi   [ffi]  ffi
ffl   [ffl]  ffl

আপনার কাছে এই চ্যালেঞ্জের দুটি বিকল্প রয়েছে: আসল ইউটিএফ -8 লিগ্যাচারগুলি ব্যবহার করুন, বা কেবলমাত্র ASCII- র বৈকল্পিকটি ব্যবহার করুন। আপনি যদি সত্যিকারের ইউটিএফ -8 লিগচার ভেরিয়েন্টগুলি ব্যবহার করেন তবে আপনি 20% বোনাস পাবেন। আপনি যদি কেবলমাত্র ASCII-বৈকল্পিক ব্যবহার করেন তবে আপনি ধরে নিতে পারেন যে বর্গাকার বন্ধনীগুলি লিগচারটি বোঝানো ছাড়া কখনও জড়িত থাকবে না।

চ্যালেঞ্জ: ইনপুট হিসাবে একটি স্ট্রিং দেওয়া, একই স্ট্রিং আউটপুট

  • সমস্ত প্রসারিত লিগ্যাচারগুলি তাদের প্রসারিত অংশগুলির দ্বারা প্রতিস্থাপিত হয়েছে।

    • লোভের সাথে মেলে: affibহয়ে যায় affib( a[ffi]b), না affib( a[ff]ib) বা affib( af[fi]b)।
  • ligatures দ্বারা প্রতিস্থাপিত সমস্ত "প্রসারিত" অক্ষর ক্রম সহ।

    • উদাহরণস্বরূপ, æOEfoo( [ae]OEfoo) হয়ে যায় aeŒfoo( ae[OE]foo)।

এটি সম্পূর্ণ স্বাধীনভাবে করুন: ffi( [ff]i) হয়ে ffi( ffi) হয় না ( [ffi])।

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

Input   Ascii-output      Output
fij     [fi][ij]          fiij
fIJ     f[IJ]             fIJ     * remember, capitalization matters!
fffi    [ff][ffi]         ffffi
fff     [ff][ff]          ffff
ffffi   [ff][ff][ffi]     ffffffi
ffffij  [ff][ff][ffi][ij] ffffffiij

সতর্কতা অবলম্বন করুন: একই লোভী মিলটি প্রযোজ্য (বিশেষত শেষ কয়েকটি পরীক্ষার কেসগুলি নোট করুন)।

, তাই বাইটস মধ্যে সংক্ষিপ্ততম কোড।


7
@ মেগো কি বড় ব্যাপার? যদি আপনার পছন্দের ভাষাটি স্থানীয়ভাবে পরিচালনা করতে না পারে তবে কেবল 0xc3 0xa6 মুদ্রণ করুন, এটির ইউটিএফ -8 এনকোডিং।
ডেনিস

7
যদি কোনও ভাষা কোনও প্রদত্ত কাজটিকে সহজ করতে না পারে তবে সেই ভাষাটি সেই কাজের জন্য ব্যবহার করবেন না। এটি একটি বড় চুক্তি হওয়া উচিত নয়।
অ্যালেক্স এ।

উত্তর:


3

জাভাস্ক্রিপ্ট (ES6), 213 বাইট - 20% বোনাস = 170.4

s=>eval('for(p=o="";m=s.match(r="ffl|ffi|fl|fi|ff|IJ|ij|Œ|œ|Æ|æ|ffl|ffi|fl|fi|ff|IJ|ij|OE|oe|AE|ae",x=r.split`|`);s=s.slice(i+t.length-(p=t<"z")))o+=s.slice(p,i=m.index)+x[(x.indexOf(t=m[0])+11)%22];o+s.slice(p)')

ব্যাখ্যা

s=>                           // s = input string
  eval(`                      // use eval to avoid writing {} or return
    for(                      // iterate over each ligature match
      p=                      // p = 1 if the last match was a non-unicode ligature
        o="";                 // o = output string
      m=s.match(              // find the next ligature

        // r = regex string for ligatures (unicode and non-unicode)
        r="ffl|ffi|fl|fi|ff|IJ|ij|Œ|œ|Æ|æ|ffl|ffi|fl|fi|ff|IJ|ij|OE|oe|AE|ae",
        x=r.split\`|\`        // x = arrray of r

      );
      s=s.slice(i+t.length    // remove the part that has been added to the output
        -(p=t<"z"))           // if we matched a non-unicode ligature, keep the last
    )                         //     character so it can be part of the next match
      o+=s.slice(p,i=m.index) // add the text before the match to the output
        +x[(x.indexOf(        // add the opposite type of the matched ligature
          t=m[0]              // t = matched text
        )+11)%22];            // (index + 11) % 22 returns the opposite index
    o+s.slice(p)              // return o + any remaining characters
  `)

পরীক্ষা


-4 বাইট r="ffl|ffi|fl|fi|ff|IJ|ij|Œ|œ|Æ|æ|ffl|ffi|fl|fi|ff|IJ|ij|OE|oe|AE|ae",x=r.split`|`হিসাবে আবার লিখতে পারেন x="ffl|ffi|fl|fi|ff|IJ|ij|Œ|œ|Æ|æ|ffl|ffi|fl|fi|ff|IJ|ij|OE|oe|AE|ae".split`|`?
ডেন্ড্রোবিয়াম

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