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'}
Probieren Sie es online!
Golfen im Gange.
Ungolfed
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}
Probieren Sie es online!
Die s
Hilfsfunktion entpackt einen durch Leerzeichen getrennten String:
{⍵⊆⍨' '≠⍵} monadic function taking a string
' '≠⍵ 0s at spaces, 1s elsewhere
⍵⊆⍨ Partition (split at 0s)
Ich speichere zuerst die möglichen Anfangs- und Endzeichenfolgen in der Silbe und erstelle dann eine Tabelle, tab
die die Verkettung jeder Zeichenfolge aus der ersten Liste mit jeder Zeichenfolge aus der zweiten Liste enthält.
Als nächstes speichere ich Binärdaten als Liste von ganzen Zahlen. Einige der ganzen Zahlen wiederholen sich und können daher in Variablen gespeichert werden, was auch die Elution einiger Leerzeichen ermöglicht.
Jede Ganzzahl wird binär decodiert und repräsentiert eine Zeile der Tabelle. Jedes Bit in der Zahl gibt an, ob eine bestimmte Silbe in dieser Zeile eine gültige Silbe ist, wobei das MSB die erste Spalte darstellt. Alle ungültigen Silben werden aus der Tabelle entfernt.
Wir reduzieren die Tabelle zu einer Liste, fügen die Formulare ohne Anfangskonsonanten als Sonderfall hinzu und prüfen schließlich, ob unsere Eingabe in der Liste enthalten ist.
Mögliches weiteres Golfpotential:
- Schreiben Sie die Base64- oder Base255-Codierung
- Ordnen Sie die Spalten und Zeilen neu an, um die Zahlen zu verkleinern.
Python-hilfreiches Skript und Testfallgenerator: Probieren Sie es online aus!
nar
? : P