बेहतर सीज़र सुअर लैटिन सिफर


32

सीज़र सिफर के साथ समस्या है जिसके परिणामस्वरूप शब्द अक्सर अप्राप्य हैं। पिग लैटिन के साथ समस्या यह है कि इसे डिकोड करना आसान है। उन्हें गठबंधन क्यों नहीं?

इनपुट

एक शब्द जिसमें 26 अंग्रेजी अक्षर शामिल हैं।

उत्पादन

सबसे पहले, हर व्यंजन को शब्द में अगले व्यंजन को वर्णमाला में बदलें। तो, b c के पास जाता है, d f के पास जाता है, और z b के पास जाता है। फिर, प्रत्येक स्वर को अगले स्वर में वर्णमाला (यू को जाता है) में बदलें। अंतिम, केवल अगर शब्द का पहला अक्षर एक व्यंजन है, उस अक्षर को शब्द के अंत में ले जाएं और शब्द के अंत में "ay" जोड़ें।

उदाहरण:

cat -> evday  
dog -> uhfay   
eel -> iim
  • यह , इसलिए सबसे छोटा कोड जीतता है।
  • मामला मायने नहीं रखता।
  • जिन स्वरों का उपयोग किया जाएगा वे हैं ए, ई, आई, ओ और यू

2
नहीं, लेकिन यदि आप चाहें तो आप कर सकते हैं
qazwsx

6
PPCG में आपका स्वागत है! बहुत अच्छी चुनौती, स्पष्ट रूप से प्रस्तुत की गई।
जोनाथन एलन

6
सुझाया गया टेस्ट केस:z → bay
अरनौल्ड

1
jot ot e wisz opvisitvoph dupdiqv cav o fu puv vjopl ov jimqt xovj vji ecomovz vu qsupuapdi vji xusftvay
छाया

4
सुझाया गया परीक्षण मामला the → jivay:? (यही है, अगर शब्द कई व्यंजन के साथ शुरू होता है, तो क्या हम केवल उनमें से एक को स्थानांतरित करते हैं?)
DLosc

जवाबों:


3

स्टैक्स , 20 बाइट्स

ù≥±╘├*Lâ■8O±âΓ║Θæ%º•

इसे चलाएं और डीबग करें

व्याख्या

Vc:tVv:tBcVc#{sL"ay"+}ML             #Full program, unpacked, implicit input
Vc:t                                 #Push consonants and ring translate input
    Vv:t                             #Push vowels and ring translate input
        BCvc#                        #Push first letter and tail of word, find number 
                                     #of occurrences to consonants
             {sL"ay"+}M              #If truthy (word starts with consonant)
                                     #swap stack, listify, add "ay"
                       L             #Listify stack (combines words that start with vowel)

मैं कुछ पुनरावृत्तियों से गुजरा और अंत में इसे 20 तक ले गया। मेरा मूल समाधान 53 बाइट्स था।



6

आर , 86 85 बाइट्स

सरल तरीका। chartrआकर्षक और उपयोगी संपत्ति है कि यह पत्र श्रेणियों को निर्दिष्ट कर सकता है , जो कुछ बाइट्स को बचाते हैं।

-1 बाइट्स को चोरी करके @ जीबी के रूबी समाधान के अनुवाद के तार - अपवोट करें!

function(s)sub("^([^aeiou])(.*)","\\2\\1ay",chartr('zb-yadehinotu','b-zefijopuva',s))

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


5

जावा (JDK) , 167 बाइट्स

s->{String r="",a="aeiouabcdfghjklmnpqrstvwxyzb",c=s.split("")[0];s=a.indexOf(c)>5?s.substring(1)+c+"ux":s;for(var d:s.split(""))r+=a.charAt(a.indexOf(d)+1);return r;}

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

क्रेडिट



4

05AB1E , 21 बाइट्स

žMDÀ‡žNDÀ‡¬žNsåiÀ…ÿay

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

व्याख्या

žMDÀ‡                   # replace each vowel with the next vowel in the alphabet
     žNDÀ‡              # replace each consonant with the next consonant in the alphabet
          ¬žNsåi        # if the first letter is a consonant
                À…ÿay   # rotate the word left and add "ay"

4

नोड.जेएस 10.9.0 , 121 116 बाइट्स

कम मामले में इनपुट स्ट्रिंग की अपेक्षा करता है।

s=>(v=n=>2130466>>n&1)((a=Buffer(s).map(n=>(g=i=>v(n=n%61?n+1:97)^i?g(i):n)(v(n))))[0],a+='')?a:a.slice(1)+a[0]+'ay'

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

स्वरों की पहचान

v

2130466 = 000001000001000001000100010
               ^     ^     ^   ^   ^
          zyxwvutsrqponmlkjihgfedcba-

और हो गया:

(2130466 >> n) & 1

n

