डेरामुखी न्यूरोटिक मेंढक


28

डेरामुखी न्यूरोटिक मेंढक

अब जब कि Puzzling.SE ने आखिरकार मेरे उभयचर-जुनून वाले सिफर को क्रैक कर दिया है , तो इसे डिक्रिप्ट करने के लिए एक प्रोग्राम या फ़ंक्शन लिखें!

(यदि आप इसे आपके लिए खराब होने से पहले पहेली को देखना चाहते हैं, तो अब ऊपर दिए गए लिंक पर क्लिक करें।)


सिफर कैसे काम करता है

न्युरोटिक मेंढक में हे ught करने के लिए Rel एक एक्स में एम उद स्नान (छोटे के लिए "तंत्रिका मेंढक"), हर पत्र एक या दो शब्दों के रूप में एन्क्रिप्टेड है:

  • गैर-इटैलिक किए गए शब्द की लंबाई एक पत्र का प्रतिनिधित्व करती है।
    • neurotic => 8 अक्षर => H
    • frogs => 5 अक्षर => E
    • perpendicular => 13 अक्षर = M
  • एक शब्द जिसमें इटैलिक होता है, निम्नलिखित शब्द को संशोधित करता है, 10 जोड़ अगर इटैलिक किया गया शब्द लंबाई में अजीब था या 20 अगर इटैलिक किया गया शब्द लंबाई में भी था। किसी भी या सभी शब्द को इटैलिक किया जा सकता है। एक इटैलिकाइज़्ड शब्द हमेशा एक गैर-इटैलिकाइज़्ड शब्द के बाद होता है।
    • *o*ught to => विषम, 2 => 12 => L
    • lo*u*nging calms => सम, 5 => 25 => Y

प्लेनटेक्स्ट का हर शब्द साइफरटेक्स्ट के वाक्य से मेल खाता है, और प्लेटेक्स्ट का हर वाक्य साइफरटेक्स्ट के एक पैराग्राफ से मेल खाता है।

इनपुट प्रारूप

