first few days
This commit is contained in:
parent
8764f51187
commit
d3ae65f625
12 changed files with 343 additions and 0 deletions
13
1/1.pl
Normal file
13
1/1.pl
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
my $start = 0;
|
||||||
|
|
||||||
|
while (<>) {
|
||||||
|
chomp;
|
||||||
|
|
||||||
|
$start += $_;
|
||||||
|
|
||||||
|
}
|
||||||
|
print $start . "\n";
|
19
1/2.pl
Normal file
19
1/2.pl
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
my $freq = 0;
|
||||||
|
my %seen;
|
||||||
|
|
||||||
|
chomp (my @data = <STDIN>);
|
||||||
|
|
||||||
|
while () {
|
||||||
|
foreach (@data) {
|
||||||
|
$freq += $_;
|
||||||
|
if ($seen{$freq} == 1) {
|
||||||
|
print $freq . "\n";
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
$seen{$freq}++;
|
||||||
|
}
|
||||||
|
}
|
35
2/1.pl
Normal file
35
2/1.pl
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
chomp (my @data = <STDIN>);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
}
|
40
2/2.pl
Normal file
40
2/2.pl
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
chomp (my @data = <STDIN>);
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
7
2/sample.txt
Normal file
7
2/sample.txt
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
abcdef
|
||||||
|
bababc
|
||||||
|
abbcde
|
||||||
|
abcccd
|
||||||
|
aabcdd
|
||||||
|
abcdee
|
||||||
|
ababab
|
7
2/sample2.txt
Normal file
7
2/sample2.txt
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
abcde
|
||||||
|
fghij
|
||||||
|
klmno
|
||||||
|
pqrst
|
||||||
|
fguij
|
||||||
|
axcye
|
||||||
|
wvxyz
|
39
3/1.pl
Normal file
39
3/1.pl
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
chomp (my @data = <STDIN>);
|
||||||
|
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;
|
||||||
|
}
|
56
3/2.pl
Normal file
56
3/2.pl
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
chomp (my @data = <STDIN>);
|
||||||
|
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;
|
||||||
|
}
|
3
3/sample.txt
Normal file
3
3/sample.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#1 @ 1,3: 4x4
|
||||||
|
#2 @ 3,1: 4x4
|
||||||
|
#3 @ 5,5: 2x2
|
47
4/1.pl
Normal file
47
4/1.pl
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use v5.10;
|
||||||
|
use Data::Dumper;
|
||||||
|
|
||||||
|
chomp (my @data = <STDIN>);
|
||||||
|
@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]);
|
60
4/2.pl
Normal file
60
4/2.pl
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use v5.10;
|
||||||
|
use Data::Dumper;
|
||||||
|
|
||||||
|
chomp (my @data = <STDIN>);
|
||||||
|
@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;
|
17
4/sample.txt
Normal file
17
4/sample.txt
Normal file
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue