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

    +6

    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
    #include <iostream>
        using namespace std;
         
        struct One
        {
          bool operator==(const One &) { cout << "hello from One!" << endl; return true; }
          bool operator==(unsigned int) { cout << "hello from One!" << endl;  return true; }
        };
        One operator "" x( unsigned long long int ) { return One{}; }
        One operator "" xMAGICK( unsigned long long int ) { return One{}; }
         
        int main()
        {
          cout << (0xMAGICK == 0x);
         
          return 0;
        }

    http://ideone.com/gGYFce
    Расширяем множество шестнадцатеричных цифр при помощи UDL
    В C++17 осталось разрешить перегрузку операторов встроенных типов - вот тогда можно будет оторваться по-полной!

    gost, 05 Мая 2016

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

    −1

    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
    //Сериализовать структуру со статической информацией о её полях
    template<typename T, typename T0, typename ...Args> void SerializeBinary(
    	const Tuple<T0 T::*, Args T::*...>& members, const T& src, void*& dst)
    {
    	SerializeBinary(src.*members.first, dst);
    	SerializeBinary(members.next, src, dst);
    }
    
    template<typename T, typename T0> void SerializeBinary(
    	const Tuple<T0 T::*>& members, const T& src, void*& dst)
    {
    	SerializeBinary(src.*members.first, dst);
    }
    
    //Десериализовать структуру со статической информацией о её полях
    template<typename T, typename T0, typename ...Args> void DeserializeBinary(
    	const Tuple<T0 T::*, Args T::*...>& members, T& dst, const void*& src)
    {
    	DeserializeBinary(dst.*members.first, src);
    	DeserializeBinary(members.next, dst, src);
    }
    
    template<typename T, typename T0> void DeserializeBinary(
    	const Tuple<T0 T::*>& members, T& dst, const void*& src)
    {
    	DeserializeBinary(dst.*members.first, src);
    }
    
    //Размер структуры в сериализованном виде
    template<typename T, typename T0, typename ...Args> uintptr GetSerializedBinarySize(
    	const Tuple<T0 T::*, Args T::*...>& members, const T& src)
    {
    	return GetSerializedBinarySize(src.*members.first) + GetSerializedBinarySize(members.next, src);
    }
    
    template<typename T, typename T0> uintptr GetSerializedBinarySize(
    	const Tuple<T0 T::*>& members, const T& src)
    {
    	return GetSerializedBinarySize(src.*members.first);
    }

    Сделал свой сериализатор на шаблонах и кортежах с указателями на данные-члены.

    gammaker, 03 Мая 2016

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

    +3

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    for(;++i <= n && std::cin >> a;)
    		if(a >= 1.0 && ++bigger && std::cout << i << ' ');
    		else
    			if(mx < a)
    				mx = a,
    				maxi = i;

    Решил сдать задачи на cf, в итоге выдавил из себя вот такой вот цикл.
    Очень лень было ставить скобочки.

    hoholok, 30 Апреля 2016

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

    +7

    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
    #include <iostream>
    
    using namespace std;
    
    class Foo {
    public:
        operator int() const {
            cout<<"1";
            return *this;
        }
    };
    
    int main() {
        Foo foo;
        int i = foo;
    
        cout<<i<<endl;
        return 0;
    }

    govnokod3r, 28 Апреля 2016

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

    −3

    1. 1
    for(;;){new int;}

    GC1, 26 Апреля 2016

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

    −4

    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
    /**
     * Colors which you can use in your application.
     */
    typedef enum
    {
        BLACK,          /**< black color */
        BLUE,           /**< blue color */
        GREEN,          /**< green color */
        CYAN,           /**< cyan color */
        RED,            /**< red color */
        MAGENTA,        /**< magenta color */
        BROWN,          /**< brown color */
        LIGHTGRAY,      /**< light gray color */
        DARKGRAY,       /**< dark gray color */
        LIGHTBLUE,      /**< light blue color */
        LIGHTGREEN,     /**< light green color */
        LIGHTCYAN,      /**< light cyan color */
        LIGHTRED,       /**< light red color */
        LIGHTMAGENTA,   /**< light magenta color */
        YELLOW,         /**< yellow color */
        WHITE           /**< white color */
    } COLORS;

    cccc4444, 24 Апреля 2016

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

    +5

    1. 1
    ++ ++i;

    3_dar, 23 Апреля 2016

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

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    int a = -1;
    while(+a){
        if(a == 0) break;
    }

    puksus, 22 Апреля 2016

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

    +1

    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
    void CScene::IncludeObjects()
    {
    // Reset All.
    	ExcludeObjects();
    
    // fill Vershiny of piramid...
    	point3d versh[4];
    	point3d eye = {IniSet.ptCamPos.x, IniSet.ptCamPos.y, IniSet.ptCamPos.z};
    	Screen2World(0, 0, versh[0]);
    	Screen2World(nScreenSzX, 0, versh[1]);
    	Screen2World(nScreenSzX, nScreenSzY, versh[2]);
    	Screen2World(0, nScreenSzY, versh[3]);
    
    // Increase before OO...
    	
    	int ix, sz = parrObjs.Size();
    	point3d vect;
    	for(ix = 0; ix < 4; ix++){
    		sub_vectors(&vect.x, &versh[ix].x, &eye.x);
    		norm_vect(&vect.x);
    		scale_vect(&vect.x, 200.f);
    		versh[ix] = vect;
    	}
    
    // Create faces of piramid and search collision with it...
    	point3d Piramid[4][3];
    	Piramid[0][0] = eye;
    	Piramid[1][0] = eye;
    	Piramid[2][0] = eye;
    	Piramid[3][0] = eye;
    	Piramid[0][1] = versh[0];
    	Piramid[0][2] = versh[1];
    	Piramid[1][1] = versh[1];
    	Piramid[1][2] = versh[2];
    	Piramid[2][1] = versh[2];
    	Piramid[2][2] = versh[3];
    	Piramid[3][1] = versh[3];
    	Piramid[3][2] = versh[0];
    	
    // Dyadya WALERA!!!!
    	for(ix = nObjOff; ix < sz; ix++){
    		CObj3d *pObj = parrObjs.e(ix);
    		pObj->Transform(FALSE);
    		point3d ptPos = pObj->GetPosition();
    
    		if(IniSet.nIncludeObjectMode == WS_INCLUDE_BARYCENTER){
    			point3d ptCentr = IniSet.ptCamTarget;
    			point3d vtVect;
    			
    			sub_vectors(&vtVect.x, &ptPos.x, &ptCentr.x);
    
    			plane plGran;
    			point3d ptCross;
    			for(int jx = 0; jx < 4; jx++){
    				comp_plane_eqn(&plGran.a, &Piramid[jx][0].x, &Piramid[jx][1].x, &Piramid[jx][2].x);
    				cross_line_plane(vtVect, &plGran.a, ptCentr, ptCross);
    				float f1, f2;
    				f1 = plGran.a * ptPos.x + plGran.b * ptPos.y + plGran.c * ptPos.z + plGran.d;
    				f2 = plGran.a * ptCentr.x + plGran.b * ptCentr.y + plGran.c * ptCentr.z + plGran.d;
    				if(f1 * f2 < 0.f){
    					if(point_in_triangle(Piramid[jx][0], Piramid[jx][1], Piramid[jx][2], ptCross)){
    						ptCross = ConvertPos3D(ptCross);
    						if(IniSet.bMirrorH){ ptCross.y = -ptCross.y; }
    						if(IniSet.bMirrorV){ ptCross.x = -ptCross.x; }
    						if(IniSet.bMirrorD){ ptCross.z = -ptCross.z; }
    
    						transform_back_point(&ptCross, &ptCross, &IniSet.mtMatr);
    						pObj->ptSavedPos = ptCross;
    						break;
    					}
    				}
    			}
    		}else{ // XYZ Axes.
    			point3d vtXYZ[3] = {{1.f, 0.f, 0.f},
    								{0.f, 1.f, 0.f},
    								{0.f, 0.f, 1.f}};
    
    			BOOL bFound = FALSE;
    			for(int ax = 0; ax < 3; ax++){
    
    				point3d vtVect;
    				transform_point(&vtVect, &vtXYZ[ax], &IniSet.mtMatr);
    				
    				for(int jx = 0; jx < 4; jx++){
    					plane plGran;
    					comp_plane_eqn(&plGran.a, &Piramid[jx][0].x, &Piramid[jx][1].x, &Piramid[jx][2].x);
    					
    					point3d ptCentr = IniSet.ptCamTarget;
    
    					point3d ptCross;
    					cross_line_plane(vtVect, &plGran.a, ptPos, ptCross);
    					float f1, f2;
    
    					f1 = plGran.a * ptPos.x + plGran.b * ptPos.y + plGran.c * ptPos.z + plGran.d;
    					f2 = plGran.a * ptCentr.x + plGran.b * ptCentr.y + plGran.c * ptCentr.z + plGran.d;
    
    					point3d vtDif;
    					sub_vectors(&vtDif.x, &ptCross.x, &IniSet.ptCamPos.x);
    					if(vec_length(&vtDif.x) < 0.01f){ continue; } // avoid crossing with eye.

    Гавнокод: включить все 3Д объекты в экран.

    falcoware, 21 Апреля 2016

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

    −3

    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
    namespace raytracing
    {
        struct Scene::Implementation
        {
            std::vector<std::unique_ptr<RenderObject>> renderObjects;
            std::vector<Light> lights;
            Camera camera;
        };
    }
    
    Scene::Scene() :
        implementation{std::make_unique<Implementation>()}
    {
    }
    
    void Scene::insertObject(RenderObject* renderObject) noexcept
    {
        implementation->renderObjects.push_back(std::unique_ptr<RenderObject>{renderObject});
    }
    
    const RenderObject* Scene::getIntersectedObject(Ray ray, vec3f* intersectionPoint) const noexcept
    {
        const auto& renderObjects = implementation->renderObjects;
    
        if (renderObjects.empty())
            return nullptr;
    
        struct IntersectionData
        {
            const RenderObject* renderObject;
            float t;
            bool isIntersect;
            vec3f intersectionPoint;
        } temp{};
    
        for (decltype(implementation->renderObjects)::const_iterator iter = renderObjects.cbegin();
                iter != renderObjects.cend(); ++iter)
        {
            IntersectionData intersectionData;
    
            intersectionData.renderObject = (*iter).get();
            intersectionData.isIntersect = (*iter)->isIntersect(ray, intersectionData.t,
                    &intersectionData.intersectionPoint);
    
            if (intersectionData.isIntersect)
            {
                if (temp.isIntersect)
                {
                    if (temp.t > intersectionData.t)
                        temp   = intersectionData;
                }
                else
                    temp = intersectionData;
            }
        }
    
        if (intersectionPoint)
            *intersectionPoint = temp.intersectionPoint;
    
        return temp.renderObject;
    }
    
    namespace raytracing
    {
        struct Renderer::Implementation
        {
            vec3f trace(const Scene& scene, Ray ray) const noexcept
            {
                vec3f intersectionPoint;
                const RenderObject* const renderObject = scene.getIntersectedObject(ray, &intersectionPoint);
    
                vec3f color{};
    
                if (!renderObject)
                    return color;
    
                for (Light l : scene.getLights())
                {
                    const Ray lightRay{intersectionPoint, (l.position - intersectionPoint).normalize()};
    
                    float brightness = renderObject->getNormal(intersectionPoint).dot(lightRay.direction);
                    if (brightness < 0.0F)
                        brightness = 0.0F;
    
                    color += renderObject->getColor(intersectionPoint) * 255.0F * brightness;
                }
    
                return color;
            }
        }
    }

    Сумеете ли вы найти ошибку?

    jangolare, 18 Апреля 2016

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