#20260730183500000000

grammar CommaDelimitedQuads {
    token TOP { [<delimited-quad> \v*]* }
    token delimited-quad { <first=.a-stamp> ',' <second=.not-a-comma> ',' <third=.not-a-comma> ',' <fourth=.the-rest> }
    token a-stamp { (\d ** 20) ('_' (\d ** 20))? }
    token not-a-comma { <-[,]>+ }
    token the-rest { <-[\v]>+ }
}

sub EquivalenceRelation(**@quad) {
    my %match-count;
    my $sets = 1;
    @quad.map({ %match-count{$_} //= $sets++; %match-count{$_} }).join
}

my %a-pattern-handler =
    '1111' => -> $/ { say 'FOUND {1, 2, 3, 4} SYNTACTIC DEFINITION' },
    '1112' => -> $/ { say 'FOUND {1, 2, 3} {4} SIGNATURE' },
    '1121' => -> $/ { say 'FOUND {1, 2, 4} {3} SUBSET / TABLE' },
    '1122' => -> $/ { say 'FOUND {1, 2} {3, 4} SUPERSET / SCHEMA' },
    '1211' => -> $/ { say 'FOUND {1, 3, 4} {2} FAILURE' },
    '1212' => -> $/ { say 'FOUND {1, 3} {2, 4} SUCCESS' },
    '1221' => -> $/ { say 'FOUND {1, 4} {2, 3} OPT-IN / FOLLOW' },
    '1222' => -> $/ { say 'FOUND {1} {2, 3, 4} OPT-OUT / UNFOLLOW' },
    '1123' => -> $/ { say 'FOUND {1, 2} {3} {4} INDEX / COLUMN' },
    '1213' => -> $/ { say 'FOUND {1, 3} {2} {4} ALIAS' },
    '1223' => -> $/ { say 'FOUND {1} {2, 3} {4} HANDLE' },
    '1231' => -> $/ { say 'FOUND {1, 4} {2} {3} KNOWN UNKNOWN' },
    '1232' => -> $/ { say 'FOUND {1} {2, 4} {3} REVEALED' },
    '1233' => -> $/ { say 'FOUND {1} {2} {3, 4} CONCEALED' },
    '1234' => -> $/ { say 'FOUND {1} {2} {3} {4} ASSERTION' },
;

class CommaDelimitedQuadsActions {
    method delimited-quad ($/) {
        my $stamp = ~$<first>.subst: /('_' (\d ** 20))/, '';
        my $a-pattern = EquivalenceRelation($stamp, ~$<second>, ~$<third>, ~$<fourth>);
        (%a-pattern-handler{$a-pattern} // -> $/ { warn "???: $a-pattern" })($/);
    }
}

my $actions = CommaDelimitedQuadsActions;
CommaDelimitedQuads.parse(q:to/EOI/, :$actions);
20260730183500000000,20260730183500000000,20260730183500000000,20260730183500000000
20260730183500000001,20260730183500000001,20260730183500000001,20260730183500000000
20260730183500000002,20260730183500000002,20260730183500000001,20260730183500000002
20260730183500000003,20260730183500000003,20260730183500000002,20260730183500000002
20260730183500000004,20260730183500000005,20260730183500000004,20260730183500000004
20260730183500000006,20260730183500000005,20260730183500000006,20260730183500000005
20260730183500000007,20260730183500000003,20260730183500000003,20260730183500000007
20260730183500000008,20260730183500000003,20260730183500000003,20260730183500000003
20260730183500000009,20260730183500000009,20260730183500000002,20260730183500000003
20260730183500000010,20260730183500000001,20260730183500000010,19831104012345678910
20260730183500000011,20260730183500000006,20260730183500000006,<3
20260730183500000012,20260730183500000002,20260730183500000009,20260730183500000012
20260730183500000013,20260730183500000002,20260730183500000009,20260730183500000002
20260730183500000014,20260730183500000002,20260730183500000009,20260730183500000009
20260730183500000015,20260730183500000002,20260730183500000009,20260730183500000006
EOI