¿ xu ti te gismytermorna? (มันเป็น gismu ที่ถูกต้อง?)


25

(ตามตัวอักษร: "นี่ติดตาม / ตระหนักถึงgismu -form หรือไม่?")

หลักฐาน

ภาษาLojbanเป็นภาษาที่สร้างขึ้นความหมายในส่วนที่คำทั้งหมดได้ถูกสร้างขึ้นแทนที่จะได้รับอนุญาตให้พัฒนาตามธรรมชาติ ฐานความหมายของ Lojban คือgismuหรือคำรากซึ่งถูกสังเคราะห์โดยการรวมรากจากภาษาธรรมชาติที่พูดกันอย่างแพร่หลายเช่นจีน, ภาษาฮินดีและภาษาอังกฤษ Gismuทั้งหมดมีความยาว 5 ตัวอักษรและปฏิบัติตามรูปแบบที่เข้มงวดบางอย่าง

ข้อมูล

สำหรับวัตถุประสงค์ของเราตัวอักษร Lojban คือ:

abcdefgijklmnoprstuvxz

hqwyนั่นคืออักษรโรมันโดยไม่ต้อง

ตัวอักษรนี้สามารถแบ่งออกเป็นสี่ประเภท:

  • สระ aeiou

  • พยัญชนะเสียง Sonorant lmnr

  • ptkfcsxพยัญชนะออกเสียง เมื่อเปล่งออกมาสิ่งเหล่านี้จะกลายเป็น ...

  • เสียงพยัญชนะbdgvjz(ไม่สอดคล้องกับเสียงพยัญชนะx)

ในการเป็น gismu ที่ถูกต้องสตริง 5-char-long จะต้อง:

  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

โปรดทราบว่าสิ่งนี้ดูค่อนข้างดีกว่าเมื่อแยกออกเป็นคู่ที่ให้เสียงและไม่ได้ออกเสียง โดยเฉพาะอย่างยิ่งทุกคู่เปล่งออกมาเสียงที่ถูกต้องถ้า if คู่ unvoiced-unvoiced ที่สอดคล้องกันถูกต้อง สิ่งนี้ไม่ขยายเป็นคู่กับพยัญชนะเสียงสะท้อน clถูกต้อง แต่jlไม่ใช่

กฎการจับคู่พยัญชนะสำหรับคำ CVCCV ( แหล่งที่มา ):

อักขระที่สามและสี่ต้องเป็นไปตามกฎต่อไปนี้:

  1. มันเป็นสิ่งต้องห้ามสำหรับพยัญชนะทั้งสองจะเหมือนกัน [... ]

  2. ห้ามมิให้ผู้ใช้พยัญชนะตัวหนึ่งเปล่งเสียงและอีกตัวที่ไม่ออกเสียง พยัญชนะ "l", "m", "n" และ "r" ได้รับการยกเว้นจากข้อ จำกัด นี้ ดังนั้นห้ามใช้ "bf" และ "sd" แต่อนุญาตให้ใช้ทั้ง "fl" และ "vl" และทั้ง "ls" และ "lz"

  3. ห้ามใช้ทั้งสองพยัญชนะจากเซต“ c”,“ j”,“ s”,“ z”

  4. ห้ามใช้คู่ที่เฉพาะเจาะจง "cx", "kx", "xc", "xk" และ "mz"

โปรดทราบว่ามี 179 คู่ที่เป็นไปได้

ท้าทาย

ตรวจสอบว่าสายที่กำหนดตามกฎการก่อตัวgismu นี่คือดังนั้นทางออกที่สั้นที่สุดในหน่วยไบต์ชนะ

อินพุต : สตริงความยาว 5 จากตัวอักษร Lojban

เอาต์พุต : ค่าความจริงหากสตริงสามารถเป็นgismuและค่า falsey เป็นอย่างอื่น

กรณีทดสอบ

ถูกต้อง:

gismu
cfipu
ranxi
mupno
rimge
zosxa

ไม่ถูกต้อง:

