क्या यह लोजबान में एक वैध व्यंजन समूह है?


13

.i xu .e'o lo zunsnagri cu drani लोका jboge'a


दो वर्णों वाले एक तार के इनपुट को देखते हुए, आउटपुट कि क्या यह लोजबान में एक वैध व्यंजन समूह है।

सीएलएल 3.6 से एक मान्य व्यंजन समूह जोड़ी (या बल्कि, एक अमान्य एक) के लिए नियमों का विवरण देते हुए यहां एक उद्धरण दिया गया है :

1) It is forbidden for both consonants to be the same, as this would
   violate the rule against double consonants.

2) 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.

3) It is forbidden for both consonants to be drawn from the set “c”, “j”,
   “s”, “z”.

4) The specific pairs “cx”, “kx”, “xc”, “xk”, and “mz” are forbidden.

उद्धरण "आवाज" और "असम्बद्ध" व्यंजन का संदर्भ देता है। यहाँ अनवेषित व्यंजन और उनके आवाज़ वाले समकक्षों की एक तालिका है (CLL 3.6 से भी):

UNVOICED    VOICED
   p          b
   t          d
   k          g
   f          v
   c          j
   s          z
   x          -

ध्यान दें कि {x} का कोई आवाज़ वाला प्रतिपक्ष नहीं है। पूर्णता के लिए, शेष व्यंजन जो इस सूची में नहीं हैं (जिन्हें या तो आवाज़ दी जा सकती है या उद्धरण के प्रयोजनों के लिए बिना सूचना के) lmnr। ( yएक स्वर है, और अक्षरों hqwका उपयोग नहीं किया जाता है।)

इनपुट एक स्ट्रिंग होना चाहिए, लेकिन आप यह मान सकते हैं कि यदि आप चाहें तो वैकल्पिक ट्रेलिंग न्यूलाइन के साथ इसमें हमेशा दो व्यंजन होंगे। आउटपुट कोई भी सत्य या मिथ्या मूल्य हो सकता है ।

यह , इसलिए बाइट्स में सबसे छोटा कोड जीत जाता है।

परीक्षण मामले (ये सभी उचित इनपुट स्ट्रिंग्स उचित श्रेणियों में रखे गए हैं):

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

Invalid consonant clusters:
 bb bc bf bk bp bs bt bx cb cc cd cg cj cs cv cx cz dc dd df dk dp ds dt dx
 fb fd ff fg fj fv fz gc gf gg gk gp gs gt gx jc jf jj jk jp js jt jx jz kb
 kd kg kj kk kv kx kz ll mm mz nn pb pd pg pj pp pv pz rr sb sc sd sg sj ss
 sv sz tb td tg tj tt tv tz vc vf vk vp vs vt vv vx xb xc xd xg xj xk xv xx
 xz zc zf zj zk zp zs zt zx zz

Doorknob, यह codegolf.stackexchange.com/q/66053/15599 के बहुत करीब है, मुझे लगता है कि मेरा लगभग आधा कोड पुन: प्रयोज्य हो सकता है।
लेवल रिवर सेंट

@steveverrill राइट, मुझे वह प्रश्न मिला, और मुझे लगा कि यह पर्याप्त रूप से अलग होगा, क्योंकि आपको केवल दो वर्ण इनपुट के रूप में मिलते हैं और आपको स्वर और इस तरह के हैंडल करने की आवश्यकता नहीं है।
दरवाज़े

2
@steveverrill ... लेकिन अब मैं पुनर्विचार कर रहा हूं, जवाबों पर बारीकी से विचार करने के बाद। क्या आपको लगता है कि बेहतर होगा कि मैं सिर्फ प्रारंभिक व्यंजन जोड़ी भाग को छोड़ दूं, और चुनौती बना दी "यह एक वैध व्यंजन जोड़ी है"?
दरवाज़े

मुझे लगता है कि दोनों चुनौतियों के बीच अंतर को बढ़ाएंगे और इस एक को सरल करेंगे, दोनों एक अच्छी बात होगी।
लेवल रिवर सेंट

@steveverrill हाँ, मैं अब सहमत हूँ। धन्यवाद!
दरवाज़े

जवाबों:


5

पायथ, 53 48 47 बाइट्स