आपका कार्यक्रम या समारोह न्यूरॉटिक मेंढकों में एक संदेश इनपुट करेगा, जो मार्कटड में प्रारूपित है। इनपुट में केवल प्रिंट करने योग्य ASCII और newlines शामिल होंगे।

  • शब्द पात्रों के रन होते हैं जो रेगेक्स से मेल खाते हैं [A-Za-z0-9']
    • संख्या और अक्षर दोनों एक शब्द की लंबाई की ओर गिनते हैं। QB64का प्रतिनिधित्व करता है D
    • नोट: एपोस्ट्रोफ्स एक शब्द की लंबाई की ओर नहीं गिना जाता हैIsn'tप्रतिनिधित्व करता है D, नहीं E
  • इटैलिक अक्षरों को तारांकन ( *letters*) में जोड़ा जाता है ।
    • एक या अधिक लगातार पत्र, इटैलिक किया जा सकता है एक पूरे शब्द के लिए ऊपर ( masseus*es*, *all*); एक शब्द में कई गैर-लगातार अक्षर भी इटैलिकाइज़ किए जा सकते हैं ( g*e*n*e*rates)।
    • इटैलिक कभी भी कई शब्दों का प्रयोग नहीं करते हैं, कभी विराम चिह्न शामिल नहीं करते हैं, और कभी भी उदासीनता को शामिल नहीं करते हैं।
    • अनपेक्षित तारांकन और कई आसन्न तारांकन कभी नहीं होंगे।
  • विराम चिह्न निम्न में से कोई भी वर्ण है .,?!:;-()":।
    • एक वाक्य के भीतर के शब्दों को एक या अधिक विराम चिह्नों और / या एक स्थान से अलग किया जाता है। उदाहरण: *all* welcomed, toad*s*, newts, Ever*y*one--frogs, cap... bliss,they're (I
    • वाक्य एक या अधिक विराम चिह्नों के साथ समाप्त होते हैं और एक दोहरे स्थान से अलग हो जाते हैं: Th*e* Montgomery A*m*phibian Salon! Come luxuriate today!
    • अनुच्छेदों को एक नई पंक्ति द्वारा अलग किया जाता है। (एक पैराग्राफ के अंतिम वाक्य में अभी भी एक या अधिक विराम चिह्न अक्षर हैं।)

अन्य वर्ण इनपुट में नहीं दिखाई देंगे और उन्हें नियंत्रित करने की आवश्यकता नहीं है।

आपका कोड, आपके विवेक पर, इनपुट के लिए एक एकल अनुगामी न्यूलाइन की अपेक्षा कर सकता है।

आउटपुट स्वरूप

इनपुट को डिक्रिप्ट करने का परिणाम एक या अधिक वाक्य होंगे। सादे के पत्र ऊपरी और निचले हिस्से के किसी भी संयोजन हो सकते हैं। एक वाक्य के भीतर शब्दों को एकल रिक्त स्थान द्वारा अलग किया जाना चाहिए। वाक्य एक अवधि ( .) के साथ समाप्त होना चाहिए और एक ही स्थान से अलग होना चाहिए। आप अंतिम वाक्य के बाद एक अनुगामी स्थान का उत्पादन कर सकते हैं। आपका आउटपुट सभी एक पंक्ति में होगा, लेकिन आप एक अनुगामी न्यूलाइन का उत्पादन कर सकते हैं।

विविध विवरण

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

बाइट्स जीत में सबसे छोटा कोड!

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

-->
Neurotic Frogs *O*ught To Rel*a*x In *M*ud Baths!
<--
HELLO.

-->
Business standards all*o*w only *adult* amphibians.
<--
HINT.

-->
Rejoice, *a*ll frogs an*d* toads also!  Montgomery Sal*o*n opens up!  Ha*pp*y throng fill*s* street ecstatically!
<--
GOOD JOB PPL.

-->
I like 3.1415926535897.
IM*O*, it's a *b*la*st*, yeah!
<--
ADAM. MAN.

-->
*I*, happily, *th*anks 2 u *e*ditin*g* specific wor*ding*--clarifying a *bit*--betterment :D!
<--
QUARTATA.

-->
Perpendicular l*ou*nging calms.  *A* frog, a m*u*d cap... bliss!  Wallowing g*e*n*e*rates happiness.  Amphibian sp*a* isn't expensive--seventy d*o*llars--cheap!  That'*s* not *a* large e*x*pens*e* from an*y* discerning fr*o*g's money, unlik*e* Super 8.
Ever*y*one--frogs, toad*s*, newts, *a*nd salamanders!  G*e*t a wonderful shiat*s*u, or recei*v*e an other kind.  Masseus*es* are her*e* today!  Invite a fianc*e*e, supervisor, roommate, niece: *all* welcomed!
Y*o*u simply ne*v*er believed these p*o*ssibilitie*s*; they're (I *swear*) absolute truth!  Th*e* Montgomery A*m*phibian Salon!  Come luxuriate today!
<--
MY NAME IS INIGO MONTOYA. YOU KILLED MY FATHER. PREPARE TO DIE.

4
राजकुमारी दुल्हन इनपुट के लिए +1। ओह, और आपके कौशल के लिए, वह भी।
मैजिक ऑक्टोपस उर्फ़

क्या इटैलिक युक्त शब्द का पालन किया जाना चाहिए, जिसमें इटैलिक न हो?
आर। काप ११'१६ को

@ R.Kap सही। मैंने यह स्पष्ट करने के लिए प्रश्न संपादित किया है।
DLosc

जवाबों:


5

पर्ल, 72 बाइट्स

#!perl -n
$x=/\*/?2-y/'//c%2:!print/ /?$':chr$x.0+y/'//c+64for/[\w*']+|  /g,' . '

शेबबैंग को एक के रूप में गिना जाता है, इनपुट को स्टड से लिया जाता है।

