1. C++ / Говнокод #15478

    +15

    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
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    #include <iostream>
    #include <string>
    #include <vector>
    #include <list>
    #include <algorithm>
    #include <iterator>
    #include <sstream>
    #include <assert.h>
    using namespace std;
    template<class Container, class Iterator> 
    size_t position(Container&& c, Iterator pos){
        return size_t(distance(begin(c), pos));
    }
    template<class Container, class Iterator, class Iterator2> 
    string sposition(Container&& c, const pair<Iterator, Iterator2>& pos){
        ostringstream r;
        r << "(" << position(c, pos.first) << ", " << position(c, pos.second) << ")";
        return r.str();
    }
    template<class Container, class Value> 
    pair<typename remove_reference<Container>::type::iterator, typename remove_reference<Container>::type::iterator>
     binary_search(Container&& source, const Value& item){
        assert(is_sorted(begin(source), end(source)));
        const auto empty = make_pair(source.end(), source.end());
        auto l = begin(source), r=end(source), m=l;
        while(true){
            if(l==r)
                return empty;
            const auto lr = distance(l,r);
            m = next(l, lr/2);
            if(*m<item)
                l = m;
            if(*m>item)
                r = m;
            if(*m==item)
                break;
            if(l!=r && next(l)==r)
                return empty;
        }
        cout<<"part1"<<endl;
        auto l1=l, r1=m, l2=m, r2=r;
        while(true){
            const auto lr1 = distance(l1, r1);
            m = next(l1, lr1/2);
            if(*m<item)
                l1 = m;
            if(*m>=item)
                r1 = m;
            if(l1==r1 || (*l1<item && *r1>=item))
                break;
        }
        cout<<"part2"<<endl;
        while(true){
            const auto lr2 = distance(l2, r2);
            m = next(l2, lr2/2);
            if(*m<=item)
                l2 = m;
            if(*m>item)
                r2 = m;
            if(l2==r2 || (*l2>=item && (r==r2 || *r2>item)))
                break;
        }
        cout<<"part3"<<endl;
        return {r1, next(l2)};
    }
    int main(){
        vector<int> s{5,7,7,7,9,19,23};
        list<int> s2(s.begin()+1, s.end());
        cout<<sposition(s, binary_search(s, 7))<<endl;
        cout<<sposition(s2, binary_search(s2, 7))<<endl;
        cout<<sposition(s, binary_search(s, 9))<<endl;
        cout<<sposition(s, binary_search(s, 5))<<endl;
        cout<<sposition(s, binary_search(s, 23))<<endl;
        cout<<sposition(s, binary_search(s, 0))<<endl;
        vector<int> e;
        cout<<sposition(e, binary_search(e, 0))<<endl;
        cout<<sposition(s, binary_search(s, 25))<<endl;
        cout<<sposition(s, binary_search(s, 10))<<endl;
        return 0;
    }

    http://coliru.stacked-crooked.com/a/0f74a4661c06cd68
    Специально для @Пи, раз ему хачкель не нравится.

    LispGovno, 14 Марта 2014

    Комментарии (22)
  2. C++ / Говнокод #15416

    +24

    1. 1
    ((x<0) && (y < 0)) ? ({x =-x; y=-y;}) : (((x < 0) || (y < 0)) ? ({x+=0.5; y+=0.5;}) : ( (!(((x > 2.0) || (x < 0.5)) && ( (y > 2.0) || (y < 0.5) ))) ? : ({x/=10;y/=10;}) ) );

    простейшее задание на условия...

    mccloud, 10 Марта 2014

    Комментарии (20)
  3. C++ / Говнокод #15393

    +37

    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
    int hamming(int i, int j, vector<state>& net) //returns Hamming distance between i and j nodes
    {
    	int res = 0;
    	if (net[i].nodes[0] != net[j].nodes[0])
    	{
    		res++;
    	}
    	if (net[i].nodes[1] != net[j].nodes[1])
    	{
    		res++;
    	}
    	if (net[i].nodes[2] != net[j].nodes[2])
    	{
    		res++;
    	}
    	if (net[i].nodes[3] != net[j].nodes[3])
    	{
    		res++;
    	}
    	if (net[i].nodes[4] != net[j].nodes[4])
    	{
    		res++;
    	}
    	if (net[i].nodes[5] != net[j].nodes[5])
    	{
    		res++;
    	}
    	if (net[i].nodes[6] != net[j].nodes[6])
    	{
    		res++;
    	}
    	if (net[i].nodes[7] != net[j].nodes[7])
    	{
    		res++;
    	}
    	if (net[i].nodes[8] != net[j].nodes[8])
    	{
    		res++;
    	}
    	if (net[i].nodes[9] != net[j].nodes[9])
    	{
    		res++;
    	}
    	if (net[i].nodes[10] != net[j].nodes[10])
    	{
    		res++;
    	}
    	if (net[i].nodes[11] != net[j].nodes[11])
    	{
    		res++;
    	}
    	if (net[i].nodes[12] != net[j].nodes[12])
    	{
    		res++;
    	}
    	return res;
    }

    Человеку срочно нужно узнать про существование циклов.

    galarr, 08 Марта 2014

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

    +27

    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
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    99. 99
    #include <iostream>
    #include <iterator>
    #include <algorithm>
    #include <vector>
    #include <utility>
    #include <sstream>
    #include <assert.h>
    using namespace std;
    
    struct PeriodDescription{
    	size_t length, repeat_amount, last_items_amount;
    	/*friend ostream& operator<<(ostream& os, const PeriodDescription& s){
    		os<<" (PeriodDescription){"<<s.length<<", "<<s.repeat_amount<<", "<<s.last_items_amount<<"} ";
    		return os;
    	}*/
    };
    
    /*template<class C>
    string co(C&& c){
    	ostringstream r;
    	r<<" (C) {";
    	copy(c.begin(), c.end(), ostream_iterator<typename C::value_type>(r, ", "));
    	r<<"}; ";
    	return move(r.str());
    }*/
    
    vector<PeriodDescription> find_repeat_sequences_since_begin(const string& sequence){
    	vector<PeriodDescription> result;
    	if(sequence.empty())
    		return result;
    	auto position_at_last_period=sequence.begin();
    	const char first_item = *position_at_last_period;
    	const auto after_last=sequence.end();
    	auto position_at_current_period = position_at_last_period;
    	while(true){
    		position_at_last_period=sequence.begin();
    		position_at_current_period = find(next(position_at_current_period), after_last, first_item);
    		PeriodDescription new_period {size_t(distance(position_at_last_period, position_at_current_period)), 1, 0};
    		while(position_at_current_period!=after_last && *position_at_last_period==*position_at_current_period){
    			++position_at_last_period; ++position_at_current_period;
    			if(++new_period.last_items_amount>=new_period.length){
    				new_period.last_items_amount = 0;
    				++new_period.repeat_amount;
    			}
    		}
    		if(new_period.repeat_amount==1 && new_period.last_items_amount==0)
    			return result;
    		result.push_back(new_period);
    		if(position_at_current_period==after_last)
    			return result;
    	}
    }
    
    vector<size_t> generate_FSM_failJumpIndices(const vector<PeriodDescription>& periodDescriptions, const size_t stringLength){
    	vector<size_t> r(stringLength+1);
    	for(const auto& pd : periodDescriptions){
    		for(size_t periodIndex=1; periodIndex<pd.repeat_amount; ++periodIndex)
    			for(size_t indexAtPeriod=0; indexAtPeriod<pd.length; ++indexAtPeriod)
    				r[(periodIndex*pd.length)+indexAtPeriod]=(periodIndex-1)*pd.length + indexAtPeriod;
    		for(size_t indexAtAfterPeriods=0; indexAtAfterPeriods<pd.last_items_amount; ++indexAtAfterPeriods)
    			r[pd.length*pd.repeat_amount+indexAtAfterPeriods]=pd.length*(pd.repeat_amount-1)+indexAtAfterPeriods;
    	}
    	return r;
    }
    
    vector<size_t> make_FSM_failJumpIndices(const string& sequence){
    	return generate_FSM_failJumpIndices(find_repeat_sequences_since_begin(sequence), sequence.size());
    }
    
    class FSM_for_find_equal_ranges{
    	size_t state;
    	vector<size_t> failJumpIndices;
    	string sequence;
    	string::const_iterator find_next(string::const_iterator checkPosition, const string::const_iterator last){
    		struct atReturn{
    			size_t& state;
    			~atReturn(){state = 0;}
    		}nullify{state};
    		if(checkPosition==last)
    			return last;
    		if(sequence.empty())
    			return next(checkPosition);
    		if(size_t(distance(checkPosition, last))<sequence.size())
    			return last;
    		while(true){
    			if(checkPosition==last)
    				return last;
    			if(*checkPosition==sequence[state])
    				++state;
    			else
    				state=failJumpIndices[state];
    			++checkPosition;
    			if(state>=sequence.size())
    				return prev(checkPosition, sequence.size());
    		}
    	}
    public:
    	template<class T>
    	FSM_for_find_equal_ranges(T&& sequence):

    Очередное собеседование. Пригласили на должность дельфина. Но оп отказался проходить собеседование на дельфи.
    http://ideone.com/zp5CRb

    USB, 07 Марта 2014

    Комментарии (53)
  5. C++ / Говнокод #15363

    +32

    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
    #include <iostream>
    #include <vector>
    #include <map>
    #include <algorithm>
    #include <iterator>
    #include <iomanip>
    using namespace std;
    
    vector<string> bracesExpressionExamples = {
    	"({[{}]{}[]})",
    	"({}}{[{}]{}[]})",
    	"({[{}]{}[]}",
    	"({[{}]{}]})",
    	"({[{}{}[]})",
    	"",
    	"{}"
    };
    
    string openBrace = "({[";
    string closeBrace = ")}]";
    
    typedef map<char, char> otc;
    const otc& openToCloseBrace(){
    	static const otc o2c([](){
    		otc o2c;
    		transform(
    			openBrace.begin(), openBrace.end(),
    			closeBrace.begin(),
    			inserter(o2c, o2c.begin()),
    			[](const char open, const char close){return make_pair(open, close);}
    		);
    		return o2c;
    	}());
    	return o2c; 
    }
    
    bool checkBraces (const string& e){
    	vector<char> s;
    	for(const char b: e)
    		if(string::npos!=openBrace.find(b))
    			s.push_back(openToCloseBrace().at(b));
    		else if(string::npos!=closeBrace.find(b) && (!s.empty()) && b==s.back())
    			s.pop_back();
    		else return false;
    	return s.empty();
    }
    
    int main() {
    	cout<<boolalpha;
    	transform(
    		bracesExpressionExamples.begin(),
    		bracesExpressionExamples.end(),
    		ostream_iterator<bool>(cout, "\n"),
    		checkBraces);
    	return 0;
    }

    http://ideone.com/AbO4tw
    Кот с собеседований.
    Проверка правильности расстановки скобок для каждого выражения из bracesExpressionExamples.

    USB, 05 Марта 2014

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

    +88

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    #include <cstdlib>
    #include <ctime>
    main(){
        srand((unsigned)time(NULL));
        int x = 1^~0-(((1+&x?2||0:(~1))-(1 & 2)*.1-(1+-1?5:3)%1)==0?10:-rand()%5+1);
        return 0;
    }

    perl'овцы развлекаются.

    Hammer, 02 Марта 2014

    Комментарии (2)
  7. C++ / Говнокод #15263

    +36

    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
    #include <iostream>
    
    class StaticClassData {
      int *pointer, value;
    
    public:
      StaticClassData(): pointer(&value) {}
      
      void add(int i) {
        std::cout << "Hello, this is " << this << std::endl;
        value = i;
        std::cout << "I'm fine" << std::endl;
        *pointer = i;
        std::cout << "You never read this text" << std::endl;
      }
    };
    
    class SomeClass {
      struct StaticConstructor {
        StaticConstructor(){ storage.add(1); }
      };
      
      static StaticConstructor constructor;
      static StaticClassData storage;
    };
    
    SomeClass::StaticConstructor SomeClass::constructor;
    StaticClassData SomeClass::storage;
    
    int main(){}

    Долго думал, с какого хрена программа падает на заполнении static поля в "статическом конструкторе". Поле вроде бы есть, но толку от этого мало.
    http://ideone.com/Ux14ep - из раздела ub.govnokod.ru или как выстрелить себе в ногу до выполнения main.

    1024--, 01 Марта 2014

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

    +46

    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
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    //В хедере
        QVector<double> stateStack;
    //Сохраняем
        stateStack.push_back((double)renderInclusionsAs3DMeshSpheres);
        stateStack.push_back((double)transparencyForClosestSidePolies);
        stateStack.push_back((double)renderFEMGrid);
        stateStack.push_back((double)NEST_results_detail_per_unit);
        stateStack.push_back((double)sourceLineActive);
        stateStack.push_back((double)renderScale);
        stateStack.push_back((double)c2DZoom1To1);
        stateStack.push_back((double)render2DInclusions);
        stateStack.push_back((double)render3DInclusions);
        stateStack.push_back((double)renderNESTResults);
        stateStack.push_back((double)renderFEAResults);
        stateStack.push_back((double)NEST_anumTime);
        stateStack.push_back((double)isAnimRun);
        stateStack.push_back((double)NEST_timeIterToRender);
        stateStack.push_back((double)NEST_RenderResultsIn3D);
        stateStack.push_back((double)NEST_renderTestPoints);
        stateStack.push_back((double)nestNewResults);
        stateStack.push_back((double)fibers_renderFormedRegions);
        stateStack.push_back((double)sourceLineStarted);
        stateStack.push_back((double)renderSourceLine);
        stateStack.push_back((double)heatQuadsModifyMode);
        stateStack.push_back((double)renderTopHeats);
        stateStack.push_back((double)sliceModifyMode);
        stateStack.push_back((double)useSlicePlane);
        stateStack.push_back((double)showSlicedPart);
        stateStack.push_back((double)cRenderMenuOpended);
        stateStack.push_back((double)cForbidRenderResultsOverLayers);
        stateStack.push_back((double)renderCoordLines);
        stateStack.push_back((double)renderDimensions);
        stateStack.push_back((double)renderLimits);
        stateStack.push_back((double)cResTransparency);
        stateStack.push_back((double)cRenderResultsOverLayers);
        stateStack.push_back((double)cActiveLayer);
        stateStack.push_back((double)renderMiniMapAtTop);
        stateStack.push_back((double)subCompositeMode);
        stateStack.push_back((double)subCompositeMapRendering);
        stateStack.push_back((double)fibersRenderable);
        stateStack.push_back((double)renderFibersAsMesh);
        stateStack.push_back((double)droplets_detailedSpheres);
        stateStack.push_back((double)cViewType);
    //Загружаем
     renderInclusionsAs3DMeshSpheres   =(bool)stateStack[0];
        transparencyForClosestSidePolies=        stateStack[1];
        renderFEMGrid=(bool)                     stateStack[2];
        NEST_results_detail_per_unit=            stateStack[3];
        sourceLineActive=(bool)                  stateStack[4];
        renderScale=(bool)                       stateStack[5];
        c2DZoom1To1=(bool)                       stateStack[6];
        render2DInclusions=(bool)                stateStack[7];
        render3DInclusions=(bool)                stateStack[8];
        renderNESTResults=(bool)                 stateStack[9];
        renderFEAResults=(bool)                  stateStack[10];
        NEST_anumTime=                           stateStack[11];
        isAnimRun=(bool)                         stateStack[12];
        NEST_timeIterToRender=                   stateStack[13];
        NEST_RenderResultsIn3D=(bool)            stateStack[14];
        NEST_renderTestPoints=(bool)             stateStack[15];
        nestNewResults=(bool)                    stateStack[16];
        fibers_renderFormedRegions=(bool)        stateStack[17];
        sourceLineStarted=(bool)                 stateStack[18];
        renderSourceLine=(bool)                  stateStack[19];
        heatQuadsModifyMode=(bool)               stateStack[20];
        renderTopHeats=(bool)                    stateStack[21];
        sliceModifyMode=(bool)                   stateStack[22];
        useSlicePlane=(bool)                     stateStack[23];
        showSlicedPart=(bool)                    stateStack[24];
        cRenderMenuOpended=(bool)                stateStack[25];
        cForbidRenderResultsOverLayers=(bool)    stateStack[26];
        renderCoordLines=                        stateStack[27];
        renderDimensions=(bool)                  stateStack[28];
        renderLimits=                            stateStack[29];
        cResTransparency=                        stateStack[30];
        cRenderResultsOverLayers=(bool)          stateStack[31];
        cActiveLayer=                            stateStack[32];
        renderMiniMapAtTop       =(bool)         stateStack[33];
        subCompositeMode         =(bool)         stateStack[34];
        subCompositeMapRendering =(bool)         stateStack[35];
        fibersRenderable=(bool)                  stateStack[36];
        renderFibersAsMesh=(bool)                stateStack[37];
        droplets_detailedSpheres=                stateStack[38];
        cViewType=                               stateStack[39];

    Структуры для педиков.

    Abbath, 25 Февраля 2014

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

    +37

    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
    long* Service::qByteToLongArray(QByteArray qba, long r)
    {
        long* larr = new long[r];
    
        char *carr;
        carr = (char*)larr;
    
        int len = r * sizeof(long);//length in bytes
    
        for(int i=0; i < len; i++)
            carr[i] = qba.at(i);
    
        return larr;
    }
    
    QByteArray Service::longToQByteArray(long **larr2, long r, long c)
    {
        QByteArray qba;// = new QByteArray();
    
        char **carr2;
        carr2 = (char**)larr2;
    
        int rlen = c * sizeof(long);//length of row in bytes
    
        for(int i=0; i < r; i++){
            qba.append(carr2[i], rlen);//add next row of matrix to the QByteArray
        }
    
        return qba;
    }

    Нашли это, только когда собрали под x64.

    Abbath, 25 Февраля 2014

    Комментарии (16)
  10. C++ / Говнокод #14847

    +49

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    ...
    #define POW2 65536
    #define TRUE 1
    #define FALSE 0
    #define VAL_TEN 20
    #define VAL_TWEN 10
    #define VAL_HUN 100
    ...

    Просто поржать. Пока была в отпуске, получила письмо от коллеги с этим примером того что я слишком сильно прижала индусов за константы и они все цифры в коде поменяли на "слова".

    dariak, 24 Февраля 2014

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