diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2024-02-25 22:39:11 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-25 22:39:11 +0000 |
| commit | 0168c15c2a1aa0dbd37bd06f0e58086b6b5bbe96 (patch) | |
| tree | 3ec989b91d02d6c91510e603123a10b4d69c3919 | |
| parent | b435583acbc43e436964592b303abaac0e11d620 (diff) | |
| parent | 45554d7a00b41fefb9910984935a2d3f733bf0ba (diff) | |
| download | perlweeklychallenge-club-0168c15c2a1aa0dbd37bd06f0e58086b6b5bbe96.tar.gz perlweeklychallenge-club-0168c15c2a1aa0dbd37bd06f0e58086b6b5bbe96.tar.bz2 perlweeklychallenge-club-0168c15c2a1aa0dbd37bd06f0e58086b6b5bbe96.zip | |
Merge pull request #9642 from arnesom/branch-for-challenge-257
Arne Sommer
| -rw-r--r-- | challenge-257/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-257/arne-sommer/raku/ch-1.raku | 5 | ||||
| -rwxr-xr-x | challenge-257/arne-sommer/raku/ch-2.raku | 104 | ||||
| -rwxr-xr-x | challenge-257/arne-sommer/raku/reduced-row-dummy | 30 | ||||
| -rwxr-xr-x | challenge-257/arne-sommer/raku/reduced-row-echelon | 104 | ||||
| -rwxr-xr-x | challenge-257/arne-sommer/raku/smaller-than-bag | 17 | ||||
| -rwxr-xr-x | challenge-257/arne-sommer/raku/smaller-than-current | 5 | ||||
| -rwxr-xr-x | challenge-257/arne-sommer/raku/smaller-than-grep | 18 |
8 files changed, 284 insertions, 0 deletions
diff --git a/challenge-257/arne-sommer/blog.txt b/challenge-257/arne-sommer/blog.txt new file mode 100644 index 0000000000..e2a08b4335 --- /dev/null +++ b/challenge-257/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/currently-reduced.html diff --git a/challenge-257/arne-sommer/raku/ch-1.raku b/challenge-257/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..2465f4fc9a --- /dev/null +++ b/challenge-257/arne-sommer/raku/ch-1.raku @@ -0,0 +1,5 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems > 1 && all(@ints) ~~ Int); + +say "({ @ints.map({ @ints.grep( * < $_ ).elems }).join(", ") })"; diff --git a/challenge-257/arne-sommer/raku/ch-2.raku b/challenge-257/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..0c92a81410 --- /dev/null +++ b/challenge-257/arne-sommer/raku/ch-2.raku @@ -0,0 +1,104 @@ +#! /usr/bin/env raku + +unit sub MAIN ($string = "1 0 0 1 | 0 1 0 2 | 0 0 1 3", :v(:$verbose)); + +my $matrix = $string.split("|")>>.words>>.Int>>.Array; + +die "The rows must have the same size" unless [==] $matrix>>.elems; + +say + (rule1($matrix) && rule2($matrix) && rule3($matrix) && rule4($matrix)); + +sub rule1 ($matrix) +{ + for ^$matrix.elems -> $row-index + { + for $matrix[$row-index] -> $value + { + next if $value == 0; + last if $value == 1; + + say ": Falsified by rule 1 (on row $row-index)" if $verbose; + + return False; + } + } + + say ": Verified by rule 1" if $verbose; + + return True; +} + +sub rule2 ($matrix) +{ + my $ok = [>=] $matrix.map( { $_.all == 0 ?? 0 !! 1 }); + + say ": Falsified by rule 2" if $verbose && ! $ok; + say ": Verified by rule 2" if $verbose && $ok; + + return $ok; +} + +sub rule3 ($matrix) +{ + for ^($matrix.elems -1) -> $row-index + { + next if all($matrix[$row-index]) == 0; + next if all($matrix[$row-index + 1]) == 0; + + my $pos1 = get-one($matrix[$row-index]); + my $pos2 = get-one($matrix[$row-index +1]); + + if $pos1 >= $pos2 + { + say ": Falsified by rule 3 (Row $row-index Col $pos1 vs Row { $row-index + 1 } Col: $pos2" if $verbose; + return False; + } + } + + say ": Verified by rule 3" if $verbose; + return True; +} + +sub rule4 ($matrix) +{ + for ^$matrix.elems -> $row-index + { + next if all($matrix[$row-index]) == 0; + + for ^$matrix[$row-index].elems -> $col-index + { + next if $matrix[$row-index][$col-index] == 0; + unless $matrix[$row-index][$col-index] == 1 + { + say ": Falsified by rule 4 (First non-zero is not one; row $row-index Col: $col-index" if $verbose; + return False; + } + + my @col = $matrix[*;$col-index]; + my $col = @col.Bag; + + unless $col.keys.elems == 2 && $col{1} == 1 && $col{0} > 0 + { + say ": Falsified by rule 4 (row $row-index column $col-index)" if $verbose; + return False; + } + + last; + } + } + + say ": Verified by rule 4" if $verbose; + return True; +} + +sub get-one (@row) +{ + for ^@row.elems -> $index + { + return $index if @row[$index] == 1; + die "Not a leading 0" unless @row[$index] == 0; + } + die "No 1 in row"; +} + + diff --git a/challenge-257/arne-sommer/raku/reduced-row-dummy b/challenge-257/arne-sommer/raku/reduced-row-dummy new file mode 100755 index 0000000000..dec9aa2658 --- /dev/null +++ b/challenge-257/arne-sommer/raku/reduced-row-dummy @@ -0,0 +1,30 @@ +#! /usr/bin/env raku + +unit sub MAIN ($string = "1 0 0 1 | 0 1 0 2 | 0 0 1 3", :v(:$verbose)); + +my $matrix = $string.split("|")>>.words>>.Int>>.Array; + +die "The rows must have the same size" unless [==] $matrix>>.elems; + +say + (rule1($matrix) && rule2($matrix) && rule3($matrix) && rule4($matrix)); + +sub rule1 ($matrix) +{ + return True; +} + +sub rule2 ($matrix) +{ + return True; +} + +sub rule3 ($matrix) +{ + return True; +} + +sub rule4 ($matrix) +{ + return True; +} + diff --git a/challenge-257/arne-sommer/raku/reduced-row-echelon b/challenge-257/arne-sommer/raku/reduced-row-echelon new file mode 100755 index 0000000000..0c92a81410 --- /dev/null +++ b/challenge-257/arne-sommer/raku/reduced-row-echelon @@ -0,0 +1,104 @@ +#! /usr/bin/env raku + +unit sub MAIN ($string = "1 0 0 1 | 0 1 0 2 | 0 0 1 3", :v(:$verbose)); + +my $matrix = $string.split("|")>>.words>>.Int>>.Array; + +die "The rows must have the same size" unless [==] $matrix>>.elems; + +say + (rule1($matrix) && rule2($matrix) && rule3($matrix) && rule4($matrix)); + +sub rule1 ($matrix) +{ + for ^$matrix.elems -> $row-index + { + for $matrix[$row-index] -> $value + { + next if $value == 0; + last if $value == 1; + + say ": Falsified by rule 1 (on row $row-index)" if $verbose; + + return False; + } + } + + say ": Verified by rule 1" if $verbose; + + return True; +} + +sub rule2 ($matrix) +{ + my $ok = [>=] $matrix.map( { $_.all == 0 ?? 0 !! 1 }); + + say ": Falsified by rule 2" if $verbose && ! $ok; + say ": Verified by rule 2" if $verbose && $ok; + + return $ok; +} + +sub rule3 ($matrix) +{ + for ^($matrix.elems -1) -> $row-index + { + next if all($matrix[$row-index]) == 0; + next if all($matrix[$row-index + 1]) == 0; + + my $pos1 = get-one($matrix[$row-index]); + my $pos2 = get-one($matrix[$row-index +1]); + + if $pos1 >= $pos2 + { + say ": Falsified by rule 3 (Row $row-index Col $pos1 vs Row { $row-index + 1 } Col: $pos2" if $verbose; + return False; + } + } + + say ": Verified by rule 3" if $verbose; + return True; +} + +sub rule4 ($matrix) +{ + for ^$matrix.elems -> $row-index + { + next if all($matrix[$row-index]) == 0; + + for ^$matrix[$row-index].elems -> $col-index + { + next if $matrix[$row-index][$col-index] == 0; + unless $matrix[$row-index][$col-index] == 1 + { + say ": Falsified by rule 4 (First non-zero is not one; row $row-index Col: $col-index" if $verbose; + return False; + } + + my @col = $matrix[*;$col-index]; + my $col = @col.Bag; + + unless $col.keys.elems == 2 && $col{1} == 1 && $col{0} > 0 + { + say ": Falsified by rule 4 (row $row-index column $col-index)" if $verbose; + return False; + } + + last; + } + } + + say ": Verified by rule 4" if $verbose; + return True; +} + +sub get-one (@row) +{ + for ^@row.elems -> $index + { + return $index if @row[$index] == 1; + die "Not a leading 0" unless @row[$index] == 0; + } + die "No 1 in row"; +} + + diff --git a/challenge-257/arne-sommer/raku/smaller-than-bag b/challenge-257/arne-sommer/raku/smaller-than-bag new file mode 100755 index 0000000000..ae42e6dc69 --- /dev/null +++ b/challenge-257/arne-sommer/raku/smaller-than-bag @@ -0,0 +1,17 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems > 1 && all(@ints) ~~ Int, + :v(:$verbose)); + +my $bag = @ints>>.Int.Bag; +my $smaller = 0; +my %smaller; + +for $bag.keys.sort -> $key +{ + say ": $key: smaller: $smaller" if $verbose; + %smaller{$key} = $smaller; + $smaller += $bag{$key}; +} + +say "({ @ints.map({ %smaller{$_} }).join(", ") })"; diff --git a/challenge-257/arne-sommer/raku/smaller-than-current b/challenge-257/arne-sommer/raku/smaller-than-current new file mode 100755 index 0000000000..2465f4fc9a --- /dev/null +++ b/challenge-257/arne-sommer/raku/smaller-than-current @@ -0,0 +1,5 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems > 1 && all(@ints) ~~ Int); + +say "({ @ints.map({ @ints.grep( * < $_ ).elems }).join(", ") })"; diff --git a/challenge-257/arne-sommer/raku/smaller-than-grep b/challenge-257/arne-sommer/raku/smaller-than-grep new file mode 100755 index 0000000000..ac9c7ebfc1 --- /dev/null +++ b/challenge-257/arne-sommer/raku/smaller-than-grep @@ -0,0 +1,18 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems > 1 && all(@ints) ~~ Int, + :v(:$verbose)); + +my @count; + +for @ints -> $int +{ + my @smaller = @ints.grep: * < $int; + my $count = @smaller.elems; + + say ": $int - with $count smaller ({ @smaller.join(",") })" if $verbose; + + @count.push: $count; +} + +say "({ @count.join(", ") })"; |
