পাঠ্য প্রক্রিয়াজাতকরণ # 1: হাইফেনেশন


14

পটভূমি

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

ইনপুট

আপনার প্রোগ্রামটি দুটি স্ট্রিং ইনপুট গ্রহণ করবে: পাঠ্যের একটি অংশ এবং হাইফেনেশন নিদর্শনগুলির একটি তালিকা। প্রথম ইনপুটটি কেবল মুদ্রণযোগ্য ASCII অক্ষর এবং স্পেসগুলির একটি খালি খালি স্ট্রিং; এটিতে লাইন ব্রেক বা টিল্ড থাকবে না ~। দ্বিতীয় ইনপুটটি শব্দের একটি কমা-বিস্মৃত তালিকা which একটি উদাহরণ ex~cel~lent,pro~gram~ming,abil~i~ties

আউটপুট

আপনার প্রোগ্রামটি নিম্নলিখিত উপায়ে প্রথম ইনপুটটি সংশোধন করবে। যে কোনও শব্দ (বর্ণানুক্রমিক ASCII অক্ষরের সর্বাধিক স্ট্রিং) যার হাইফেনেটেড লোয়ারকেস সংস্করণ দ্বিতীয় ইনপুটটিতে পাওয়া যায় সেই হাইফেনেটেড সংস্করণ দ্বারা প্রতিস্থাপন করা হবে, তবে এর ক্ষেত্রে সংরক্ষণ করা হবে। উপরের উদাহরণ তালিকার সাথে, যদি পাঠ্যে শব্দটি থাকে Excellent, তবে এটি দ্বারা প্রতিস্থাপন করা হবে Ex~cel~lent; তবে, পরিবর্তন করা Excellentlyহবে না । আপনার আউটপুটটি এই পরিবর্তিত স্ট্রিং হবে।

বিস্তারিত বিধি এবং স্কোরিং

ইনপুট সম্পর্কে আপনি নিম্নলিখিতটি ধরে নিতে পারেন:

  • প্রথম ইনপুটটিতে কোনও টিল্ডস নেই, এবং কোনও নেতৃস্থানীয়, পিছনে বা পুনরুক্ত স্থান নেই। এটি খালি নয়।
  • দ্বিতীয় ইনপুটটিতে কমপক্ষে একটি শব্দ থাকে এবং এতে প্রতিটি শব্দে কমপক্ষে দুটি উচ্চারণ থাকে। প্রতিটি শব্দের অক্ষর খালি নয়।
  • দ্বিতীয় ইনপুটটিতে এমন একটি শব্দ নেই যা অন্য শব্দের শব্দের সাথে যুক্ত হয়।

আপনি চাইলে দুটি ইনপুটগুলির ক্রম পরিবর্তন করতে পারেন এবং আউটপুটে optionচ্ছিকভাবে একটি ট্রেলিং নিউলাইন যোগ করতে পারেন।

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

পরীক্ষার কেস

এগুলি বিন্যাসে তালিকাভুক্ত করা হয়েছে 1st input [newline] 2nd input [newline] output

Excellent programming abilities, you work excellently!
ex~cel~lent,pro~gram~ming,abil~i~ties
Ex~cel~lent pro~gram~ming abil~i~ties, you work excellently!

Superman (sometimes incorrectly spelled "Super-man") is super #&%@ing strong.
su~per,some~times,in~cor~rectly,spell~ing
Superman (some~times in~cor~rectly spelled "Su~per-man") is su~per #&%@ing strong.

IncONsISTent caPItalizATIon!
in~con~sis~tent,cap~i~tal~iza~tion
In~cON~sIS~Tent caP~I~tal~izA~TIon!

Such short words.
awk~ward
Such short words.

Digits123 are456cool789.
dig~its,dig~i~tal,are~cool
Dig~its123 are456cool789.

magic magic
ma~gic
ma~gic ma~gic

এই চ্যালেঞ্জের যে কোনও হাইফেনেশন ত্রুটি এই হাইফেনেশন সরঞ্জামের কারণে ।


আমি ধরে নিই যে ইনপুটটি আদর্শ 7-বিট ASCII, এবং কোনও বর্ধিত 8-বিট সংস্করণ নয়?
orlp

