1. 1C / Говнокод #8435

    −89

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    // Функция для склонения одного слова!!!
    // z1 - само слово
    // z2 - номер падежа
    // z3 - пол
    // z4 - 1-склонять как фамилию, 2-имя, 3-отчество
    Функция ПадежС(z1,Знач z2=2,Знач z3="*",z4=0) Экспорт
    	z5=Найти(z1,"-"); z6=?(z5=0,"","-"+ПадежС(Сред(z1,z5+1,СтрДлина(z1)-z5+1),z2,z3,z4)); z1=НРег(?(z5=0,z1,Лев(z1,z5-1))); z7=Прав(z1,3);z8=Прав(z7,2);z9=Прав(z8,1);
    	z5=СтрДлина(z1); za=Найти("ая ия ел ок яц ий па да ца ша ба та га ка",z8); zb=Найти("аеёийоуэюяжнгхкчшщ",Лев(z7,1)); zc=Макс(z2,-z2); zd=?(za=4,5,Найти("айяь",z9));
    	zd=?((zc=1)или(z9=".")или((z4=2)и(Найти("оиеу"+?(z3="ч","","бвгджзклмнпрстфхцчшщъ"),z9)>0))или((z4=1)и(Найти("мия мяэ лия кия жая лея",z7)>0)),9,?((zd=4)и(z3="ч"),2,?(z4=1,?(Найти("оеиую",z9)+Найти("их ых аа еа ёа иа оа уа ыа эа юа яа",z8)>0,9,?(z3<>"ч",?(za=1,7,?(z9="а",?(za>18,1,6),9)),?(((Найти("ой ый",z8)>0)и(z5>4)и(Прав(z1,4)<>"опой"))или((zb>10)и(za=16)),8,zd))),zd)));
    	ze=Найти("лец вей бей дец пец мец нец рец вец аец иец ыец бер",z7);
    	zf=?((zd=8)и(zc<>5),?((zb>15)или(Найти("жий ний",z7)>0),"е","о"),?(z1="лев","ьв",?((Найти("аеёийоуэюя",Сред(z1,z5-3 ,1))=0)и((zb>11)или(zb=0))и(ze<>45),"",?(za=7,"л",?(za=10,"к",?(za=13,"йц",?(ze=0,"",?(ze<12,"ь"+?(ze=1,"ц",""),?(ze<37,"ц",?(ze<49,"йц","р"))))))))));
    	zf=?((zd=9)или((z4=3)и(z3="ы")),z1,Лев(z1,z5-?((zd>6)или(zf<>""),2,?(zd>0,1,0)))+zf+СокрП(Сред("а у а "+Сред("оыые",Найти("внч",z9)+1,1)+"ме "+?(Найти("гжкхш",Лев(z8,1))>0,"и","ы")+" е у ойе я ю я ем"+?(za=16,"и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойу ойойойойуюойойгомуго"+?((zf="е")или(za=16)или((zb>12)и(zb<16)),"и","ы")+"мм",10*zd+2*zc-3,2)));
    Возврат ?(""=z1,"",?(z4>0,ВРег(Лев(zf,1))+?((z2<0)и(z4>1),".",Сред(zf,2)),zf)+z6);
    КонецФункции

    шедевр, кстати!

    Запостил: Cthulhu, 06 Ноября 2011

    Комментарии (24) RSS

    • это же 1С
      Ответить
    • Падеж скота.
      Ответить
    • пец дец
      Ответить
    • что означает "?()" конструкция?
      Ответить
    • "опой"
      Ответить
      • там ещё если кусочек:
        zb=Найти("аеёийоуэюяжнгхкчшщ",Лев(z7,1)) ;
        заменить на кусочек:
        zb=Найти("щагечёкийнохуюшэяж",Лев(z7,1)) ;
        -- все равно будет точно так же работать. ;)
        Ответить
        • Прав(z1,4)<>"опой"
          Что это?
          Ответить
          • /терпеливо/
            несовпадение подстроки из четырех последних литер строки, хранящейся в переменной z1, со строкой "опой".
            Ответить
            • /специально для этого придурка/
              Какие слова (в частности из набора ФИО) могут заканчиваться именно ТАК? ("...опой")
              Ответить
          • Это кагбэ намекает, каким местом автор писал свою функцию)
            Ответить
    • Прелесть!
      Ответить
    • Оно ещё и с рекурсией Ж8-[ ]
      Ответить
    • > // Функция для склонения одного слова!!!
      И какое-же это слово?
      Захотелось привести в человеческий вид и посмотреть как это работает.
      Ответить
      • Там же написано - фамилия, или имя, или отчество.
        НО. Вот тебе ещё "для приведения в человеческий вид". ЕСЛИ к нарисованной выше функции присандалить снизу (ибо 1с77 по сути - однопроходной компилятор) присандалить ВОТ ЭТО:
        Функция ПадежП(Знач z1,Знач z2,z3=0) Экспорт
        	z1=СокрЛП(z1);z4=Найти(z1+" "," ")+1;z5=Лев(z1,z4-2);z6=Прав(z5,2); z7=?((Найти("ая ий ый",z6)>0)и(Найти("ющий нный",Сред(z1,z4-5,4))=0)и(z3=0),"1","*");
        	Возврат НРег(?((z6="ая")или(Прав(z6,1)="а"),ПадежС(z5,z2,z7,1)+" "+ПадежС(Сред(z1,z4),z2),ПадежС(z5,z2,"ч",1)+?((z6="ий")и(Найти(z1," ")=0),""," "+?(z7="1",ПадежП(Сред(z1,z4),z2,Число(z7)),Сред(z1,z4)))));
        КонецФункции//ПадежП

        -- тогда ещё вдобавок получишь возможность использовать и функцию ПадежП (с аналогичными параметрами) для склонения ещё и ПРОФЕССИИ (причем, даже из области обсценной лексики - например, профессию "быдлокодер", "одинэсник", и даже, возможно, "минетчица")!!!
        Ответить
    • показать все, что скрытоГде здесь С++?
      Ответить
    • А вы не ржите так! Это честная попытка написать небольшую функцию для склонения по падежам. Проблема в том, что даже 1С-овская namedecl.dll не умеет нормально склонять! Некоторые если фамилии ещё склоняет в 99% случаев, то такое как "менеджер отдела продаж" - уже ни в жисть!
      Ответить

    Добавить комментарий