diff options
| author | Adam Russell <ac.russell@live.com> | 2021-05-02 01:10:02 -0400 |
|---|---|---|
| committer | Adam Russell <ac.russell@live.com> | 2021-05-02 01:10:02 -0400 |
| commit | aac29da03bf5b9a5aef2d7a384fd5daa209bb92b (patch) | |
| tree | 30b08028e93a45eb40d29fc47f7866a01467b21c /challenge-110 | |
| parent | db43fb9a74900289600d3eaaf180f60b0aeafccc (diff) | |
| download | perlweeklychallenge-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.pm | 40 | ||||
| -rw-r--r-- | challenge-110/adam-russell/perl/ch-2.pl | 48 | ||||
| -rw-r--r-- | challenge-110/adam-russell/prolog/ch-1.p | 18 |
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. |
