aboutsummaryrefslogtreecommitdiff
path: root/challenge-159
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-159')
-rw-r--r--challenge-159/luca-ferrari/postgresql/ch-1.plperl39
-rw-r--r--challenge-159/luca-ferrari/postgresql/ch-1.sql1
-rw-r--r--challenge-159/luca-ferrari/postgresql/ch-2.sql1
3 files changed, 41 insertions, 0 deletions
diff --git a/challenge-159/luca-ferrari/postgresql/ch-1.plperl b/challenge-159/luca-ferrari/postgresql/ch-1.plperl
new file mode 100644
index 0000000000..f14fe72613
--- /dev/null
+++ b/challenge-159/luca-ferrari/postgresql/ch-1.plperl
@@ -0,0 +1,39 @@
+CREATE SCHEMA IF NOT EXISTS pwc159;
+
+CREATE OR REPLACE FUNCTION
+pwc159.farey( int )
+RETURNS SETOF text
+AS $CODE$
+ my ($n) = @_;
+
+ my %farey;
+
+ for my $denominator ( 2 .. $n ) {
+ for my $number ( 1 .. $denominator ) {
+
+ # reduce things like 2/4 to 1/2
+ ( $denominator, $number ) /= $number if ( $denominator % $number == 0 );
+ ( $denominator, $number ) /= $denominator if ( $number % $denominator == 0 );
+
+ $farey{ $number/$denominator } = "$number/$denominator";
+ }
+ }
+
+ # bootstrap
+ return_next( '0/1' );
+
+ my %unique_counter;
+ for my $key ( sort keys( %farey ) ) {
+ # ensure only one item is printed out
+ $unique_counter{ $key }++;
+ next if $unique_counter{ $key } > 1;
+ next if $key == 1; # last term in the sequence
+
+ return_next( $farey{ $key } );
+ }
+
+ # end term
+ return_next( '1/1' );
+ return undef;
+$CODE$
+LANGUAGE plperl;
diff --git a/challenge-159/luca-ferrari/postgresql/ch-1.sql b/challenge-159/luca-ferrari/postgresql/ch-1.sql
new file mode 100644
index 0000000000..da8824c0c2
--- /dev/null
+++ b/challenge-159/luca-ferrari/postgresql/ch-1.sql
@@ -0,0 +1 @@
+-- Perl Weekly Challenge 159
diff --git a/challenge-159/luca-ferrari/postgresql/ch-2.sql b/challenge-159/luca-ferrari/postgresql/ch-2.sql
new file mode 100644
index 0000000000..da8824c0c2
--- /dev/null
+++ b/challenge-159/luca-ferrari/postgresql/ch-2.sql
@@ -0,0 +1 @@
+-- Perl Weekly Challenge 159