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

    +137

    1. 001
    2. 002
    3. 003
    4. 004
    5. 005
    6. 006
    7. 007
    8. 008
    9. 009
    10. 010
    11. 011
    12. 012
    13. 013
    14. 014
    15. 015
    16. 016
    17. 017
    18. 018
    19. 019
    20. 020
    21. 021
    22. 022
    23. 023
    24. 024
    25. 025
    26. 026
    27. 027
    28. 028
    29. 029
    30. 030
    31. 031
    32. 032
    33. 033
    34. 034
    35. 035
    36. 036
    37. 037
    38. 038
    39. 039
    40. 040
    41. 041
    42. 042
    43. 043
    44. 044
    45. 045
    46. 046
    47. 047
    48. 048
    49. 049
    50. 050
    51. 051
    52. 052
    53. 053
    54. 054
    55. 055
    56. 056
    57. 057
    58. 058
    59. 059
    60. 060
    61. 061
    62. 062
    63. 063
    64. 064
    65. 065
    66. 066
    67. 067
    68. 068
    69. 069
    70. 070
    71. 071
    72. 072
    73. 073
    74. 074
    75. 075
    76. 076
    77. 077
    78. 078
    79. 079
    80. 080
    81. 081
    82. 082
    83. 083
    84. 084
    85. 085
    86. 086
    87. 087
    88. 088
    89. 089
    90. 090
    91. 091
    92. 092
    93. 093
    94. 094
    95. 095
    96. 096
    97. 097
    98. 098
    99. 099
    100. 100
    void getCoeffFromString()
    {
    	if (sscanf(input.c_str(),"%i*x^2%i*x%i=%i",&a ,&b ,&c,&d)==4)   {}                                                    //ax^2+bx+c=d
    	else 
    		{
    			a,b,c,d=0;
    			if (sscanf(input.c_str(),"%i*x^2%i%i*x=%l",&a ,&c ,&b,&d)==4)  {}
    			 else
    			  {
    			  a,b,c,d=0;
    			  if (sscanf(input.c_str(),"%i*x%i%i*x^2=%i",&b ,&c ,&a,&d)==4)        {}
    		else	
    			{
    				a,b,c,d=0;
    				if (sscanf(input.c_str(),"%i*x%i*x^2%i=%i",&b ,&a ,&c,&d)==4)        {}
    		else
    		{
    			a,b,c,d=0;
    			if (sscanf(input.c_str(),"%i%i*x^2%i*x=%i",&c ,&a ,&b,&d)==4)         {}
    		else	
    			{
    				a,b,c,d=0;
    				if (sscanf(input.c_str(),"%i%i*x%i*x^2=%i",&c ,&b ,&a,&d)==4)            {}
    		else		
    			{
    				a,b,c,d=0;
    				if (sscanf(input.c_str(),"%i=%i*x^2%i*x%i",&d ,&a ,&b,&c)==4)         {}
    		else 
    			{
    				a,b,c,d=0;
    				if (sscanf(input.c_str(),"%i=%i*x%i*x^2%i",&d ,&b ,&a,&c)==4)     {}
    			else		
    				{
    					a,b,c,d=0;
    					if (sscanf(input.c_str(),"%i=%i%i*x^2%i*x",&d ,&c ,&a,&b)==4)   {} 
    			else
    				{
    					a,b,c,d=0;
    					if (sscanf(input.c_str(),"%i=%i%i*x%i*x^2",&d ,&c ,&b,&a)==4)     {}
    		    else  
    			    { 
    					a,b,c,d=0;
    					if (sscanf(input.c_str(),"%i=%i*x^2%i%i*x",&d ,&a ,&c,&b)==4)   {}
    		    else
                      {
    					  a,b,c,d=0;
    					  if (sscanf(input.c_str(),"%i=%i*x%i%i*x^2",&d ,&b ,&c,&a)==4)    {}
    					else	
    						{
    							a,b,c,d=0;
    							if (sscanf(input.c_str(),"%i*x^2%i*x=%i",&a ,&b ,&c)==3)    {}
    					else
    						{
    							a,b,c,d=0;
    							if (sscanf(input.c_str(),"%i*x%i*x^2=%i",&b ,&a ,&c)==3)    {}
    				    else
    					    {
    						a,b,c,d=0;
    						if (sscanf(input.c_str(),"%i*x=%i%i*x^2",&b ,&c ,&a)==3)    {}
    				     else	
    					      {
                                a,b,c,d=0;
    							if (sscanf(input.c_str(),"%i*x=%i*x^2%i",&b ,&a ,&c)==3)    {}
    					else				
    						{
    							a,b,c,d=0;
    							if (sscanf(input.c_str(),"%i*x^2=%i%i*x",&a ,&c ,&b)==3)    {}
    					else		
    						{
    							a,b,c,d=0;
    							if (sscanf(input.c_str(),"%i*x^2=%i*x%i",&a ,&b ,&c)==3)    {} 
    					else
    						{
    							a,b,c,d=0;
    							if (sscanf(input.c_str(),"%i=%i*x%i*x^2",&c ,&b ,&a)==3)    {}
    			        else	
    						{
    							a,b,c,d=0;
    							if (sscanf(input.c_str(),"%i=%i*x^2%i*x",&c ,&a ,&b)==3)    {}
    					else
    						{
    							a,b,c,d=0;
    					      	if (sscanf(input.c_str(),"%i*x^2=%i",&a ,&c)==2)    {}
    					else
    						{
    							a,b,c,d=0;
    							if (sscanf(input.c_str(),"%i*x^2=%i*x",&a ,&b)==2)  {}
    					else
    						{
    							a,b,c,d=0;
    							if (sscanf(input.c_str(),"%i*x=%i",&b ,&c)==2)    {cout<<a<<"vda"<<b<<"v"<<c<<"v"<<d;}
    					else
    						{
    							a,b,c,d=0;
    							if (sscanf(input.c_str(),"%i*x=%i*x^2",&b ,&a)==2)    {cout<<a<<"vda"<<b<<"v"<<c<<"v"<<d;}
    					else
    						{
    							a,b,c,d=0;
    							if (sscanf(input.c_str(),"%i=%i*x",&c ,&b)==2)    {}
    					else

    Как я парсил квадратное уравнение. "У меня 27 сканэфов и ни один не работает"

    betkaaa2, 03 Июня 2014

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

    +133

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    typedef long bool_t;
    #define TRUE 1
    #define FALSE 0
    
    void f() {
            bool_t var;
            for (var = TRUE; var > FALSE; var++) { /* ... */ }
    }

    evg_ever, 28 Мая 2014

    Комментарии (30)
  3. Си / Говнокод #16042

    +134

    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
    static U32 Round_up_to_next_2_power( U32 value )
    {
      if ( value > 16 )
        if ( value > 64 )
          if ( value > 128 )
            if ( value > 256 )
              if ( value > 512 )
                return( 1024 );
              else
                return( 512 );
            else
              return( 256 );
          else
            return( 128 );
        else
          if ( value > 32 )
            return( 64 );
          else
            return( 32 );
      else
        if ( value > 4 )
          if ( value > 8 )
            return( 16 );
          else
            return( 8 );
        else
          if ( value > 2 )
            return( 4 );
      return( value );
    }

    Simple function to round up to the next power of 2.

    Wicked, 23 Мая 2014

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

    +118

    1. 1
    ... *sizeof(uint32_t)

    Правильно. А то вдруг кто его переопределит.

    3.14159265, 22 Мая 2014

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

    +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
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    // Hammer the CFG with large numbers of overlapping variable scopes, which
    // implicit destructors triggered at each edge.
    
    #define EXPAND_BASIC_STRUCT(i) struct X##i { X##i(int); ~X##i(); };
    #define EXPAND_NORET_STRUCT(i) struct X##i { X##i(int); ~X##i() __attribute__((noreturn)); };
    EXPAND_BASIC_STRUCT(0000); EXPAND_NORET_STRUCT(0001);
    EXPAND_BASIC_STRUCT(0010); EXPAND_BASIC_STRUCT(0011);
    EXPAND_BASIC_STRUCT(0100); EXPAND_NORET_STRUCT(0101);
    EXPAND_NORET_STRUCT(0110); EXPAND_BASIC_STRUCT(0111);
    EXPAND_BASIC_STRUCT(1000); EXPAND_NORET_STRUCT(1001);
    EXPAND_BASIC_STRUCT(1010); EXPAND_BASIC_STRUCT(1011);
    EXPAND_NORET_STRUCT(1100); EXPAND_NORET_STRUCT(1101);
    EXPAND_BASIC_STRUCT(1110); EXPAND_BASIC_STRUCT(1111);
    
    #define EXPAND_2_VARS(c, i, x)  const X##i var_##c##_##i##0(x), &var_##c##_##i##1 = X##i(x)
    #define EXPAND_4_VARS(c, i, x)  EXPAND_2_VARS(c, i##0, x);  EXPAND_2_VARS(c, i##1, x)
    #define EXPAND_8_VARS(c, i, x)  EXPAND_4_VARS(c, i##0, x);  EXPAND_4_VARS(c, i##1, x)
    #define EXPAND_16_VARS(c, i, x) EXPAND_8_VARS(c, i##0, x);  EXPAND_8_VARS(c, i##1, x)
    #define EXPAND_32_VARS(c, x)    EXPAND_16_VARS(c, 0, x);    EXPAND_16_VARS(c, 1, x)
    
    #define EXPAND_2_INNER_CASES(i, x, y)    INNER_CASE(i, x, y);             INNER_CASE(i + 1, x, y);
    #define EXPAND_4_INNER_CASES(i, x, y)    EXPAND_2_INNER_CASES(i, x, y)    EXPAND_2_INNER_CASES(i + 2, x, y)
    #define EXPAND_8_INNER_CASES(i, x, y)    EXPAND_4_INNER_CASES(i, x, y)    EXPAND_4_INNER_CASES(i + 4, x, y)
    #define EXPAND_16_INNER_CASES(i, x, y)   EXPAND_8_INNER_CASES(i, x, y)    EXPAND_8_INNER_CASES(i + 8, x, y)
    #define EXPAND_32_INNER_CASES(i, x, y)   EXPAND_16_INNER_CASES(i, x, y)   EXPAND_16_INNER_CASES(i + 16, x, y)
    
    #define EXPAND_2_OUTER_CASES(i, x, y)    OUTER_CASE(i, x, y);             OUTER_CASE(i + 1, x, y);
    #define EXPAND_4_OUTER_CASES(i, x, y)    EXPAND_2_OUTER_CASES(i, x, y)    EXPAND_2_OUTER_CASES(i + 2, x, y)
    #define EXPAND_8_OUTER_CASES(i, x, y)    EXPAND_4_OUTER_CASES(i, x, y)    EXPAND_4_OUTER_CASES(i + 4, x, y)
    #define EXPAND_16_OUTER_CASES(i, x, y)   EXPAND_8_OUTER_CASES(i, x, y)    EXPAND_8_OUTER_CASES(i + 8, x, y)
    #define EXPAND_32_OUTER_CASES(i, x, y)   EXPAND_16_OUTER_CASES(i, x, y)   EXPAND_16_OUTER_CASES(i + 16, x, y)

    Рекурсивное (EXPAND_... ) макроговно из clang и генератор (EXPAND_..._STRUCT) структур через какую-то непонятную жопу
    https://github.com/llvm-mirror/clang/blob/master/INPUTS/cfg-nested-var-scopes.cpp

    j123123, 21 Мая 2014

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

    +131

    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
    #include <stdio.h>
    #include <tchar.h>
    
    #define MVALUE 6
    
    
    void bufret(int pos, int limit, int maxlimit, bool direction)
    {
    	putchar((char)((pos&0xff)+0x30)) ;
    	if(((pos<limit)&&direction)||((pos>1)&&(!direction)))
    	{   
         putchar('-') ;
    	 if(direction)
    		 pos++ ;
    	 else 
    		 pos--;
    	}    
    	else
    	{
          limit++ ;   
          if(direction)
    		pos=limit;
    	  else
    	    pos=1 ;
    	    direction=!direction ;
    	 
    		putchar('\n') ;
    	}
    	if(limit < maxlimit)
    		bufret(pos,limit,maxlimit,direction) ;
    
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	 bufret(1, 1, MVALUE+1, true) ;
    	 getchar() ;
    	return 0;
    }

    Решил наговнокодить по мотивам этой статьи:
    http://habrahabr.ru/post/116842/

    Как думаете, получилось,

    ASDASD, 14 Мая 2014

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

    +131

    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
    #include <stdio.h>
    #include <stdint.h>
    
    #define ARR_L 11
    #define INS_P (arr[0])
    #define MOD_L(a) ((a) % ARR_L)
    #define INS_P_M (MOD_L(INS_P))
    #define ARR_ACS(a) (arr[MOD_L(a)]) //access to arr
    
    
    void foo (uint8_t *arr)
    {
      if (ARR_ACS(0) == 0)
      {
        printf("%u ", ARR_ACS(1));
        ARR_ACS(1) += ARR_ACS(2);
        ARR_ACS(0) = 1;
      }
      else
      {
        printf("%u ", ARR_ACS(2));
        ARR_ACS(2) += ARR_ACS(1);
        ARR_ACS(0) = 0;
      }
    
    }
    
    int main(void) {
      uint8_t arr[ARR_L] = {1,1,1,0,0,0,0,0,0,0,0};
      for (size_t a = 0; a < 13; a++)
      {
        foo(arr);
      }
      return 0;
    }

    Считалка чисел Фибоначчи на основе фигни, придуманной в http://govnokod.ru/15967
    Надо сделать метаязык для удобного составления набора инструкций для этой штуки. И еще надо осилить длинную арифметику, ну это вообще круто будет

    j123123, 14 Мая 2014

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

    +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
    #include <stdio.h>
    #include <stdint.h>
    
    #define ARR_L 11
    #define INS_P (arr[0])
    #define MOD_L(a) ((a) % ARR_L)
    #define INS_P_M (MOD_L(INS_P))
    #define ARR_ACS(a) (arr[MOD_L(a)]) //access to arr
    
    
    void foo (uint8_t *arr)
    {
      ARR_ACS(3) = INS_P * ARR_ACS(INS_P);
      ARR_ACS( MOD_L( INS_P_M + 1 ) ) = ((INS_P * INS_P) * 2);
      if (INS_P != 0) {ARR_ACS(INS_P_M)++;};
      INS_P = INS_P_M + 1;
    
      // tut voobche lubaya fignya, kotoraya chtoby izmenyala
      // figny v massive v zavisimosti ot sostoyania massiva
    }
    
    int main(void) {
      uint8_t arr[ARR_L] = {0,2,6,3,2,62,7,113,0,26,13};
      for (size_t a = 0; a < 10000; a++)
      {
        foo(arr);
        printf 
        (
          "%.3u %.3u %.3u %.3u %.3u "
          "%.3u %.3u %.3u %.3u %.3u %.3u\n",
          INS_P,arr[1],arr[2],arr[3],arr[4],
          arr[5],arr[6],arr[7],arr[8],arr[9],arr[10]);
      }
      return 0;
    }

    Машина Тьюринга с лентой конечной длины - конечный автомат. Состояние обязательно зациклится, какие бы правила преобразования над конечным алфавитом мы не вводили и каким бы ни было начальное состояние ленты.

    В сишке есть возможности вменяемо сделать вывод чисел из массива подряд для N-ного количества аргументов?
    Цикл не предлагать

    j123123, 12 Мая 2014

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

    +131

    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
    key_t cXxxYyyyZzz::getKey( char *pValue )
    {
      key_t key=INVALID_SEMKEY;
    
      if ( !pValue ) return key;
    
      for(int i=0; (char)0 != pValue[i]; ++i )
      {
        if ( 1==i && 'x' == tolower(pValue[1]) && '0' == pValue[0] )
          continue;
        if ( !isxdigit(pValue[i]) )
          return key;
      }
      return strtoul(pValue,(char**)0,16);
    }

    немецкий велосипед.

    Dummy00001, 12 Мая 2014

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

    +133

    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    
    void my_char_plus(const void *a, const void *b, void *c)
    {
      char tmp =  (*(char*)a + *(char*)b);
      memcpy(c,(void*)(&tmp),sizeof(char));
    }
    
    void my_char_minus(const void *a, const void *b, void *c)
    {
      char tmp =  (*(char*)a - *(char*)b);
      memcpy(c,(void*)(&tmp),sizeof(char));
    }
    
    
    
    void operation(const void *funct(const void*,const void*,void*),
                          const void *a, const void *b, void *c )
    {
      funct(a,b,c);
    }
    
    char ret_last_arg(const void *funct(const void*,const void*,void*),
                          const void *a, const void *b)
    {
      char c;
      funct(a,b,(void*)&c);
      return c;
    }
    
    
    
    int main(void)
    {
    
      char a, b;
      a = 5; b = 7;
      
      
      void *plus = &my_char_plus; char c;
      operation(plus, (const void*)&a, (const void*)&b, (void*)&c);
      printf("5 + 7 = %i\n", c);
      
      
      void *minus = &my_char_minus;
      char d = ret_last_arg(minus, (const void*)&a, (const void*)&b);
      printf("5 - 7 = %i\n", d);
      
      
    // LISP LISP LISP
    #define LISP(ar,aa,bb) ret_last_arg(ar, (const void*)&(char){aa}, (const void*)&(char){bb} )
    
      char e = LISP(plus,2,LISP(plus,2,2));
      printf("(+ 2 (+ 2 2 ) ) = %i\n", e);
      
      return 0;
    }

    Лиспопрограммирование на сишке через макрос (префиксная запись)
    Только оно кривовато тут, т.е. получаем трехадресный код (не как в лиспе)
    http://masters.donntu.edu.ua/2006/fvti/svyezhentsev/library/article2.htm
    Можно делать интерпретаторы фигни всякой, шитый код. Я упорот короче

    j123123, 08 Мая 2014

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