(toiminnot)

hwechtla-tl: Ajankohtien suomeksimuuntaja: viime muutokset

Tämä ohjelma on elokuvaprojektia varten ([elokuva: Juppihippijuntta]). Sille annetaan ajankohta (oletus: tämä hetki) ja se palauttaa ajankohdan nimen suomen äännerakenteeseen sopivana sanana.

{{{ #!/usr/bin/env python # coding: latin-1

import time, sys

tavunalku = list("hjklmnprstv") tavunydin = sorted(frozenset(['ie', 'uo'] + [yd for vok in "aeiou" for yd in (vok, vok+vok, vok+'i', vok+'u')])) lyhytydin = list('aeiou') tavunloppu = [''] + list("hklmnprst") tuplaloppu = [lik+klus for lik in "lmnr" for klus in "kpst" if lik+klus not in ['mk', 'mt', 'np']]

cvc_maara = len(tavunalku) * len(tavunydin) * len(tavunloppu) cvcc_maara = len(tavunalku) * len(lyhytydin) * len(tuplaloppu) tavu_maara = cvc_maara + cvcc_maara

epoch = time.mktime((2006,6,26,0,0,0,0,0,0)) timeformat = '%d.%m.%Y %H:%M:%S'

def stats(): print len(tavunalku), tavunalku print len(tavunydin), tavunydin print len(tavunloppu), tavunloppu print len(lyhytydin), lyhytydin print len(tuplaloppu), tuplaloppu print cvc_maara, cvcc_maara, tavu_maara

def etuvokaaliksi(kirjain): if kirjain == 'a': return 'ä' if kirjain == 'o': return 'ö' if kirjain == 'u': return 'y' return kirjain

def etuvokaaliseksi(sana): return ''.join([etuvokaaliksi(kirjain) for kirjain in sana])

def generaattori(lista): return lambda n: (lista[n % len(lista)], n // len(lista))

alkugen = generaattori(tavunalku) ydingen = generaattori(tavunydin) loppugen = generaattori(tavunloppu) lyhytgen = generaattori(lyhytydin) tuplagen = generaattori(tuplaloppu)

def bitti(n): return n % 2, n // 2

def tavugen(numero): n1 = numero % tavu_maara if n1 < cvc_maara: loppu, n2 = loppugen(n1) ydin, n3 = ydingen(n2) alku, n4 = alkugen(n3) else: loppu, n2 = tuplagen(n1 - cvc_maara) ydin, n3 = lyhytgen(n2) alku, n4 = alkugen(n3) return alku+ydin+loppu, numero // tavu_maara

def sanagen(numero): tavu, n2 = tavugen(numero) if n2 <= 0: return tavu return sanagen(n2) + tavu

def sana_ajankohdasta(hetki): numero = int(hetki - epoch) // 60 if numero < 0: return etuvokaaliseksi(sanagen(0-numero)) return sanagen(numero)

if __name__ == '__main__': if len(sys.argv) > 1: hetki = time.mktime(time.strptime(sys.argv[1], timeformat)) else: hetki = time.time() print sana_ajankohdasta(hetki)

}}}

----

[kategoria: kieli] [kategoria: projektit]


(viimeksi muutettu 29.08.2010 21:40)