s←⊢⊆⍨' '≠⊢
a b c←2097144 131064 1957895
f←{(⊂⍵)∊(12↑v),(s'yi ya ye yao you yan yang yin ying yong yu yue yuan yun wu wa wo wai wei wan wang wen weng nv lv nve lve'),(,⊤(a-8)1966080 393208 1966064 2096720 1966072 1048568a a 2056184a 131048a 7288b 7280 106488b 7280b 0 1958911 73735c c 352263c 24583 1859591c,5⍴7)/,('bpmfdtnlgkhzcs',s'zh ch sh r j q x')∘.,v←'aoe',s'ai ei ao ou an ang en eng ong u ua uo uai ui uan uang un ueng i ia ie iao iu ian iang in ing iong u ue uan un'}
在线尝试!
打高尔夫球。
不打高尔夫球
s←{⍵⊆⍨' '≠⍵}
con←s'b p m f d t n l g k h z c s zh ch sh r j q x'
vwl←s'a o e ai ei ao ou an ang en eng ong u ua uo uai ui uan uang un ueng i ia ie iao iu ian iang in ing iong u ue uan un'
tab←con∘.,vwl
bin←,⊤2097136 1966080 393208 1966064 2096720 1966072 1048568 2097144 2097144 2056184 2097144 131048 2097144 7288 131064 7280 106488 131064 7280 131064 0 1958911 73735 1957895 1957895 352263 1957895 24583 1859591 1957895 7 7 7 7 7
all←'aoe',(12↑vwl),(s'yi ya ye yao you yan yang yin ying yong yu yue yuan yun wu wa wo wai wei wan wang wen weng nv lv nve lve'),bin/,tab
f←{(⊂⍵)∊all}
在线尝试!
helper函数s
解压缩以空格分隔的字符串:
{⍵⊆⍨' '≠⍵} monadic function taking a string
' '≠⍵ 0s at spaces, 1s elsewhere
⍵⊆⍨ Partition (split at 0s)
我首先将可能的初始和最终字符串存储在音节中,然后创建一个表,tab
其中包含第一个列表中每个字符串与第二个列表中每个字符串的连接。
接下来,我将二进制数据存储为整数列表。一些整数是重复的,因此可以存储在变量中,这也允许省略一些空格。
每个整数都解码为二进制,并代表表的一行。数字中的每一位代表该行中的某个音节是否为有效音节,其中MSB代表第一列。从表格中删除所有无效的音节。
我们将表展平到一个列表中,作为特殊情况添加没有初始辅音的表格,最后检查我们的输入是否在列表中。
可能的进一步打高尔夫球潜力:
- 编写base64或base255编码
- 重新排列列和行以减小数字。
Python有用的脚本和测试用例生成器:在线尝试!
nar
呢?:P