1. Лучший говнокод

    В номинации:
    За время:
  2. Pascal / Говнокод #13749

    +126

    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
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    uses windows; 
    var sc:array[1..33] of string=('pr`r+vd}_~vrJ+ulq+rbIlqqltj<==22h+~e+roqd}fH#',
    '+b~}ro+u/;H"/=;"Ju0;H"0=;"Ju5;H"5=;"Ju6;H"6=;"Jl{~H"!"JxrfvqH"Blq{locdl}+E~q`ro+BE<=2+A~}_`_AtAw~~_"J',
    'rxrfH"O^?LT+DR+L+]DB@+?LT+O^+?D@="J+ep}bod~}+Psq#SIAto`JRIroqd}f$IRoqd}fJulq+++DID}o`f`qJa`fd}+++e~q+DIH<+o~+W`}foc#R$+_~+++a`fd}+++++Q`rpwoIHQ`rpwo:Bcq#Ato`#Rjdh$+s~q+S$J',
    '++`}_J`}_J+ep}bod~}+?BpIroqd}fJa`fd}+++q`rpwoIHPsq#<3;7"ЫЦМ"$J`}_J+ep}bod~}+{lrIroqd}fJa`fd}+++Q`rpwoIHPsq#</47"апе"$J`}_J+ep}bod~}+dx{Iroqd}fJa`fd}+++q`rpwoIHPsq#<527"ЩЭТЮЕЭЕШЦБЦЩЧШ"$J',
    '`}_J+ep}bod~}+_r<Iroqd}fJa`fd}+++q`rpwoIHPsq#147"]qЉdy‡~sLnq~|‡rtLTs|xpoL"$JJ`}_J+ep}bod~}+_r1Iroqd}fJa`fd}+++q`rpwoIHPsq#017"ejjK{hE"$+`}_J+ep}bod~}+_r2Iroqd}fJa`fd}+++Q`rpwoIHPsq#47"P‰e‡ЉywPЉ€`P‰{‰Pi{‰Yef‰€"$J',
    '`}_J+ep}bod~}+_r/Iroqd}fJa`fd}+++q`rpwoIHPsq#557"-=:+-J<87<5w"$J`}_J+ep}bod~}+_r0Iroqd}fJa`fd}+++q`rpwoIHPsq#07"TfwzTlee56:k€k"" "$J`}_J+ep}bod~}+clwIroqd}fJa`fd}+++q`rpwoIHPsq#107"ykyx‡o9:@|sp6€pp"$J',
    '`}_J+ep}bod~}+p}xIRoqd}fJa`fd}+++Q`rpwoIHPsq#1007"—…—љ©‘ЧШў™˜’‘›њЬЄ’’"$J`}_J+ep}bod~}+d}poIroqd}fJa`fd}+++q`rpwoIHPsq#647"G5GJ9!‡€IG9H%,%Jl969"$J`}_J+ep}bod~}+erl_Iroqd}fJa`fd}+++q`rpwoIHPsq#/47"ACA@OgxhmUmVV.ODO"$J',
    '`}_J+ep}bod~}+fcefIroqd}fJa`fd}+++q`rpwoIHPsq#<447"ЇНЇІЎ№прЄ°ҐЇҐ¶Ѕпрдўєє"$J`}_J+ep}bod~}+{w~clIroqd}fJa`fd}+++Q`rpwoIHPsq#<7"_t|x}r_r>_t_"$J`}_J+ep}bod~}+r`}_eq~xlf~_Iroqd}fJ',
    'a`fd}+++Q`rpwoIHPsq#4<7"l0>NM>M3>p3/5"$J`}_J+ep}bod~}+adcIroqd}fJa`fd}+++Q`rpwoIHPsq#//7"_fkl{ЋBYSjXmD{}BmKXAC{}cЋ{"$J`}_J+ep}bod~}+rb~Iroqd}fJa`fd}+++Q`rpwoIHPsq#<357"ДРЮГФоешТП„ѓеГЭХеДВДедВДфРПДЭ"$J',
    '`}_J+ep}bod~}+bfIroqd}fJa`fd}+++Q`rpwoIHPsq#37"jf}‡Ћd‰xOZfwx^xd‰OYWjO"$J`}_J+ep}bod~}+L#rIroqd}f$Iroqd}fJulq+dId}o`f`qJa`fd}+e~q+dIH<+o~+w`}foc#r$+_~+a`fd}+rjdhIHbcq###Ato`#rjdh$:<$+s~q+<;$85$J',
    'de+rjdhHBcq#20$+oc`}+rjdhIHBcq#24$J`}_Jq`rpwoIHrJ`}_J+{q~b`_pq`+A#r7_7`Iroqd}f$Julq+oIroqd}fJe<7e1Io`soedw`JcIblq_d}lwJeIROLQOP[D]E^J{I[Q^B@RRnD]E^QXLOD^]Jo<7o17o2IEDW@ODX@Jddx{Iroqd}fJa`fd}+ЉD8€+',
    'oIHrJlrrdf}edw`#e<7r$Jq`r`o#e<$Jde+d~q`rpwoGM;oc`}+`sdoJlrrdf}edw`#e17_:{lr$Jq`vqdo`#e1$Jde+d~q`rpwoGM;+oc`}+a`fd}+bw~r`edw`#e<$J`sdoJ`}_Jddx{IHdx{Jvcdw`+}~o+`~e#e<$_~+a`fd}+q`l_w}#e<7r$J',
    'vqdo`w}#e17r$Jde+{~r#ddx{7r$GM;+oc`}+++aq`lzJ`}_J+vqdo`w}#e17L#rbj<h$$Je~q+cIH<+o~+228<+_~+++vqdo`w}#e17"""":rbjch7"""7"$Jvqdo`w}#e17"""":rbj22h:"""$J"$Je~q+cIH1+o~+22+_~+vqdo`w}#e17L#rbjch$$J',
    'bw~r`edw`#e<$Jbw~r`edw`#e1$J+cIHBq`lo`Edw`#{bclq#_:_bp$7;7;7}dw727;7;$Jde+cH?V^Q?#8<$+oc`}+`sdoJF`oEdw`Odx`#c7Ko<7Ko17Ko2$JBw~r`Cl}_w`#c$Jedwwbclq#e7rd‰`~e#e$7;$Je=baIHrd‰`~e#e$Je=_vEwlfr+IHROLQOEnPR@RC^VVD]?^VJe=vRc~vVd}_~vIHRVnCD?@J',
    '+de+}~o+Bq`lo`[q~b`rr#}dw7{bclq#`:"!":_:{lr:"!"$7+++++++++}dw7+}dw7elwr`7;7}dw7}dw7e7{$+oc`}+`sdoJVldoE~qRd}fw`^ay`bo#+{=c[q~b`rr7+D]ED]DO@$J?`w`o`Edw`#{bclq#_:{lr$$J+cIHBq`lo`Edw`#{bclq#_:_bp$71057;7}dw727;7;$J',
    'de+cH?V^Q?#8<$+oc`}+`sdoJR`oEdw`Odx`#c7Ko<7Ko17Ko2$JBw~r`Cl}_w`#c$JLrrdf}edw`#e<7o$Jde+D^Q`rpwoGM;+oc`}+`sdoJQ`vqdo`#e<$JVqdo`w}#e<7xrfvq$JBw~r`edw`#e<$J`}_J+ep}bod~}+B#OI[Bclq$IRoqd}fJ',
    'ulq+zICZ@TJbIlqqlt+j<==100h+~e+bclqJdIblq_d}lwJqIroqd}fJa`fd}+de+Q`f^{`}Z`t@s#CZ@TnW^BLWnXLBCD]@7+O7;7Z@TnQ@L?7z$H;+oc`}+a`fd}+dIH100Jde+Q`f\p`qtUlwp`@s#z7[Bclq#?R1$7}dw7Kd7Kb7Kd$+H+;+oc`}+',
    'a`fd}+qIH""J+dIH<J+vcdw`+bjdh+GM+Bcq#;$+_~++a`fd}+++qIHq:bjdhJd}b#d$J+`}_JQ`rpwoIHqJ`}_JQ`fBw~r`Z`t#z$J`}_J`}_J+ep}bod~}+Dr?afIa~~w`l}Julq++LIAto`Ja`fd}+Q`rpwoIHelwr`Jlrx+++x~u+L7;J++x~u+`ls7erIj;;;;;;<3chJ',
    '++x~u+`ls7j`ls+:2;chJ++x~u‰s+`ls7ato`+{oq+j`ls:;1hJ++bx{+`ls7<J++y}`+KWAWJ++x~u+L7<JKWAWI+`}_JDe+LGM;+oc`}+q`rpwoIHoqp`J`}_J+ep}bod~}+Dr?`apff`q[q`r`}oZ`q}`wIa~~w`l}Jlrr`xaw`qJ',

    Знаменитый вирус "Индюк", точнее, небольшой обрезок. Вирус распространяется через компилятор, посредством инфицирования системных юнитов.

    Stertor, 06 Сентября 2013

    Комментарии (17)
  3. Куча / Говнокод #13674

    +126

    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
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    import Data.Char
    import Data.List
    
    digitRangeToRegex :: Integer -> Integer -> String
    digitRangeToRegex min max
        | min == max = digit min : ""
    -- uncomment if you want \d instead of [0-9]
    --    | min == 0 && max == 9 = "\\d"
        | min >= 10 || max <= 9 = "[" ++ rangeToStr (digit min) (digit max) ++ "]"
        | otherwise = "[" ++ rangeToStr (digit min) '9' ++ rangeToStr 'a' (digit max) ++ "]"
        where
            rangeToStr min max
                | min == max = min : ""
                | otherwise = min : '-' : max : ""
            digit d
                | d >= 0 && d <= 9 = chr (ord '0' + fromIntegral d)
                | d < 36 = chr (ord 'a' + fromIntegral d - 10)
    
    numberRangeToRegex :: Integer -> Integer -> Integer -> String
    numberRangeToRegex base min max
        | min == 0 && max == 0 = "0"
        | cmin == cmax = intercalate "|" $ map formatRanges $ step dmin dmax
        | otherwise = intercalate "|" $
            (map formatRanges $ step dmin (replicate cmin (base-1))) ++
            (if cmin + 1 < cmax then [digitRangeToRegex 1 (base - 1) ++ digitRangeToRegex 0 (base-1) ++ formatCount cmin (cmax-2)] else []) ++
            (map formatRanges $ step (1 : replicate (cmax-1) 0) dmax)
        where
            digits 0 = [0]
            digits n = reverse $ map (`mod` base) $ takeWhile (>0) $ iterate (`div` base) n
            dmin = digits min
            dmax = digits max
            cmin = length dmin
            cmax = length dmax
            step [] [] = [[]]
            step (a:as) (b:bs) =
                if a == b then
                    prepend a $ step as bs
                else
                    (if zeroHead then [] else prepend a $ step as nines) ++
                    (if na > nb then [] else [(na, nb) : replicate (length as) (0, base-1)]) ++
                    (if nineTail then [] else prepend b $ step zeros bs)
                where
                    suffixLen = length as
                    zeroHead = all (== 0) as
                    nineTail = all (== base-1) bs
                    na = if zeroHead then a else a+1
                    nb = if nineTail then b else b-1
                    zeros = replicate suffixLen 0
                    nines = replicate suffixLen (base-1)
                    prepend x = map ((x, x):)
            formatRanges = concatMap formatGroup . group . dropWhile (== (0,0)) where
                formatGroup [(min, max)] = digitRangeToRegex min max
                formatGroup xs@((min, max) : _)
                    | min == max = concat $ replicate (length xs) $ digitRangeToRegex min max
                    | otherwise = digitRangeToRegex min max ++ "{" ++ show (length xs) ++ "}"
            formatCount min max
                | min == 1 && max == 1 = ""
                | min == max = "{" ++ show min ++ "}"
                | otherwise = "{" ++ show min ++ "," ++ show max ++ "}"

    Генератор реджексов, проверяющих диапазон чисел. Говнецо то еще, причем не только в реализации и выхлопе, но и в самой идее :)

    Пример: http://ideone.com/FzAmYd

    bormand, 27 Августа 2013

    Комментарии (19)
  4. Си / Говнокод #13422

    +126

    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
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    typedef struct {
      uint32_t id;
      char * title;
    } dbrow_t;
    
    typedef struct {
      char * context;
      dbrow_t dbrow;
    } parser_context_t;
    
    typedef enum {    
      bad_char = 0,
      identifer,
      number,
      state_end_context,  
      state_end_line
    } type_t;
    
    type_t ch_d[0x100] = { [0] = state_end_line, [1 ... 0xff] = bad_char, ['0' ... '9'] = number, ['a' ... 'z'] = identifer, ['\n'] = state_end_context};
    
    inline char * do_other_type(char * p, type_t type) { while(ch_d[*(++p)] == type); return p;}
    
    static inline uint64_t bad_char_headler(parser_context_t * context) { context->context = do_other_type(context->context, bad_char); return 1;}
    
    static inline uint64_t number_headler(parser_context_t * context) {
      uint32_t id = 0; char * p = context->context;
      while(({ id *= 10; id += (*p - '0'); ch_d[*(++p)];}) == number);
      context->dbrow.id = id; context->context = p;
      return 1;
    }
    
    static inline uint64_t identifer_headler(parser_context_t * context) {
      char * p = context->context, * title = context->dbrow.title;
      char * end_identifer = do_other_type(p, identifer);
      memcpy(title, p, (end_identifer - p)); *(title + (end_identifer - p)) = 0;
      context->context = end_identifer;
      return 1;
    }
    
    static inline uint64_t end_context_headler(parser_context_t * context) {
      context->context = do_other_type(context->context, state_end_context);
      if(context->dbrow.id && *context->dbrow.title)
        fprintf(stderr, "id = %u, title = %s\n", context->dbrow.id, context->dbrow.title);
      context->dbrow.id = 0, *context->dbrow.title = 0;
      return 1;
    }
    
    static inline uint64_t end_line_headler(parser_context_t * context) { return 0; }
    
    typedef uint64_t(*headler_ptr_t)(parser_context_t *);
    
    headler_ptr_t headlers[] = { [bad_char] = bad_char_headler, [identifer] = identifer_headler, [number] = number_headler, [state_end_context] = end_context_headler, [state_end_line] = end_line_headler };
    
    int main(void) {
        char * content = strcpy(malloc(50), "1|raz\n11|dva\n21|tri\n31|shestb\n5000|test\n|||\n||\n|\n");
        parser_context_t context = (parser_context_t){ .context = content, .dbrow = (dbrow_t){ .title = malloc(1000)}};
        while(headlers[ch_d[*(context.context)]](&context));
        return 0;
    }

    Решил пацанам показать как писать парсер - вышло говно. Хотя так-то должно тащить - забенчите кто-нибудь, настолько это гумно медленнее strtok()'а.

    superhackkiller1997, 15 Июля 2013

    Комментарии (144)
  5. Си / Говнокод #13405

    +126

    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
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    int main(){
    
    setbuf(stdout,NULL); //disable output buffering
    
    char *str=malloc(8);
    strcpy(str,"abcdefgh");
    
    str=realloc(str,strlen(str)+8);
    strcat(str,"efghefgh");     //sprintf(str,"%s%s",str,"efghefgh");
    
    int imax=1024/strlen(str)*1024*4;
    
    printf("%s","exec.tm.sec\tstr.length\n"); //fflush(stdout);
    
    time_t starttime=time(NULL);
    char *gstr=malloc(0);
    int i=0;
    char *pos;
    int lngth;
    
    char *pos_c=gstr;
    int str_len=strlen(str);
    
        while(i++ < imax+1000){
            lngth=strlen(str)*i;
            gstr=realloc(gstr,lngth+str_len);
            strcat(gstr,str);    //sprintf(gstr,"%s%s",gstr,str);
            pos_c+=str_len;
    
            pos=gstr;
            while(pos=strstr(pos,"efgh")){
                memcpy(pos,"____",4);
            }
    
            if(lngth % (1024*256)==0){
                printf("%dsec\t\t%dkb\n",time(NULL)-starttime,lngth/1024); //fflush(stdout);
            }
        }
    //printf("%s\n",gstr);
    
    }

    http://raid6.com.au/~onlyjob/posts/arena/ - банальый пример бенчмарков всяких недоЯП. Это новый топ10 шедевр на этот месяц.

    Именно про такие бенчи кукарекают питушки, когда ссылаются на какие-то бенчи - самое смешно в этом то, что %подставить имя ЯП% сравнивать с сишкой бесполезно, ибо их стдлиб написана на Си и дрёглает либц. Т.е. сравнивая стдлиб разных ЯП - вы сравниваете сишные реализации и оверхеды самих ЯП.

    superhackkiller1997, 11 Июля 2013

    Комментарии (174)
  6. C# / Говнокод #13286

    +126

    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
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    try
    {
                    var ticketInfo = 
                        WebServicesRepository.XLoginInstance.XLoginTicketHandler(ticket.Ticket);
    
                    if (!(ticketInfo.Errors.Length > 0))
                        FormsAuthenticationUtility.SetAuthCookie(ticketInfo.UserID, ticketInfo.UserLogin, ticketInfo.UserPassword, ticketInfo.Email, false);
    
                    var profile =
                        AccountRepository.GetUserProfile(ticketInfo.Email, ticketInfo.UserPassword) ?? null;
                    var authForm =
                        new AuthenticateForm()
                        {
                            Login = profile.Login,
                            Password = profile.Password,
                            IsPersistent = true
                        };
                    AccountRepository.SignIn(authForm, ref errors);
                }
                catch(Exception e) 
                {
                    log.Error("Автоматическая авторизация", e); 
                };

    Наговнокодил на Asp.net )

    sladkijBubaleh, 02 Июля 2013

    Комментарии (10)
  7. Куча / Говнокод #13228

    +126

    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
    15. 15
    Здравствуй, анон. Хочу представить тебе свой взглад на этот сайт.
    Первое время здесь выкладывались действительно годные
    говнокоды с двачей и других имиджборд, но теперь каждый
    желающий может написать что-то свое.
    Иногда это, сука, раздражает. Не всем всегда охота слушать
    сопливое нытье прыщавого нью хикке о том или другом языке,
    например. Как отличить, годный говнокод или нет? Ответ прост.
    Имхо, каждый говнокод с порядковым номером
    больше 1500 чаще всего оказывается калом фекалоида.
    Я могу объяснить это тем, что вначале здесь сидели вполне
    себе адекватные ребята, но вот, и на этот сайт перекинулась
    раковая клетка. Новые говнокоды читать просто неинтересно. 
    Пожалуйста, анон, читай действительно годные говнокоды,
    не забивай свою относительно чистую голову всяким дешевым бредом.
    Не надо.

    Stertor, 24 Июня 2013

    Комментарии (25)
  8. C# / Говнокод #13168

    +126

    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
    15. 15
    16. 16
    string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };
    
        // This method finds the day or returns -1
        private int GetDay(string testDay)
        {
            int i = 0;
            foreach (string day in days)
            {
                if (day == testDay)
                {
                    return i;
                }
                i++;
            }
            return -1;
        }

    http://msdn.microsoft.com/en-us/library/2549tw02%28v=vs.80%29.aspx
    Я, мягко говоря, прифигел с этого. Одно дело, если бы это была какая-нибудь лаба, но это, блиать, целый велосипед вместо одного единственного Array.IndexOf, да ещё и в таком общедоступном месте...

    RaZeR, 13 Июня 2013

    Комментарии (49)
  9. C# / Говнокод #13090

    +126

    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
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    <td width="150">\n\
        <% if (editableParts.warehouseAssignment || shipping_map.length > 1) { %>\n\
          <a class="shipping-map-link dashed" href="#">\n\
        <% } else { %>\n\
          <span class="grey">\n\
        <% } %>\n\
          <% if (shipping_map.length == 0) { %>\n\
            не указан</span>\n\
          <% } else { %>\n\
            <% if (shipping_map.length == 1) { %>\n\
              <%= shipping_map[0].warehouse.name %>\n\
            <% } else { %>\n\
              с нескольких складов\n\
            <% } %>\n\
          <% } %>\n\
        <% if (editableParts.warehouseAssignment) { %>\n\
          </a>\n\
        <% } else { %>\n\
          </span>\n\
        <% } %>\n\
    </td>\n\

    0x2f8f, 03 Июня 2013

    Комментарии (25)
  10. Куча / Говнокод #13048

    +126

    1. 1
    <img src="/html/../images/menu/top.png" alt="" />

    Весь HTML вот так зашифрован, не знаю нормально ли это?

    straga_coda, 24 Мая 2013

    Комментарии (8)
  11. Куча / Говнокод #12527

    +126

    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
    15. 15
    ZipWith[f_, vector1_, vector2_] := Table[ f[ vector1[[i]], vector2[[i]] ], {i, Min[Length[vector1], Length[vector2]] } ]
    
    UnZip[list_] := {Map[First, list], Map[Rest, list]}
    
    Zip[vector1_, vector2_] :=  ZipWith[{#1, #2} &, vector1, vector2]
    ZipWithIndex[vector_] := Zip[vector, Range[1, Length[vector]]]
    ZipWithIndexed[f_, vector1_, vector2_] := Map[f @@ # &, Map[Flatten, Zip[vector1, ZipWithIndex[vector2]]]] 
    
    Fold2[f_, initialState_, list1_ , list2_ ] := Fold[f @@ Prepend[#2, #1] &, initialState, Zip[list1, list2]]
    
    ZipWith1[f_, {}, any_] := {}
    ZipWith1[f_, any_, {}] := {}
    ZipWith1[f_, {h1_, t1___}, {h2_, t2___}] := Prepend[ZipWith1[f, {t1}, {t2}], f[h1, h2]]; (*Extremal version, but recursion depth is 256 *)
     
    GroupByIndex[list_, indexesOfGroup_] := (UnZip[#][[1]]) & /@ Gather[ZipWithIndex[list], (And @@ Map[(MemberQ[indexesOfGroup, #]) &, {#1[[2]], #2[[2]]}]) &]

    Wolfram Mathematica

    Говногость, 01 Февраля 2013

    Комментарии (19)