diff options
| author | Flavio Poletti <flavio@polettix.it> | 2022-12-02 09:55:11 +0100 |
|---|---|---|
| committer | Flavio Poletti <flavio@polettix.it> | 2022-12-02 09:55:11 +0100 |
| commit | 75502ac1715e61c401fe81fa6ee61e303adece43 (patch) | |
| tree | 5ae5b4f53e9e1c58b5e1a4118834391b97a696f5 | |
| parent | c80093e548d1d73ed772b2f9fd2ff3ec77685745 (diff) | |
| download | perlweeklychallenge-club-75502ac1715e61c401fe81fa6ee61e303adece43.tar.gz perlweeklychallenge-club-75502ac1715e61c401fe81fa6ee61e303adece43.tar.bz2 perlweeklychallenge-club-75502ac1715e61c401fe81fa6ee61e303adece43.zip | |
Add polettix's solution to challenge-193
| -rw-r--r-- | challenge-193/polettix/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-193/polettix/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-193/polettix/perl/ch-1.pl | 22 | ||||
| -rw-r--r-- | challenge-193/polettix/perl/ch-2.pl | 41 | ||||
| -rw-r--r-- | challenge-193/polettix/raku/ch-1.raku | 14 | ||||
| -rw-r--r-- | challenge-193/polettix/raku/ch-2.raku | 26 |
6 files changed, 105 insertions, 0 deletions
diff --git a/challenge-193/polettix/blog.txt b/challenge-193/polettix/blog.txt new file mode 100644 index 0000000000..0b2b706946 --- /dev/null +++ b/challenge-193/polettix/blog.txt @@ -0,0 +1 @@ +https://etoobusy.polettix.it/2022/12/01/pwc193-binary-string/ diff --git a/challenge-193/polettix/blog1.txt b/challenge-193/polettix/blog1.txt new file mode 100644 index 0000000000..66fdf6372c --- /dev/null +++ b/challenge-193/polettix/blog1.txt @@ -0,0 +1 @@ +https://etoobusy.polettix.it/2022/12/02/pwc193-odd-string/ diff --git a/challenge-193/polettix/perl/ch-1.pl b/challenge-193/polettix/perl/ch-1.pl new file mode 100644 index 0000000000..793cf6e3b3 --- /dev/null +++ b/challenge-193/polettix/perl/ch-1.pl @@ -0,0 +1,22 @@ +#!/usr/bin/env perl +use v5.24; +use warnings; +use experimental 'signatures'; +no warnings 'experimental::signatures'; +use Math::BigInt; + +my $it = binary_strings_iterator(shift // 2); +while (defined(my $binary_string = $it->())) { + say $binary_string; +} + +sub binary_strings_iterator ($n) { + my $i = Math::BigInt->bzero; + return sub { + return unless defined $i; + my $raw = ($i++)->to_bin; + my $len = length $raw; + return $i = undef if $len > $n; + return ('0' x ($n - $len)) . $raw; + }; +} diff --git a/challenge-193/polettix/perl/ch-2.pl b/challenge-193/polettix/perl/ch-2.pl new file mode 100644 index 0000000000..18205168d0 --- /dev/null +++ b/challenge-193/polettix/perl/ch-2.pl @@ -0,0 +1,41 @@ +#!/usr/bin/env perl +use v5.24; +use warnings; +use experimental 'signatures'; +no warnings 'experimental::signatures'; + +my @strings = @ARGV ? @ARGV : qw< adc wzy abc >; +say odd_string(@strings); + +sub odd_string (@strings) { + my @pre = map { ord substr $_, 0, 1 } @strings; + for my $i (1 .. $#strings) { + my %string_for; + my $n_different = 0; + my @cur; + my $j = 0; + for my $string (@strings) { + my $delta = ord(substr $string, $i, 1) - $pre[$j++]; + if (! $n_different) { + $string_for{$delta} = $string; + ++$n_different; + } + elsif ($n_different == 1) { + if (exists $string_for{$delta}) { + $string_for{$delta} = []; + } + elsif (ref((values %string_for)[0])) { + return $string; + } + else { + $string_for{$delta} = $string; + ++$n_different; + } + } + elsif ($n_different == 2) { + delete $string_for{$delta}; + return((values %string_for)[0]); + } + } + } +} diff --git a/challenge-193/polettix/raku/ch-1.raku b/challenge-193/polettix/raku/ch-1.raku new file mode 100644 index 0000000000..54e6019138 --- /dev/null +++ b/challenge-193/polettix/raku/ch-1.raku @@ -0,0 +1,14 @@ +#!/usr/bin/env raku +use v6; +sub MAIN (Int:D $n where * > 0 = 2) { .put for binary-strings($n) } + +sub binary-strings (Int:D $n where * > 0) { + my $prefix = '0' x ($n - 1); + my $i = 0; + return gather loop { + my $raw = ($i++).base(2).Str; + my $len = $raw.chars; + last if $len > $n; + take ('0' x ($n - $len)) ~ $raw; + }; +} diff --git a/challenge-193/polettix/raku/ch-2.raku b/challenge-193/polettix/raku/ch-2.raku new file mode 100644 index 0000000000..8cfb526090 --- /dev/null +++ b/challenge-193/polettix/raku/ch-2.raku @@ -0,0 +1,26 @@ +#!/usr/bin/env raku +use v6; +sub MAIN (*@args) { + @args = <adc wzy abc> unless @args; + my %track; + for @args -> $string { + my $fp = fingerprint($string); + if %track.elems == 0 { %track{$fp} = $string } + elsif %track.elems == 1 { + if %track{$fp}:exists { %track{$fp} = '' } + elsif %track.values[0].chars { %track{$fp} = $string } + else { $string.put; return 0 } + } + else { + %track{$fp}:delete; + put %track.values[0]; + return 0; + } + } + say fingerprint(@args[0]); +} + +sub fingerprint ($string) { + my $reference = $string.substr(0, 1).ord; + return $string.comb.map({$_.ord - $reference}).join(' '); +} |
