¿Xu ti ते जिस्मिथर्मोर्ना? (क्या यह वैध जिस्म है?)


25

(शाब्दिक रूप से: "क्या यह जिस्मफरोशी का पालन / एहसास करता है ?")

परिसर

लोजबान भाषा एक निर्मित भाषा है , जिसका अर्थ है कि इसके सभी शब्द स्वाभाविक रूप से विकसित होने की अनुमति के बजाय बनाए गए हैं। लोजबान का शब्दार्थ आधार इसके जिस्म , या जड़ शब्द हैं, जिन्हें चीनी, हिंदी और अंग्रेजी जैसी व्यापक रूप से बोली जाने वाली प्राकृतिक भाषाओं से जड़ों को मिलाकर संश्लेषित किया गया था । सभी जिस्म 5 अक्षर लंबे होते हैं और एक निश्चित सख्त रूप का पालन करते हैं।

जानकारी

हमारे उद्देश्यों के लिए, Lojban वर्णमाला है:

abcdefgijklmnoprstuvxz

यही है, बिना रोमन वर्णमाला hqwy

इस वर्णमाला को चार श्रेणियों में विभाजित किया जा सकता है:

  • स्वर वर्ण aeiou

  • सोनोरेंट व्यंजन lmnr

  • असंतुष्ट व्यंजन ptkfcsx। जब आवाज दी, ये क्रमशः हो ...

  • आवाज वाले व्यंजन bdgvjz(कोई आवाज वाला व्यंजन नहीं है x)

एक मान्य जिस्मू होने के लिए, 5-चार-लंबी स्ट्रिंग होनी चाहिए:

  1. व्यंजन-स्वर पैटर्न में से एक में हो CVCCVया CCVCV, जहाँ C एक व्यंजन का प्रतिनिधित्व करता है, और V एक स्वर का प्रतिनिधित्व करता है।

  2. व्यंजन-मिलान नियमों का पालन करें।

CCVCV शब्दों के लिए व्यंजन-मिलान नियम:

पहले दो वर्णों को निम्नलिखित 48 जोड़ियों में से एक का गठन करना चाहिए ( स्रोत ):

ml mr
pl pr
bl br
   tr                   tc ts
   dr                   dj dz
kl kr
gl gr
fl fr
vl vr
cl cr cm cn cp ct ck cf
      jm    jb jd jg jv
sl sr sm sn sp st sk sf
      zm    zb zd zg zv
xl xr

ध्यान दें कि यह आवाज़दार और बिना जोड़ वाले जोड़े में अलग होने पर अच्छा लगता है। विशेष रूप से, हर आवाज वाली जोड़ी को मान्य किया जाता है, यदि तत्संबंधी बिना जोड़-तोड़ वाली जोड़ी मान्य है। यह सोनोरेंट व्यंजन के साथ जोड़े तक नहीं फैलता है; clवैध है, लेकिन jlनहीं है।

CVCCV शब्दों ( स्रोत ) के लिए व्यंजन-मिलान नियम :

तीसरे और चौथे वर्ण को निम्नलिखित नियमों का पालन करना चाहिए:

  1. यह दोनों व्यंजन समान होने के लिए निषिद्ध है [...]

  2. एक व्यंजन को आवाज़ देना मना है और दूसरे को बिना आवाज़ के। व्यंजन "एल", "एम", "एन" और "आर" इस ​​प्रतिबंध से मुक्त हैं। नतीजतन, "bf" निषिद्ध है, और इसलिए "sd" है, लेकिन दोनों "fl" और "vl", और दोनों "ls" और "lz" की अनुमति है।

  3. दोनों व्यंजन के सेट "c", "j", "s", "z" से खींचा जाना निषिद्ध है।

  4. विशिष्ट जोड़े "cx", "kx", "xc", "xk" और "mz" वर्जित हैं।

ध्यान दें कि 179 संभावित जोड़े हैं।

चुनौती

निर्धारित करें कि क्या दी गई स्ट्रिंग जिस्म निर्माण नियमों का पालन करती है। यह , इसलिए बाइट्स जीत में सबसे छोटा समाधान है।

इनपुट : लोजबन वर्णमाला से लंबाई 5 की एक स्ट्रिंग।

आउटपुट : एक सत्य मूल्य अगर स्ट्रिंग एक जिस्म और अन्यथा एक गलत मूल्य हो सकता है।

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

मान्य:

gismu
cfipu
ranxi
mupno
rimge
zosxa

