Your program is given a string consisting entirely of lowercase letters at STDIN (or closest alternative). The program must then output a truthy or falsey value, depending on whether the input is valid romaji.
- It must be possible to divide the entire string into a sequence of kana without any leftover characters.
- Each kana can be a single vowel (
- Each kana can also be a consonant p, g, z, b, d, k, s, t, n, h, m, or r followed by a vowel. For example, ka and te are valid kana, but qa is not.
- The exceptions to the above rule are that zi, di, du, si, ti, and tu are not valid kana.
- The following are also valid kana: n, wa, wo, ya, yu, yo, ji, vu, fu, chi, shi, tsu.
- If a particular consonant is valid before an i (i.e ki, pi), the i can be replaced by a ya, yu, or yo and still be valid (i.e kya, kyu, kyo)
- Exceptions to the above rule are chi and shi, for which the y has to be dropped too (i.e cha, chu, cho, sha, shu, sho)
- It is also valid to double consonants if they are the first character of a kana (kka is valid but chhi is not)
- Shortest answer wins. All regular loopholes are disallowed.
List of all valid kana:
Can have double consonant: ba, bu, be, bo, bi ga, gu, ge, go, gi ha, hu, he, ho, hi ka, ku, ke, ko, ki ma, mu, me, mo, mi na, nu, ne, no, ni pa, pu, pe, po, pi ra, ru, re, ro, ri sa, su, se, so, za, zu, ze, zo, da, de, do, ta, te, to, wa, wo, ya, yu, yo, fu, vu ji Can not have double consonant: a, i, u, e, o, tsu, chi, cha, cho, chu, shi, sha, sho, shu, n
kyoto watashi tsunami bunpu yappari
yi chhi zhi kyi