चलो shiftCount लेकिन सब बाहर मास्किंग का परिणाम कम से कम महत्वपूर्ण 5 के टुकड़े हो rnum , है कि, गणना rnum और 0x1F।

टिप्पणी की गई

s =>                      // s = input string
  ( v = n =>              // v = helper function taking n = ASCII code in [97..122]
    2130466 >> n & 1      //     and returning 1 if the corresponding character is a vowel
  )                       //     or 0 otherwise (see the previous paragraph)
  (                       // this statement will ultimately invoke v on a[0]
    ( a = Buffer(s)       //   convert s to a Buffer, holding ASCII codes
      .map(n =>           //   for each ASCII code n in there:
        ( g = i =>        //     g = recursive function taking i = vowel flag
          v(              //       update n and invoke v on the new value:
            n = n % 61 ?  //         if n is less than 122 (meaning less than 'z'):
              n + 1       //           increment n
            :             //         else:
              97          //           wrap around by setting n to 97 (meaning 'a')
          ) ^ i ?         //       if v(n) is not equal to i:
            g(i)          //         do recursive calls until it is
          :               //       else:
            n             //         stop recursion and return the new n
        )(v(n))           //     initial call to g with i = v(n)
      )                   //   end of map()
    )[0],                 //   invoke v on a[0]
    a += ''               //   coerce the updated Buffer back to a string
  ) ?                     // if a[0] is a vowel:
    a                     //   return the string as-is
  :                       // else:
    a.slice(1) + a[0]     //   move the leading consonant to the end
    + 'ay'                //   and append the 'ay' suffix

4

पायथन 2 , 153 121 110 99 91 बाइट्स

lambda s:[s[1:]+s[0]+"ux",s][s[0]in'aeiou'].translate(8*".ecdfighjoklmnpuqrstvawxyzb.....")

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

मैथ्यू जेन्सेन के एक सुझाव के कारण 8 बाइट्स मुंडा


आप string.translate () फ़ंक्शन का उपयोग करके 8 बाइट्स बचा सकते हैं:lambda s:[s[1:]+s[0]+"ux",s][s[0]in'aeiou'].translate(8*".ecdfighjoklmnpuqrstvawxyzb.....")
मैथ्यू जेन्सेन

@MatthewJensen चतुर! आमतौर पर मैं translateपायथन 2 में बचता हूं ...
चास ब्राउन

संयोग से, यह अब ऊपरी मामले के लिए भी काम करता है
मैथ्यू जेन्सेन

3

टी-एसक्यूएल, 169 बाइट्स

SELECT IIF(CHARINDEX(LEFT(a,1),'aeiou')=0,SUBSTRING(a,2,99)+LEFT(a,1)+'ay',a)FROM
(SELECT TRANSLATE(v,'aeioubcdfghjklmnpqrstvwxyz','eiouacdfghjklmnpqrstvwxyzb')a FROM t)s

इनपुट हमारे IO मानकों के अनुसार एक पूर्व-मौजूदा तालिका के माध्यम से है ।

( SQL 2017 के लिए नया ) TRANSLATEफ़ंक्शन का उपयोग करते हुए, पहले वर्ण प्रतिस्थापन करता है, फिर पहले वर्ण की जाँच करता है।

लंबे समय तक SQL कीवर्ड की लंबाई के कारण कष्टप्रद।




2

रेटिना 0.8.2 , 50 बाइट्स

T`uo`aei\oub-df-hj-np-tv-zb
^([^aeiou])(.*)
$2$1ay

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण मामले शामिल हैं। आर उत्तर के समान दृष्टिकोण। स्पष्टीकरण:

T`uo`aei\oub-df-hj-np-tv-zb

oदूसरे सेट को संदर्भित करता है, अर्थात aei\oub-df-hj-np-tv-zb, जो फैलता है aeioubcdfghjlkmnpqrstvwxyzb, इसलिए uoफैलता है uaeioubcdfghjlkmnpqrstvwxyzb। इसका परिणाम निम्न लिप्यंतरण में होता है:

uaeioubcdfghjlkmnpqrstvwxyzb
aeioubcdfghjlkmnpqrstvwxyzb

दूसरे uऔर bउन्हें नजरअंदाज कर दिया जाता है क्योंकि उनका मिलान कभी नहीं किया जा सकता है, इसलिए यह वांछित सिफर प्रदान करता है। (ध्यान दें कि रेटिना 1 में आप 5 बाइट की बचत के vबजाय बेशक इस्तेमाल कर सकते हैं aei\ou।)

^([^aeiou])(.*)
$2$1ay

यदि पहला अक्षर एक स्वर नहीं है, तो इसे अंत तक घुमाएं और प्रत्यय दें ay


2

जेली , 24 बाइट्स

,ṙ¥1y
ØẹçØḄçṙḢe©ØḄƊ®⁾ayx

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

जोनाथन एलन (उद्धरण के बजाय दो-चार सिंटैक्स का उपयोग करें) के लिए 1 बाइट धन्यवाद ।


