Тема: Кодофлуд, або флудокод
На цьому програмерському форумі мені завжди не вистачало теми, де можна було б показувати свій код. Незалежно від того, що він робить, наскільки грамотно він написаний, чи задавали його зробити на лабах і т.д. Коротше, щось назразок такого:
# fntools.py
def overload(f):
def decor(f1):
def call(*args, **kwargs):
try:
return f(*args, **kwargs)
except TypeError:
return f1(*args, **kwargs)
call.__doc__=f.__doc__
return call
return decor
@overload(overload)
def overload(f1, f2):
return overload(f1)(f2)
@overload(overload)
def overload(f1, f2, *fs):
return overload(overload(f1, f2), *fs)
#ukr_time.py
from fntools import overload
import re
def xvylyny(xv, vidm='н'):
if xv==0: return ''
if xv==15:return 'чверть'
if xv==30:return 'пів'
if 11<=xv<=19:
return['оди', 'два', 'три', 'чотир', "п'ят", 'шіст', 'сім', 'вісім', "дев'ят"][xv-11]+"надцять хвилин"
if vidm=='з':
if xv==1: return 'хвилину'
if xv%10==1:return(['', 'десять ', 'двадцять ', 'тридцять ', 'сорок ', "п'ятдесят "][xv//10]+ 'одну хвилину')
return (['', 'десять ', 'двадцять ', 'тридцять ', 'сорок ', "п'ятдесят "][xv//10]+
['хвилин', 'одна хвилина', 'дві хвилини', 'три хвилини', 'чотири хвилини',
"п'ять хвилин", "шість хвилин", 'сім хвилин', 'вісім хвилин', "дев'ять хвилин"][xv%10])
def hodyny(h, vidm='н'):
flex={'н':'ая', 'р':('ої', 'ьої'), 'д':('ій', 'ій'),
'з':'ую', 'о':('ою', 'ьою'), 'м':('ій', 'ій')}[vidm]
return ([
'дванадцят', 'перш', 'друг', 'трет', 'четверт',"п'ят",
'шост', 'сьом', 'восьм', "дев'ят", 'десят', 'одинадцят'][h%12]
+flex[0 if h%12!=3 else 1])
def chas(h):
h%=24
return ('ночі' if h<4
else 'ранку' if h<12
else 'дня' if h<16
else 'вечора')
def hxv_ukr(h, xv):
return (hodyny(h)+' '+chas(h)
if xv==0
else xvylyny(xv)+' на '+hodyny(h+1, 'з')+' '+chas(h+1)
if 1<=xv<=30
else 'за '+xvylyny(60-xv, 'з')+' '+hodyny(h+1)+' '+chas(h+1))
@overload(hxv_ukr)
def hxv_ukr(s):
h, xv=map(int, re.findall(r"(\d+):(\d+)",s)[0])
return hxv_ukr(h, xv)
def md_ukr(m, d):
m = ("січня лютого березня квітня травня червня"
" липня серпня вересня жовтня листопада грудня".split()[m-1])
if 11<=d<=19:
return['оди', 'два', 'три', 'чотир', "п'ят", 'шіст', 'сім', 'вісім', "дев'ят"][d-11]+"надцяте "+m
if d%10 == 0:
return ['', 'десяте ', 'двадцяте ', 'тридцяте '][d//10]+m
return ['', '', 'двадцять ', 'тридцять '][d//10]+['', 'перше ', 'друге ', 'третє ',
'четверте ', "п'яте ", 'шосте ', 'сьоме ', 'восьме ', "дев'яте "][d%10]+m
def mdhxv_ukr(m, d, h, xv):
return md_ukr(m, d)+', '+hxv_ukr(h, xv)
@overload(mdhxv_ukr)
def mdhxv_ukr(s):
d, m, h, xv=map(int, re.findall(r"(\d+)\.(\d+) (\d+):(\d+)",s)[0])
return mdhxv_ukr(m, d, h, xv)
if __name__=='__main__':
import sys
for s in sys.stdin:
print(hxv_ukr(s))