in reply to Re^4: ECC computation
in thread ECC computation

Yes, I'm not a frequent user of pack and unpack so I often forget what tricks they can do. So, here's the full solution, more than five times faster than my previous one:
my @masks = qw( 11011010101101010101010101101010 10110110011011001100110011011001 01110001111000111100001111000111 00001111111000000011111111000000 00000000000111111111111111000000 00000000000000000000000000111111 11111111111111111111111111111111 ); sub ecc { my ($hex) = @_; my $d = unpack 'B32', pack 'H8', $hex; my @r; push @r, unpack '%1B*', $_ & $d for @masks; $r[-1] = unpack '%1B*', $r[-1] . join "", @r[ 0 .. $#r - 1 ]; return join "", @r }
map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]

Replies are listed 'Best First'.
Re^6: ECC computation
by LanX (Saint) on Jan 05, 2020 at 22:24 UTC
    > more than five times faster than my previous one:

    Cool, it works?

    > Yes, I'm not a frequent user of pack and unpack

    neither am I, so I left it to you ... ;-)

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

      > Cool, it works?

      It works the same way as my previous solutions. The specification was vague and there were no test cases, so I'm waiting for the OP to confirm its correctness.

      Update: BTW, have you noticed the id of your node (as well as this one) is a possible output?

      map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
        > BTW, have you noticed the id of your node (as well as this one) is a possible output?

        Now that you mention it...

        we should keep replying ... but only as long as error correction fits ;-)

        update

        [id://11111012] damn!

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

        Thanks, it is quite fast, but doesn't seem to match parity I have. My specification was perhaps ambiguous.

        I tried online parity calculator from here.

        For example, I entered my hex data 7EA0F6A0 and clicked 'use extra parity bit'. Then the hamming code it generated is 0111111 (The CGI code for this is such that it puts the code in LSB bits for some reason).

        With the Perl code, I see ECC as 0110110.