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}
Спробуйте в Інтернеті!
Хелперна функція s
розпаковує розділену пробіл рядку:
{⍵⊆⍨' '≠⍵} monadic function taking a string
' '≠⍵ 0s at spaces, 1s elsewhere
⍵⊆⍨ Partition (split at 0s)
Я спочатку зберігаю можливі початкові та кінцеві рядки у складі, потім складаю таблицю tab
що містить конкатенацію кожного рядка з першого списку з кожним рядком із другого списку.
Далі я зберігаю двійкові дані як список цілих чисел. Деякі з цілих чисел повторюються і тому можуть бути збережені у змінних, що також дозволяє усунути деякі простори.
Кожне ціле число декодується в двійкове і являє собою один рядок таблиці. Кожен біт числа представляє, чи певний склад у цьому рядку є дійсним складом, при цьому MSB представляє перший стовпець. Усі недійсні склади вилучаються з таблиці.
Ми вирівнюємо таблицю в список, додаємо форми без початкового приголосного в якості окремого відмінка і, нарешті, перевіряємо, чи є наш внесок у списку.
Можливий подальший потенціал для гольфу:
- Запишіть кодування base64 або base255
- Перестановіть стовпці та рядки, щоб зменшити числа.
Корисний сценарій і генератор тестових кейсів Python: Спробуйте його онлайн!
nar
? : P