नमूना उपयोग

$ more in.dat
Neurotic Frogs *O*ught To Rel*a*x In *M*ud Baths!
Perpendicular l*ou*nging calms.  *A* frog, a m*u*d cap... bliss!  Wallowing g*e*n*e*rates happiness.  Amphibian sp*a* isn't expensive--seventy d*o*llars--cheap!  That'*s* not *a* large e*x*pens*e* from an*y* discerning fr*o*g's money, unlik*e* Super 8.
Ever*y*one--frogs, toad*s*, newts, *a*nd salamanders!  G*e*t a wonderful shiat*s*u, or recei*v*e an other kind.  Masseus*es* are her*e* today!  Invite a fianc*e*e, supervisor, roommate, niece: *all* welcomed!
Y*o*u simply ne*v*er believed these p*o*ssibilitie*s*; they're (I *swear*) absolute truth!  Th*e* Montgomery A*m*phibian Salon!  Come luxuriate today!

$ perl neurotic-frogs.pl < in.dat
HELLO. MY NAME IS INIGO MONTOYA. YOU KILLED MY FATHER. PREPARE TO DIE.

1
मैं इस जवाब के लिए इनाम दे रहा हूं, क्योंकि यह मेरे अपने के अलावा इनाम की अवधि के अंत में सबसे छोटा है (वास्तव में, केवल एक ही है जो कहीं भी करीब आया है)।
DLosc

4

जावास्क्रिप्ट (ईएस 6), 172 169 157 150 बाइट्स

@Neil की बदौलत 10 बाइट्स बचाए

