5 use Exporter ('import');
8 our @EXPORT = qw(t asay bsay);
9 use Y::AoC qw(red white grey yellow day year);
12 $SIG{__DIE__} = sub($msg) {
13 $msg =~ s/\A(.*?)( at \S+ )(line \d+)/red($1).$2.white($3)/e
14 if -t STDERR && !$printed_err++;
19 $SIG{__WARN__} = sub($msg) {
20 $msg =~ s/\A(.*?)( at \S+ )(line \d+)/red($1).$2.white($3)/e
21 if -t STDERR && !$printed_err++;
29 sub t($subtest = ()) {
31 $ARGV[0] =~ s/in\.txt/test$subtest.txt/ if defined $ARGV[0];
43 sub try_submit($part, @msg) {
44 my $msg = join($, // '', @msg);
46 $msg =~ s/(\w+)\z/white($ans = $1)/e;
55 my $url = "https://adventofcode.com/$year/day/$day/answer";
56 my $cachefile = "ans-$year-$day-$part-$ans.html";
58 print "\nSubmit $url\nlevel=", white($part), ' answer=',
59 white($ans), ' ? [Enter]/[Ctrl-C]: ';
66 my $res = Y::AoC::UA::request($url, {
71 cache_to => $cachefile,
74 my $art = $res->find('main > article > p')->join("\n");
81 $art =~ s/(?<=That's )not(?= the right answer)/red($&)/e;
82 my $ok = $art =~ s/(?<=That's the )(right answer)/yellow($&)/e;
83 $art =~ s/(gold stars?)/yellow($&)/e;
84 $art =~ s/(silver star)/grey($&)/e;
85 Y::AoC::UA::cache_del($cachefile)
86 if $msg =~ s/(?<=Please wait ).*?(?= before trying again)/white($&)/e;
87 $art =~ s/(?<=your answer is )([^\.;]+)/red($&)/e;
88 $art =~ s/<code>([^<]+)<\/code>/white($1)/e;
92 system "cp $0 backup/$0-ok-$ans-$part";