ejram
xitot
dtpno
rcare
pxuja
cetvu

กรณีทดสอบเพิ่มเติม: ไฟล์ข้อความนี้มี gismu ที่ถูกต้องทั้งหมดหนึ่งรายการต่อบรรทัด

ฉันไม่รู้ Lojban จริง ๆ ดังนั้นฉันสงสัยว่าการแปลชื่อผิด ความช่วยเหลือชื่นชม


8
โปรดทราบว่าการออกเสียง Lojban นั้นมีการออกเสียงดังนั้นGismuจึงออกเสียงได้ยากเช่นใน GIF
lirtosiast

12
ฉันไม่รู้ว่าเป็นตัวอย่างที่ดีหรือไม่เพราะการออกเสียง GIF อย่างเป็นทางการเหมือนกับ Jiff : p
geokavel

คำถามด้าน: เนื่องจากทั้งสองsและkเป็นส่วนหนึ่งของภาษาการออกเสียงอะไรcมี?
ทำให้เสียชีวิต

2
@ สรุป: มันคือ "sh"
Deusovi

1
@Deusovi ดูเหมือนว่าคุณพูดถูก เหตุผลที่ฉันทำผิดคือjไม่ได้ออกเสียงว่าภาษาอังกฤษ J แต่เป็นภาษาฝรั่งเศส 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]ดังนั้นเราจึงเห็นว่าจำเป็นต้องเพิ่ม plosive D เวอร์ชั่นภาษาฝรั่งเศสของ J นั้นแท้จริงแล้วคือ SH สัญลักษณ์ IPA (สำหรับผู้ที่เข้าใจ) อยู่ในหน้าวิกิพีเดีย
เลเวลริเวอร์

คำตอบ:


7

Ruby, 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 ==แต่ให้คำเตือน

เปลี่ยนจากโปรแกรมเป็นฟังก์ชั่น (ฉันปล่อยให้มันเป็นโปรแกรมเพราะตามคำถามสั้น ๆ ว่า "โปรแกรม" เป็นไบต์ที่ชนะ)

สรุปการเปลี่ยนแปลงจากโพสต์แรก

ยกเครื่องใหญ่ของ regex / ส่วนที่ตรงกัน

ค่าคงที่ 72 เปลี่ยนเป็น 69 เพื่อให้รหัส ASCII ที่ต่ำที่สุดในสายเวทย์มนตร์คือ 10 แทนที่จะเป็น 13 ซึ่งจะช่วยให้สามารถใช้ newline ตัวอักษรในเวอร์ชัน golfed แทนลำดับการหลบหนี

สตริง Magic 'mzxcxkx'แทนที่กฎเลขคณิตสำหรับ 5 ตัวอักษรต้องห้ามในตารางประเภท CVCCV

รุ่นที่ไม่ได้ถูกดัดแปลง

เพิ่มช่องว่างและเปลี่ยนบรรทัดใหม่ในสตริงมายากลเป็น a \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 consonant-vowel นั้นถูกต้องค่าแถวและคอลัมน์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 แทนการเป็นเลขศูนย์นำหน้า เราไม่ต้องการรวมแถวสามแถวสุดท้ายของตารางไว้ด้วยดังนั้นแทนที่จะเปลี่ยนจาก righthift และ ANDing เป็น 1 เราจะเปลี่ยนเป็น righthift และ AND 1-j/14ซึ่งโดยปกติจะประเมินเป็น 1 แต่จะประเมินเป็น 0 สำหรับ 3 แถวสุดท้าย

โปรแกรมต่อไปนี้ (ที่มีนิพจน์เหมือนกับการส่ง) ถูกใช้เพื่อสร้างตารางด้านล่าง (ไม่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

JavaScript (ES6), 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])

คำอธิบาย

ส่งกลับอาร์เรย์ที่มีตัวอักษรตัวสุดท้าย (ความจริง) ถ้ามันเป็น gismu ที่ถูกต้องหรือ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

Javascript ES6, 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`)

ฉันเดาว่านี่คืองานของฉันตอนนี้

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