Size: a a a

2020 April 23

CD

Constantine Drozdov in pro.algorithms
просто передай self параметром
источник

V🇺

Vladislav 🇺🇸🚜🇷🇺 in pro.algorithms
Constantine Drozdov
просто передай self параметром
а можно передать self auto параметром?
источник

CD

Constantine Drozdov in pro.algorithms
Vladislav 🇺🇸🚜🇷🇺
а можно передать self auto параметром?
#include <utility>

template <typename T>
struct combinator {
   T t_;
   constexpr combinator(T&& t) : t_(std::forward<T>(t)) {}
   
   template <typename... Args>
   constexpr auto operator () (Args&&... args) const
       noexcept(noexcept(t_(*this, std::forward<Args>(args)...)))
       -> decltype(t_(*this, std::forward<Args>(args)...))
   {
       return t_(*this, std::forward<Args>(args)...);
   }
};

int main()
{
   constexpr int x = 1;
   constexpr auto fib = combinator{
       [x] (auto const& self, int n) constexpr {
           if (n <= 1)
               return x;
           return self(n - 1) + self(n - 2);
       }
   };
   static_assert(fib(6) == 13 * x);
}
источник

CD

Constantine Drozdov in pro.algorithms
ну вот же они
источник

V🇺

Vladislav 🇺🇸🚜🇷🇺 in pro.algorithms
Constantine Drozdov
#include <utility>

template <typename T>
struct combinator {
   T t_;
   constexpr combinator(T&& t) : t_(std::forward<T>(t)) {}
   
   template <typename... Args>
   constexpr auto operator () (Args&&... args) const
       noexcept(noexcept(t_(*this, std::forward<Args>(args)...)))
       -> decltype(t_(*this, std::forward<Args>(args)...))
   {
       return t_(*this, std::forward<Args>(args)...);
   }
};

int main()
{
   constexpr int x = 1;
   constexpr auto fib = combinator{
       [x] (auto const& self, int n) constexpr {
           if (n <= 1)
               return x;
           return self(n - 1) + self(n - 2);
       }
   };
   static_assert(fib(6) == 13 * x);
}
так тут тоже лишний indirection, не?
источник

CD

Constantine Drozdov in pro.algorithms
Vladislav 🇺🇸🚜🇷🇺
так тут тоже лишний indirection, не?
источник

CD

Constantine Drozdov in pro.algorithms
с наивной реализацией не сравнивал
источник

CD

Constantine Drozdov in pro.algorithms
Vladislav 🇺🇸🚜🇷🇺
так тут тоже лишний indirection, не?
короче, оптимизатор сделает все пучком
источник

V🇺

Vladislav 🇺🇸🚜🇷🇺 in pro.algorithms
меня смущает что ответы разные
источник

CD

Constantine Drozdov in pro.algorithms
Vladislav 🇺🇸🚜🇷🇺
меня смущает что ответы разные
это еще одна причина не использовать function :)
как ты понимаешь, отрицательные фибоначчи не очень верны
источник

CD

Constantine Drozdov in pro.algorithms
std::function<int(int)>
источник

EZ

Evgeniy Zheltonozhskiy🇮🇱 in pro.algorithms
Vladislav 🇺🇸🚜🇷🇺
из скольки?
Из 5 очевидно
источник

V🇺

Vladislav 🇺🇸🚜🇷🇺 in pro.algorithms
Evgeniy Zheltonozhskiy🇮🇱
Из 5 очевидно
или из 100?
источник

V🇺

Vladislav 🇺🇸🚜🇷🇺 in pro.algorithms
что-то явно идет не так
https://wandbox.org/permlink/b61GqeZUI9vdqQ6D
источник

CD

Constantine Drozdov in pro.algorithms
а что изменилось?
источник

V🇺

Vladislav 🇺🇸🚜🇷🇺 in pro.algorithms
источник

CD

Constantine Drozdov in pro.algorithms
все в порядке, я же говорю, что это быстрая реализация :)
источник

V🇺

Vladislav 🇺🇸🚜🇷🇺 in pro.algorithms
Constantine Drozdov
все в порядке, я же говорю, что это быстрая реализация :)
быстрее явной рекурсивной функции?) чую подвох
источник

CD

Constantine Drozdov in pro.algorithms
Vladislav 🇺🇸🚜🇷🇺
быстрее явной рекурсивной функции?) чую подвох
там развертки отработали в компилере
источник

V🇺

Vladislav 🇺🇸🚜🇷🇺 in pro.algorithms
в шланге оно вообще в TL wandbox'а не укладывается
источник