From 4f1ac3bf456237ac35666981779c293da0810faf Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 5 Jul 2021 22:51:20 +0800 Subject: challenge 120, raku solutions --- challenge-120/feng-chang/raku/ch-1.raku | 5 +++++ challenge-120/feng-chang/raku/ch-2.raku | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100755 challenge-120/feng-chang/raku/ch-1.raku create mode 100755 challenge-120/feng-chang/raku/ch-2.raku diff --git a/challenge-120/feng-chang/raku/ch-1.raku b/challenge-120/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..0f2bbaee1d --- /dev/null +++ b/challenge-120/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +sub MAIN(UInt:D $N where * ≤ 255) { + put (($N +& 85) +< 1) +| (($N +& 170) +> 1); +} diff --git a/challenge-120/feng-chang/raku/ch-2.raku b/challenge-120/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..bbdc79ab09 --- /dev/null +++ b/challenge-120/feng-chang/raku/ch-2.raku @@ -0,0 +1,6 @@ +#!/bin/env raku + +sub MAIN(Str:D $T) { + $T ~~ m/^ (\d\d) ':' (\d\d) $/; + put abs(($0 % 12) * 30 - ($1 % 60) * 5.5); +} -- cgit From 26daa77158c34b6edecf059cd69a6f754310589e Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Wed, 7 Jul 2021 19:09:10 +0800 Subject: challenge 118, raku solutions --- challenge-119/feng-chang/raku/ch-1.raku | 5 +++++ challenge-119/feng-chang/raku/ch-2.raku | 12 ++++++++++++ 2 files changed, 17 insertions(+) create mode 100755 challenge-119/feng-chang/raku/ch-1.raku create mode 100755 challenge-119/feng-chang/raku/ch-2.raku diff --git a/challenge-119/feng-chang/raku/ch-1.raku b/challenge-119/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..5d2c207f55 --- /dev/null +++ b/challenge-119/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +sub MAIN(UInt:D $N where * ≤ 255) { + put $N.fmt('%02x').comb.reverse.join.parse-base(16); +} diff --git a/challenge-119/feng-chang/raku/ch-2.raku b/challenge-119/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..28cbbbaa08 --- /dev/null +++ b/challenge-119/feng-chang/raku/ch-2.raku @@ -0,0 +1,12 @@ +#!/bin/env raku + +sub MAIN(UInt:D $N where $N > 0) { + my Seq $trin = gather for 1..∞ -> $i { + my $n = $i.base(4); + next if $n ~~ m/0/; + next if $n ~~ m/11/; + take $n; + } + + put $trin[$N - 1]; +} -- cgit From 506a04ba5a638ccabdd683bf6b3460a23b98b415 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 19 Jul 2021 18:51:05 +0800 Subject: challenge 121/122, Raku solutions --- challenge-121/feng-chang/raku/ch-1.raku | 5 +++++ challenge-121/feng-chang/raku/ch-2.raku | 25 +++++++++++++++++++++++++ challenge-121/feng-chang/raku/d02.txt | 4 ++++ challenge-122/feng-chang/raku/ch-1.raku | 5 +++++ challenge-122/feng-chang/raku/ch-2.raku | 10 ++++++++++ 5 files changed, 49 insertions(+) create mode 100755 challenge-121/feng-chang/raku/ch-1.raku create mode 100755 challenge-121/feng-chang/raku/ch-2.raku create mode 100644 challenge-121/feng-chang/raku/d02.txt create mode 100755 challenge-122/feng-chang/raku/ch-1.raku create mode 100755 challenge-122/feng-chang/raku/ch-2.raku diff --git a/challenge-121/feng-chang/raku/ch-1.raku b/challenge-121/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..01e14e1b19 --- /dev/null +++ b/challenge-121/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +sub MAIN(UInt:D $m where 0 ≤ * ≤ 255, UInt:D $n where 1 ≤ * ≤ 8) { + put $m +^ (1 +< ($n - 1)); +} diff --git a/challenge-121/feng-chang/raku/ch-2.raku b/challenge-121/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..cde0da4f14 --- /dev/null +++ b/challenge-121/feng-chang/raku/ch-2.raku @@ -0,0 +1,25 @@ +#!/bin/env raku + +my $shortest-length; +my Array $shortest-path; + +sub distance(Array:D $TS, List:D $path) { + my Array:D $p = [0, |$path, 0]; + my $dist = [+] (^$TS.elems).map({ $TS[$p[$_];$p[$_+1]] }); + if $dist < $shortest-length { + $shortest-length = $dist; + $shortest-path = $p; + } + + $dist +} + +sub MAIN(Str:D $f where *.IO.e) { + my Array $TS .= new; + $f.IO.lines.map({ $TS.push($_.words».UInt.Array) }); + + $shortest-length = [+] $TS».max; + + put (1..^$TS.elems).permutations.map({ distance($TS, $_) }).min; + put $shortest-path.gist; +} diff --git a/challenge-121/feng-chang/raku/d02.txt b/challenge-121/feng-chang/raku/d02.txt new file mode 100644 index 0000000000..a389324b02 --- /dev/null +++ b/challenge-121/feng-chang/raku/d02.txt @@ -0,0 +1,4 @@ +0 5 2 7 +5 0 5 3 +3 1 0 6 +4 5 4 0 diff --git a/challenge-122/feng-chang/raku/ch-1.raku b/challenge-122/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..0e04b73ce8 --- /dev/null +++ b/challenge-122/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +sub MAIN(*@N) { + put (^@N.elems).map({ @N[0..$_].sum / ($_+1) }); +} diff --git a/challenge-122/feng-chang/raku/ch-2.raku b/challenge-122/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..f2a11cd67e --- /dev/null +++ b/challenge-122/feng-chang/raku/ch-2.raku @@ -0,0 +1,10 @@ +#!/bin/env raku + +sub score(UInt:D $N, Array:D $s) { + put $s if $N == 0; + score($N - 1, [|$s, 1]) if $N ≥ 1; + score($N - 2, [|$s, 2]) if $N ≥ 2; + score($N - 3, [|$s, 3]) if $N ≥ 3; +} + +sub MAIN(UInt:D $N) { score($N, []) } -- cgit From 2493f501976b93d1b918a680ed2fe60bad58d883 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Tue, 27 Jul 2021 14:37:47 +0800 Subject: Challenge 123, Raku solutions --- challenge-123/feng-chang/raku/ch-1.raku | 16 ++++++++++++++++ challenge-123/feng-chang/raku/ch-2.raku | 23 +++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100755 challenge-123/feng-chang/raku/ch-1.raku create mode 100755 challenge-123/feng-chang/raku/ch-2.raku diff --git a/challenge-123/feng-chang/raku/ch-1.raku b/challenge-123/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..d738e1cb39 --- /dev/null +++ b/challenge-123/feng-chang/raku/ch-1.raku @@ -0,0 +1,16 @@ +#!/bin/env raku + +my method is-ugly(Int:D $n: --> Bool:D) { + my UInt $m = $n; + + $m div= 2 while $m %% 2; + $m div= 3 while $m %% 3; + $m div= 5 while $m %% 5; + + so $m == 1 +} + +sub MAIN(UInt:D $n where * > 0) { + my @uglies = (1..∞).grep(*.&is-ugly); + put @uglies[$n-1]; +} diff --git a/challenge-123/feng-chang/raku/ch-2.raku b/challenge-123/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..30e459d0b4 --- /dev/null +++ b/challenge-123/feng-chang/raku/ch-2.raku @@ -0,0 +1,23 @@ +#!/bin/env raku + +sub dist2(Int:D \x1, Int:D \y1, Int:D \x2, Int:D \y2 --> UInt:D) { + (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) +} + +sub is-square( + Int:D \x1, Int:D \y1, + Int:D \x2, Int:D \y2, + Int:D \x3, Int:D \y3, + Int:D \x4, Int:D \y4 +--> Bool:D) { + [==] dist2(x1,y1,x2,y2), dist2(x2,y2,x3,y3), dist2(x3,y3,x4,y4), dist2(x4,y4,x1,y1) +} + +sub MAIN(*@N where *.elems == 8) { + put + [or] (1..3).permutations.map({ is-square( + @N[0], @N[1], + @N[.[0]*2], @N[.[0]*2+1], + @N[.[1]*2], @N[.[1]*2+1], + @N[.[2]*2], @N[.[2]*2+1] + ) }); +} -- cgit From c728f4162f1bdac42fe8e07eba1dcc4fb92d518b Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Thu, 5 Aug 2021 14:35:32 +0800 Subject: challenge #123, raku solutions --- challenge-124/feng-chang/raku/ch-1.raku | 9 +++++++++ challenge-124/feng-chang/raku/ch-2.raku | 17 +++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100755 challenge-124/feng-chang/raku/ch-1.raku create mode 100755 challenge-124/feng-chang/raku/ch-2.raku diff --git a/challenge-124/feng-chang/raku/ch-1.raku b/challenge-124/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..b4523b9220 --- /dev/null +++ b/challenge-124/feng-chang/raku/ch-1.raku @@ -0,0 +1,9 @@ +#!/bin/env raku + +for '14322222341000100'.comb».UInt -> $c { + given $c { + when 0 { put ' ^' } + when 1 { put ' ^^^^^' } + default { put ' ' x ($c - 2), '^', ' ' x (13 - $c * 2), '^' } + } +} diff --git a/challenge-124/feng-chang/raku/ch-2.raku b/challenge-124/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..3a0d747519 --- /dev/null +++ b/challenge-124/feng-chang/raku/ch-2.raku @@ -0,0 +1,17 @@ +#!/bin/env raku + +sub MAIN(*@N) { + my UInt $num = @N.elems div 2; + my Int $sum = @N.sum; + my UInt $min = @N.combinations($num).map({ abs($sum - 2 * $_.sum) }).min; + + @N.combinations($num).map({ + if abs($sum - 2 * $_.sum) == $min { + put $_.join(' '); + put (@N (-) $_).keys.join(' '); + put ' = ' x 3; + } + }); +} + +# todo: when size is even, output should be cut to half -- cgit From 2f49bb6081fe7aceecc37b213a1e9d6b6e802ca2 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Fri, 3 Sep 2021 11:20:46 +0800 Subject: 提交本地修改 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- challenge-126/feng-chang/raku/ch-1.raku | 5 +++++ challenge-126/feng-chang/raku/ch-2.raku | 22 ++++++++++++++++++++++ challenge-126/feng-chang/raku/input.txt | 5 +++++ 3 files changed, 32 insertions(+) create mode 100755 challenge-126/feng-chang/raku/ch-1.raku create mode 100755 challenge-126/feng-chang/raku/ch-2.raku create mode 100644 challenge-126/feng-chang/raku/input.txt diff --git a/challenge-126/feng-chang/raku/ch-1.raku b/challenge-126/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..aa39eff4cb --- /dev/null +++ b/challenge-126/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +sub MAIN(UInt:D $N) { + put (2..$N).grep(!*.comb.grep(1)).elems; +} diff --git a/challenge-126/feng-chang/raku/ch-2.raku b/challenge-126/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..e1dfc70f6e --- /dev/null +++ b/challenge-126/feng-chang/raku/ch-2.raku @@ -0,0 +1,22 @@ +#!/bin/env raku + +sub is-mine(Array:D $game, Int:D $row, Int:D $col, UInt:D $max-row, UInt:D $max-col --> Bool:D) { + return False unless 0 ≤ $row < $max-row; + return False unless 0 ≤ $col < $max-col; + $game[$row;$col] eq 'x' +} + +sub neibours(Array:D $game, UInt:D $row, UInt:D $col --> Str:D) { + $game[$row;$col] eq 'x' ?? 'x' !! ( + ( 1, -1), ( 1, 0), ( 1, 1), + ( 0, -1), ( 0, 1), + (-1, -1), (-1, 0), (-1, 1) + ).map({ is-mine($game, $row + .[0], $col + .[1], $game.elems, $game[0].elems) }).grep(?*).elems.Str +} + +sub MAIN(Str:D $f where $f.IO.e = 'input.txt') { + my Array $game = $f.IO.lines».comb.Array; + for ^$game.elems -> $row { + put (^$game[0].elems).map({ neibours($game, $row, .[0]) }).join(' '); + } +} diff --git a/challenge-126/feng-chang/raku/input.txt b/challenge-126/feng-chang/raku/input.txt new file mode 100644 index 0000000000..c7dd9f6980 --- /dev/null +++ b/challenge-126/feng-chang/raku/input.txt @@ -0,0 +1,5 @@ +x***x*xxxx +*********x +****x*x*x* +***xx***** +x***x****x -- cgit From a9b3cf3285adb7126b920a6fdc4315ac3ba6ddec Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Sat, 9 Oct 2021 18:27:06 +0800 Subject: challenge 133, raku solutions --- challenge-133/feng-chang/raku/ch-1.raku | 17 +++++++++++++++++ challenge-133/feng-chang/raku/ch-2.raku | 28 ++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100755 challenge-133/feng-chang/raku/ch-1.raku create mode 100755 challenge-133/feng-chang/raku/ch-2.raku diff --git a/challenge-133/feng-chang/raku/ch-1.raku b/challenge-133/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..1322a40a06 --- /dev/null +++ b/challenge-133/feng-chang/raku/ch-1.raku @@ -0,0 +1,17 @@ +#!/bin/env raku + +my method sqrt(UInt:D \N: --> UInt:D) { + my UInt $m; + my UInt $n = N; + + repeat { + $m = $n; + $n = ($m + N div $m) div 2; + } while $n < $m; + + $m +} + +sub MAIN(UInt:D \N where * > 0) { + put N.&sqrt; +} diff --git a/challenge-133/feng-chang/raku/ch-2.raku b/challenge-133/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..0f63b31841 --- /dev/null +++ b/challenge-133/feng-chang/raku/ch-2.raku @@ -0,0 +1,28 @@ +#!/bin/env raku + +sub facts(UInt:D \N where * > 1 --> Hash:D) { + my Int $m = N; + my Hash $F; + + for (^∞).grep: *.is-prime -> $p { + while ($m %% $p) { + ++$F{$p}; + $m div= $p; + } + + last if $m < $p * $p; + + LAST { ++$F{$m} if $m > 1 } + } + + $F +} + +sub is-smith-number(UInt:D \N --> Bool:D) { + return False if N.is-prime; + + my Hash $F = facts(N); + N.comb.sum == $F.keys.map({ $_.comb.sum * $F{$_} }).sum +} + +put (2..∞).grep({ is-smith-number($_) })[^10]; -- cgit From 1380439dbe2f374f3d7f3644570e80cf44eda5a9 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 11 Oct 2021 18:23:06 +0800 Subject: challenge 134, raku solutions --- challenge-134/feng-chang/raku/ch-1.raku | 3 +++ challenge-134/feng-chang/raku/ch-2.raku | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100755 challenge-134/feng-chang/raku/ch-1.raku create mode 100755 challenge-134/feng-chang/raku/ch-2.raku diff --git a/challenge-134/feng-chang/raku/ch-1.raku b/challenge-134/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..2808b4aa92 --- /dev/null +++ b/challenge-134/feng-chang/raku/ch-1.raku @@ -0,0 +1,3 @@ +#!/bin/env raku + +put (1_023_000_000 .. ∞).grep(*.comb.sort.unique.elems == 10)[^10]; diff --git a/challenge-134/feng-chang/raku/ch-2.raku b/challenge-134/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..052753ad39 --- /dev/null +++ b/challenge-134/feng-chang/raku/ch-2.raku @@ -0,0 +1,18 @@ +#!/bin/env raku + +sub MAIN(UInt:D \m, UInt:D \n) { + my @widths = (1..n)».&{ $_*m }».chars; + + put 'x'.fmt("%{ m.chars }s"), + ' |', + (1..n)».&{ $_.fmt(" %{ @widths[$_-1] }d") }.join; + put '-' x m.chars, + '-+', + (1..n)».&{ '-' x (@widths[$_-1] + 1) }.join; + + for 1..m -> $row { + put $row.fmt("%{ m.chars }d"), + ' |', + (1..n)».&{ ($_*$row).fmt(" %{ @widths[$_-1] }d") }.join; + } +} -- cgit From 1c423f3fee1b532ca610704ac3596e0ae1eeb912 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 11 Oct 2021 18:27:03 +0800 Subject: optimize "-" count --- challenge-134/feng-chang/raku/ch-2.raku | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/challenge-134/feng-chang/raku/ch-2.raku b/challenge-134/feng-chang/raku/ch-2.raku index 052753ad39..46a7e40b52 100755 --- a/challenge-134/feng-chang/raku/ch-2.raku +++ b/challenge-134/feng-chang/raku/ch-2.raku @@ -7,8 +7,8 @@ sub MAIN(UInt:D \m, UInt:D \n) { ' |', (1..n)».&{ $_.fmt(" %{ @widths[$_-1] }d") }.join; put '-' x m.chars, - '-+', - (1..n)».&{ '-' x (@widths[$_-1] + 1) }.join; + '-+', + '-' x (@widths.sum + n); for 1..m -> $row { put $row.fmt("%{ m.chars }d"), -- cgit From ded1adead24d65f5ba5de3c51476467b98b87253 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Tue, 12 Oct 2021 10:30:03 +0800 Subject: add more output --- challenge-134/feng-chang/raku/ch-2.raku | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/challenge-134/feng-chang/raku/ch-2.raku b/challenge-134/feng-chang/raku/ch-2.raku index 46a7e40b52..9e565720a9 100755 --- a/challenge-134/feng-chang/raku/ch-2.raku +++ b/challenge-134/feng-chang/raku/ch-2.raku @@ -2,6 +2,7 @@ sub MAIN(UInt:D \m, UInt:D \n) { my @widths = (1..n)».&{ $_*m }».chars; + my %terms; put 'x'.fmt("%{ m.chars }s"), ' |', @@ -13,6 +14,9 @@ sub MAIN(UInt:D \m, UInt:D \n) { for 1..m -> $row { put $row.fmt("%{ m.chars }d"), ' |', - (1..n)».&{ ($_*$row).fmt(" %{ @widths[$_-1] }d") }.join; + (1..n)».&{ my $i = $_*$row; ++%terms{$i}; $i.fmt(" %{ @widths[$_-1] }d") }.join; } + + put "\nDistinct Terms: ", %terms.keys».Int.sort.join(', '); + put 'Count: ', %terms.keys.elems; } -- cgit From 72f7e048afc69c0f2a596963e1ed6e274688a4f5 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Tue, 19 Oct 2021 19:35:54 +0800 Subject: challenge 135, raku solutions --- challenge-135/feng-chang/raku/ch-1.raku | 15 +++++++++++++++ challenge-135/feng-chang/raku/ch-2.raku | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100755 challenge-135/feng-chang/raku/ch-1.raku create mode 100755 challenge-135/feng-chang/raku/ch-2.raku diff --git a/challenge-135/feng-chang/raku/ch-1.raku b/challenge-135/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..4cc6c2919c --- /dev/null +++ b/challenge-135/feng-chang/raku/ch-1.raku @@ -0,0 +1,15 @@ +#!/bin/env raku + +=begin usage + + ./ch-1.raku -- -1234 + +=end usage + +sub MAIN(Int:D $N) { + given abs($N) { + when $_.chars %% 2 { put 'even number of digits'; exit } + when $_.chars < 3 { put 'too short'; exit } + default { put $_.substr($_.chars div 2 - 1, 3) } + } +} diff --git a/challenge-135/feng-chang/raku/ch-2.raku b/challenge-135/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..bc0c1f3da3 --- /dev/null +++ b/challenge-135/feng-chang/raku/ch-2.raku @@ -0,0 +1,19 @@ +#!/bin/env raku + +my method digit-value(Str:D $d where *.chars == 1 :) { + return $d.Int if '0' le $d le '9'; + return $d.ord - 'A'.ord if 'A' le $d le 'Z'; + die 'wrong digit: ', $d; +} + +sub check-digit(Str:D $sedol where *.chars == 6 --> UInt:D) { + state @weights = 1, 3, 1, 7, 3, 9, 1; + my @digits = $sedol.comb; + + 10 - (^6)».&{ @digits[$_].&digit-value * @weights[$_] }.sum % 10 +} + +sub MAIN(Str:D $S where *.chars == 7) { + my Str $s = uc($S); + put +so check-digit($s.substr(0, 6)) == $s.substr(6, 1).Int; +} -- cgit From bd9970453af9d7b5feca8a2be7646c30b358b1a5 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Wed, 20 Oct 2021 13:30:06 +0800 Subject: challenge 132, task #1, raku solution --- challenge-132/feng-chang/raku/ch-1.raku | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100755 challenge-132/feng-chang/raku/ch-1.raku diff --git a/challenge-132/feng-chang/raku/ch-1.raku b/challenge-132/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..cfdc079760 --- /dev/null +++ b/challenge-132/feng-chang/raku/ch-1.raku @@ -0,0 +1,11 @@ +#!/bin/env raku + +my method dstr(Date:D $dt: --> Str:D) { + $dt.Str.trans('-' => '/') +} + +sub MAIN(Str:D $birth-date-str) { + my Date \birth-date = $birth-date-str.trans('/' => '-').Date; + my UInt \age = now.Date - birth-date; + put "{ (birth-date - age).&dstr }, { (now.Date + age).&dstr }"; +} -- cgit From fb866d6d23493558f190fcdbd9a4ec165a6c1f98 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Wed, 20 Oct 2021 15:04:56 +0800 Subject: challenge 128, raku solutions --- challenge-128/feng-chang/raku/ch-1.raku | 17 +++++++++++++++++ challenge-128/feng-chang/raku/ch-2.raku | 22 ++++++++++++++++++++++ challenge-128/feng-chang/raku/in02.txt | 3 +++ challenge-128/feng-chang/raku/input.txt | 3 +++ challenge-128/feng-chang/raku/times.txt | 2 ++ challenge-128/feng-chang/raku/tm02.txt | 2 ++ 6 files changed, 49 insertions(+) create mode 100755 challenge-128/feng-chang/raku/ch-1.raku create mode 100755 challenge-128/feng-chang/raku/ch-2.raku create mode 100644 challenge-128/feng-chang/raku/in02.txt create mode 100644 challenge-128/feng-chang/raku/input.txt create mode 100644 challenge-128/feng-chang/raku/times.txt create mode 100644 challenge-128/feng-chang/raku/tm02.txt diff --git a/challenge-128/feng-chang/raku/ch-1.raku b/challenge-128/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..367dbb470d --- /dev/null +++ b/challenge-128/feng-chang/raku/ch-1.raku @@ -0,0 +1,17 @@ +#!/bin/env raku + +my method mat-size(List:D $coords where *.elems() == 4: --> UInt:D) { + ($coords[2] - $coords[0] + 1) * ($coords[3] - $coords[1] + 1) +} + +sub MAIN(Str:D $f where *.IO.e = 'input.txt') { + my Array @mat .= push($_.comb.Array) for $f.IO.lines; + + my @A = (^@mat.elems X ^@mat[0].elems X ^@mat.elems X ^@mat[0].elems) + .grep({ .[2] > .[0] and .[3] > .[1] }) + .grep({ @mat[.[0] .. .[2]; .[1] .. .[3]].all == 0 }); + my $max-size = @A.map(*.&mat-size).max; + + put "max size: $max-size"; + put @A.grep(*.&mat-size == $max-size).join("\n"); +} diff --git a/challenge-128/feng-chang/raku/ch-2.raku b/challenge-128/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..1050c46bfc --- /dev/null +++ b/challenge-128/feng-chang/raku/ch-2.raku @@ -0,0 +1,22 @@ +#!/bin/env raku + +subset TimeStr of Str where { $^s.match(/^ \d\d ':' \d\d $/) }; + +my method mytime(TimeStr:D $t: --> DateTime:D) { + state Date $date = Date.new(now); + my ($hour, $minute) = $t.split(':'); + + DateTime.new(:$date, :$hour, :$minute) +} + +sub MAIN(Str:D $f where *.IO.e = 'times.txt') { + my @lines = $f.IO.lines; + my @arrivals = @lines[0].words».&mytime; + my @departures = @lines[1].words».&mytime; + + (|@arrivals, |@departures).map(-> $t { + (^@arrivals).grep(-> $i { + @arrivals[$i] ≤ $t ≤ @departures[$i] + }).elems + }).max.put; +} diff --git a/challenge-128/feng-chang/raku/in02.txt b/challenge-128/feng-chang/raku/in02.txt new file mode 100644 index 0000000000..f8c64d269a --- /dev/null +++ b/challenge-128/feng-chang/raku/in02.txt @@ -0,0 +1,3 @@ +0011 +0001 +0010 diff --git a/challenge-128/feng-chang/raku/input.txt b/challenge-128/feng-chang/raku/input.txt new file mode 100644 index 0000000000..11c961ce70 --- /dev/null +++ b/challenge-128/feng-chang/raku/input.txt @@ -0,0 +1,3 @@ +100010 +110001 +100000 diff --git a/challenge-128/feng-chang/raku/times.txt b/challenge-128/feng-chang/raku/times.txt new file mode 100644 index 0000000000..3bdd72d4d3 --- /dev/null +++ b/challenge-128/feng-chang/raku/times.txt @@ -0,0 +1,2 @@ +11:20 14:30 +11:50 15:00 diff --git a/challenge-128/feng-chang/raku/tm02.txt b/challenge-128/feng-chang/raku/tm02.txt new file mode 100644 index 0000000000..a8ce4a8d1d --- /dev/null +++ b/challenge-128/feng-chang/raku/tm02.txt @@ -0,0 +1,2 @@ +10:20 11:00 11:10 12:20 16:20 19:00 +10:30 13:20 12:40 12:50 20:20 21:20 -- cgit From 6feeaa5f2efa5e3a0e27aa9610f0f686ea7c34a8 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Tue, 26 Oct 2021 15:20:25 +0800 Subject: challenge 136, raku solutions --- challenge-136/feng-chang/raku/ch-1.raku | 9 +++++++++ challenge-136/feng-chang/raku/ch-2.raku | 11 +++++++++++ 2 files changed, 20 insertions(+) create mode 100755 challenge-136/feng-chang/raku/ch-1.raku create mode 100755 challenge-136/feng-chang/raku/ch-2.raku diff --git a/challenge-136/feng-chang/raku/ch-1.raku b/challenge-136/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..c1cc9c1c7e --- /dev/null +++ b/challenge-136/feng-chang/raku/ch-1.raku @@ -0,0 +1,9 @@ +#!/bin/env raku + +multi sub is-two-friendly(0) { True } +multi sub is-two-friendly(2) { True } +multi sub is-two-friendly(UInt:D \n) { n %% 2 and is-two-friendly(n div 2) } + +sub MAIN(UInt:D \m, UInt:D \n) { + put +is-two-friendly(m gcd n); +} diff --git a/challenge-136/feng-chang/raku/ch-2.raku b/challenge-136/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..418370329a --- /dev/null +++ b/challenge-136/feng-chang/raku/ch-2.raku @@ -0,0 +1,11 @@ +#!/bin/env raku + +my @fibo = 1, 2, * + * ... *; + +sub fibo-floor(UInt:D \n --> UInt:D) { + (^n).grep({ @fibo[$_] ≤ n }).max +} + +sub MAIN(UInt:D \n) { + put @fibo[0 .. fibo-floor(n)].combinations.grep(*.sum == n).elems; +} -- cgit From 543bce7e79f1e0c39b2755dd52962b409c7c15d0 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 1 Nov 2021 16:40:13 +0800 Subject: challenge 137, raku solutions --- challenge-137/feng-chang/raku/ch-1.raku | 7 +++++++ challenge-137/feng-chang/raku/ch-2.raku | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100755 challenge-137/feng-chang/raku/ch-1.raku create mode 100755 challenge-137/feng-chang/raku/ch-2.raku diff --git a/challenge-137/feng-chang/raku/ch-1.raku b/challenge-137/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..b0de7b2725 --- /dev/null +++ b/challenge-137/feng-chang/raku/ch-1.raku @@ -0,0 +1,7 @@ +#!/bin/env raku + +put (1900..2100) + .grep({ Date("$_-12-31").week[1] == 53 }) + .rotor(5, :partial) + .map({ $_.join(', ') }) + .join(",\n"); diff --git a/challenge-137/feng-chang/raku/ch-2.raku b/challenge-137/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..7239d2cdb2 --- /dev/null +++ b/challenge-137/feng-chang/raku/ch-2.raku @@ -0,0 +1,21 @@ +#!/bin/env raku + +sub is-palindrome(UInt:D $n --> Bool:D) { $n.flip == $n } + +sub is-lynchel(UInt:D $n --> Bool:D) { + my UInt $m = $n; + my UInt $cnt; + + repeat { + return False if is-palindrome($m); + + $m += $m.flip; + ++$cnt; + } while $cnt < 500; + + ! is-palindrome($m) +} + +sub MAIN(UInt:D $n) { + put +is-lynchel($n); +} -- cgit From 2f83bdd6822c7c68c32ec6985b309e7f3612cf18 Mon Sep 17 00:00:00 2001 From: boblied Date: Wed, 3 Nov 2021 09:46:59 -0500 Subject: Challenge 1 solution, nested loops --- challenge-003/bob-lied/perl/ch-1.pl | 62 +++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 challenge-003/bob-lied/perl/ch-1.pl diff --git a/challenge-003/bob-lied/perl/ch-1.pl b/challenge-003/bob-lied/perl/ch-1.pl new file mode 100644 index 0000000000..024fbed8f1 --- /dev/null +++ b/challenge-003/bob-lied/perl/ch-1.pl @@ -0,0 +1,62 @@ +#!/usr/bin/env perl +# vim:set ts=4 sw=4 sts=4 et ai wm=0 nu: +#============================================================================= +# ch-1.pl +#============================================================================= +# Copyright (c) 2021, Bob Lied +#============================================================================= +# Perl Weekly challenge Week 3, Challenge #1 +# Create a script to generate 5-smooth numbers, whose prime divisors are less +# or equal to 5. They are also called Hamming/Regular/Ugly numbers. For more +# information, please check this wikipedia. +# "... numbers are called 5-smooth, because they can be characterized as +# having only 2, 3, or 5 as prime factors. ..." +#============================================================================= + +use strict; +use warnings; +use v5.32; + +use experimental qw/ signatures /; +no warnings "experimental::signatures"; + +use Getopt::Long; +my $Verbose = 0; +my $DoTest = 0; + +GetOptions("test" => \$DoTest, "verbose" => \$Verbose); +my $Max = shift; +$Max //= 100; + +sub fiveSmooth($max) +{ + my @smoothNumbers; + for ( my $mult2 = 1; $mult2 <= $max ; $mult2 *= 2 ) + { + for ( my $mult3 = $mult2 ; $mult3 <= $max ; $mult3 *= 3 ) + { + for ( my $mult5 = $mult3 ; $mult5 <= $max ; $mult5 *= 5 ) + { + push @smoothNumbers, $mult5 unless $mult5 == 1; # Not in order + } + } + } + return \@smoothNumbers; +} +exit(!runTest()) if $DoTest; +my $smoothList = fiveSmooth($Max); +say $_ foreach sort { $a <=> $b} @$smoothList; + +sub runTest +{ + use Test::More; + + is_deeply( fiveSmooth( 2), [ 2 ], "max = 2"); + is_deeply( fiveSmooth( 3), [ 2, 3 ], "max = 3"); + is_deeply( fiveSmooth( 5), [ 2, 3, 4, 5 ], "max = 5"); + is_deeply( fiveSmooth(10), [ 2, 3, 4, 5, 6, 8, 9, 10 ], "max = 10"); + is_deeply( fiveSmooth(20), [ 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20 ], "max = 20"); + + done_testing; +} + -- cgit From cbcf71957305d112b5a00d20ea40de4b8917984f Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Fri, 12 Nov 2021 19:41:05 +0800 Subject: challenge #137 #138, raku solutions --- challenge-118/feng-chang/raku/ch-1.raku | 6 +++ challenge-118/feng-chang/raku/ch-2.raku | 71 +++++++++++++++++++++++++++++++++ challenge-137/feng-chang/perl/ch-1.pl | 12 ++++++ challenge-138/feng-chang/raku/ch-1.raku | 5 +++ challenge-138/feng-chang/raku/ch-2.raku | 23 +++++++++++ 5 files changed, 117 insertions(+) create mode 100755 challenge-118/feng-chang/raku/ch-1.raku create mode 100755 challenge-118/feng-chang/raku/ch-2.raku create mode 100755 challenge-137/feng-chang/perl/ch-1.pl create mode 100755 challenge-138/feng-chang/raku/ch-1.raku create mode 100755 challenge-138/feng-chang/raku/ch-2.raku diff --git a/challenge-118/feng-chang/raku/ch-1.raku b/challenge-118/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..403b9cf5d6 --- /dev/null +++ b/challenge-118/feng-chang/raku/ch-1.raku @@ -0,0 +1,6 @@ +#!/bin/env raku + +sub MAIN(UInt:D $n) { + my Str $s = $n.base(2); + put +($s.flip eq $s); +} diff --git a/challenge-118/feng-chang/raku/ch-2.raku b/challenge-118/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..863ebee873 --- /dev/null +++ b/challenge-118/feng-chang/raku/ch-2.raku @@ -0,0 +1,71 @@ +#!/bin/env raku + +=begin puzzle + a b c d e f g h + 8 N * * * * * * * 8 + 7 * * * * * * * * 7 + 6 * * * * x * * * 6 + 5 * * * * * * * * 5 + 4 * * x * * * * * 4 + 3 * x * * * * * * 3 + 2 x x * * * * * * 2 + 1 * x * * * * * * 1 + a b c d e f g h + + 0 1 2 3 4 5 6 7 + 0 N * * * * * * * + 1 * * * * * * * * + 2 * * * * x * * * + 3 * * * * * * * * + 4 * * x * * * * * + 5 * x * * * * * * + 6 x x * * * * * * + 7 * x * * * * * * +=end puzzle + +my UInt $least-steps = 128; + +sub score(Array:D $pos, Set:D $targets, Set:D $unreached, Array:D $path --> UInt:D) { + my UInt $score = 10; + $score -= $path.grep($pos).elems; + if $pos (elem) $unreached { + ++$score; + ++$score if $pos (elem) $targets; + } + + $score +} + +sub walk(Array:D $pos, Set:D $targets, Set:D $unreached, Array:D $path) { + return if $path.elems > $least-steps; + + if $targets.keys == 0 { + put "{ $path.elems } steps: { $path.gist }"; + $least-steps = $path.elems if $path.elems < $least-steps; + return; + } + + my @candidates = gather + for (1,2), (1,-2), (-1,2), (-1,-2), (2,1), (2,-1), (-2,1), (-2,-1) -> ($r, $c) { + #put "«$r $c»"; + my Int $row = $pos[0] + $r; + next if $row < 0 or $row > 7; + my Int $col = $pos[1] + $c; + next if $col < 0 or $col > 7; + take [$row, $col].item; + } + my @score = @candidates.map({ score($_, $targets, $unreached, $path) }); + (^@candidates.elems).sort(??); + 排序怪怪的??? + + my Array $new-pos = ($row, $col).Array; + put "new pos { $new-pos.gist }"; + + my Array $new-path = $path.deepmap(*.clone); + $new-path.push($new-pos); + + walk($new-pos, $targets (-) ($new-pos).Set, $new-path); + } +} + +walk([0, 0], ([2,4], [4,2], [5,1], [6,0], [6,1], [7,1]).Set, ([0, 0].item).Array); diff --git a/challenge-137/feng-chang/perl/ch-1.pl b/challenge-137/feng-chang/perl/ch-1.pl new file mode 100755 index 0000000000..c4fdf11502 --- /dev/null +++ b/challenge-137/feng-chang/perl/ch-1.pl @@ -0,0 +1,12 @@ +#!/bin/env perl + +use Date::Manip; + +my @years = grep { UnixDate("$_-12-31", '%W') == 53 } 1900..2100; + +my $first = 1; +while (@years) { + $first ? $first = 0 : print ",\n"; + print join ', ', splice @years, 0, 5; +} +print "\n"; diff --git a/challenge-138/feng-chang/raku/ch-1.raku b/challenge-138/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..77b9791438 --- /dev/null +++ b/challenge-138/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +sub MAIN(UInt:D $year where 1000 ≤ * ≤ 9999) { + put ("$year-01-01".Date .. "$year-12-31".Date)».day-of-week.grep(0 < * < 6).elems; +} diff --git a/challenge-138/feng-chang/raku/ch-2.raku b/challenge-138/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..a342d06c1c --- /dev/null +++ b/challenge-138/feng-chang/raku/ch-2.raku @@ -0,0 +1,23 @@ +#!/bin/env raku + +sub combo(UInt:D $N, UInt:D $pat --> Array:D) { + my @digits = $N.comb».UInt; + my UInt $n = @digits.shift; + my @splits; + + for @digits Z $pat.fmt('%0' ~ $N.chars-1 ~ 'b').comb».UInt -> ($d, $j) { + if ?$j { + @splits.push($n); + $n = $d; + } else { + $n = $n*10 + $d; + } + } + @splits.push($n); + + @splits +} + +sub MAIN(UInt:D $N) { + put +((1 .. 2**($N.chars-1)-1).grep({ combo($N, $_).sum == sqrt($N) }).elems > 0); +} -- cgit From e18cbe10f444c1a25f238063c42b91a4b1fad9fa Mon Sep 17 00:00:00 2001 From: Abigail Date: Sun, 14 Nov 2021 21:21:21 +0100 Subject: More tests for week 138, part 1 --- challenge-138/abigail/t/ctest.ini | 3 +- challenge-138/abigail/t/input-1-2 | 400 +++++++++++++++++++++++++++++++++ challenge-138/abigail/t/output-1-2.exp | 400 +++++++++++++++++++++++++++++++++ 3 files changed, 802 insertions(+), 1 deletion(-) create mode 100644 challenge-138/abigail/t/input-1-2 create mode 100644 challenge-138/abigail/t/output-1-2.exp diff --git a/challenge-138/abigail/t/ctest.ini b/challenge-138/abigail/t/ctest.ini index 9897fb684c..286194d102 100644 --- a/challenge-138/abigail/t/ctest.ini +++ b/challenge-138/abigail/t/ctest.ini @@ -5,8 +5,9 @@ [names] 1-1 = Given Examples +1-2 = Full Gregorian Cycle 2-1 = Given Examples -[1-1/bc] +[1-1,1-2,2-1/bc] add_to_input = 0 diff --git a/challenge-138/abigail/t/input-1-2 b/challenge-138/abigail/t/input-1-2 new file mode 100644 index 0000000000..74cd19e671 --- /dev/null +++ b/challenge-138/abigail/t/input-1-2 @@ -0,0 +1,400 @@ +1600 +1601 +1602 +1603 +1604 +1605 +1606 +1607 +1608 +1609 +1610 +1611 +1612 +1613 +1614 +1615 +1616 +1617 +1618 +1619 +1620 +1621 +1622 +1623 +1624 +1625 +1626 +1627 +1628 +1629 +1630 +1631 +1632 +1633 +1634 +1635 +1636 +1637 +1638 +1639 +1640 +1641 +1642 +1643 +1644 +1645 +1646 +1647 +1648 +1649 +1650 +1651 +1652 +1653 +1654 +1655 +1656 +1657 +1658 +1659 +1660 +1661 +1662 +1663 +1664 +1665 +1666 +1667 +1668 +1669 +1670 +1671 +1672 +1673 +1674 +1675 +1676 +1677 +1678 +1679 +1680 +1681 +1682 +1683 +1684 +1685 +1686 +1687 +1688 +1689 +1690 +1691 +1692 +1693 +1694 +1695 +1696 +1697 +1698 +1699 +1700 +1701 +1702 +1703 +1704 +1705 +1706 +1707 +1708 +1709 +1710 +1711 +1712 +1713 +1714 +1715 +1716 +1717 +1718 +1719 +1720 +1721 +1722 +1723 +1724 +1725 +1726 +1727 +1728 +1729 +1730 +1731 +1732 +1733 +1734 +1735 +1736 +1737 +1738 +1739 +1740 +1741 +1742 +1743 +1744 +1745 +1746 +1747 +1748 +1749 +1750 +1751 +1752 +1753 +1754 +1755 +1756 +1757 +1758 +1759 +1760 +1761 +1762 +1763 +1764 +1765 +1766 +1767 +1768 +1769 +1770 +1771 +1772 +1773 +1774 +1775 +1776 +1777 +1778 +1779 +1780 +1781 +1782 +1783 +1784 +1785 +1786 +1787 +1788 +1789 +1790 +1791 +1792 +1793 +1794 +1795 +1796 +1797 +1798 +1799 +1800 +1801 +1802 +1803 +1804 +1805 +1806 +1807 +1808 +1809 +1810 +1811 +1812 +1813 +1814 +1815 +1816 +1817 +1818 +1819 +1820 +1821 +1822 +1823 +1824 +1825 +1826 +1827 +1828 +1829 +1830 +1831 +1832 +1833 +1834 +1835 +1836 +1837 +1838 +1839 +1840 +1841 +1842 +1843 +1844 +1845 +1846 +1847 +1848 +1849 +1850 +1851 +1852 +1853 +1854 +1855 +1856 +1857 +1858 +1859 +1860 +1861 +1862 +1863 +1864 +1865 +1866 +1867 +1868 +1869 +1870 +1871 +1872 +1873 +1874 +1875 +1876 +1877 +1878 +1879 +1880 +1881 +1882 +1883 +1884 +1885 +1886 +1887 +1888 +1889 +1890 +1891 +1892 +1893 +1894 +1895 +1896 +1897 +1898 +1899 +1900 +1901 +1902 +1903 +1904 +1905 +1906 +1907 +1908 +1909 +1910 +1911 +1912 +1913 +1914 +1915 +1916 +1917 +1918 +1919 +1920 +1921 +1922 +1923 +1924 +1925 +1926 +1927 +1928 +1929 +1930 +1931 +1932 +1933 +1934 +1935 +1936 +1937 +1938 +1939 +1940 +1941 +1942 +1943 +1944 +1945 +1946 +1947 +1948 +1949 +1950 +1951 +1952 +1953 +1954 +1955 +1956 +1957 +1958 +1959 +1960 +1961 +1962 +1963 +1964 +1965 +1966 +1967 +1968 +1969 +1970 +1971 +1972 +1973 +1974 +1975 +1976 +1977 +1978 +1979 +1980 +1981 +1982 +1983 +1984 +1985 +1986 +1987 +1988 +1989 +1990 +1991 +1992 +1993 +1994 +1995 +1996 +1997 +1998 +1999 diff --git a/challenge-138/abigail/t/output-1-2.exp b/challenge-138/abigail/t/output-1-2.exp new file mode 100644 index 0000000000..b0726e7b49 --- /dev/null +++ b/challenge-138/abigail/t/output-1-2.exp @@ -0,0 +1,400 @@ +260 +261 +261 +261 +262 +260 +260 +261 +262 +261 +261 +260 +261 +261 +261 +261 +261 +260 +261 +261 +262 +261 +260 +260 +262 +261 +261 +261 +260 +261 +261 +261 +262 +260 +260 +261 +262 +261 +261 +260 +261 +261 +261 +261 +261 +260 +261 +261 +262 +261 +260 +260 +262 +261 +261 +261 +260 +261 +261 +261 +262 +260 +260 +261 +262 +261 +261 +260 +261 +261 +261 +261 +261 +260 +261 +261 +262 +261 +260 +260 +262 +261 +261 +261 +260 +261 +261 +261 +262 +260 +260 +261 +262 +261 +261 +260 +261 +261 +261 +261 +261 +260 +260 +261 +262 +261 +261 +260 +261 +261 +261 +261 +261 +260 +261 +261 +262 +261 +260 +260 +262 +261 +261 +261 +260 +261 +261 +261 +262 +260 +260 +261 +262 +261 +261 +260 +261 +261 +261 +261 +261 +260 +261 +261 +262 +261 +260 +260 +262 +261 +261 +261 +260 +261 +261 +261 +262 +260 +260 +261 +262 +261 +261 +260 +261 +261 +261 +261 +261 +260 +261 +261 +262 +261 +260 +260 +262 +261 +261 +261 +260 +261 +261 +261 +262 +260 +260 +261 +262 +261 +261 +260 +261 +261 +261 +261 +261 +260 +261 +261 +261 +261 +261 +260 +261 +261 +261 +261 +261 +260 +261 +261 +262 +261 +260 +260 +262 +261 +261 +261 +260 +261 +261 +261 +262 +260 +260 +261 +262 +261 +261 +260 +261 +261 +261 +261 +261 +260 +261 +261 +262 +261 +260 +260 +262 +261 +261 +261 +260 +261 +261 +261 +262 +260 +260 +261 +262 +261 +261 +260 +261 +261 +261 +261 +261 +260 +261 +261 +262 +261 +260 +260 +262 +261 +261 +261 +260 +261 +261 +261 +262 +260 +260 +261 +262 +261 +261 +260 +261 +261 +261 +261 +261 +260 +261 +261 +262 +261 +260 +260 +261 +261 +261 +261 +261 +260 +261 +261 +262 +261 +260 +260 +262 +261 +261 +261 +260 +261 +261 +261 +262 +260 +260 +261 +262 +261 +261 +260 +261 +261 +261 +261 +261 +260 +261 +261 +262 +261 +260 +260 +262 +261 +261 +261 +260 +261 +261 +261 +262 +260 +260 +261 +262 +261 +261 +260 +261 +261 +261 +261 +261 +260 +261 +261 +262 +261 +260 +260 +262 +261 +261 +261 +260 +261 +261 +261 +262 +260 +260 +261 +262 +261 +261 +260 +261 +261 +261 +261 +261 +260 +261 +261 +262 +261 +260 +260 +262 +261 +261 +261 -- cgit From 89a58596b73b0615f7e68bcffff597542060e678 Mon Sep 17 00:00:00 2001 From: Abigail Date: Sun, 14 Nov 2021 21:21:48 +0100 Subject: Fix lookup table --- challenge-138/abigail/awk/ch-1.awk | 2 +- challenge-138/abigail/bash/ch-1.sh | 2 +- challenge-138/abigail/bc/ch-1.bc | 12 ++++++------ challenge-138/abigail/c/ch-1.c | 4 ++-- challenge-138/abigail/go/ch-1.go | 4 ++-- challenge-138/abigail/java/ch-1.java | 4 ++-- challenge-138/abigail/lua/ch-1.lua | 4 ++-- challenge-138/abigail/node/ch-1.js | 4 ++-- challenge-138/abigail/pascal/ch-1.p | 4 ++-- challenge-138/abigail/perl/ch-1.pl | 18 +++++++++--------- challenge-138/abigail/python/ch-1.py | 4 ++-- challenge-138/abigail/r/ch-1.r | 9 +++++++-- challenge-138/abigail/ruby/ch-1.rb | 4 ++-- challenge-138/abigail/scheme/ch-1.scm | 4 ++-- challenge-138/abigail/tcl/ch-1.tcl | 4 ++-- 15 files changed, 44 insertions(+), 39 deletions(-) diff --git a/challenge-138/abigail/awk/ch-1.awk b/challenge-138/abigail/awk/ch-1.awk index b60e858f5e..b201f1f4df 100644 --- a/challenge-138/abigail/awk/ch-1.awk +++ b/challenge-138/abigail/awk/ch-1.awk @@ -9,7 +9,7 @@ # BEGIN { - split ("261 261 260 260 261 261 261 262 262 261 260 261 262 262", \ + split ("261 260 260 261 261 261 261 262 261 260 261 262 262 262", \ lookup, " ") SUNDAY = 0 MONDAY = 1 diff --git a/challenge-138/abigail/bash/ch-1.sh b/challenge-138/abigail/bash/ch-1.sh index 982392620d..a9141ac750 100644 --- a/challenge-138/abigail/bash/ch-1.sh +++ b/challenge-138/abigail/bash/ch-1.sh @@ -18,7 +18,7 @@ THURSDAY=4 FRIDAY=5 SATURDAY=6 -LOOKUP=(261 261 260 260 261 261 261 262 262 261 260 261 262 262) +LOOKUP=(261 260 260 261 261 261 261 262 261 260 261 262 262 262) DDVALS=($TUESDAY $SUNDAY $FRIDAY $WEDNESDAY) function doomsday () { diff --git a/challenge-138/abigail/bc/ch-1.bc b/challenge-138/abigail/bc/ch-1.bc index 454cb60728..0f90b4339d 100644 --- a/challenge-138/abigail/bc/ch-1.bc +++ b/challenge-138/abigail/bc/ch-1.bc @@ -15,17 +15,17 @@ friday = 5 saturday = 6 lookup [ 0] = 261 -lookup [ 1] = 261 +lookup [ 1] = 260 lookup [ 2] = 260 -lookup [ 3] = 260 +lookup [ 3] = 261 lookup [ 4] = 261 lookup [ 5] = 261 lookup [ 6] = 261 lookup [ 7] = 262 -lookup [ 8] = 262 -lookup [ 9] = 261 -lookup [10] = 260 -lookup [11] = 261 +lookup [ 8] = 261 +lookup [ 9] = 260 +lookup [10] = 261 +lookup [11] = 262 lookup [12] = 262 lookup [13] = 262 diff --git a/challenge-138/abigail/c/ch-1.c b/challenge-138/abigail/c/ch-1.c index 7883dc9a0f..3250115c5f 100644 --- a/challenge-138/abigail/c/ch-1.c +++ b/challenge-138/abigail/c/ch-1.c @@ -18,8 +18,8 @@ # define FRIDAY 5 # define SATURDAY 6 -int lookup [] = {261, 261, 260, 260, 261, 261, 261, - 262, 262, 261, 260, 261, 262, 262}; +int lookup [] = {261, 260, 260, 261, 261, 261, 261, + 262, 261, 260, 261, 262, 262, 262}; int anchors [] = {TUESDAY, SUNDAY, FRIDAY, WEDNESDAY}; int doomsday (int year) { diff --git a/challenge-138/abigail/go/ch-1.go b/challenge-138/abigail/go/ch-1.go index e86ea3fbb7..3fd74bc38f 100644 --- a/challenge-138/abigail/go/ch-1.go +++ b/challenge-138/abigail/go/ch-1.go @@ -21,8 +21,8 @@ const FRIDAY = 5 const SATURDAY = 6 var lookup = [2] [7] int { - {261, 261, 260, 260, 261, 261, 261}, - {262, 262, 261, 260, 261, 262, 262}, + {261, 260, 260, 261, 261, 261, 261}, + {262, 261, 260, 261, 262, 262, 262}, } var anchors = [4] int {TUESDAY, SUNDAY, FRIDAY, WEDNESDAY} diff --git a/challenge-138/abigail/java/ch-1.java b/challenge-138/abigail/java/ch-1.java index b4aff34076..41378a448c 100644 --- a/challenge-138/abigail/java/ch-1.java +++ b/challenge-138/abigail/java/ch-1.java @@ -10,8 +10,8 @@ import java.util.*; public class ch1 { static int [] [] lookup = { - {261, 261, 260, 260, 261, 261, 261}, - {262, 262, 261, 260, 261, 262, 262}, + {261, 260, 260, 261, 261, 261, 261}, + {262, 261, 260, 261, 262, 262, 262}, }; public static final int SUNDAY = 0; diff --git a/challenge-138/abigail/lua/ch-1.lua b/challenge-138/abigail/lua/ch-1.lua index 5f61cb3ec6..deae0602cf 100644 --- a/challenge-138/abigail/lua/ch-1.lua +++ b/challenge-138/abigail/lua/ch-1.lua @@ -17,8 +17,8 @@ local FRIDAY = 5 local SATURDAY = 6 local lookup = { - {261, 261, 260, 260, 261, 261, 261}, - {262, 262, 261, 260, 261, 262, 262}, + {261, 260, 260, 261, 261, 261, 261}, + {262, 261, 260, 261, 262, 262, 262}, } local anchors = {TUESDAY, SUNDAY, FRIDAY, WEDNESDAY} diff --git a/challenge-138/abigail/node/ch-1.js b/challenge-138/abigail/node/ch-1.js index b969a761ef..6de9bd9641 100644 --- a/challenge-138/abigail/node/ch-1.js +++ b/challenge-138/abigail/node/ch-1.js @@ -17,8 +17,8 @@ let FRIDAY = 5 let SATURDAY = 6 let lookup = [ - [261, 261, 260, 260, 261, 261, 261], - [262, 262, 261, 260, 261, 262, 262], + [261, 260, 260, 261, 261, 261, 261], + [262, 261, 260, 261, 262, 262, 262], ] function doomsday (year) { diff --git a/challenge-138/abigail/pascal/ch-1.p b/challenge-138/abigail/pascal/ch-1.p index 594c76f307..d44b7c6124 100644 --- a/challenge-138/abigail/pascal/ch-1.p +++ b/challenge-138/abigail/pascal/ch-1.p @@ -22,8 +22,8 @@ var TUESDAY, SUNDAY, FRIDAY, WEDNESDAY ); lookup: Array [0 .. 1, 0 .. 6] of Integer = ( - (261, 261, 260, 260, 261, 261, 261), - (262, 262, 261, 260, 261, 262, 262) + (261, 260, 260, 261, 261, 261, 261), + (262, 261, 260, 261, 262, 262, 262) ); year: Integer; diff --git a/challenge-138/abigail/perl/ch-1.pl b/challenge-138/abigail/perl/ch-1.pl index eae1bea355..d2667e6131 100644 --- a/challenge-138/abigail/perl/ch-1.pl +++ b/challenge-138/abigail/perl/ch-1.pl @@ -45,18 +45,18 @@ use experimental 'lexical_subs'; # +----------------+-------+----------+-------+----------+ # | Doomsday value | Jan 1 | Workdays | Jan 1 | Workdays | # +----------------+-------+----------+-------+----------+ -# | 0 | Thu | 261 | Wed | 262 | -# | 1 | Fri | 261 | Thu | 262 | -# | 2 | Sat | 260 | Fri | 261 | -# | 3 | Sun | 260 | Sat | 260 | -# | 4 | Mon | 261 | Sun | 261 | -# | 5 | Tue | 261 | Mon | 262 | -# | 6 | Wed | 261 | Tue | 262 | +# | 0 | Fri | 261 | Thu | 262 | +# | 1 | Sat | 260 | Fri | 261 | +# | 2 | Sun | 260 | Sat | 260 | +# | 3 | Mon | 261 | Sun | 261 | +# | 4 | Tue | 261 | Mon | 262 | +# | 5 | Wed | 261 | Tue | 262 | +# | 6 | Thu | 261 | Wed | 262 | # +----------------+-------+----------+-------+----------+ my @lookup = ( - [261, 261, 260, 260, 261, 261, 261], # Regular years - [262, 262, 261, 260, 261, 262, 262], # Leap years + [261, 260, 260, 261, 261, 261, 261], # Regular years + [262, 261, 260, 261, 262, 262, 262], # Leap years ); my $SUNDAY = 0; diff --git a/challenge-138/abigail/python/ch-1.py b/challenge-138/abigail/python/ch-1.py index e2cb189de3..c503455f63 100644 --- a/challenge-138/abigail/python/ch-1.py +++ b/challenge-138/abigail/python/ch-1.py @@ -19,8 +19,8 @@ FRIDAY = 5 SATURDAY = 6 lookup = [ - [261, 261, 260, 260, 261, 261, 261], # Regular years - [262, 262, 261, 260, 261, 262, 262], # Leap years + [261, 260, 260, 261, 261, 261, 261], # Regular years + [262, 261, 260, 261, 262, 262, 262], # Leap years ] diff --git a/challenge-138/abigail/r/ch-1.r b/challenge-138/abigail/r/ch-1.r index 8d20a7a641..a745844003 100644 --- a/challenge-138/abigail/r/ch-1.r +++ b/challenge-138/abigail/r/ch-1.r @@ -14,8 +14,13 @@ THURSDAY <- 4 FRIDAY <- 5 SATURDAY <- 6 -lookup <- array (c (261, 261, 260, 260, 261, 261, 261, - 262, 262, 261, 260, 261, 262, 262), dim = c (2, 7)) +lookup <- array (c (261, 262, + 260, 261, + 260, 260, + 261, 261, + 261, 262, + 261, 262, + 261, 262), dim = c (2, 7)) anchors <- c (TUESDAY, SUNDAY, FRIDAY, WEDNESDAY) diff --git a/challenge-138/abigail/ruby/ch-1.rb b/challenge-138/abigail/ruby/ch-1.rb index 2489b2c18b..07066ed0b9 100644 --- a/challenge-138/abigail/ruby/ch-1.rb +++ b/challenge-138/abigail/ruby/ch-1.rb @@ -9,8 +9,8 @@ # lookup = [ - [261, 261, 260, 260, 261, 261, 261], - [262, 262, 261, 260, 261, 262, 262], + [261, 260, 260, 261, 261, 261, 261], + [262, 261, 260, 261, 262, 262, 262], ] $sunday = 0 diff --git a/challenge-138/abigail/scheme/ch-1.scm b/challenge-138/abigail/scheme/ch-1.scm index 682a842a4f..ce31c6699f 100644 --- a/challenge-138/abigail/scheme/ch-1.scm +++ b/challenge-138/abigail/scheme/ch-1.scm @@ -6,8 +6,8 @@ ;;; Run as: guile --no-auto-compile ch-1.scm ;;; -(define lookup (list (list 261 261 260 260 261 261 261) - (list 262 262 261 260 261 262 262))) +(define lookup (list (list 261 260 260 261 261 261 261) + (list 262 261 260 261 262 262 262))) (define SUNDAY 0) (define MONDAY 1) diff --git a/challenge-138/abigail/tcl/ch-1.tcl b/challenge-138/abigail/tcl/ch-1.tcl index 7e613636bd..67e7e73872 100644 --- a/challenge-138/abigail/tcl/ch-1.tcl +++ b/challenge-138/abigail/tcl/ch-1.tcl @@ -6,8 +6,8 @@ # Run as: tclsh ch-1.tcl < input-file # -set lookup [list [list 261 261 260 260 261 261 261] \ - [list 262 262 261 260 261 262 262]] +set lookup [list [list 261 260 260 261 261 261 261] \ + [list 262 261 260 261 262 262 262]] set SUNDAY 0 set MONDAY 1 -- cgit From 45fce56e0db6a1ba2e639766439cf416136c0929 Mon Sep 17 00:00:00 2001 From: Abigail Date: Sun, 14 Nov 2021 21:41:18 +0100 Subject: Use defaults --- challenge-138/abigail/perl/ch-1.pl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/challenge-138/abigail/perl/ch-1.pl b/challenge-138/abigail/perl/ch-1.pl index d2667e6131..9f67cdf720 100644 --- a/challenge-138/abigail/perl/ch-1.pl +++ b/challenge-138/abigail/perl/ch-1.pl @@ -71,7 +71,7 @@ my $SATURDAY = 6; # Given a year, return its "Doomsday" value. # 0 -> Sunday, 6 -> Saturday # -sub doomsday ($year) { +sub doomsday ($year = $_) { use integer; my $anchor = ($TUESDAY, $SUNDAY, $FRIDAY, $WEDNESDAY) [($year / 100) % 4]; my $y = $year % 100; @@ -79,11 +79,11 @@ sub doomsday ($year) { $doomsday; } -sub is_leap ($year) { +sub is_leap ($year = $_) { ($year % 400 == 0) || ($year % 4 == 0) && ($year % 100 != 0) ? 1 : 0 } while (<>) { - say $lookup [is_leap $_] [doomsday $_] + say $lookup [is_leap] [doomsday] } -- cgit From 9fde7fd6445e2d9fbb60c8da8501f01eeca86822 Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Sun, 14 Nov 2021 22:15:50 +0000 Subject: leading zeros are okay --- challenge-138/mark-anderson/raku/ch-2.raku | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/challenge-138/mark-anderson/raku/ch-2.raku b/challenge-138/mark-anderson/raku/ch-2.raku index 9b43a7edb6..b636e94a03 100644 --- a/challenge-138/mark-anderson/raku/ch-2.raku +++ b/challenge-138/mark-anderson/raku/ch-2.raku @@ -17,9 +17,7 @@ sub split-number($n) { for terms($n.chars) { - my @a = $n.comb.rotor($_); - next if first { .elems > 1 and .head == 0 }, @a; - return 1 if @a.map(*.join).sum == $n.sqrt; + return 1 if $n.comb.rotor($_).map(*.join).sum == $n.sqrt; } return 0; -- cgit From 420d37bae1496444e7c4fd57963982ae159f06b8 Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Sun, 14 Nov 2021 22:46:01 +0000 Subject: minor edit --- challenge-138/mark-anderson/raku/ch-1.raku | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-138/mark-anderson/raku/ch-1.raku b/challenge-138/mark-anderson/raku/ch-1.raku index 91c1424e51..f49e5bf4d0 100644 --- a/challenge-138/mark-anderson/raku/ch-1.raku +++ b/challenge-138/mark-anderson/raku/ch-1.raku @@ -18,6 +18,6 @@ sub workdays($year) my $a := [ Nil, 261, 261, 261, 261, 261, 260, 260 ], [ Nil, 262, 262, 262, 262, 261, 260, 261 ]; - my $dt = Date.new($year, 1, 1); + my $dt := Date.new($year, 1, 1); $a[ +$dt.is-leap-year ][ $dt.day-of-week ]; } -- cgit From 82aacb0fa599e5b4214553f91f223c0871d15826 Mon Sep 17 00:00:00 2001 From: Util Date: Sun, 14 Nov 2021 17:27:33 -0600 Subject: Add Raku, Perl, and C solutions for #138 by Bruce Gray --- challenge-138/bruce-gray/blog.txt | 1 + challenge-138/bruce-gray/c/ch-2.c | 474 ++++++++++++++++++++++++++++++++ challenge-138/bruce-gray/perl/ch-1.pl | 32 +++ challenge-138/bruce-gray/perl/ch-2.pl | 78 ++++++ challenge-138/bruce-gray/raku/ch-1.raku | 24 ++ challenge-138/bruce-gray/raku/ch-2.raku | 48 ++++ 6 files changed, 657 insertions(+) create mode 100644 challenge-138/bruce-gray/blog.txt create mode 100644 challenge-138/bruce-gray/c/ch-2.c create mode 100644 challenge-138/bruce-gray/perl/ch-1.pl create mode 100644 challenge-138/bruce-gray/perl/ch-2.pl create mode 100644 challenge-138/bruce-gray/raku/ch-1.raku create mode 100644 challenge-138/bruce-gray/raku/ch-2.raku diff --git a/challenge-138/bruce-gray/blog.txt b/challenge-138/bruce-gray/blog.txt new file mode 100644 index 0000000000..57f75a1ee3 --- /dev/null +++ b/challenge-138/bruce-gray/blog.txt @@ -0,0 +1 @@ +http://blogs.perl.org/users/bruce_gray/2021/11/twc-138-partition-free-weekends.html diff --git a/challenge-138/bruce-gray/c/ch-2.c b/challenge-138/bruce-gray/c/ch-2.c new file mode 100644 index 0000000000..083807a365 --- /dev/null +++ b/challenge-138/bruce-gray/c/ch-2.c @@ -0,0 +1,474 @@ +#include +#include + +/* +gcc -Wall -O3 c/ch-2.c + +Running with numeric command-line params: +./a.out 36 1028956744 1028956743 1028956745 + 36 : 1 + 1028956744 : 1 + 1028956743 : 0 + 1028956745 : 0 + +Run with no parameters to auto-test (runs in < 1 second): +./a.out + All 3200 tests (through 1028956744) of known-good numbers returned True as expected + All 6223 tests (through 1028956744) of known-good numbers ±1 returned False as expected + +Run with a dash parameters to generate the all perfect-square numbers that can_partition_to_square +from 0 to 1 million, which is a perfect match for https://oeis.org/A104113/b104113.txt : +./a.out - + 1 0 + 2 1 + 3 81 + ... + 406 999982000081 + 407 999998000001 + 408 1000000000000 + +Note that this program does not even try to embrace the "you give me a perfect square, +and I will try to partition to its root" input that is specified in the Task. +This is C! We are only here for performance! +Instead, every number tested and printed (except via '-' above) will *be* the root, +and we will use the digits of that root's square to sum back to the specified root. + +*/ + + +unsigned long powers_of_10[] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000, 100000000000, 1000000000000, 10000000000000, 100000000000000, 1000000000000000, 10000000000000000, 100000000000000000, 1000000000000000000 }; + +int can_partition_to_target ( unsigned long n, unsigned long target ) { + if (n == target) return 1; + if (n < target) return 0; + + unsigned long right = 0; + unsigned long left = n; + unsigned long digit; + for ( unsigned long *p = &powers_of_10[0] ; n >= *p ; ++p ) { + digit = left % 10; + left -= digit; + left /= 10; + right += (digit * *p); + + if (target < right) { + break; // guard against the unsigned subtraction below. + } + + if (can_partition_to_target(left, target - right)) + return 1; + } + + return 0; +} + +int can_partition_to_square ( unsigned int n ) { + unsigned long n2 = n; + n2 *= n2; + return can_partition_to_target(n2, n); +} + +void print_all_that_can_partition ( ) { + const unsigned int limit = 1000000 + 1; // 1M = 5s O0, 0.8s O3 + printf("Calculating for 0 .. %u\n", limit-1); + unsigned int count = 1; + for ( unsigned int i = 0 ; i < limit; i++ ) { + if ( can_partition_to_square(i) ) { + unsigned long square = i; + square *= square; + printf("%u %lu\n", count++, square); + } + } +} + +void test_known_good_and_bad ( ) { + // From https://oeis.org/A038206/b038206.txt (the b-file for https://oeis.org/A038206/ ) + // raku -e 'say .fmt("%8d,", "") for lines.map(*.words[1]).batch(10)' b038206.txt + const unsigned int b_data[] = { + 0, 1, 9, 10, 36, 45, 55, 82, 91, 99, + 100, 235, 297, 369, 370, 379, 414, 657, 675, 703, + 756, 792, 909, 918, 945, 964, 990, 991, 999, 1000, + 1296, 1702, 1782, 2223, 2728, 3366, 3646, 3682, 4132, 4879, + 4906, 4950, 5050, 5149, 5292, 6832, 7191, 7272, 7389, 7533, + 7543, 7587, 7777, 7956, 8416, 8443, 8767, 8856, 8910, 8938, + 9208, 9315, 9325, 9586, 9621, 9640, 9765, 9901, 9909, 9918, + 9945, 9955, 9964, 9990, 9991, 9999, 10000, 10512, 12222, 12727, + 17271, 17344, 22222, 22231, 25354, 27414, 33669, 34327, 35442, 36558, + 36855, 38962, 39420, 41149, 41814, 42643, 45657, 46279, 48790, 48835, + 49492, 49563, 49906, 50050, 51454, 52920, 52965, 53415, 57393, 57547, + 59284, 62146, 64341, 65242, 67132, 68428, 69058, 69157, 69669, 72612, + 74647, 75331, 76851, 77121, 77716, 77778, 77896, 79516, 81118, 82045, + 82620, 82656, 85212, 85941, 87571, 88768, 88812, 88813, 89632, 90819, + 91756, 93402, 93574, 94141, 94581, 95121, 97137, 99055, 99226, 99244, + 99343, 99559, 99630, 99631, 99703, 99765, 99900, 99901, 99909, 99918, + 99945, 99955, 99964, 99990, 99991, 99999, 100000, 104878, 105112, 105382, + 117343, 122221, 130050, 131959, 140050, 142857, 143532, 148149, 163567, 167832, + 172827, 181819, 187110, 203274, 208495, 215829, 249832, 275725, 283924, 304930, + 310339, 316728, 318682, 319176, 320050, 329967, 333666, 336699, 336700, 336799, + 338760, 339453, 344143, 349785, 351352, 352693, 354393, 356329, 356643, 357796, + 364420, 364932, 369261, 369792, 370017, 370134, 370153, 383581, 389620, 389665, + 390313, 410050, 417330, 417340, 419860, 428419, 434331, 440874, 441217, 452133, + 452241, 461539, 463284, 466830, 471537, 473967, 474067, 482608, 490050, 499321, + 499500, 499906, 500050, 500500, 501499, 512811, 514926, 524638, 529200, 529650, + 532917, 533170, 534150, 536284, 538461, 549459, 551025, 552745, 561781, 571464, + 584308, 584452, 596619, 600633, 609687, 627372, 627615, 639739, 642078, 643357, + 643672, 647029, 648648, 649782, 656244, 668332, 670033, 670050, 673651, 675037, + 681318, 684099, 689778, 695071, 697834, 713241, 719280, 736687, 739863, 751249, + 754821, 758475, 758863, 760050, 770050, 780697, 784297, 789589, 790372, 791505, + 791757, 792684, 795484, 798741, 804241, 805014, 810819, 811305, 812890, 818181, + 825886, 826074, 831672, 831718, 834166, 836127, 836172, 847629, 849520, 850546, + 851851, 852165, 852517, 853542, 853867, 857143, 857151, 860050, 865242, 872146, + 877501, 880749, 887824, 888363, 889642, 890046, 906427, 906796, 907740, 908235, + 910719, 919180, 920494, 921528, 921969, 929566, 935785, 940050, 945649, 945819, + 948411, 949231, 951049, 951210, 952335, 955351, 961038, 961039, 968256, 968760, + 969669, 977769, 987391, 989901, 990099, 991144, 991233, 991584, 992467, 992611, + 993168, 994482, 994708, 994851, 994950, 996634, 998218, 998298, 998704, 999001, + 999009, 999010, 999036, 999055, 999082, 999091, 999208, 999244, 999297, 999325, + 999343, 999586, 999621, 999630, 999631, 999703, 999765, 999900, 999901, 999909, + 999918, 999945, 999955, 999964, 999990, 999991, 999999, 1000000, 1005291, 1020304, + 1038961, 1050957, 1051219, 1051246, 1074277, 1091197, 1100412, 1142856, 1148148, 1181818, + 1187109, 1208494, 1226341, 1269918, 1300050, 1308385, 1318681, 1327150, 1329966, 1351351, + 1356642, 1356966, 1390312, 1400050, 1461556, 1465093, 1635670, 1637694, 1643356, 1648647, + 1670032, 1673820, 1681317, 1743966, 1782756, 1839601, 1865286, 1885869, 1907740, 1939572, + 1952335, 2020446, 2026458, 2050624, 2078650, 2137338, 2307178, 2310894, 2371437, 2499832, + 2579391, 2604583, 2671615, 2853469, 2866581, 3002454, 3022650, 3089872, 3100050, 3113829, + 3161196, 3200050, 3212668, 3217347, 3245374, 3274641, 3336669, 3385530, 3441430, 3463786, + 3469105, 3505617, 3558340, 3563335, 3582712, 3688597, 3696300, 3701197, 3701439, 3701493, + 3701511, 3701529, 3701538, 3701556, 3704572, 3706354, 3718026, 3733273, 3848823, 3951549, + 3980251, 3996541, 4042872, 4042945, 4100050, 4119966, 4126186, 4129218, 4158487, 4173408, + 4187152, 4188303, 4221874, 4235842, 4238092, 4241512, 4292892, 4327867, 4395952, 4444444, + 4454721, 4501611, 4522222, 4531275, 4647403, 4748131, 4776651, 4803624, 4811248, 4857786, + 4894741, 4900050, 4927941, 4933045, 4983471, 4994298, 4999321, 4999906, 5000050, 5000500, + 5002236, 5020921, 5050207, 5053222, 5072059, 5086756, 5088763, 5136570, 5160286, 5236911, + 5246299, 5246388, 5253841, 5325228, 5364109, 5375736, 5401342, 5403277, 5413599, 5413644, + 5467509, 5479453, 5527414, 5555556, 5642469, 5725882, 5881159, 5900050, 5913171, 5960503, + 5973543, 6038983, 6045957, 6089778, 6104179, 6110766, 6188590, 6193701, 6209829, 6276150, + 6276195, 6296382, 6308848, 6310809, 6313726, 6337458, 6364341, 6449409, 6472999, 6480945, + 6530931, 6538644, 6557176, 6582241, 6595596, 6597019, 6607629, 6643242, 6651253, 6671332, + 6682087, 6700050, 6721363, 6727312, 6728805, 6742954, 6780618, 6784767, 6790248, 6832513, + 6844213, 6844221, 6844240, 6844285, 6848127, 6851323, 6905836, 6911361, 6938254, 6942744, + 6946722, 6978376, 7006708, 7032546, 7050178, 7053868, 7080048, 7117381, 7198741, 7205950, + 7223247, 7235830, 7333030, 7373593, 7395418, 7398639, 7412472, 7428151, 7449661, 7474941, + 7505244, 7513156, 7533478, 7556041, 7558939, 7588017, 7588639, 7588675, 7588683, 7588720, + 7600050, 7601985, 7657929, 7700050, 7757416, 7812540, 7834429, 7854165, 7869421, 7895935, + 7915834, 7987374, 7987411, 7997292, 7997374, 8007372, 8040403, 8047666, 8049780, 8085843, + 8092261, 8112412, 8161912, 8187265, 8199280, 8210592, 8235505, 8239077, 8263314, 8285985, + 8286633, 8356771, 8365158, 8416269, 8416746, 8454852, 8492635, 8499294, 8514567, 8526069, + 8537293, 8566129, 8600050, 8605143, 8647111, 8659207, 8709850, 8710398, 8757144, 8770797, + 8773371, 8835490, 8878248, 8880309, 8881516, 8881524, 8903242, 8967736, 8971606, 8994411, + 9050922, 9064486, 9078031, 9083169, 9122499, 9127863, 9142849, 9149464, 9186903, 9189181, + 9360261, 9367155, 9372385, 9400050, 9417582, 9428554, 9432891, 9450541, 9453807, 9454869, + 9455464, 9455581, 9457704, 9457974, 9458227, 9458235, 9472536, 9495828, 9565336, 9610380, + 9625537, 9634843, 9639450, 9666999, 9674541, 9677808, 9685485, 9685540, 9688618, 9693766, + 9726112, 9745488, 9785781, 9835263, 9869077, 9873955, 9878679, 9879210, 9898956, 9898983, + 9898984, 9912429, 9922879, 9923149, 9942453, 9944820, 9947080, 9949617, 9951165, 9969669, + 9990360, 9990685, 9991062, 9991090, 9991557, 9992044, 9992413, 9992457, 9992611, 9992809, + 9995094, 9995868, 9996318, 9996354, 9997272, 9997777, 9998218, 9998298, 9998704, 9999000, + 9999001, 9999009, 9999010, 9999036, 9999055, 9999082, 9999091, 9999208, 9999244, 9999297, + 9999325, 9999343, 9999586, 9999621, 9999630, 9999631, 9999703, 9999765, 9999900, 9999901, + 9999909, 9999918, 9999945, 9999955, 9999964, 9999990, 9999991, 9999999,10000000,10122634, + 10273807,10300050,10379196,10400050,10512487,10627614,10656712,11004535,11111112,11200050, + 11300050,11336284,11451861,11786094,11881909,12100050,12200050,12966481,13000050,13100050, + 13165273,13165794,13641364,13798963,13809060,13809105,13900050,14000050,14649417,14650677, + 14650966,14776651,14800050,14882481,14900050,15700050,15800050,15940143,16486858,16590564, + 16600050,16678332,17600050,17645401,17645446,17793918,17827722,17938611,18181909,18400050, + 18453142,19273023,19300050,19400050,19440729,19773073,20300050,20644767,20658195,21091591, + 21200050,22056795,22100050,22385763,22633227,22692780,22866256,23102074,23358582,23493052, + 23502132,23714370,23800050,23900050,24459039,24700050,24752475,24800050,24944437,24999832, + 25027435,25252525,25389235,25545132,25600050,25700050,25947244,26126856,26436672,26600050, + 26670888,26695872,27099685,27342910,27400050,27500050,27684423,27798912,27843822,28137870, + 28141398,28300050,28400050,28487160,28788688,28970497,29200050,29330757,29375794,30200050, + 30600775,30884184,31000050,31033891,31100050,3159