अमान्य:

ejram
xitot
dtpno
rcare
pxuja
cetvu

अधिक परीक्षण के मामले: इस पाठ फ़ाइल में सभी मान्य जिस्मू, प्रति पंक्ति एक है।

मैं वास्तव में लोजबान को नहीं जानता, इसलिए मुझे संदेह है कि शीर्षक अनुवाद गलत है। मदद की सराहना की है।


8
ध्यान दें कि लोज्बान उच्चारण ध्वन्यात्मक है, इसलिए जिस्म को जीआईएफ की तरह एक कठिन जी के साथ उच्चारण किया जाता है।
lirtosiast

12
मुझे नहीं पता कि यह एक अच्छा उदाहरण है, क्योंकि जीआईएफ का आधिकारिक उच्चारण जिफ जैसा है। : p
geokavel

साइड सवाल: चूंकि दोनों ही भाषा का हिस्सा हैं sऔर kउच्चारण में क्या cहै?
घातक

2
@ घातक: यह "श" है।
देउसोवी

1
@Deusovi ऐसा लगता है कि आप सही हैं। इसका कारण मुझे गलत लगा क्योंकि jअंग्रेजी जे के रूप में उच्चारण नहीं किया गया है, बल्कि फ्रेंच जे के रूप में (शुरुआत में प्लोसिव के बिना।) लिंक किए गए पृष्ठों में से एक से The regular English pronunciation of “James”, which is [dʒɛjmz], would Lojbanize as “djeimz.”, which contains a forbidden consonant pair......[additional rule to avoid this]इसलिए हम देखते हैं कि प्लोसिव डी को अंदर जोड़ने की जरूरत है। फ्रेंच जे का संस्करण वास्तव में एसएच है। IPA प्रतीक (उन्हें समझने वालों के लिए) विकिपीडिया पृष्ठ पर हैं।
लेवल रिवर सेंट

जवाबों:


7

रूबी, 302 252 बाइट्स

