aboutsummaryrefslogtreecommitdiff
path: root/challenge-252
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-252')
-rwxr-xr-xchallenge-252/eric-cheung/python/ch-1.py6
-rwxr-xr-xchallenge-252/eric-cheung/python/ch-2.py10
-rw-r--r--challenge-252/laurent-rosenfeld/blog.txt1
-rw-r--r--challenge-252/laurent-rosenfeld/blog1.txt1
-rw-r--r--challenge-252/laurent-rosenfeld/perl/ch-1.pl18
-rw-r--r--challenge-252/laurent-rosenfeld/perl/ch-2.pl16
-rw-r--r--challenge-252/laurent-rosenfeld/raku/ch-1.raku13
-rw-r--r--challenge-252/laurent-rosenfeld/raku/ch-2.raku11
-rwxr-xr-xchallenge-252/perlboy1967/perl/ch-1.pl (renamed from challenge-252/perlboy1967/perl/ch1.pl)0
-rwxr-xr-xchallenge-252/perlboy1967/perl/ch-2.pl (renamed from challenge-252/perlboy1967/perl/ch2.pl)0
-rw-r--r--challenge-252/steven-wilson/python/ch-1.py (renamed from challenge-252/steven-wilson/python/ch-01.py)0
-rwxr-xr-xchallenge-252/ulrich-rieke/cpp/ch-1.cpp18
-rwxr-xr-xchallenge-252/ulrich-rieke/cpp/ch-2.cpp33
-rwxr-xr-xchallenge-252/ulrich-rieke/haskell/ch-1.hs9
-rwxr-xr-xchallenge-252/ulrich-rieke/haskell/ch-2.hs10
-rwxr-xr-xchallenge-252/ulrich-rieke/perl/ch-1.pl17
-rwxr-xr-xchallenge-252/ulrich-rieke/perl/ch-2.pl29
-rwxr-xr-xchallenge-252/ulrich-rieke/raku/ch-1.raku13
-rwxr-xr-xchallenge-252/ulrich-rieke/raku/ch-2.raku24
-rwxr-xr-xchallenge-252/ulrich-rieke/rust/ch-1.rs18
-rwxr-xr-xchallenge-252/ulrich-rieke/rust/ch-2.rs28
21 files changed, 275 insertions, 0 deletions
diff --git a/challenge-252/eric-cheung/python/ch-1.py b/challenge-252/eric-cheung/python/ch-1.py
new file mode 100755
index 0000000000..73003ac315
--- /dev/null
+++ b/challenge-252/eric-cheung/python/ch-1.py
@@ -0,0 +1,6 @@
+
+## arrInt = [1, 2, 3, 4] ## Example 1
+arrInt = [2, 7, 1, 19, 18, 3] ## Example 2
+
+arrOutput = [arrInt[nIndx] * arrInt[nIndx] for nIndx in range(len(arrInt)) if len(arrInt) % (nIndx + 1) == 0]
+print (sum(arrOutput))
diff --git a/challenge-252/eric-cheung/python/ch-2.py b/challenge-252/eric-cheung/python/ch-2.py
new file mode 100755
index 0000000000..e943434336
--- /dev/null
+++ b/challenge-252/eric-cheung/python/ch-2.py
@@ -0,0 +1,10 @@
+
+## nInput = 5 ## Example 1
+## nInput = 3 ## Example 2
+## nInput = 1 ## Example 3
+nInput = 4 ## Example 4
+
+nMax = int(nInput / 2 if nInput % 2 == 0 else (nInput - 1) / 2)
+arrOutput = [nLoop for nLoop in range(-nMax, nMax + 1) if nLoop != 0 or nInput % 2 == 1]
+
+print (arrOutput)
diff --git a/challenge-252/laurent-rosenfeld/blog.txt b/challenge-252/laurent-rosenfeld/blog.txt
new file mode 100644
index 0000000000..30145fad3c
--- /dev/null
+++ b/challenge-252/laurent-rosenfeld/blog.txt
@@ -0,0 +1 @@
+https://blogs.perl.org/users/laurent_r/2024/01/perl-weekly-challenge-252-special-numbers.html
diff --git a/challenge-252/laurent-rosenfeld/blog1.txt b/challenge-252/laurent-rosenfeld/blog1.txt
new file mode 100644
index 0000000000..f123a9e23d
--- /dev/null
+++ b/challenge-252/laurent-rosenfeld/blog1.txt
@@ -0,0 +1 @@
+https://blogs.perl.org/users/laurent_r/2024/01/perl-weekly-challenge-252-unique-sum-zero.html
diff --git a/challenge-252/laurent-rosenfeld/perl/ch-1.pl b/challenge-252/laurent-rosenfeld/perl/ch-1.pl
new file mode 100644
index 0000000000..1de3842ba8
--- /dev/null
+++ b/challenge-252/laurent-rosenfeld/perl/ch-1.pl
@@ -0,0 +1,18 @@
+use strict;
+use warnings;
+use feature 'say';
+
+sub special_numbers {
+ my @in = @_;
+ my $n = scalar @in;
+ my $sq_sum = 0;
+ for my $i (0..$#in) {
+ $sq_sum += $in[$i] ** 2 unless $n % ($i+1);
+ }
+ return $sq_sum;
+}
+
+for my $test ([<1 2 3 4>], [<2 7 1 19 18 3>]) {
+ printf "%-15s => ", "@$test";
+ say special_numbers @$test;
+}
diff --git a/challenge-252/laurent-rosenfeld/perl/ch-2.pl b/challenge-252/laurent-rosenfeld/perl/ch-2.pl
new file mode 100644
index 0000000000..fb888e79d1
--- /dev/null
+++ b/challenge-252/laurent-rosenfeld/perl/ch-2.pl
@@ -0,0 +1,16 @@
+use strict;
+use warnings;
+use feature 'say';
+
+sub zero_sum {
+ my $n = shift;
+ my @result;
+ for my $i (1.. int $n/2) {
+ push @result, ($i, -$i);
+ }
+ push @result, 0 if $n % 2;
+ return @result;
+}
+for my $test (3, 4, 5, 1) {
+ say "$test => ", join " ", zero_sum $test;
+}
diff --git a/challenge-252/laurent-rosenfeld/raku/ch-1.raku b/challenge-252/laurent-rosenfeld/raku/ch-1.raku
new file mode 100644
index 0000000000..c44a909359
--- /dev/null
+++ b/challenge-252/laurent-rosenfeld/raku/ch-1.raku
@@ -0,0 +1,13 @@
+sub special-numbers (@in) {
+ my $n = @in.elems;
+ my $sq-sum = 0;
+ for 0..@in.end -> $i {
+ $sq-sum += @in[$i]² if $n %% ($i+1);
+ }
+ return $sq-sum;
+}
+
+for <1 2 3 4>, <2 7 1 19 18 3> -> @test {
+ printf "%-15s => ", "@test[]";
+ say special-numbers @test;
+}
diff --git a/challenge-252/laurent-rosenfeld/raku/ch-2.raku b/challenge-252/laurent-rosenfeld/raku/ch-2.raku
new file mode 100644
index 0000000000..42d40de711
--- /dev/null
+++ b/challenge-252/laurent-rosenfeld/raku/ch-2.raku
@@ -0,0 +1,11 @@
+sub zero-sum ($n) {
+ my @result;
+ for (1..$n*2).pick(($n/2).Int) -> $i {
+ append @result, ($i, -$i);
+ }
+ append @result, 0 unless $n %% 2;
+ return @result;
+}
+for 3, 4, 5, 1 -> $test {
+ say "$test => ", zero-sum $test;
+}
diff --git a/challenge-252/perlboy1967/perl/ch1.pl b/challenge-252/perlboy1967/perl/ch-1.pl
index e8ae528469..e8ae528469 100755
--- a/challenge-252/perlboy1967/perl/ch1.pl
+++ b/challenge-252/perlboy1967/perl/ch-1.pl
diff --git a/challenge-252/perlboy1967/perl/ch2.pl b/challenge-252/perlboy1967/perl/ch-2.pl
index 225f32ac2a..225f32ac2a 100755
--- a/challenge-252/perlboy1967/perl/ch2.pl
+++ b/challenge-252/perlboy1967/perl/ch-2.pl
diff --git a/challenge-252/steven-wilson/python/ch-01.py b/challenge-252/steven-wilson/python/ch-1.py
index 1beb425462..1beb425462 100644
--- a/challenge-252/steven-wilson/python/ch-01.py
+++ b/challenge-252/steven-wilson/python/ch-1.py
diff --git a/challenge-252/ulrich-rieke/cpp/ch-1.cpp b/challenge-252/ulrich-rieke/cpp/ch-1.cpp
new file mode 100755
index 0000000000..a99e8d5227
--- /dev/null
+++ b/challenge-252/ulrich-rieke/cpp/ch-1.cpp
@@ -0,0 +1,18 @@
+#include <vector>
+#include <iostream>
+#include <algorithm>
+#include <iterator>
+
+int main( ) {
+ std::cout << "Enter some integers , separated by blanks, end to end!\n" ;
+ std::vector<int> numbers { std::istream_iterator<int>{ std::cin } ,
+ std::istream_iterator<int>{} } ;
+ int sum = 0 ;
+ int len = numbers.size( ) ;
+ for ( int i = 0 ; i < len ; i++ ) {
+ if ( len % ( i + 1 ) == 0 )
+ sum += numbers[ i ] * numbers[ i ] ;
+ }
+ std::cout << sum << '\n' ;
+ return 0 ;
+}
diff --git a/challenge-252/ulrich-rieke/cpp/ch-2.cpp b/challenge-252/ulrich-rieke/cpp/ch-2.cpp
new file mode 100755
index 0000000000..5e88c46688
--- /dev/null
+++ b/challenge-252/ulrich-rieke/cpp/ch-2.cpp
@@ -0,0 +1,33 @@
+#include <vector>
+#include <iostream>
+#include <algorithm>
+#include <iterator>
+#include <numeric>
+
+int main( ) {
+ std::cout << "Enter a positive integer!\n" ;
+ int number ;
+ std::cin >> number ;
+ int limit = number / 2 ;
+ int neg_limit = -limit ;
+ std::vector<int> solution ;
+ if ( number % 2 == 1 ) {
+ solution.reserve( number ) ;
+ std::iota( solution.begin( ) , solution.end( ) , neg_limit ) ;
+ }
+ else {
+ int current = neg_limit ;
+ for ( int i = 0 ; i < number - 1 ; i++ ) {
+ solution.push_back( current ) ;
+ current++ ;
+ }
+ int sum = std::accumulate( solution.begin( ) , solution.end( ) ,
+ 0 ) ;
+ solution.push_back( 0 - sum ) ;
+ }
+ std::cout << '(' ;
+ std::copy( solution.begin( ) , solution.end( ) ,
+ std::ostream_iterator<int>( std::cout , " " )) ;
+ std::cout << ")\n" ;
+ return 0 ;
+}
diff --git a/challenge-252/ulrich-rieke/haskell/ch-1.hs b/challenge-252/ulrich-rieke/haskell/ch-1.hs
new file mode 100755
index 0000000000..b5b2edb293
--- /dev/null
+++ b/challenge-252/ulrich-rieke/haskell/ch-1.hs
@@ -0,0 +1,9 @@
+module Challenge252
+ where
+
+solution :: [Int] -> Int
+solution list = sum $ map (\p -> snd p ^ 2 ) $ filter (\p -> mod l
+ ( fst p + 1 ) == 0 ) $ zip [0 , 1..] list
+ where
+ l = length list
+
diff --git a/challenge-252/ulrich-rieke/haskell/ch-2.hs b/challenge-252/ulrich-rieke/haskell/ch-2.hs
new file mode 100755
index 0000000000..ac0ab60890
--- /dev/null
+++ b/challenge-252/ulrich-rieke/haskell/ch-2.hs
@@ -0,0 +1,10 @@
+module Challenge252_2
+ where
+
+solution :: Int -> [Int]
+solution n
+ |odd n = [-limit..limit]
+ |even n = first_part ++ [0 - sum first_part]
+ where
+ limit = div n 2
+ first_part = take ( n - 1 ) $ iterate ( + 1 ) (limit * ( -1 ) )
diff --git a/challenge-252/ulrich-rieke/perl/ch-1.pl b/challenge-252/ulrich-rieke/perl/ch-1.pl
new file mode 100755
index 0000000000..6f2b246c6b
--- /dev/null
+++ b/challenge-252/ulrich-rieke/perl/ch-1.pl
@@ -0,0 +1,17 @@
+#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+
+say "Enter some integers, separated by blanks!" ;
+my $line = <STDIN> ;
+chomp $line ;
+my @numbers = split( /\s/ , $line ) ;
+my $len = scalar( @numbers ) ;
+my $sum = 0 ;
+for my $i (0..$len - 1 ) {
+ if ( $len % ( $i + 1 ) == 0 ) {
+ $sum += $numbers[ $i ] ** 2 ;
+ }
+}
+say $sum ;
diff --git a/challenge-252/ulrich-rieke/perl/ch-2.pl b/challenge-252/ulrich-rieke/perl/ch-2.pl
new file mode 100755
index 0000000000..f6e669fb85
--- /dev/null
+++ b/challenge-252/ulrich-rieke/perl/ch-2.pl
@@ -0,0 +1,29 @@
+#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+use List::Util qw ( sum ) ;
+
+say "Enter a positive integer!" ;
+my $number = <STDIN> ;
+chomp $number ;
+my @solution ;
+my $limit = int( $number / 2 ) ;
+my $neg_limit = -$limit ;
+if ( $number % 2 == 1 ) {
+ for my $num ( $neg_limit..$limit ) {
+ push @solution, $num ;
+ }
+}
+else {
+ my $current = $neg_limit ;
+ for (1..$number - 1 ) {
+ push @solution, $current ;
+ $current++ ;
+ }
+ my $sum = sum( @solution ) ;
+ push @solution, 0 - $sum ;
+}
+say "(" . join( ',' , @solution ) . ")" ;
+
+
diff --git a/challenge-252/ulrich-rieke/raku/ch-1.raku b/challenge-252/ulrich-rieke/raku/ch-1.raku
new file mode 100755
index 0000000000..899b12d639
--- /dev/null
+++ b/challenge-252/ulrich-rieke/raku/ch-1.raku
@@ -0,0 +1,13 @@
+use v6 ;
+
+say "Enter some integers, separated by blanks!" ;
+my $line = $*IN.get ;
+my @numbers = $line.words.map( {.Int} ) ;
+my $sum = 0 ;
+my $len = @numbers.elems ;
+for ( 0..$len - 1 ) -> $i {
+ if ( $len %% ( $i + 1 )) {
+ $sum += @numbers[$i]** 2 ;
+ }
+}
+say $sum ;
diff --git a/challenge-252/ulrich-rieke/raku/ch-2.raku b/challenge-252/ulrich-rieke/raku/ch-2.raku
new file mode 100755
index 0000000000..25cff2e1e5
--- /dev/null
+++ b/challenge-252/ulrich-rieke/raku/ch-2.raku
@@ -0,0 +1,24 @@
+use v6 ;
+
+say "Enter a positive integer!" ;
+my $line = $*IN.get ;
+my $number = $line.Int ;
+my @solution ;
+my $limit = $number div 2 ;
+my $neg_limit = $limit * (-1) ;
+if ( not $number %% 2 ) {
+ for ( $neg_limit..$limit ) -> $num {
+ @solution.push( $num ) ;
+ }
+}
+else {
+ my $current = $neg_limit ;
+ for (1..$number - 1 ) {
+ @solution.push( $current ) ;
+ $current++ ;
+ }
+ my $sum = [+] @solution ;
+ @solution.push( 0 - $sum ) ;
+}
+say "(" ~ @solution.join( ',' ) ~ ")" ;
+
diff --git a/challenge-252/ulrich-rieke/rust/ch-1.rs b/challenge-252/ulrich-rieke/rust/ch-1.rs
new file mode 100755
index 0000000000..95f3f39b32
--- /dev/null
+++ b/challenge-252/ulrich-rieke/rust/ch-1.rs
@@ -0,0 +1,18 @@
+use std::io ;
+
+fn main() {
+ println!("Enter some integers, separated by blanks!");
+ let mut inline : String = String::new( ) ;
+ io::stdin( ).read_line( &mut inline ).unwrap( ) ;
+ let entered_line : &str = &*inline ;
+ let numbers : Vec<i32> = entered_line.split_whitespace( ).map( | s |
+ s.trim( ).parse::<i32>( ).unwrap( ) ).collect( ) ;
+ let mut sum : i32 = 0 ;
+ let len = numbers.len( ) ;
+ for i in 0..len {
+ if len % ( i + 1 ) == 0 {
+ sum += numbers[i].pow( 2 ) ;
+ }
+ }
+ println!("{}" , sum ) ;
+}
diff --git a/challenge-252/ulrich-rieke/rust/ch-2.rs b/challenge-252/ulrich-rieke/rust/ch-2.rs
new file mode 100755
index 0000000000..449799be7e
--- /dev/null
+++ b/challenge-252/ulrich-rieke/rust/ch-2.rs
@@ -0,0 +1,28 @@
+use std::io ;
+
+fn main() {
+ println!("Enter a positive integer!");
+ let mut inline : String = String::new( ) ;
+ io::stdin( ).read_line( &mut inline ).unwrap( ) ;
+ let entered_line : &str = &*inline ;
+ let num : u32 = entered_line.trim( ).parse::<u32>( ).unwrap( ) ;
+ let mut solution : Vec<i32> = Vec::new( ) ;
+ let limit : u32 = num.div_euclid( 2 ) ;
+ let neg_limit : i32 = (limit as i32) * ( -1 ) ;
+ if num % 2 == 1 {
+ let pos_limit : i32 = limit as i32 ;
+ for i in neg_limit..=pos_limit {
+ solution.push( i ) ;
+ }
+ }
+ else {
+ let mut current : i32 = neg_limit ;
+ for _ in 0..num - 1 {
+ solution.push( current ) ;
+ current += 1 ;
+ }
+ let sum : i32 = solution.iter( ).sum::<i32>( ) ;
+ solution.push( 0 - sum ) ;
+ }
+ println!("{:?}" , solution ) ;
+}