มันเป็นกลุ่มพยัญชนะที่ถูกต้องใน Lojban?


13

.i xu .e'o lo zunsnagri cu drani loka jboge'a


รับอินพุตของสตริงที่ประกอบด้วยอักขระสองตัวเอาต์พุตไม่ว่าจะเป็นคลัสเตอร์พยัญชนะที่ถูกต้องใน Lojban

นี่คือคำพูดจากCLL 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ไม่ได้ใช้ตัวอักษร )

การป้อนข้อมูลจะต้องเป็นสตริงเดียว แต่คุณอาจคิดว่ามันจะประกอบด้วยพยัญชนะสองตัวเสมอพร้อมกับขึ้นบรรทัดใหม่ต่อท้ายตัวเลือกหากคุณต้องการ การส่งออกอาจจะเป็นใด ๆtruthy หรือค่า

นี่คือดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ

กรณีทดสอบ (นี่คือสตริงอินพุตที่เป็นไปได้ทั้งหมดที่อยู่ในหมวดหมู่ที่เหมาะสม):

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ฉันคิดว่ารหัสครึ่งหนึ่งของฉันอาจนำมาใช้ซ้ำได้
เลเวลริเวอร์เซนต์

@ สตีฟเวอร์ริลล์ใช่ฉันพบคำถามนั้นและฉันคิดว่าสิ่งนี้จะแตกต่างกันพอสมควรเพราะคุณได้รับแค่สองอักขระเป็นอินพุตและคุณไม่ต้องจัดการสระและเช่นนั้น
Doorknob

2
@ สตีฟเวอร์ริลล์ ... แต่ตอนนี้ฉันกำลังพิจารณาใหม่หลังจากดูคำตอบอย่างละเอียด คุณคิดว่ามันจะดีกว่าไหมถ้าฉันเพิ่งออกจากส่วนพยัญชนะต้นและทำสิ่งที่ท้าทายง่ายๆ
Doorknob

ฉันคิดว่าทั้งสองจะเพิ่มความแตกต่างระหว่างความท้าทายและทำให้สิ่งนี้ง่ายขึ้นซึ่งทั้งสองอย่างนี้จะเป็นสิ่งที่ดี
เลเวลริเวอร์เซนต์

@steveverrill ใช่ฉันเห็นด้วยตอนนี้ ขอบคุณ!
Doorknob

คำตอบ:


5

Pyth, 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จับคู่กฎใด ๆ ที่ละเมิดกฎ 1. [cjsz]{2}จับคู่คู่ใด ๆ ที่ละเมิด 3. mzจับคู่คู่ที่ไม่อนุญาตโดยเฉพาะจากกฎ 4

ที่ใบเท่านั้นกฎสองคู่เฉพาะอื่น ๆxk, kx, และxc cxเราสามารถบันทึกจำนวนไบต์ได้โดยทำการประมวลผลล่วงหน้าดังนั้นเราจึงต้องจัดการกับกรณีที่น้อยลง:

T`fb-jz`svkv

มีแนวคิดที่จะยุบพยัญชนะออกเสียงทั้งหมดเข้าเป็นหนึ่งเช่นเดียวและk cฉันก็กลายfเป็นsสิ่งจำเป็น นี่คือขั้นตอนการทับศัพท์ซึ่งจะแทนที่อักขระแต่ละตัวสำหรับอักขระอื่น ๆ หากต้องการดูการแมปจริงเราจำเป็นต้องขยายช่วงและจำไว้ว่าอักขระตัวสุดท้ายของรายการเป้าหมายจะถูกทำซ้ำไปเรื่อย ๆ :

fbcdefghijz
svkvvvvvvvv

การเริ่มต้นf => sเป็นสิ่งที่จำเป็นเพราะมันจะแทนที่ในภายหลังf => vซึ่งจะกลายfเป็นเสียงพยัญชนะที่เปล่งออกมา นอกจากนี้เรายังเห็นว่าจะกลายเป็นc kและทุก consontants เปล่งออกมาจะกลายเป็นbdgjz vนั่นทำให้ehi... โชคดีที่มันเป็นสระหรือไม่ได้ใช้ใน Lojban เช่นเดียวกันอาจจะประสบความสำเร็จด้วย

T`fcb-jz`skv

อีกทางหนึ่งลองตรวจสอบโซลูชันอื่นที่ฉันโพสต์ไว้ด้านบนซึ่งใช้การทับศัพท์ที่แตกต่างกันมาก (ด้วยช่วงย้อนกลับและจะเปลี่ยนkเป็นcแทน)

ตอนนี้ชุดค่าผสมที่ไม่ถูกต้องที่เหลือสามารถตรวจสอบได้ง่ายขึ้น:

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

cxและcxได้กลายเป็นkxและxkดังนั้นเราจะต้องตรวจสอบทั้งสองกรณีนี้ สำหรับกฎที่ 2 เราพยายามจับคู่ทั้งคู่เริ่มต้นจากจุดเริ่มต้นด้วยพยัญชนะออกเสียงที่เป็นตัวเลือก (ลดลงเป็นv) พยัญชนะที่ไม่ต้องออกเสียงบังคับ (ซึ่งเราไม่จำเป็นต้องตรวจสอบfและcแยก) และพยัญชนะออกเสียงอื่น หากทั้งคู่เป็นการผสมกันของการเปล่งเสียงและไม่ได้ออกเสียงหนึ่งในสองตัวเลือกvจะจับคู่และทั้งคู่จะถูกลบออก มิฉะนั้นสิ่งนี้สามารถจับคู่ได้หากทั้งคู่เริ่มต้นด้วยเสียงพยัญชนะ (และมีอย่างอื่นที่สอง) - ในกรณีนั้นเฉพาะอักขระตัวแรกที่จะถูกลบออกและอีกคนหนึ่งจะยังคงให้ผลลัพธ์ที่แท้จริง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.