c='[cjsztdpbfvkgxmnlr]'
v=c+'[aeiou]'
z=!1
n=/#{c+v+v}/=~(s=gets.chop)*2
(n==0||n==2)&&289.times{|k|q=[i=k%17,j=k/17].max
z||=(x=s[n,2])==c[j+1]+c[i+1]&&['UeUeJOJOJOJOETJ
:'[i].ord-69>>j&1-j/14>0,i!=j&&q>3&&(k%2<1||q>12)&&!'mzxcxkx'.index(x)][n/2]}
p z

कुछ और बाइट्स को इस प्रकार बचाया जा सकता है:

प्रारंभ zउपयोग करने के लिए झूठीz=!c='[cjsztdpbfvkgxmnlr]' । यह काम करता है लेकिन चेतावनी देता है warning: found = in conditional, should be ==

एक प्रोग्राम से फ़ंक्शन में बदलें (मैंने इसे एक प्रोग्राम के रूप में छोड़ दिया क्योंकि प्रश्न के अनुसार, बाइट्स जीत में सबसे छोटा "प्रोग्राम" है।)

पहली पोस्ट से परिवर्तनों का सारांश

रेगेक्स / मिलान भाग के प्रमुख ओवरहाल।

लगातार 72 को 69 में बदल दिया ताकि जादू स्ट्रिंग में सबसे कम ASCII कोड 13. के बजाय 10 है। यह एक एस्केप अनुक्रम के बजाय गोल्फ संस्करण में एक शाब्दिक नई रेखा का उपयोग करने में सक्षम बनाता है।

जादू स्ट्रिंग 'mzxcxkx'CVCCV प्रकार तालिका में 5 निषिद्ध वर्णों के लिए अंकगणितीय नियमों को प्रतिस्थापित करता है।

ungolfed संस्करण

व्हाट्सएप को जोड़ा और मैजिक स्ट्रिंग में न्यूलाइन को बदल दिया \n

c='[cjsztdpbfvkgxmnlr]'                                   #c=consonants
v=c+'[aeiou]'                                             #v=consonant+vowel
z=!1                                                      #Set z to false (everything is truthy in Ruby except nil and false.)
n=/#{c+v+v}/=~(s=gets.chop)*2                             #Get input and duplicate it. do regex match, n becomes the index of the double consonant. 
(n==0||n==2)&&                                            #If n==0 (ccvcv) or n==2 (cvccv) 
   289.times{|k|                                          #iterate 17*17 times
     q=[i=k%17,j=k/17].max                                #generate row and column, find their maximum.
     z||=                                                 #OR z with the following expression:
     (x=s[n,2])==c[j+1]+c[i+1]&&                          #double consonant == the pair corresponding to j,i AND either 
       ["UeUeJOJOJOJOETJ\n:"[i].ord-69>>j&1-j/14>0,       #this expression or
       i!=j&&q>3&&(k%2<1||q>12)&&!'mzxcxkx'.index(x)][n/2]#this expresson, depending on the value of n/2
   }
p z                                                       #print output

मिलान की व्याख्या

इनपुट स्ट्रिंग में दो अक्षर s[n,2] की तुलना पुनरावृति लूप के चरित्र जोड़ी के साथ की जाती है। यदि वे मेल खाते हैं और व्यंजन-स्वर regex पैटर्न सही है, तो पंक्ति और स्तंभ मान i,jवैधता के लिए जाँचे जाते हैं। व्यंजन के सावधानीपूर्वक आदेश यहां मदद करते हैं।

CVCCV के लिए:

i!=j                        It is forbidden for both consonants to be the same
(k%2<1||q>12)               It is forbidden for one consonant to be voiced and the other unvoiced. The consonants “l”, “m”, “n”, and “r” are exempt from this restriction. As a result, “bf” is forbidden, and so is “sd”, but both “fl” and “vl”, and both “ls” and “lz”, are permitted.
q>3                         It is forbidden for both consonants to be drawn from the set “c”, “j”, “s”, “z”.
!'mzxcxkx'.index(x)         The specific pairs “cx”, “kx”, “xc”, “xk”, and “mz” are forbidden.

CCVCV के लिए

नीचे दी गई तालिका के प्रत्येक स्तंभ के लिए एक बिटमैप मैजिक स्ट्रिंग में एन्कोड किया गया है, जिसमें से 69 घटाया गया है। अंतिम दो को छोड़कर सभी स्तंभों के लिए, केवल 6 बिट्स आवश्यक हैं। पिछले दो के लिए, उच्च क्रम बिट्स 1 होना चाहिए, इसलिए एक नकारात्मक संख्या उत्पन्न होती है (वर्ण \nऔर :) के लिए अग्रणी शून्य के बजाय 1 का नेतृत्व करना होता है। हम तालिका की अंतिम तीन पंक्तियों को शामिल नहीं करना चाहते हैं, इसलिए अधिकार और समर्थन के बजाय 1 से, हम अधिकार और द्वारा1-j/14 जिसके सामान्य रूप से 1 का मूल्यांकन करते हैं, लेकिन अंतिम 3 पंक्तियों के लिए 0 का मूल्यांकन करते हैं।

निम्न कार्यक्रम (सबमिशन के समान भावों के साथ) का उपयोग नीचे दी गई तालिकाओं को उत्पन्न करने के लिए किया गया था ( ifतालिका के लिए जो भी लाइन चाहिए, वह आवश्यक है)

c='[cjsztdpbfvkgxmnlr]'
z=0
289.times{|k|
  q=[i=k%17,j=k/17].max
  r=c[j+1]+c[i+1]
  #if i!=j && q>3 && (k%2<1||q>12) && !'mzxcxkx'.index(r)
  #if "UeUeJOJOJOJOETJ\n:"[i].ord-69>>j&1-j/14>0
    print r,' '
    z+=1
  else
    print '   '
  end
  i==16&&puts 
}
puts z


            ct    cp    cf    ck       cm cn cl cr
               jd    jb    jv    jg    jm jn jl jr
            st    sp    sf    sk    sx sm sn sl sr
               zd    zb    zv    zg    zm zn zl zr
tc    ts          tp    tf    tk    tx tm tn tl tr
   dj    dz          db    dv    dg    dm dn dl dr
pc    ps    pt          pf    pk    px pm pn pl pr
   bj    bz    bd          bv    bg    bm bn bl br
fc    fs    ft    fp          fk    fx fm fn fl fr
   vj    vz    vd    vb          vg    vm vn vl vr
kc    ks    kt    kp    kf             km kn kl kr
   gj    gz    gd    gb    gv          gm gn gl gr
      xs    xt    xp    xf             xm xn xl xr
mc mj ms    mt md mp mb mf mv mk mg mx    mn ml mr
nc nj ns nz nt nd np nb nf nv nk ng nx nm    nl nr
lc lj ls lz lt ld lp lb lf lv lk lg lx lm ln    lr
rc rj rs rz rt rd rp rb rf rv rk rg rx rm rn rl 
179

            ct    cp    cf    ck       cm cn cl cr
               jd    jb    jv    jg    jm
            st    sp    sf    sk       sm sn sl sr
               zd    zb    zv    zg    zm
tc    ts                                        tr
   dj    dz                                     dr
                                             pl pr
                                             bl br
                                             fl fr
                                             vl vr
                                             kl kr
                                             gl gr
                                             xl xr
                                             ml mr


48

मैंने फ़ंक्शन को अनुमति देने के लिए शब्दांकन बदल दिया; माफ़ कीजिए इतना समय लग गया।
lirtosiast

6

जावास्क्रिप्ट (ईएस 6), 366 352 बाइट्स

g=>((q=3,w=2,r=0,f="mzcscjzjxcxkx",c="bdgvjzptkfcsxlmnr",d=[...c],v="aeiou")[m="match"](g[1])?d.map((a,i)=>d.map((b,j)=>a==b|(i<6&j>5&j<13|j<6&i>5&i<13)||f[m](a+b)||(p+=","+a+b)),p="",q=0,r=w--)&&p:"jbl,zbr,tstcl,cmr,cn,cr,jdr,cfl,sfr,jgl,zgr,zdjml,ckl,skr,cpl,spr,sl,sm,sn,sr,ctr,jvl,zvr,xl,xr,dzm")[m](g[r]+g[r+1])&&c[m](g[q])&&v[m](g[w])&&v[m](g[4])

व्याख्या

एक सरणी देता है जिसमें अंतिम अक्षर (सत्य) होता है यदि यह एक वैध जिस्म है या nullयदि यह नहीं है।

बहुत सारे आकार हार्ड-कोडेड CCVCVजोड़े से आते हैं (उन्हें संघनित करने के बाद भी)। यह उन्हें उत्पन्न करने के लिए एक पैटर्न खोजने के लिए संभव हो सकता है, लेकिन मैंने इस पर पहले से ही बहुत अधिक समय बिताया है! xD

g=>
  (
    // Save the positions to check for the consonant, vowel and pair respectively
    (q=3,w=2,r=0,                       // default = CCVCV format
    f="mzcscjzjxcxkx",                  // f = all forbidden pairs for CVCCV pairs
    c="bdgvjzptkfcsxlmnr",              // c = consonants
    d=[...c],                           // d = array of consonants
    v="aeiou")                          // v = vowels
    [m="match"](g[1])?                  // if the second character is a vowel

      // Generate CC pairs of CVCCV
      d.map((a,i)=>                     // iterate over every possible pair of consonants
        d.map((b,j)=>
          a==b|                         // rule 1: consonants cannot be the same
          (i<6&j>5&j<13|j<6&i>5&i<13)|| // rule 2: pair cannot be voiced and unvoiced
          f[m](a+b)||                   // rule 3 & 4: certain pairs are forbidden
            (p+=","+a+b)                // if it follows all the rules add the pair
        ),
        p="",                           // p = comma-delimited valid CVCCV pairs
        q=0,r=w--                       // update the match positions to CVCCV format
      )&&p
    :
      // CC pairs of CCVCV (condensed so that valid pairs like "jb", "bl" and
      //     "zb" can be matched in this string but invalid pairs like "lz" cannot)
      "jbl,zbr,tstcl,cmr,cn,cr,jdr,cfl,sfr,jgl,zgr,zdjml,ckl,skr,cpl,spr,sl,sm,sn,sr,ctr,jvl,zvr,xl,xr,dzm"

  // Match the required format
  )[m](g[r]+g[r+1])&&c[m](g[q])&&v[m](g[w])&&v[m](g[4])

परीक्षा


0

जावास्क्रिप्ट ईएस 6, 240 बाइट्स

x=>eval(`/${(c='[bcdfgjklmnprstvxz]')+c+(v='[aeiou]')+c+v}/${t='.test(x)'}?/^[bfgkmpvx][lr]|[cs][fklmnprt]|d[jrz]|[jz][bdgmv]/${t}:/${c+v+c+c+v}/${t}?!/^..((.)\\2|${V='[bdgvjz]'}${U='[ptkfcsx]'}|${U+V}|[cjsz][cjsz]|cx|kx|xc|xk|mz)/${t}:!1`)

मुझे लगता है कि यह अब मेरा काम है।

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