!}z+"mz"s.pMs[+VGGc"xcxkcsjz"2*"ptkfcsx""bdgvjz

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

! }                        A not in B
    z                      input
    +
      "mz"                  "mz"
      s                    flattened
        .pM                permutations of each:
            s [               flatten the three-element array:
                +V              Alphabet vectorized concat with itself.
                   G            That is, duplicate letters
                   G
                c"xcxkcsjz"2     That string chopped every 2
                *               outer product of
                  "ptkfcsx"      voiced letters
                  "bdgvjz        and unvoiced letters

इसे यहाँ आज़माएँ ।


5

रेटिना , 59 57 54 53 52 बाइट्स

(.)\1|[cjsz]{2}|mz

T`fb-jz`svkv
kx|xk|^v?[kpstx]v?

अनुगामी लाइनफीड महत्वपूर्ण है। मान्य क्लस्टर के लिए, यह एक गैर-रिक्त स्ट्रिंग आउटपुट करता है; अमान्य लोगों के लिए आउटपुट खाली है।

इसे ऑनलाइन आज़माएं! यह एक बार में सभी समूहों का परीक्षण करता है (सभी अमान्य लोगों को हटाकर और सभी वैध लोगों को छोड़कर)। यह संभव करने के लिए मुझे ^एंकर को एक \bशब्द सीमा के साथ बदलना पड़ा है ।

एक ही बाइट गिनती के लिए एक और समाधान:

(.)\1|[cjsz]{2}|mz

T`fk-dbz`scv
cx|xc|^v?[cpstx]v?

व्याख्या

लक्ष्य सभी अमान्य जोड़े को पूरी तरह से हटाना है। हम वैध जोड़े के साथ कर सकते हैं जो हम चाहते हैं कि कम से कम एक वर्ण शेष रहे।

(.)\1|[cjsz]{2}|mz

यह तीन नियमों का ध्यान रखता है: (.)\1नियम का उल्लंघन करने वाले [cjsz]{2}किसी भी जोड़े से मेल खाता है। किसी भी जोड़ी का उल्लंघन करने वाले से mzमेल खाता है। नियम 4 से विशेष रूप से अस्वीकृत जोड़ी से मेल खाता है।

पत्तियों केवल दो शासन और यही कारण है कि अन्य विशिष्ट जोड़े xk, kx, xcऔर cx। हम कुछ प्रीप्रोसेसिंग करके बाइट्स का एक गुच्छा बचा सकते हैं ताकि हमें कम मामलों को संभालना पड़े:

T`fb-jz`svkv

विचार एक में सभी व्यक्त व्यंजन संक्षिप्त करने के लिए, साथ ही है kऔर c। मैं भी बदल रहा हूँ fमें sआवश्यकता के। यह एक लिप्यंतरण चरण है जो अन्य वर्णों के लिए अलग-अलग वर्णों को प्रतिस्थापित करेगा। वास्तविक मानचित्रण देखने के लिए हमें सीमा का विस्तार करने की आवश्यकता है और याद रखें कि लक्ष्य सूची का अंतिम वर्ण अनिश्चित काल तक दोहराया जाता है:

fbcdefghijz
svkvvvvvvvv

प्रारंभिक f => sआवश्यक है, क्योंकि यह बाद में ओवरराइड करता है f => vजो fएक आवाज वाले व्यंजन में बदल जाता है। हम यह भी देखते हैं कि cइसे बदल दिया गया है k। और सभी आवाज उठाई गई शान्ति bdgjzमें बदल गए हैं v। कि पत्तियां ehi... सौभाग्य से ये या तो स्वर हैं या लोजबन में अप्रयुक्त। साथ ही हासिल किया जा सकता था

T`fcb-jz`skv

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

अब शेष अमान्य संयोजनों को और अधिक आसानी से जांचा जा सकता है:

kx|xk|^v?[kpstx]v?

cxऔर cxबन गए हैं kxऔर xkइसलिए हमें अब केवल दो मामलों की जाँच करने की आवश्यकता है। नियम 2 के लिए, हम पूरी जोड़ी से मेल खाने की कोशिश करते हैं, शुरू से एक वैकल्पिक आवाज वाले व्यंजन (कम v) से शुरू होता है , एक अनिवार्य unvoiced व्यंजन (जहां हमें fऔर cअलग से जांच करने की आवश्यकता नहीं है ) और दूसरा वैकल्पिक आवाज वाला व्यंजन। यदि जोड़ी को आवाज का मिश्रण है और दो वैकल्पिकों में से एक का vमिलान नहीं होगा और पूरी जोड़ी निकाल दी जाती है। अन्यथा, यह केवल तभी मेल कर सकता है जब जोड़ी एक आवाज वाले व्यंजन के साथ शुरू होती है (और दूसरा कुछ भी हो) - उस स्थिति में केवल पहला चरित्र हटा दिया जाएगा, और दूसरा एक रहेगा, फिर भी एक सत्य परिणाम देगा।

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