অনুমান করা কি ঠিক আছে যে কোনও অ-অক্ষরীয় অক্ষর কোনও শব্দের পরিবর্তন হিসাবে গণ্য হবে না (যেমন প্রথম প্রথম ইনপুটটি #programming!এখনও দ্বিতীয় ইনপুট দ্বারা প্রভাবিত হবে pro~gram~ming)? সংখ্যাগুলিও গণনা করা হয় না (অর্থাত্ কেবল বর্ণানুক্রমিক অক্ষরের অনুমতি রয়েছে)?
কোলে

@ অরલ્પ হ্যাঁ, ইনপুটটিতে এখানে তালিকাবদ্ধ হিসাবে প্রিন্টযোগ্য ছাপার যোগ্য ASCII অক্ষর রয়েছে ।
Zgarb

@ কোল অ বর্ণানুক্রমিক অক্ষরগুলি শব্দের অংশ নয় (দ্বিতীয় পরীক্ষার কেস দেখুন)। অঙ্কগুলি অ বর্ণানুক্রমিক হিসাবে গণনা করা হয়, আমি সে সম্পর্কে একটি পরীক্ষার কেস যুক্ত করব।
Zgarb

আমি কি এক শব্দে কয়েকটি সর্বাধিক সংখ্যার সিলেবল ধরে নিতে পারি?
কিওয়ারটি

উত্তর:


5

পিপ, 60 54 বাইট

Fwa^`([A-Za-z]+)`O{aQ'~?'~w@++y}M(LCwQ_RM'~FIb^',Yv)|w

পাইপের জন্য গিটহাবের সংগ্রহস্থল ory

কমান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট নেয় (যা ইনপুট 1 এর আশেপাশে কোটগুলি আবশ্যক করে, ধরে নিলে এতে স্পেস রয়েছে)। কোনও ট্রেলিং নিউলাইন মুদ্রণ করা হয় না (একটি যোগ করার xজন্য প্রোগ্রামের শেষে একটি যুক্ত করুন)।

কিছুটা উচ্ছৃঙ্খল, মন্তব্য সহ:

 ; Split 1st input on runs of letters, including the separators in the results
a^:`([A-Za-z]+)`
 ; Split 2nd input on commas
b^:',
 ; Iterate over the words w in that list
Fwa {
  ; Filter b for entries that match the current word (lowercase, with tildes removed)
 m:(LCw EQ _RM'~)FIb
  ; We expect this to be a list of 0 or 1 elements
  ; If it has one, m gets that element (the hyphenation pattern); if it's empty, m gets nil
 i:-1
 m:m@i
  ; Map this function to each character of pattern m: if it's tilde, return tilde;
  ; otherwise, return corresponding character of w
 m:{aEQ'~ ? '~ w@++i}Mm
  ; Output the result, unless it was nil (falsey), in which case output the original word
 Om|w
}

নমুনা রান:

C:\Users\dlosc> pip.py hyphens.pip "IncONsISTent caPItalizATIon!" in~con~sis~tent,cap~i~tal~iza~tion
In~cON~sIS~Tent caP~I~tal~izA~TIon!

8

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

+is`(?<![a-z~])([a-z~]+)(?=([a-z]+)+[^a-z~].*(?<=[\n,]\1(?(2)!)(?<-2>~\2)+[\n,]))
$1~
\n.*
<empty>

গণনা উদ্দেশ্যে, প্রতিটি লাইন পৃথক ফাইলে যায়, \nপ্রকৃত নিউলাইন অক্ষরের সাথে প্রতিস্থাপন করা হয় এবং <empty>খালি ফাইল। সুবিধার জন্য, আপনি <empty>যদি -sদোভাষী পতাকা ব্যবহার করেন তবে আপনি একটি একক ফাইল (যেখানে একটি খালি লাইন আছে) থেকে উপরের কোডটি চালাতে পারেন ।


2

জাভাস্ক্রিপ্ট ES6, 117 141 অক্ষর

f=(t,p)=>p.split`,`.map(p=>t=t.replace(RegExp("((?:^|[^a-z])"+p.replace(/~/g,")(")+")(?=$|[^a-z])","ig"),(...x)=>x.slice(1,-2).join("~")))&&t

টেস্ট:

document.querySelector(".question pre").textContent.split("\n\n").map(t=>(t=t.split("\n"))&&f(t[0],t[1])==t[2])
// Array [ true, true, true, true, true ]

আপনি RegExp কনস্ট্রাক্টরের পরিবর্তে eval ব্যবহার করতে পারেন। স্ট্রিং টেমপ্লেটগুলি কয়েকটি বাইটগুলিও বাঁচাতে পারে
ডাউনগোট

1

জাভাস্ক্রিপ্ট (ES6), 173 169

বেসিক রেজেক্স অনুসন্ধান এবং প্রতিস্থাপন

(a,b)=>(b.split`,`.map(s=>a=a.replace(eval(`/(^|[^a-z])(${s.replace(/~/g,"")})(?=[^a-z]|$)/gi`),(_,n,o)=>(x=0,n+s.split``.map((q,i)=>(q=='~'&&++x?q:o[i-x])).join``))),a)

বেহালা

সম্পাদনা: পরীক্ষার ক্ষেত্রে স্থির বাগ magic magic,ma~gic


ভুল: f("magic magic", "ma~gic")ফেরত"ma~gic magic"
কিওয়ারটি

@ কিওয়ার্টি স্থির কোনওভাবে এটি ঠিক করা আমাকে 4 বাইটও বাঁচিয়েছে!
ডানক্মেমস

0

পার্ল, 146

$a=<>;$d=$_=~s/~//rg,$a=~s/(?<!\pL)$d(?!\pL)/h($&,$_)/gie for(split/,|\n/,<>);
print$a;
sub h{($g,$h)=@_;while($h=~/~/g){substr($g,"@-",0)='~'}$g}

কেবল প্রথম প্রচেষ্টা, প্রচুর জিনিস সংক্ষিপ্ত করা যেতে পারে - আগামীকালও চলবে!

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