My omnium-gatherom of scripts and source code.
at main 63 lines 1.5 kB view raw
1#include "algs.hpp" 2#include <string> 3#include <vector> 4#include <format> 5#include <type_traits> 6#include <valarray> 7 8/* 9template <std::permutable I, std::sentinel_for<I> S> 10func zip(I f1, S l1, I f2, S l2) -> std::vector<std::pair<std::iter_value_t<I>, std::iter_value_t<I>>> 11{ 12 using II = std::pair<std::iter_value_t<I>, std::iter_value_t<I>>; 13 auto make_pair = [](auto x, auto y) { return std::make_pair(x, y); }; 14 auto concat = [](auto v, auto e) { return v.push_back(e), v; }; 15 auto out = std::vector<II>(); 16 return std::transform_reduce(f1, l1, f2, l2, out, concat, make_pair); 17} 18*/ 19 20template <std::size_t columns, std::size_t rows, typename T> 21[[nodiscard]] constexpr 22func transpose(std::span<T> m) -> std::span<T> 23{ 24 static_assert(m.size() % columns == 0); 25} 26 27auto main() noexcept -> int 28{ 29 auto even = [](auto x) { return x % 2 == 0; }; 30 auto v = std::vector(50, 0); 31 auto w = std::vector(25, 0); 32 33 ra::iota(v, 1); 34 auto f = v.begin(); 35 auto l = v.end(); 36 gather(f, l, v.begin() + 17, even); 37 print_range(v); 38 39 print('\n', "\n"); 40 41 ra::iota(v, 1); 42 f = v.begin(); 43 l = v.end(); 44 slide(f + 5, l - 40, v.begin() + 17); 45 print_range(v); 46 47 print('\n', "\n"); 48 49 ra::iota(v, 0); 50 ra::iota(w, 50); 51 auto f1 = v.begin(); 52 auto l1 = v.end(); 53 auto f2 = w.begin(); 54 auto l2 = w.end(); 55 auto o = intercalate(f1, l1, f2, l2); 56 print_range(o); print('\n', "\n"); 57 print_range(v); print('\n', "\n"); 58 print_range(w); print('\n', "\n"); 59 print(v.size(), "\n"); 60 61 62 return 0; 63}