aboutsummaryrefslogtreecommitdiff
path: root/challenge-110
diff options
context:
space:
mode:
authorAdam Russell <ac.russell@live.com>2021-05-02 01:10:02 -0400
committerAdam Russell <ac.russell@live.com>2021-05-02 01:10:02 -0400
commitaac29da03bf5b9a5aef2d7a384fd5daa209bb92b (patch)
tree30b08028e93a45eb40d29fc47f7866a01467b21c /challenge-110
parentdb43fb9a74900289600d3eaaf180f60b0aeafccc (diff)
downloadperlweeklychallenge-club-aac29da03bf5b9a5aef2d7a384fd5daa209bb92b.tar.gz
perlweeklychallenge-club-aac29da03bf5b9a5aef2d7a384fd5daa209bb92b.tar.bz2
perlweeklychallenge-club-aac29da03bf5b9a5aef2d7a384fd5daa209bb92b.zip
updated solutions
Diffstat (limited to 'challenge-110')
-rw-r--r--challenge-110/adam-russell/perl/PhoneNumberParser.pm40
-rw-r--r--challenge-110/adam-russell/perl/ch-2.pl48
-rw-r--r--challenge-110/adam-russell/prolog/ch-1.p18
3 files changed, 82 insertions, 24 deletions
diff --git a/challenge-110/adam-russell/perl/PhoneNumberParser.pm b/challenge-110/adam-russell/perl/PhoneNumberParser.pm
index 66a94a632c..b4aa74507f 100644
--- a/challenge-110/adam-russell/perl/PhoneNumberParser.pm
+++ b/challenge-110/adam-russell/perl/PhoneNumberParser.pm
@@ -26,13 +26,13 @@ sub new {
[
{#State 0
ACTIONS => {
- 'OPEN' => 2,
+ 'OPEN' => 1,
'DIGIT' => 5,
- 'PLUS' => 1
+ 'PLUS' => 3
},
GOTOS => {
- 'prefix' => 4,
- 'phone_number' => 3
+ 'phone_number' => 4,
+ 'prefix' => 2
}
},
{#State 1
@@ -42,17 +42,17 @@ sub new {
},
{#State 2
ACTIONS => {
- 'DIGIT' => 7
+ 'SPACE' => 7
}
},
{#State 3
ACTIONS => {
- '' => 8
+ 'DIGIT' => 8
}
},
{#State 4
ACTIONS => {
- 'SPACE' => 9
+ '' => 9
}
},
{#State 5
@@ -68,40 +68,40 @@ sub new {
{#State 7
ACTIONS => {
'DIGIT' => 12
+ },
+ GOTOS => {
+ 'area_exchange_subscriber' => 13
}
},
{#State 8
- DEFAULT => 0
- },
- {#State 9
ACTIONS => {
- 'DIGIT' => 13
- },
- GOTOS => {
- 'area_exchange_subscriber' => 14
+ 'DIGIT' => 14
}
},
+ {#State 9
+ DEFAULT => 0
+ },
{#State 10
ACTIONS => {
'DIGIT' => 15
}
},
{#State 11
- DEFAULT => -4
- },
- {#State 12
ACTIONS => {
'CLOSE' => 16
}
},
- {#State 13
+ {#State 12
ACTIONS => {
'DIGIT' => 17
}
},
- {#State 14
+ {#State 13
DEFAULT => -1
},
+ {#State 14
+ DEFAULT => -4
+ },
{#State 15
ACTIONS => {
'DIGIT' => 18
@@ -182,7 +182,7 @@ sub new {
bless($self,$class);
}
-#line 15 "perl\PhoneNumberParser.yp"
+#line 15 "PhoneNumberParser.yp"
sub lexer{
diff --git a/challenge-110/adam-russell/perl/ch-2.pl b/challenge-110/adam-russell/perl/ch-2.pl
index e69de29bb2..62b844c33f 100644
--- a/challenge-110/adam-russell/perl/ch-2.pl
+++ b/challenge-110/adam-russell/perl/ch-2.pl
@@ -0,0 +1,48 @@
+use strict;
+use warnings;
+##
+# You are given a text file.
+# Write a script to transpose the contents of the given file.
+##
+sub transpose{
+ my @columns = @_;
+ return transpose_r([], \@columns);
+}
+
+sub transpose_r{
+ my($transposed, $remaining) = @_;
+ return $transposed if(@{$remaining} == 0);
+ $transposed = transpose_row_r($transposed, $remaining->[0]);
+ shift @{$remaining};
+ transpose_r($transposed, $remaining);
+}
+
+sub transpose_row_r{
+ my($transposed, $row) = @_;
+ return $transposed if(@{$row} == 0);
+ my $index = @{$row} - 1;
+ push @{$transposed->[$index]}, pop @{$row};
+ transpose_row_r($transposed, $row);
+}
+
+MAIN:{
+ my @columns;
+ while(my $line = <DATA>){
+ chomp($line);
+ my @fields = split(/,/, $line);
+ push @columns, \@fields;
+ }
+ my $transposed = transpose(@columns);
+ for my $i (0 .. @{$transposed} - 1){
+ print join(",", @{$transposed->[$i]}) . "\n";
+ }
+}
+
+
+
+__DATA__
+name,age,sex
+Mohammad,45,m
+Joe,20,m
+Julie,35,f
+Cristina,10,f
diff --git a/challenge-110/adam-russell/prolog/ch-1.p b/challenge-110/adam-russell/prolog/ch-1.p
index ecac5444f0..edbad2803b 100644
--- a/challenge-110/adam-russell/prolog/ch-1.p
+++ b/challenge-110/adam-russell/prolog/ch-1.p
@@ -1,7 +1,13 @@
/*
Write a script to display all valid phone numbers in a given text file.
*/
-%:-initialization(main).
+:-initialization(main).
+
+test('0044 1148820341').
+test('+44 1148820341').
+test('44-11-4882-0341').
+test('(44) 1148820341').
+test('00 1148820341').
phone_number --> prefx, space, area_exchange_subscriber.
prefx --> ['('], digit, digit, [')'].
@@ -9,9 +15,13 @@ prefx --> ['+'], digit, digit.
prefx --> digit, digit, digit, digit.
space --> [' '].
area_exchange_subscriber --> digit, digit, digit, digit, digit, digit, digit, digit, digit, digit.
-digit --> [0]; [1]; [2]; [3]; [4]; [5]; [6]; [7]; [8]; [9].
-
+digit --> ['0']; ['1']; ['2']; ['3']; ['4']; ['5']; ['6']; ['7']; ['8']; ['9'].
+run_tests:-
+ test(T),
+ atom_chars(T, C),
+ phrase(phone_number, C),
+ write(T), nl.
main:-
- halt. \ No newline at end of file
+ run_tests.