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'}
Provalo online!
Giocare a golf in corso.
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}
Provalo online!
La funzione helper sdecomprime una stringa delimitata da spazi:
{⍵⊆⍨' '≠⍵} monadic function taking a string
' '≠⍵ 0s at spaces, 1s elsewhere
⍵⊆⍨ Partition (split at 0s)
Prima memorizzo le possibili stringhe iniziali e finali nella sillaba, quindi creo una tabella tab contenente la concatenazione di ogni stringa dal primo elenco con ciascuna stringa dal secondo elenco.
Successivamente, memorizzo i dati binari come un elenco di numeri interi. Alcuni numeri interi vengono ripetuti e possono quindi essere memorizzati in variabili, il che consente anche l'eliminazione di alcuni spazi.
Ogni numero intero viene decodificato in binario e rappresenta una riga della tabella. Ogni bit nel numero indica se una determinata sillaba in quella riga è una sillaba valida, con l'MSB che rappresenta la prima colonna. Tutte le sillabe non valide vengono rimosse dalla tabella.
Appiattiamo la tabella in un elenco, aggiungiamo i moduli senza consonante iniziale come caso speciale e infine controlliamo se il nostro input è nell'elenco.
Possibile ulteriore potenziale golfistico:
- Scrivi la codifica base64 o base255
- Riordina le colonne e le righe per ridurre i numeri.
Utile script e generatore di test case Python: provalo online!
nar? : P