¿Xu ti te gismytermorna? (Đây có phải là một gismu hợp lệ không?)


25

(Nghĩa đen: "Điều này có tuân theo / nhận ra gismu -form không?")

Tiền đề

Ngôn ngữ Lojban là một ngôn ngữ được xây dựng , có nghĩa là một phần mà tất cả các từ của nó đã được tạo ra thay vì được phép phát triển tự nhiên. Cơ sở ngữ nghĩa của Lojban là gismu , hoặc các từ gốc, được tổng hợp bằng cách kết hợp các nguồn gốc từ các ngôn ngữ tự nhiên được sử dụng rộng rãi như tiếng Trung Quốc, tiếng Hindi và tiếng Anh. Tất cả các gismu dài 5 chữ cái và theo một hình thức nghiêm ngặt nhất định.

Thông tin

Đối với mục đích của chúng tôi, bảng chữ cái Lojban là:

abcdefgijklmnoprstuvxz

Đó là, bảng chữ cái La Mã không có hqwy.

Bảng chữ cái này có thể được chia thành bốn loại:

  • Nguyên âm aeiou

  • Phụ âm Sonorant lmnr

  • Phụ âm không được phát âm ptkfcsx. Khi được lên tiếng, những thứ này trở thành ...

  • Phụ âm phát âm bdgvjz(Không có phụ âm phát âm tương ứng với x.)

Để trở thành một gismu hợp lệ, một chuỗi dài 5 ký tự phải:

  1. Ở trong một trong các mẫu nguyên âm phụ âm CVCCVhoặc CCVCV, trong đó C đại diện cho một phụ âm và V đại diện cho một nguyên âm.

  2. Thực hiện theo các quy tắc kết hợp phụ âm.

Quy tắc kết hợp phụ âm cho các từ CCVCV:

Hai ký tự đầu tiên phải tạo thành một trong 48 cặp sau ( nguồn ):

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

Lưu ý rằng điều này trông khá đẹp hơn khi được tách thành các cặp có tiếng và không có sóng. Đặc biệt, mọi cặp giọng nói đều hợp lệ nếu cặp không có tiếng nói tương ứng là hợp lệ. Điều này không mở rộng thành cặp với một phụ âm phát âm; cllà hợp lệ nhưng jlkhông phải.

Quy tắc kết hợp phụ âm cho các từ CVCCV ( nguồn ):

Các ký tự thứ ba và thứ tư phải tuân theo các quy tắc sau:

  1. Nghiêm cấm cả hai phụ âm giống nhau [...]

  2. Nghiêm cấm một phụ âm được phát âm và các phụ âm khác không được phát âm. Các phụ âm của tiếng lv, tiếng mv, tiếng nọ và tiếng rọ được miễn trừ khỏi hạn chế này. Kết quả là, bị cấm, và cũng không được phép, nhưng cũng không được phép, nhưng cũng không được phép.

  3. Nghiêm cấm cả hai phụ âm được rút ra từ tập hợp Cv, Giv j,, s, và, z.

  4. Các cặp cụ thể đã làm Cấm, và kx,, xx,, xx, và xv, và bị cấm.

Lưu ý rằng có 179 cặp có thể.

Thử thách

Xác định xem chuỗi đã cho có tuân theo quy tắc hình thành gismu không . Đây là , vì vậy giải pháp ngắn nhất tính bằng byte sẽ thắng.

Đầu vào : Một chuỗi có độ dài 5 từ bảng chữ cái Lojban.

Output : Một giá trị truthy nếu chuỗi có thể là một gismu và một giá trị falsey khác.

Các trường hợp thử nghiệm

Có hiệu lực:

gismu
cfipu
ranxi
mupno
rimge
zosxa

Không hợp lệ:

ejram
xitot
dtpno
rcare
pxuja
cetvu

Thêm trường hợp kiểm tra: tệp văn bản này chứa tất cả gismu hợp lệ, mỗi dòng trên một dòng.

Tôi thực sự không biết Lojban, vì vậy tôi nghi ngờ bản dịch tiêu đề là sai. Giúp đỡ được đánh giá cao.


8
Lưu ý rằng phát âm Lojban là ngữ âm, do đó gismu được phát âm bằng một chữ g cứng, giống như trong GIF.
lirtosiast

