पाठ प्रसंस्करण # 1: हाइफ़नेशन


14

पृष्ठभूमि

यह टेक्स्ट प्रोसेसिंग पर 3-होल गोल्फ कोर्स का पहला भाग है। अति-अभिमानी विचार यह है कि यदि आप एक इनपुट पाठ लेते हैं और इसे तीनों चुनौतियों (गोंद कोड की थोड़ी मात्रा के साथ) के समाधान के माध्यम से पाइप करते हैं, तो यह एक सुंदर स्वरूपित पैराग्राफ को थूक देगा। इस पहली चुनौती में, आपका कार्य दिए गए हाइफ़नेशन पैटर्न का उपयोग करते हुए पाठ का एक टुकड़ा है।

इनपुट

आपका कार्यक्रम दो स्ट्रिंग इनपुट लेगा: पाठ का एक टुकड़ा और हाइफ़नेशन पैटर्न की एक सूची। पहला इनपुट केवल मुद्रण योग्य ASCII वर्ण और रिक्त स्थान का एक गैर-रिक्त स्ट्रिंग है; इसमें लाइन ब्रेक या टिल्ड नहीं होंगे ~। दूसरा इनपुट शब्दों की एक अल्पविराम-सीमांकित सूची है, जिसमें निचले भाग के ASIIII वर्णों के टिल्ड-सीमांकित शब्दांश हैं। एक उदाहरण है ex~cel~lent,pro~gram~ming,abil~i~ties

उत्पादन

आपका कार्यक्रम निम्नलिखित तरीके से पहले इनपुट को संशोधित करेगा। कोई भी शब्द (वर्णक्रमीय ASCII वर्णों का अधिकतम प्रतिस्थापन) जिसका हाइफ़ेनेटेड लोअरकेस संस्करण दूसरे इनपुट में पाया जाता है, उस हाइफ़न किए गए संस्करण द्वारा प्रतिस्थापित किया जाएगा, लेकिन इसका मामला संरक्षित रहेगा। उपरोक्त उदाहरण सूची के साथ, यदि पाठ में शब्द शामिल है Excellent, तो इसे बदल दिया जाएगा Ex~cel~lent; हालांकि, Excellentlyकरेगा नहीं संशोधित किया जा। आपका आउटपुट यह संशोधित स्ट्रिंग होगा।

विस्तृत नियम और स्कोरिंग

आप इनपुट के बारे में निम्नलिखित बातें मान सकते हैं:

  • पहले इनपुट में कोई तिल नहीं है, और कोई अग्रणी, अनुगामी या दोहराया रिक्त स्थान नहीं है। यह खाली नहीं है।
  • दूसरे इनपुट में कम से कम एक शब्द होता है, और इसमें प्रत्येक शब्द में कम से कम दो शब्द होते हैं। प्रत्येक शब्दांश गैर-रिक्त है।
  • दूसरे इनपुट में एक शब्द नहीं होता है जो दूसरे शब्द में शब्दांश के रूप में होता है।

आप चाहें तो दो इनपुट के क्रम को बदल सकते हैं, और वैकल्पिक रूप से आउटपुट में एक अनुगामी न्यूलाइन जोड़ सकते हैं।

आप एक फ़ंक्शन या पूर्ण प्रोग्राम लिख सकते हैं। सबसे कम बाइट गिनती जीतता है, और मानक खामियों को रोक दिया जाता है।

परीक्षण के मामलों

इन्हें प्रारूप में सूचीबद्ध किया गया है 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)? क्या संख्या की गणना भी नहीं की जाती है (यानी केवल वर्णमाला के वर्णों की अनुमति है)?
कोल

@orlp हाँ, इनपुट में मानक मुद्रण योग्य ASCII वर्ण हैं जो यहाँ सूचीबद्ध हैं
जर्गब

@ पूरे गैर-वर्णमाला वर्ण शब्दों का हिस्सा नहीं हैं (दूसरा परीक्षण मामला देखें)। अंक गैर-वर्णमाला के रूप में गिने जाते हैं, मैं उसके बारे में एक परीक्षण मामला जोड़ूंगा।
जरगब

क्या मैं एक शब्द में कुछ अधिकतम संख्या के सिलेबल्स मान सकता हूं?
15

जवाबों:


5

पिप, 60 54 बाइट्स

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

पिप के लिए GitHub रिपॉजिटरी

कमांड-लाइन तर्कों के रूप में इनपुट्स लेता है (जो इनपुट 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

जावास्क्रिप्ट ईएस 6, 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 का उपयोग कर सकते हैं। स्ट्रिंग टेम्प्लेट कुछ बाइट्स भी बचा सकते हैं
22

1

जावास्क्रिप्ट (ईएस 6), 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"
Qwertiy

@ क्वर्टी तय हुई। किसी तरह से इसे ठीक करने से मुझे 4 बाइट्स भी मिलीं!
DankMemes

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}

बस एक पहला प्रयास, बहुत सारी चीजों को छोटा किया जा सकता है - कल जारी रहेगा!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.