1. Си / Говнокод #13416

    +129

    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
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    void swap (char *x, char *y)
    {
        char temp;
        temp = *x;
        *x = *y;
        *y = temp;
    }
     
    void permute(char *a, int i, int n)
    {
        int j;
        if (i == n)
        printf("%s\n", a);
        else
        {
            for (j = i; j <= n; j++)
            {
                swap((a+i), (a+j));
                permute(a, i+1, n);
                swap((a+i), (a+j));
            }
        }
    }
     
     
    int main()
    {
        char str[80] ;
        int len=0,i;
        puts("Enter a string:\n\n");
        gets(str);
        for (i=0; str[i] != '\0'; i++)
        {
            len++;
        }
        permute(str, 0, len);
        getchar();
        return 0;
    }

    Источник:
    http://www.c-program-example.com/2012/04/c-program-to-find-all-permutations-of.html

    про strlen видимо никто не слышал

    denis90, 13 Июля 2013

    Комментарии (121)
  2. Си / Говнокод #13408

    +123

    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
    60. 60
    61. 61
    62. 62
    63. 63
    #include <malloc.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdint.h>
    
    typedef struct {
      char * begin;
      uint64_t size, data_size;
    } str_t;
    
    inline uint64_t max(uint64_t a, uint64_t b) {
      return (a > b) ? a : b;
    }
    
    inline str_t correct_data_size(str_t str, uint64_t new_size) {
      if(str.data_size < new_size) {
        str.data_size = (max(str.data_size, new_size) << 1);
        str.begin = realloc(str.begin, str.data_size);    
      }
      return str;
    }
    
    inline str_t concat(str_t dest, str_t src) {
      uint64_t new_size = (dest.size + src.size - 1);
      dest = correct_data_size(dest, new_size);
      memcpy((dest.begin + dest.size - 1), src.begin, src.size);
      dest.size = new_size;
      return dest;
    }
    
    inline str_t create_str(char * str, uint64_t size) {
      return (str_t){.begin = strcat(malloc(size), str), .size = size, .data_size = size};
    }
    
    inline void print_str_t(str_t str) {
      fprintf(stderr, "str = %ssize = %lu, data_size = %lu\n", str.begin, str.size, str.data_size);
    }
    
    uint64_t test(uint64_t star_n, uint64_t n, str_t str, str_t * gstr) {
      uint64_t end = (star_n + n);
      do {
        *gstr = concat(*gstr, str);
        
        char * pos = gstr->begin;
        while((pos = strstr(pos, "efgh")))
          memcpy(pos,"____",4);
        
      } while((++star_n) != end);
      return star_n;
    }
    
    int main(void) {
      char data[] = "abcdefghefghefgh";
      str_t str = create_str(data, sizeof(data)); 
      str_t gstr = create_str("", 1);
      time_t starttime = time(NULL);
      
      uint64_t block_c = 0;
      
      while((block_c = test(block_c, ((256/16) * 1024), str, &gstr)) != (((256/16) * 1024) * 20))
        printf("%ldsec\t\t%lukb\n",time(NULL)-starttime,gstr.size/1024);
      
    }

    Минимально оптимизированный вариант в царь-стиле теста из предыдущего ГК. Никто не увидел и начали на меня кукарекать. То ещё ГК, давайте объясняйте что здесь говно.

    superhackkiller1997, 11 Июля 2013

    Комментарии (129)
  3. Си / Говнокод #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)
  4. Си / Говнокод #13396

    +132

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    Дорогой участник! Не спеши покидать страницу. Я прошу тебя помочь:
    не поленись, пройдись по всем постам, и поставь каждому участнику по минусу;
    минусуя других участников ты воспитываешь в себе чувство меры и помогаешь обществу снижать ЧСВ. 
    Заранее спасибо, друг мой. Ты будешь вознагражден за это деяние!
    
    Тот, кто покинул страницу, но не выполнил моей просьбы, умрет через 9 дней.

    Дорогой участник! Не спеши покидать страницу. Я прошу тебя помочь:
    не поленись, пройдись по всем постам, и поставь каждому участнику по минусу;
    минусуя других участников ты воспитываешь в себе чувство меры и помогаешь обществу снижать ЧСВ.
    Заранее спасибо, друг мой. Ты будешь вознагражден за это деяние!


    Тот, кто покинул страницу, но не выполнил моей просьбы, умрет через 9 дней.

    Stertor, 11 Июля 2013

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

    +131

    1. 1
    2. 2
    3. 3
    int rotate(int a, int k) {
        return (a << k) | (a >> (32-k));
    }

    Вращение на k бит влево.

    bormand, 10 Июля 2013

    Комментарии (73)
  6. Си / Говнокод #13322

    +139

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    #define InlineIsEqualGUID(rguid1, rguid2)  \
            (((unsigned long *) rguid1)[0] == ((unsigned long *) rguid2)[0] &&   \
            ((unsigned long *) rguid1)[1] == ((unsigned long *) rguid2)[1] &&    \
            ((unsigned long *) rguid1)[2] == ((unsigned long *) rguid2)[2] &&    \
            ((unsigned long *) rguid1)[3] == ((unsigned long *) rguid2)[3])

    Windows SDK, guiddef.h

    ret = InlineIsEqualGUID(&g_guid, guid_array + i); /* ??? */

    serg_ik, 07 Июля 2013

    Комментарии (15)
  7. Си / Говнокод #13261

    +130

    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
    * g o a t s e x * g o a t s e x * g o a t s e x *
    g                                               g  
    o /     \             \            /    \       o
    a|       |             \          |      |      a
    t|       `.             |         |       :     t
    s`        |             |        \|       |     s
    e \       | /       /  \\\   --__ \\       :    e
    x  \      \/   _--~~          ~--__| \     |    x  
    *   \      \_-~                    ~-_\    |    *
    g    \_     \        _.--------.______\|   |    g
    o      \     \______// _ ___ _ (_(__>  \   |    o
    a       \   .  C ___)  ______ (_(____>  |  /    a
    t       /\ |   C ____)/      \ (_____>  |_/     t
    s      / /\|   C_____)       |  (___>   /  \    s
    e     |   (   _C_____)\______/  // _/ /     \   e
    x     |    \  |__   \\_________// (__/       |  x
    *    | \    \____)   `----   --'             |  *
    g    |  \_          ___\       /_          _/ | g
    o   |              /    |     |  \            | o
    a   |             |    /       \  \           | a
    t   |          / /    |         |  \           |t
    s   |         / /      \__/\___/    |          |s
    e  |           /        |    |       |         |e
    x  |          |         |    |       |         |x
    * g o a t s e x * g o a t s e x * g o a t s e x *

    Stertor, 29 Июня 2013

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

    +140

    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
    int windowSize = (rect.right - rect.left) / 2;
    SetForegroundWindow( hWnd );
    int offsetX = 35;
    do 
    {
        int offsetY = 70;
        if( windowSize > 70 )
        {
            do 
            {
                TryToClickButton( hMessage, offsetY, offsetX );
                offsetY+=20;
            } while( offsetY < windowSize );
        }
        offsetX += 0xa;
    } while( (offsetX - 90 < 0) ^ (offsetX == 100) );

    Кликаем по кнопке вместо пользователя. Не лаба.

    roman-kashitsyn, 19 Июня 2013

    Комментарии (10)
  9. Си / Говнокод #13187

    +136

    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
    #include <stdio.h>
    #include <math.h>
    
    const double g = 10; // да, 10
    
    int main() {
        double v0; // начальная скорость снаряда в метрах в секунду
        double angle; // угол в градусах относительно плоскости земли
    
        scanf("%lf%lf", &v0, &angle);
    
        angle = angle / 180 * M_PI; // переводим градусы в радианы
    
        /*
            уравнения движения в нашем случае просты:
            x = v0 * t * cos(angle)
            y = v0 * t * sin(angle) - g * t * t / 2
    
            в момент удара о землю y будет равен 0 (по условию задачи)
            из второго уравнения выразим время:
            t = 2*v0*sin(angle)/g
    
            за это время снаряд улетит на v0 * t * cos(angle)
            x = 2 * v0 * v0 * cos(angle) * sin(angle) / g
    
            Формулу можно упростить до v0 * v0 * sin(2*angle) / g
        */
    
        double x = v0 * v0 * sin(2 * angle) / g;
    
        printf("x = %.0lf\n", x);
    
        return 0;
    }

    Референсный код для superhackkiller1997.

    Простейшая задачка о полете снаряда. Ветер и сопротивление воздуха не учитываем. Стрельбы производятся на равнине (т.е. высоту в момент выстрела и в момент попадания в землю считаем одинаковой).

    Входные данные: начальная скорость снаряда (в метрах в секунду), угол относительно плоскости земли (в градусах).
    g принимаем равным 10 м/с².

    Выходные данные: расстояние от пушки, на котором снаряд ударится о землю (в метрах, такой точности будет вполне достаточно).

    Примеры:
    v0 = 200, angle = 45 => x = 4000
    v0 = 200, angle = 30 => x = 3464
    v0 = 200, angle = 90 => x = 0

    Продемонстрируй нам, как бы ты решил эту несложную задачку со своим представлением чисел (не fixed и не float). На входе, как видишь, все числа целые, на выходе тоже.

    bormand, 17 Июня 2013

    Комментарии (221)
  10. Си / Говнокод #13183

    +135

    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
    #include <stdio.h>
     
    typedef void(* file_handler_t)(FILE* fileHandle);
     
    void using_file(FILE* fileHandle, file_handler_t fileHandler/*a*/)
    {
        if(!fileHandle)
            return;
        fileHandler(fileHandle);
        fclose(fileHandle);
    }
     
    int main(void) {
        using_file(fopen("myfile.txt","w"),
            ({void body(FILE* fileHandle) {
                /*пишем в fileHandle;*/
            }; body;})//b
        );
            return 0;
    }

    Постю код в защиту курочки от нападок Тараса про автодестукторы. Уникальные виды куриц нужно оберегать, сохранять и защищать.
    Курочка об gnuцицизмы уже зашкварился так что будем стоять на своем до конца. Главное чтобы он свой не отстоял, а то потом не встанет.
    http://ideone.com/2zRuK0

    В позицию /*a*/ можно добавить параметр, деструктирующий объект должным образом. И соответственно оформить using_file как USING макросом, чтобы можно было деструктить объекты не только типа FILE* но и любых других. В макросе вполне при этом может понадобится гнутый typeof, но у нас и так зашквар, так что уже не важно. Так же для полной универсальности можно добавить параметр, определяющий неуспешность открытия объекта, чтобы вместо if(!fileHandle) был if(predicate(fileHandle)). Но конечно при этом лучше просто сделать 2 варианта макроса: обобщенный и с предикатом по умолчанию логическое отрицание.

    Вместо некрасивой позиции //b лучше завести макрос, эмитирующий нормальную красивую человеческую лямбду.

    LispGovno, 16 Июня 2013

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