12
Tôi không biết đó có phải là một ví dụ hay không, vì cách phát âm chính thức của GIF giống như Jiff. : p
geokavel

Câu hỏi phụ: Vì cả hai sklà một phần của ngôn ngữ, phát âm ccó gì?
Gây tử vong

2
@Firthize: Đó là "sh".
Deusovi

1
@Deusovi có vẻ như bạn đúng. Lý do tôi hiểu sai là vì jkhông được phát âm là tiếng Anh J, mà là tiếng Pháp J (không có số nhiều ở đầu.) Từ một trong các trang được liên kết 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]để chúng tôi thấy rằng D cần phải được thêm vào. phiên bản tiếng Pháp J thực sự là SH. Các biểu tượng IPA (cho những người hiểu chúng) có trên trang wikipedia.
Cấp sông St

Câu trả lời:


7

Ruby, 302 252 byte

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

Một vài byte nữa có thể được lưu như sau:

Khởi tạo zthành false bằng cách sử dụng z=!c='[cjsztdpbfvkgxmnlr]'. Điều này hoạt động nhưng đưa ra cảnh báo warning: found = in conditional, should be ==.

Thay đổi từ một chương trình thành một chức năng (Tôi đã để nó như một chương trình vì theo câu hỏi, "chương trình" ngắn nhất tính theo byte sẽ thắng.)

Tóm tắt các thay đổi từ bài đăng đầu tiên

Đại tu chính của regex / phần phù hợp.

Hằng số 72 thay đổi thành 69 sao cho mã ASCII thấp nhất trong chuỗi ma thuật là 10 thay vì 13. Điều này cho phép một dòng mới theo nghĩa đen được sử dụng trong phiên bản golf thay vì chuỗi thoát.

Chuỗi ma thuật 'mzxcxkx'thay thế các quy tắc số học cho 5 ký tự bị cấm trong bảng loại CVCCV.

phiên bản vô văn hóa

đã thêm khoảng trắng và thay đổi dòng mới trong chuỗi ma thuật thành \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

Giải thích về kết hợp

Hai ký tự trong chuỗi đầu vào s[n,2]được so sánh với cặp ký tự của vòng lặp. Nếu chúng khớp và mẫu biểu thức nguyên âm phụ âm là chính xác, các giá trị hàng và cột i,jđược kiểm tra tính hợp lệ. Đặt hàng cẩn thận của các phụ âm giúp ở đây.

Đối với 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.

Đối với CCVCV

Một bitmap cho mỗi cột của bảng bên dưới được mã hóa thành chuỗi ma thuật, từ đó 69 được trừ đi. Đối với tất cả các cột ngoại trừ hai cột cuối cùng, chỉ cần 6 bit. Đối với hai số cuối, các bit thứ tự cao hơn cần phải là 1, do đó, một số âm được tạo ra (ký tự \n:) để có số 1 đứng đầu thay vì số 0 đứng đầu. Mặc dù vậy, chúng tôi không muốn bao gồm ba hàng cuối cùng của bảng, vì vậy thay vì quyền và AND bằng 1, chúng tôi có quyền và AND 1-j/14thường ước tính là 1, nhưng ước tính là 0 cho 3 hàng cuối.

Chương trình sau đây (có cùng biểu thức với nội dung gửi) đã được sử dụng để tạo các bảng bên dưới (không ghi chú bất kỳ ifdòng nào được yêu cầu cho bảng bạn muốn.

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

Tôi đã thay đổi từ ngữ để cho phép các chức năng; xin lỗi nó mất quá lâu
lirtosiast

6

JavaScript (ES6), 366 352 byte

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])

Giải trình

Trả về một mảng chứa chữ cái cuối cùng (trung thực) nếu đó là một gismu hợp lệ hoặc nullnếu nó không phải là.

Rất nhiều kích thước đến từ các CCVCVcặp mã hóa cứng (ngay cả sau khi ngưng tụ chúng). Có thể tìm thấy một mô hình để tạo ra chúng nhưng tôi đã dành quá nhiều thời gian cho việc này rồi! 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])

Kiểm tra


0

Javascript ES6, 240 byte

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`)

Tôi đoán đây là công việc của tôi bây giờ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.