दुर्भाग्य से अब तक लंबे समय तक गैर-डरपोक संस्करण (1-बाइट से छोटा चुपके समान)। मैं अगले कुछ घंटों में इसे अपडेट नहीं कर पाऊंगा, लेकिन अगर आपको सुधार मिले तो इसे इंगित करें।
श्री एक्सकोडर

⁾ayएक बाइट के लिए उपयोग करें । के ©बाद से जा सकता eहै कि आप क्या भंडारण कर रहे हैं। मेरे पास है ØẹØḄ,żṙ€¥1ẎyṙḢe©ØḄƊ®⁾ayẋ
जोनाथन एलन

2

> <> , 94 92 बाइट्स

i:0(?v"a"%
2%?!v\~r:5g
a2r}<vr+ad*
ol?!;>4g
ecdfighjoklmnpuqrstvawxyzb
1   1   1     1     1

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

संपादित करें: इनपुट मॉड 97 को 32 के बजाय 2 बाइट्स से बचाया गया, इसलिए शब्दकोश पंक्ति की शुरुआत में शुरू हो सकता है। पुराना वर्जन:

i:0(?v84*%
2%?!v\~r:5g
37r}<vr*46*
ol?!;>4g
 ecdfighjoklmnpuqrstvawxyzb
 1   1   1     1     1



1

पर्ल 5 , 56 बाइट्स

y/a-z/ecdfighjok-npuq-tvaw-zb/;s/^([^aeiou])(.*)/$2$1ay/

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


1
आप की जरूरत है -के बीच रों cऔर dया gऔर h?
नील

@ नहीं, मैं नहीं। मैंने श्रेणियों को संकुचित करने के लिए एक कार्यक्रम लिखा ... और तर्क गलत मिला :) धन्यवाद।
हॉब्स

आम तौर पर ऐसे मामलों में आप <s>58</s> 56 bytesहेडर में लिखते हैं और कई लोग एक "एडिट: सेव्ड 2 बाइट्स @Neil" के लिए धन्यवाद जोड़ते हैं। या कुछ ऐसे जब उन्हें एक टिप्पणी में मदद की जाती है।
नील

1

दिल्लोग एपीएल (एसबीसीएस), 57 बाइट्स

{a←⎕A{(⍺~⍵)⍵}'AEIOU'⋄('AY',⍨1⌽⊢)⍣(∊/⊃¨⍵a)⊢(⊂⍵⍳⍨∊a)⌷∊1⌽¨a}

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

केवल अपरकेस में इनपुट लेता है! (क्योंकि ⎕Aअपरकेस वर्णमाला है)

  • ⎕A{(⍺~⍵)⍵}'AEIOU': व्यंजन और स्वर के वेक्टर
  • (⊂⍵⍳⍨∊a)⌷∊1⌽¨a: सिफर में सामान्य वर्णमाला ( ⊂⍵⍳⍨∊a) से सूचकांक ( ) तक शब्द के प्रत्येक अक्षर के सूचकांकों का उपयोग करता है ∊1⌽¨a
  • ('AY',⍨1⌽⊢)⍣(∊/⊃¨⍵a): पहले अक्षर को अंत तक ले जाता है और 'अ' को जोड़ता है, यदि पहला अक्षर एक व्यंजन है।

शांत चुनौती के लिए धन्यवाद!


0

जावास्क्रिप्ट (स्पाइडरमैन) , 107 बाइट्स

x=>x.replace(/./g,y=>(z='aeiouabcdfghjklmnpqrstvwxyzb')[z.search(y)+1]).replace(/^([^aeiou])(.+)/,'$2$1ay')

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

लोअरकेस में इनपुट की अपेक्षा करता है।

स्ट्रिंग के प्रत्येक वर्ण को स्ट्रिंग में एक के बाद एक के साथ बदल देता है 'aeiouabcdfghjklmnpqrstvwxyzb', और फिर एक प्रारंभिक व्यंजन के साथ किसी भी चीज़ को piglatinizes।


0

PHP, 112 बाइट्स

<?=strtr(($s=strstr(aeiou,($s=$argn)[0])?$s:substr($s,1).$s[0].ux),join(range(a,z)),ecdfighjoklmnpuqrstvawxyzb);

या

<?=strtr(($s=strstr(aeiou,($argn)[0])?$argn:substr($s,1).$s[0].ux),join(range(a,z)),ecdfighjoklmnpuqrstvawxyzb);

लोअर केस इनपुट ग्रहण करें। ऑनलाइन के साथ पाइप के रूप में चलाएं -nRया उन्हें आज़माएं


आप
strtr($s,uzbcadfgehjklminpqrsotvwxy,range(a,z))इसके बजाय उपयोग कर सकते हैं
strtr($s,range(a,z),ecdfighjoklmnpuqrstvawxyzb)

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