1. Список говнокодов пользователя Bobik

    Всего: 12

  2. Куча / Говнокод #24313

    0

    1. 1
    Серьёзный вопрос к местным игроделам:

    А есть ли какое-нибудь универсальное исследование, которое говорит, как должны быть устроены формулки в rpg/mmorpg?
    Типа что номер уровня должен зависеть как корень степени 2.8 от количества exp, hp -- линейно от str и int, а дамаг -- как среднее геометрическое дамага перса и дамага его оружия.
    Пробовал гуглить/читать геймдев -- нашёл только пространственные рассуждения "начни делать хоть как-то, а потом с помощью говна и палок отбалансируй".

    P.S. Да, я хочу написать игру и сидеть в неё играть.

    Bobik, 23 Мая 2018

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

    −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
    #include <iostream>
    using namespace std;
    struct MyType { MyType() {  cout << __PRETTY_FUNCTION__ << endl; }};
    MyType& MyType() { cout << __PRETTY_FUNCTION__ << endl; }
    using MyType2 = struct MyType;
    int main() {
      // MyType t; <- error: expected ‘;’ before ‘t’
      MyType();
      struct MyType t;
      struct MyType t1 = MyType();
      struct MyType t2 = (struct MyType)::MyType();
      struct MyType t3 = MyType2();
      new(&t2) struct MyType();
      return 0;
    }

    Крестоблядство по мотивам #23850.
    https://ideone.com/XcK2hf.
    Особенно меня порадовал каст на 11 строчке.

    Bobik, 03 Марта 2018

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

    −12

    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
    #include <iostream>
    using namespace std;
    struct GetFirst{};
    template<class T>
    const T &operator,(const T &val, const GetFirst &) {
      return val;
    }
    template<class T, class U>
    const T &ifvoid_impl(const T &val, const U &) {
      return val;
    }
    template<class T>
    const T &ifvoid_impl(const GetFirst &, const T &val) {
      return val;
    }
    #define ifvoid(X, Y) (ifvoid_impl(((X), GetFirst()), (Y)))
    
    int a() { return 1; }
    void f() {}
    
    int main() {
      cout << ifvoid(a(), "[a()]") << endl
           << ifvoid(f(), "[f()]") << endl;
    }

    Лень проверять в шаблонном коде, возвращает ли что-то пользовательская функция? Воспользуйся волшебством оператора запятая!

    Bobik, 16 Февраля 2017

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

    +918

    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
    #include <iostream>
    
    template<typename T>
    struct A {
      typedef int R();
    
      template<typename U>
      static U *f(int) { 
        return 0; 
      }
    
      static int f() { 
        return 0;
      }
    };
    
    template<typename T>
    bool g() { A<T> a; return !(typename A<T>::R*)a.f<int()>(0); }
    template<typename T>
    bool h() { A<T> a; return !(         A<T>::R*)a.f<int()>(0); }
    
    int main() {
      std::cout << g<void>() << f<void>() << std::endl;
    }

    Как можно было придумать такой синтаксис :(

    Bobik, 25 Августа 2016

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

    +8

    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 <vector>
    #include <iostream>
    
    template<class T>
    struct reverse_view_impl {
    	const T& cont;
    	reverse_view_impl(const T& cont): cont(cont) {}
    	using iterator = typename T::const_reverse_iterator;
    };
    template<class T>
    reverse_view_impl<T> reverse_view(const T& cont) {
    	return reverse_view_impl<T>(cont);
    }
    
    template<class T>
    typename reverse_view_impl<T>::iterator begin(const reverse_view_impl<T>& view) {
    	return view.cont.crbegin();
    }
    template<class T>
    typename reverse_view_impl<T>::iterator end(const reverse_view_impl<T>& view) {
    	return view.cont.crend();
    }
    
    std::vector<int> one_two_three() { return { 1, 2, 3 }; }
    
    int main() {
    	for (auto i : reverse_view(one_two_three())) {
    		std::cout << i << std::endl;
    	}
    }

    // Surprise, motherfucker

    Bobik, 10 Августа 2016

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

    −45

    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
    #define _GNU_SOURCE
    
    #include <ucontext.h>
    #include <unistd.h>
    #include <signal.h>
    #include <stdio.h>
    #include <string.h>
    
    volatile void *retry_address = NULL;
    volatile int *value = NULL;
    int value_holder = 5;
    #define debug_write(MESSAGE) write(1, MESSAGE, sizeof(MESSAGE) - 1)
    
    #if defined(REG_RIP)
    #define REG_IP REG_RIP
    #elif defined(REG_EIP)
    #define REG_IP REG_EIP
    #else
    #error Intel only!
    #endif
    
    void segv_handler(int signum, siginfo_t *info, void *ucontext_ptr)
    {
    	debug_write("You forgot to allocate your memory? Let's try again.\n");
    	value = &value_holder;
    	ucontext_t *ucontext = ucontext_ptr;
    	ucontext->uc_mcontext.gregs[REG_IP] = (greg_t)retry_address;
    }
    
    int main()
    {
    	__label__ retry_label;
    	retry_address = &&retry_label;
    	struct sigaction action;
    	memset(&action, 0, sizeof(action));
    	action.sa_sigaction = segv_handler;
    	action.sa_flags = SA_SIGINFO;
    	if (sigaction(SIGSEGV, &action, NULL) < 0)
    	{
    		perror("sigaction()");
    	}
    retry_label:
    	debug_write("Trying to access *value...\n");
    	printf("The *value is %d\n", *value);
    	return 0;
    }

    К недавнему вопросу о восстановлении после SIGSEGV.
    http://ideone.com/l5pWVp

    Bobik, 15 Июля 2016

    Комментарии (26)
  8. Perl / Говнокод #20126

    −107

    1. 1
    ((*+*)***)

    Это не новый смайлик, а один из способов задания анонимных функций в perl6. Как вы думаете, что это за функция?

    Bobik, 02 Июня 2016

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

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    CharT getline(std::istream& i, string& s, const CharT* delim) {
    ...
        if (!i.operator void*()) 
            break;
    ...
    }

    Библиотека Apache UIMA-CPP.
    Что могло заставить написать так, вместо обычного if (i)? Какой-то древний компилятор, который не использует каст к указателю в условии?
    Ну и, разумеется, в C++11 ios::operator void*() заменили на explicit ios::operator bool(), так что работать перестало.

    Bobik, 29 Мая 2016

    Комментарии (57)
  10. PHP / Говнокод #19118

    +3

    1. 1
    Вышел php-7.0.0!

    Возрадуемся, обсудим?

    Bobik, 02 Декабря 2015

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

    +5

    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
    #include <bits/stdc++.h>
    using namespace std;
    #define mp make_pair
    #define mt make_tuple
    #define pb push_back
    #define rep(i,a,b) for(int i=a;i<b;++i)
    #define forn(i, n) for(int i=0;i<n;++i)
    #define forv(it, v) for(typeof((v).begin()) it = (v).begin(); it != (v).end(); ++it)
    #define all(c) (c).begin(), (c).end()
    #define fst first
    #define snd second
    typedef vector<int> vi;
    typedef vector<vi> vvi;
    typedef pair<int,int> pii;
    typedef long long ll;
    typedef vector<ll> vll;
    typedef pair<ll,ll> pll;
    typedef long double ld;
    typedef string st;
    const int inf = 1000 * 1000 * 1000;
    const int mod = 1000 * 1000 * 1000 + 7;
    const ld pi = acos(-1.0);
    const ll infl = 1000ll * 1000ll * 1000ll * 1000ll * 1000ll * 1000ll;
    const ld eps = 1e-7;
    #define y1 y1_dhs

    В продолжении предыдущего ГК: типичное начало олимпиадной проги на С++.

    Bobik, 16 Ноября 2015

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