diff --git a/1/1.pl b/1/1.pl new file mode 100644 index 0000000..3188817 --- /dev/null +++ b/1/1.pl @@ -0,0 +1,13 @@ +#!/usr/bin/perl + +use strict; + +my $start = 0; + +while (<>) { +chomp; + +$start += $_; + +} +print $start . "\n"; diff --git a/1/2.pl b/1/2.pl new file mode 100644 index 0000000..fdde2d7 --- /dev/null +++ b/1/2.pl @@ -0,0 +1,19 @@ +#!/usr/bin/perl + +use strict; + +my $freq = 0; +my %seen; + +chomp (my @data = ); + +while () { + foreach (@data) { + $freq += $_; + if ($seen{$freq} == 1) { + print $freq . "\n"; + exit; + } + $seen{$freq}++; + } +} diff --git a/2/1.pl b/2/1.pl new file mode 100644 index 0000000..035dc0c --- /dev/null +++ b/2/1.pl @@ -0,0 +1,35 @@ +#!/usr/bin/perl + +use strict; + +chomp (my @data = ); + +my ($ck2, $ck3); +foreach my $w (@data) { + my ($r2, $r3) = checksum($w); + #print "$r2, $r3\n"; + $ck2 += $r2; + $ck3 += $r3; +} +print $ck2 * $ck3 . "\n"; + + +sub checksum { + my $word = shift; + + my %seen; + foreach my $letter (split //, $word) { + $seen{$letter}++ + } + + my $twos = 0; + my $threes = 0; + foreach my $k (keys %seen) { + # print "$k $seen{$k}\n"; + $twos=1 if ($seen{$k} == 2); + $threes=1 if ($seen{$k} == 3); + } + + return ($twos, $threes); + +} diff --git a/2/2.pl b/2/2.pl new file mode 100644 index 0000000..b1d06f5 --- /dev/null +++ b/2/2.pl @@ -0,0 +1,40 @@ +#!/usr/bin/perl + +use strict; + +chomp (my @data = ); + +foreach my $w (@data) { + print checksum($w, @data); +} + + + +sub checksum ($@) { + my $word = shift; + my @list = @_; + + my @word = split //, $word; + + foreach my $w (@list) { + + my @w = split //, $w; + # word lengths are all equal. + + my $diff = 0; + my $common; + for (my $i = 0; $i <= $#word; $i++) { + if ($word[$i] ne $w[$i]) { + $diff++ + } else { + $common .= $w[$i]; + } + } + if ($diff == 1) { + print "$word, $w, $diff, $common\n"; + exit; + } + + } + +} diff --git a/2/sample.txt b/2/sample.txt new file mode 100644 index 0000000..c4576be --- /dev/null +++ b/2/sample.txt @@ -0,0 +1,7 @@ +abcdef +bababc +abbcde +abcccd +aabcdd +abcdee +ababab diff --git a/2/sample2.txt b/2/sample2.txt new file mode 100644 index 0000000..3e1abfc --- /dev/null +++ b/2/sample2.txt @@ -0,0 +1,7 @@ +abcde +fghij +klmno +pqrst +fguij +axcye +wvxyz diff --git a/3/1.pl b/3/1.pl new file mode 100644 index 0000000..ada74b2 --- /dev/null +++ b/3/1.pl @@ -0,0 +1,39 @@ +#!/usr/bin/perl + +use strict; + +chomp (my @data = ); +my %seen; + +foreach my $line (@data) { + # #1 @ 1,3: 4x4 + #print $line . "\n"; + my ($id, $sx, $sy, $w, $h) = ($line =~ m/#(\d+) @ (\d+),(\d+): (\d+)x(\d+)/); + + foreach my $r (expand_area($sx, $sy, $w, $h)) { + #print "A: $r\n"; + $seen{$r}++ + } + +} + +my $count = 0; +foreach my $k (keys %seen) { + #print "F: $k $seen{$k}\n"; + if ($seen{$k} > 1) { + $count++ + } +} +print $count . "\n"; + +sub expand_area ($$$$) { + my @r; + my ($sx, $sy, $w, $h) = @_; + for (my $i = 0; $i < $w; $i++) { + for (my $j = 0; $j < $h; $j++) { + my $s = (($sx+$i) . "," . ($sy+$j)); + push @r, $s; + } + } + return @r; +} diff --git a/3/2.pl b/3/2.pl new file mode 100644 index 0000000..07b78a8 --- /dev/null +++ b/3/2.pl @@ -0,0 +1,56 @@ +#!/usr/bin/perl + +use strict; + +chomp (my @data = ); +my %seen; +my %area; +my %overlapped; + +foreach my $line (@data) { + # #1 @ 1,3: 4x4 + #print $line . "\n"; + my ($id, $sx, $sy, $w, $h) = ($line =~ m/#(\d+) @ (\d+),(\d+): (\d+)x(\d+)/); + $overlapped{$id} = 1; + + foreach my $r (expand_area($sx, $sy, $w, $h)) { + #print "A: $r\n"; + $seen{$r}++; + $area{$r}->{$id}++; + } + +} + +my $count = 0; +foreach my $k (keys %seen) { + #print "F: $k $seen{$k}\n"; + if ($seen{$k} > 1) { + $count++ + } +} +print $count . "\n"; + +foreach my $k (keys %area) { + my $h = $area{$k}; + my @a = keys %$h; + if ($#a >= 1) { + foreach my $o (keys %$h) { + delete $overlapped{$o} + } + } +} +use Data::Dumper; +print Dumper \%overlapped; + + +sub expand_area ($$$$) { + my @r; + my ($sx, $sy, $w, $h) = @_; + for (my $i = 0; $i < $w; $i++) { + for (my $j = 0; $j < $h; $j++) { + my $s = (($sx+$i) . "," . ($sy+$j)); + push @r, $s; + } + } + return @r; +} diff --git a/3/sample.txt b/3/sample.txt new file mode 100644 index 0000000..98b5ae9 --- /dev/null +++ b/3/sample.txt @@ -0,0 +1,3 @@ +#1 @ 1,3: 4x4 +#2 @ 3,1: 4x4 +#3 @ 5,5: 2x2 \ No newline at end of file diff --git a/4/1.pl b/4/1.pl new file mode 100644 index 0000000..0bde6ed --- /dev/null +++ b/4/1.pl @@ -0,0 +1,47 @@ +#!/usr/bin/perl + +use strict; +use v5.10; +use Data::Dumper; + +chomp (my @data = ); +@data = sort @data; + +my %sleeps; +my %most; +my $currentguard = -1; +my $sleeptime = -1; + +foreach my $line (@data) { + say $line; + if ( my ($date, $hour, $min, $guard) = + ($line =~ + m/\[(\d{4}-\d{2}-\d{2}) (\d{2}):(\d{2})\] Guard #(\d+) begins shift/) ) { + $currentguard = $guard; + } + elsif ( my ($date, $hour, $min) = + ($line =~ + m/\[(\d{4}-\d{2}-\d{2}) (\d{2}):(\d{2})\] falls asleep/) ) { + $sleeptime = $min; + } + elsif ( my ($date, $hour, $min) = + ($line =~ + m/\[(\d{4}-\d{2}-\d{2}) (\d{2}):(\d{2})\] wakes up/) ) { + foreach my $mt ($sleeptime .. $min-1) { + $sleeps{$currentguard}->{$mt}++; + $most{$currentguard}++; + } + } + else { + say "no match" + } +} + +my @most = sort { $most{$b} <=> $most{$a} } keys %most; +say $most[0] . " most, with " . $most{$most[0]}; + +my $result = $sleeps{$most[0]}; +my @best = sort { $$result{$b} <=> $$result{$a} } keys %$result; + +say $best[0] . " best minute"; +say ($best[0] * $most[0]); \ No newline at end of file diff --git a/4/2.pl b/4/2.pl new file mode 100644 index 0000000..33fa84a --- /dev/null +++ b/4/2.pl @@ -0,0 +1,60 @@ +#!/usr/bin/perl + +use strict; +use v5.10; +use Data::Dumper; + +chomp (my @data = ); +@data = sort @data; + +my %sleeps; +my %most; +my $currentguard = -1; +my $sleeptime = -1; + +foreach my $line (@data) { + say $line; + if ( my ($date, $hour, $min, $guard) = + ($line =~ + m/\[(\d{4}-\d{2}-\d{2}) (\d{2}):(\d{2})\] Guard #(\d+) begins shift/) ) { + $currentguard = $guard; + } + elsif ( my ($date, $hour, $min) = + ($line =~ + m/\[(\d{4}-\d{2}-\d{2}) (\d{2}):(\d{2})\] falls asleep/) ) { + $sleeptime = $min; + } + elsif ( my ($date, $hour, $min) = + ($line =~ + m/\[(\d{4}-\d{2}-\d{2}) (\d{2}):(\d{2})\] wakes up/) ) { + foreach my $mt ($sleeptime .. $min-1) { + $sleeps{$currentguard}->{$mt}++; + $most{$currentguard}++; + } + } + else { + say "no match" + } +} + +my @most = sort { $most{$b} <=> $most{$a} } keys %most; +say $most[0] . " most, with " . $most{$most[0]}; + +my $result = $sleeps{$most[0]}; +my @best = sort { $$result{$b} <=> $$result{$a} } keys %$result; + +say $best[0] . " best minute"; +say ($best[0] * $most[0]); + +my ($p2guard, $p2min, $p2count); +foreach my $guard (keys %sleeps) { + my $result = $sleeps{$guard}; + my @best = sort { $$result{$b} <=> $$result{$a} } keys %$result; + say $guard . " with min " . $best[0] . ": " . $$result{$best[0]}; + if ($$result{$best[0]} > $p2count) { + $p2count = $$result{$best[0]}; + $p2guard = $guard; + $p2min = $best[0]; + } +} +say "$p2guard, $p2count, $p2min: " . $p2guard * $p2min; \ No newline at end of file diff --git a/4/sample.txt b/4/sample.txt new file mode 100644 index 0000000..62c3a7a --- /dev/null +++ b/4/sample.txt @@ -0,0 +1,17 @@ +[1518-11-01 00:00] Guard #10 begins shift +[1518-11-01 00:05] falls asleep +[1518-11-01 00:25] wakes up +[1518-11-01 00:30] falls asleep +[1518-11-01 00:55] wakes up +[1518-11-01 23:58] Guard #99 begins shift +[1518-11-02 00:40] falls asleep +[1518-11-02 00:50] wakes up +[1518-11-03 00:05] Guard #10 begins shift +[1518-11-03 00:24] falls asleep +[1518-11-03 00:29] wakes up +[1518-11-04 00:02] Guard #99 begins shift +[1518-11-04 00:36] falls asleep +[1518-11-04 00:46] wakes up +[1518-11-05 00:03] Guard #99 begins shift +[1518-11-05 00:45] falls asleep +[1518-11-05 00:55] wakes up \ No newline at end of file