diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-09-02 17:15:44 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-02 17:15:44 +0100 |
| commit | da8d3bf83591e1007844752e07eb7f56ee5305ca (patch) | |
| tree | 7c27d37161421a3f52de8812a7d822bc2a35a7b0 /challenge-180 | |
| parent | 08e116e40ba3cff85f73e507cbf7895e5ab9f755 (diff) | |
| parent | 653c651668bbd8e98bfe1546ac19e23bba8544ca (diff) | |
| download | perlweeklychallenge-club-da8d3bf83591e1007844752e07eb7f56ee5305ca.tar.gz perlweeklychallenge-club-da8d3bf83591e1007844752e07eb7f56ee5305ca.tar.bz2 perlweeklychallenge-club-da8d3bf83591e1007844752e07eb7f56ee5305ca.zip | |
Merge pull request #6684 from massa/massa/challenge180-bis
Nothing like implementing in another language...
Diffstat (limited to 'challenge-180')
| -rw-r--r-- | challenge-180/massa/cpp/CMakeLists.txt | 7 | ||||
| -rw-r--r-- | challenge-180/massa/cpp/ch-1.cc | 25 | ||||
| -rw-r--r-- | challenge-180/massa/cpp/ch-2.cc | 19 | ||||
| -rw-r--r-- | challenge-180/massa/raku/ch-1.raku | 5 |
4 files changed, 54 insertions, 2 deletions
diff --git a/challenge-180/massa/cpp/CMakeLists.txt b/challenge-180/massa/cpp/CMakeLists.txt new file mode 100644 index 0000000000..dc8ce5f7ef --- /dev/null +++ b/challenge-180/massa/cpp/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 2.8) + +project(ch-1) +SET(CMAKE_CXX_COMPILER "/usr/bin/clang++") +SET(CMAKE_CXX_STANDARD 20) +add_executable(${PROJECT_NAME} ch-1.cc) +add_executable(ch-2 ch-2.cc) diff --git a/challenge-180/massa/cpp/ch-1.cc b/challenge-180/massa/cpp/ch-1.cc new file mode 100644 index 0000000000..f6e69de7f2 --- /dev/null +++ b/challenge-180/massa/cpp/ch-1.cc @@ -0,0 +1,25 @@ + +#include <span> +#include <ranges> +#include <iostream> +#include <string_view> + +template <std::input_iterator It, std::sentinel_for<It> S> +It first_unique(It begin, S end) { + for( auto it = begin; it != end; ++it ) + if( std::find(begin, it, *it) == it && std::find(it+1, end, *it) == end ) + return it; + return end; +} + +auto first_unique(std::ranges::input_range auto range) { + return first_unique(begin(range), end(range)); +} + +int main(int argc, char **argv) { + for( std::string_view a: std::span { argv+1, argv+argc } ) { + auto u = first_unique(a); + std::cout << (u == std::end(a) ? -1 : u - std::begin(a)) << ' ' << a << '\n'; + } +} + diff --git a/challenge-180/massa/cpp/ch-2.cc b/challenge-180/massa/cpp/ch-2.cc new file mode 100644 index 0000000000..a878f2dbf5 --- /dev/null +++ b/challenge-180/massa/cpp/ch-2.cc @@ -0,0 +1,19 @@ + +#include <span> +#include <ranges> +#include <iostream> +#include <string_view> + +std::ostream& operator<<(std::ostream &o, std::ranges::range auto r) { + if( begin(r) == end(r) ) return o; + std::copy(begin(r), end(r)-1, std::ostream_iterator<decltype(*begin(r))>{o, ", "}); + return o << end(r)[-1]; +} + +int main(int argc, char **argv) { + if( argc <= 1 ) return 0; + int needle = std::stoi(argv[1]); + auto e = std::remove_if(argv+2, argv+argc, [=](auto x){ return std::stoi(x) <= needle; }); + std::cout << std::span{ argv+2, e } << '\n'; +} + diff --git a/challenge-180/massa/raku/ch-1.raku b/challenge-180/massa/raku/ch-1.raku index 3cfdb5916f..9e68e3eae4 100644 --- a/challenge-180/massa/raku/ch-1.raku +++ b/challenge-180/massa/raku/ch-1.raku @@ -1,4 +1,5 @@ use v6; -unit sub MAIN(*@args); -m/:my %visited; . :my $c = $¢; <!{ %visited{$c}++ }> <!before .* $c>/.&{ .pos // 0 - 1 }.say for @args +my regex first-unique { :my %visited; . :my $c = $¢; <!{ %visited{$c}++ }> <!before .* $c> } + +@*ARGS.map({ $^s ~~ &first-unique ?? $/.pos - 1 !! -1 })».say |
