#!/usr/bin/env perl
use feature 'state';
my $search_word = @ARGV ? shift @ARGV : "."; my ( @whole_res, $each_res, @searched_res_number, @searched_res_body );
SEPARETE_EACH_RES_FROM_STDIN:
while (<STDIN>) {
state $res_number = 2;
my $header_of_each_res
= qr/ .* \d{4} . \d{2} . \d{2} .* \d{2} : \d{2} : \d{2} /x;
if (m{^ (?= $res_number $header_of_each_res) }xm
) { push @whole_res, $each_res; ++$res_number; # rough solution with quite seldome occur bug
}
$each_res .= $_;
}
push @whole_res, $each_res; # this line push final res.
FIND_SEARCHED_RES:
for (@whole_res) {
# 3901412020/03/29(F|) 23:48:54.72ID:yB4nr7Bt0 <- 390 not work
if (m{ \A ( \d+ ) .* $search_word }xs
) { push @searched_res_body, $_; push @searched_res_number, $1; }
}
PRINT_SEARCHED_RES_AND_THOSE_WHO_ANCHER:
for (@searched_res_body) {
my $searched_res_number = shift @searched_res_number;
PRINT_THOSE_WHO_ANCHER:
for my $each_res (@whole_res) {
$each_res =~ /\A (\d+)/x;
my $current_res_number = $1;
next PRINT_THOSE_WHO_ANCHER if ( $current_res_number <= $searched_res_number );
if ( $each_res =~ m{ [>]+ ( [\d-,]+ ) }x
) { my $mix_anchors = $1;
my @anchors = sort{$a<=>$b} eval $mix_anchors =~ s/[-]/.../gr
; if (grep {/\A $searched_res_number \z/x
} @anchors) { }
}
}
}
IyEvdXNyL2Jpbi9lbnYgcGVybAp1c2UgZmVhdHVyZSAnc3RhdGUnOwoKbXkgJHNlYXJjaF93b3JkID0gQEFSR1YgPyBzaGlmdCBAQVJHViA6ICIuIjsKbXkgKCBAd2hvbGVfcmVzLCAkZWFjaF9yZXMsIEBzZWFyY2hlZF9yZXNfbnVtYmVyLCBAc2VhcmNoZWRfcmVzX2JvZHkgKTsKClNFUEFSRVRFX0VBQ0hfUkVTX0ZST01fU1RESU46CndoaWxlICg8U1RESU4+KSB7CiAgICBzdGF0ZSAkcmVzX251bWJlciA9IDI7CiAgICBteSAkaGVhZGVyX29mX2VhY2hfcmVzCiAgICAgICAgPSBxci8gLiogXGR7NH0gLiBcZHsyfSAuIFxkezJ9IC4qIFxkezJ9IDogXGR7Mn0gOiBcZHsyfSAveDsKICAgIGlmIChte14gKD89ICRyZXNfbnVtYmVyICRoZWFkZXJfb2ZfZWFjaF9yZXMpIH14bSkgewogICAgICAgIHB1c2ggQHdob2xlX3JlcywgJGVhY2hfcmVzOwogICAgICAgICRlYWNoX3JlcyA9IHF7fTsKICAgICAgICArKyRyZXNfbnVtYmVyOyAgICAjIHJvdWdoIHNvbHV0aW9uIHdpdGggcXVpdGUgc2VsZG9tZSBvY2N1ciBidWcKICAgIH0KICAgICRlYWNoX3JlcyAuPSAkXzsKfQpwdXNoIEB3aG9sZV9yZXMsICRlYWNoX3JlczsgICAgIyB0aGlzIGxpbmUgcHVzaCBmaW5hbCByZXMuCgpGSU5EX1NFQVJDSEVEX1JFUzoKZm9yIChAd2hvbGVfcmVzKSB7CiAgICAjIDM5MDE0MTIwMjAvMDMvMjkoRnwpIDIzOjQ4OjU0LjcySUQ6eUI0bnI3QnQwIDwtIDM5MCBub3Qgd29yawogICAgaWYgKG17IFxBICggXGQrICkgLiogJHNlYXJjaF93b3JkIH14cykgewogICAgICAgIHB1c2ggQHNlYXJjaGVkX3Jlc19ib2R5LCAgICRfOwogICAgICAgIHB1c2ggQHNlYXJjaGVkX3Jlc19udW1iZXIsICQxOwogICAgfQp9CgpQUklOVF9TRUFSQ0hFRF9SRVNfQU5EX1RIT1NFX1dIT19BTkNIRVI6CmZvciAoQHNlYXJjaGVkX3Jlc19ib2R5KSB7CiAgICBwcmludDsKICAgIG15ICRzZWFyY2hlZF9yZXNfbnVtYmVyID0gc2hpZnQgQHNlYXJjaGVkX3Jlc19udW1iZXI7CgogICAgUFJJTlRfVEhPU0VfV0hPX0FOQ0hFUjoKICAgIGZvciBteSAkZWFjaF9yZXMgKEB3aG9sZV9yZXMpIHsKICAgICAgICAkZWFjaF9yZXMgPX4gL1xBIChcZCspL3g7CiAgICAgICAgbXkgJGN1cnJlbnRfcmVzX251bWJlciA9ICQxOwogICAgICAgIG5leHQgUFJJTlRfVEhPU0VfV0hPX0FOQ0hFUiBpZiAoICRjdXJyZW50X3Jlc19udW1iZXIgPD0gJHNlYXJjaGVkX3Jlc19udW1iZXIgKTsKICAgICAgICBpZiAoICRlYWNoX3JlcyA9fiBteyBbPl0rICggW1xkLSxdKyApIH14ICkgewogICAgICAgICAgICBteSAkbWl4X2FuY2hvcnMgPSAkMTsKICAgICAgICAgICAgbXkgQGFuY2hvcnMgPSBzb3J0eyRhPD0+JGJ9IGV2YWwgJG1peF9hbmNob3JzID1+IHMvWy1dLy4uLi9ncjsKICAgICAgICAgICAgaWYgKGdyZXAgey9cQSAkc2VhcmNoZWRfcmVzX251bWJlciBcei94fSBAYW5jaG9ycykgewogICAgICAgICAgICAgICAgcHJpbnQgJGVhY2hfcmVzOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcHJpbnQgIi0iIHggODAsICJcbiI7Cn0=