x=>x.match(/[\w'*]+|\s+/g).map(y=>y[0]==" "?y[1]:y==`
`?". ":/\*/.test(y,l+=y.match(/\w/g).length)?(l=l%2*10+19,""):l.toString(36,l=9),l=9).join``+"."

संभवत: इसमें और सुधार किया जा सकता है। सभी लोअरकेस में आउटपुट।


ले जाकर 2 बाइट्स सहेजें i=0में toString
नील

रुचि से बाहर, मैं उन कीड़े को ठीक करने में एक गया था और इस के साथ आया था:x=>x.replace(/([\w*']+)[^\w\n*' ]* ?( ?)/g,(_,y,z)=>/\*/.test(y,l=y.replace(/'/g ,"").length)?(i=l%2||2,""):l+i*10+9).toString(36,i=0)+z,i=0).replace(/\n|$/g,". ")
नील

यह वर्तमान रूप में काम करने लगता है।
प्रिमो

@ नील धन्यवाद। यह 12 बाइट्स बचाता है, लेकिन यह अंतिम परीक्षण मामले पर काम नहीं करता है। फिक्सिंग जो 3 बाइट्स की शुद्ध कमी के लिए 9 जोड़ता है।
ETHproductions

@Neil छुटकारा पा रहा है .replaceऔर बस .matchएक और 12 बाइट्स बचा रहा है।
ETHproductions

3

पायथन 2, 238 221 218 214 207 205 बाइट्स

from re import*
def f(x):
 d='';m=0
 for w in split(r"[^\w\d*'~\n]+",sub('  ','~',x))[:-1]:l=len(sub("[*'~\n]",'',w));q='*'in w;d+='. '[w[0]>'}':]*(w[0]in'~\n')+chr(64+l+m)[q:];m=(2-l%2)*10*q
 print d+'.'

प्रसंस्करण करने के लिए बहुत सारे रेगेक्स का उपयोग करता है। हम डबल-स्पेस को इसमें बदलते हैं ~और इसे प्रोसेस करने के लिए उपयोग करते हैं। ~और \nविशेष रूप से नियंत्रित किया जाता है।

सबसे बड़ा चरित्र लाभ forलाइन में इनपुट के प्रीप्रोसेसिंग से आता है ; यह निश्चित रूप से आगे गोल्फ हो सकता है।

Ideone यह! (सभी परीक्षण मामले)

सहेजे गए 7 बाइट्स धन्यवाद DLosc!


3

पिप , 65 64 बाइट्स

-rsझंडे के लिए स्कोर कोड + 2 का 62 बाइट्स है ।

Flg{O{{(zy*t+#a-1)X!Y'*Na&2-#a%2}MJa@`[\w*]+`}MlRM''^sX2O". "}

इसे ऑनलाइन आज़माएं!

व्याख्या

-rझंडा stdin और दुकानों में उनमें से एक सूची के सभी लाइनों पढ़ता है g-sझंडा अंतरिक्ष अलग करने के लिए सूचियों का उत्पादन प्रारूप तय करता है।

इस कोड को पढ़ने का सबसे आसान तरीका बाहर से है:

Flg{...}                   For each line l in g, do:

O{...}MlRM''^sX2O". "      Translate a paragraph into a sentence of plaintext:
       lRM''               Remove apostrophe characters
            ^sX2           Split on "  " into sentences
 {...}M                    Map the below function to each sentence
O                          Output the result list, space-separated, without newline
                O". "      Output that string, without newline

{...}MJa@`[\w*]+`          Translate a sentence into a word of plaintext:
       a@`[\w*]+`          Find all matches of regex (runs of alphanumeric and *)
{...}MJ                    Map the below function to each word and join into string

(zy*t+#a-1)X!Y'*Na&2-#a%2  Translate a word into a letter of plaintext:
      #a-1                 Length of word minus 1
  y*t+                     Add 10 or 20 if y is set (see below)
(z        )                Use that number to index into lowercase alphabet
              '*Na&        Count * characters in word, logical AND with...
                   2-#a%2  2 if word is even length, 1 if odd
             Y             Yank that value into y, to modify the following word
           X!              String multiply the character by not(y)
                           If y is truthy, the word had italics, and we get ""
                           If y is falsy, the word had no italics, and we get a letter

अपराजेय लगता है।
Primo

1

पायथन 2.7, 390 342 341 339 335 बाइट्स:

from re import*
def F(i):
 W=X="";S,s=split,sub;D='[^\w\s*]';Q=lambda c,t:len(s(D,X,c.group()).split()[t])
 for m in S('\W\n',s(D+"*\w*\*\w+\*.*?(?=\s) \w+",lambda v:"a"*([20,10][Q(v,0)%2]+Q(v,1)),s("'",X,s("--"," ",i)))):
  for g in S('\W  ',m):
   for q in S('\W',g):
    W+=chr(64+len(q))
   W+=" "
  W=W[:-1]+". "
 print s("@",X,W)

प्रारूप में इनपुट लेता है:

F('''Multi or Single-lined String''')

और भी बहुत कुछ किया जा सकता है, जो मुझे जब भी मौका मिलेगा मैं करूंगा।

सभी टेस्ट मामलों के साथ प्रतिकृति।

स्पष्टीकरण:

इनपुट को समझने के लिए पायथन की नियमित अभिव्यक्ति बिल्ट-इन की अपार शक्ति का उपयोग करता है। यह वह मूलभूत प्रक्रिया है जो फ़ंक्शन प्रत्येक इनपुट के लिए जाती है:

  1. सबसे पहले, सभी --को एक ही स्थान से बदल दिया जाता है, और प्रत्येक एपोस्ट्रोफ को हटा दिया जाता है। फिर, इटैलिकाइज्ड कंपोनेंट्स वाले सभी शब्द और इसे आगे बढ़ाने वाले शब्द दोनों एक स्ट्रिंग में मेल खाते हैं और 10 + len(second word)लगातार aएस की संख्या से बदल दिए जाते हैं यदि पहले शब्द की लंबाई है odd, और 20 + len(second word)लगातार aएस अन्यथा। यह निम्नलिखित नियमित अभिव्यक्ति का उपयोग करता है:

    [^\w\s*]*\w*\*\w+\*.*?(?=\s) \w+

    उदाहरण के लिए, यदि हमारे पास वाक्य है Perpendicular l*ou*nging calms., तो l*ou*nging calmsउसे aaaaaaaaaaaaaaaaaaaaaaaaa25 या उसके साथ बदल दिया जाएगा a, क्योंकि l*ou*ngingउसके पास समान वर्ण हैं और calms5. है 20+5=25

  2. अब, नया संशोधित इनपुट \nपैराग्राफ प्राप्त करने के लिए एक नई रेखा ( ) के बाद प्रत्येक विराम चिह्न पर विभाजित है, फिर प्रत्येक पैराग्राफ को विराम चिह्न प्राप्त करने के लिए 2 स्थानों के बाद प्रत्येक विराम चिह्न में विभाजित किया गया है, और अंत में, प्रत्येक वाक्य को शब्दों में विभाजित किया गया है एक अंतरिक्ष सहित किसी भी विराम चिह्न। फिर, प्रत्येक शब्द के लिए (निरंतर aएस के रन सहित ), हम Wयूनिकोड कोड पॉइंट 64(चरित्र का यूनिकोड कोड पॉइंट Aजो पहले है , @) के अनुरूप एक स्ट्रिंग को जोड़ते हैं len(word)Wएक वाक्य के सभी शब्द समाप्त हो जाने के बाद हम एक सिंगल स्पेस जोड़ते हैं , और जब एक पैराग्राफ में सभी वाक्य समाप्त हो जाते हैं, तो हम .एक सिंगल स्पेस के बाद जोड़ते हैं।

  3. अंत में, पूरे इनपुट के माध्यम से चला गया है, के रूप में deciphered संदेश के Wलिए आउटपुट है stdout


माइनर नाइटपिक: स्पेक का कहना है कि आउटपुट वाक्य सिंगल स्पेस से अलग होते हैं, डबल नहीं (यह बदलाव बाइट भी बचाता है)। प्रारंभिक गोल्फ सुझाव: चूंकि आप सब कुछ आयात कर रहे हैं re, subइसके बजाय का उपयोग करें str.replace। अधिक सामान्य गोल्फ सुझाव: यह सब कुछ है कि एक शब्द या *विराम चिह्न के रूप में व्यवहार करने के लिए शायद अधिक कुशल है । बड़े विशाल चरित्र वर्गों पर बचाता है।
DLosc

@ डल ओह, मेरा बुरा। मुझे लगा कि आउटपुट में स्पेस को 2 स्थानों से अलग करने के लिए कल्पना थी। मैं ठीक कर दूँगा। इसके अलावा, गोल्फ सुझाव के लिए धन्यवाद! मैं देखूंगा कि मैं उन लोगों के साथ क्या कर सकता हूं।
आर। काप

1

PHP, 196 बाइट्स

<?preg_match_all("#[\w*']+|  |$#m",$_GET[s],$m);foreach($m[0]as$s){if(!$s||$s=="  ")echo!$s?". ":" ";else{$l=$p+64+strlen(str_replace("'","",$s));if(!$p=strstr($s,"*")?20-$l%2*10:0)echo chr($l);}}

अगर मैं मान सकता हूँ कि 194 बाइट्स के बीच में केवल एक अपोस्ट्रोफ है

<?preg_match_all("#[\w*]+(<?=')[\w*]+|[\w*]+|  |$#m",$_GET[s],$m);foreach($m[0]as$s){if(!$s||$s=="  ")echo!$s?". ":" ";else{$l=$p+64+strlen($s);if(!$p=strstr($s,"*")?20-$l%2*10:0)echo chr($l);}}

@DLosc यह %0A एक फ़ंक्शन के रूप में urlencoded किया गया था rawurlencode("\n")। मैं इस मामले में इनपुट के लिए एक textarea के साथ एक फार्म पसंद करता हूं और इसलिए मेरी html साइट स्ट्रिंग को एन्कोड करने के लिए स्वचालित रूप से बनाती है
Jörg Hülsermann

@DLosc मुझे संदेह है कि php.ini में error_reporting चालू है। 'error_reporting (0);' के बाद <?। एक त्रुटि $_GET[s]इसके काम की है लेकिन सही है $_GET["s"]और यह घोषित करना बेहतर है $p=0;कि लूप से पहले वेरिएबल को इनिशियलाइज़ करें । अब आप पर मेरा प्रश्न है: क्या मैं यह कह सकता हूं कि एक शब्द में केवल एक अपोस्ट्रोपी शब्द के बीच में है?
जोर्ग हल्सरमन

कई धर्मोपदेशों के लिए @DLosc मैं अपने पहले जवाब का उपयोग करना चाहिए। दूसरा - 2 बाइट्स केवल एक अपोस्ट्रोफ के साथ काम करता है अगर शब्द।
जोर्ग हल्सरमैन सेप

मुझे पता चला कि मेरी समस्या क्या थी - मेरे सर्वर में छोटे उद्घाटन टैग सक्षम नहीं हैं। <?phpकाम करने के लिए बदल रहा है ।
DLosc

@ डलास मैंने कभी <?वास्तविकता में उपयोग नहीं किया है। मैं यहाँ अपनी पोस्ट में केवल शॉर्ट टैग का उपयोग करता हूँ। अब मुझे पता है कि यह एक रिक्त पृष्ठ में फिर से शुरू हो सकता है।
जोर्ग हल्सरमैन सेप

1

PHP, 231 226 228 बाइट्स

एक शुरुआत के लिए

<?preg_match_all("#([\w\*']+)([^\w\*']*)#",$argv[1],$m,2);foreach($m as list(,$a,$b)){$e=strlen(strtr($a,["'"=>""]))+$d;if(!$d=strstr($a,'*')?$e%2*10:0)echo chr($e+64),strpos(".$b","
")?". ":(strpos(".$b","  ")?" ":"");}echo".";

फाइल को सेव करें, रंड php <scriptpath> <text>। शेल में काम करने के लिए पाठ में नए सिरे से बच जाएं।


1
क्या आप इसे चलाने के बारे में कुछ निर्देश दे सकते हैं? ऐसा लगता है कि यह इनपुट से पढ़ता है $argv[1], लेकिन मुझे नहीं पता कि इनपुट के नए होने पर यह तरीका कैसे काम करेगा। मैंने "Neurotic Frogs *O*ught To Re*a*x In *M*ud Baths!"कमांड-लाइन तर्क के रूप में प्रयास किया और IFHCHCFF.आउटपुट (साथ ही एक Undefined variable: dचेतावनी) के लिए मिला।
3

@ डसेल: यह सूचना (चेतावनी नहीं) डिफ़ॉल्ट सेटिंग्स के साथ नहीं होनी चाहिए। सबसे आसान तरीका <?यह है कि इसे प्रीपेन्ड करें , इसे एक फाइल में सेव करें और इसके साथ कॉल करें php <filename> <string>। मुझे बाइट की गिनती में 2 जोड़ना पड़ सकता है।
टाइटस

@ टिट्स यदि आप के साथ शुरू करते हैं <?, तो आप 1. एफडब्ल्यूआईडब्ल्यू के ?>.लिए शुद्ध लाभ के साथ भी समाप्त हो सकते हैं , मैं IFHCMFF.पहले परीक्षण मामले (पीएचपी 5.5.21 64-बिट, वीसी 14 का उपयोग करके) प्राप्त करता हूं। के $argnसाथ प्रयोग करना -Fभी एक विकल्प हो सकता है।
प्राइमो

मेरा क्या मतलब है, मैं यह नहीं देखता कि कैसे php <filename> <string>संभव है जब <string>newlines शामिल हो सकते हैं।
DLosc

@ डलास: बग को ठीक किया। नई सुर्खियों के लिए: उनसे बचकर रहें।
टाइटस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.