(toiminnot)

hwechtla-tl: Ajankohtien suomeksimuuntaja

Kierre.png

Mikä on WikiWiki?
nettipäiväkirja
koko wiki (etsi)
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


kommentoi (viimeksi muutettu 29.08.2010 21:40)