Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re^3: converting binary to decimal

by LanX (Saint)
on Jun 06, 2025 at 15:06 UTC ( [id://11165290]=note: print w/replies, xml ) Need Help??


in reply to Re^2: converting binary to decimal
in thread converting binary to decimal

It's consecutive doubling and adding from left to right
  • the first tr doubles every digit mod 10 1->2, ... 5->0, 6->2,...
  • the second tr adds a carry bit for every 5-9 -> 1
  • since the next bit is appended, the carry bit is shifted to the left
  • the | does a bitwise or which adds the bits ²
for example if $n == "08" and the next bit is "1", you'll get "06" | "11" == "17" and so on.

tybalt loves constructing¹ regex-automatons on strings

Cheers Rolf
(addicted to the Perl Programming Language :)
see Wikisyntax for the Monastery

¹) cryptic

²) this part is a bit (sic ;) voodoo for me

Replies are listed 'Best First'.
Re^4: converting binary to decimal
by harangzsolt33 (Deacon) on Jun 06, 2025 at 17:51 UTC
    Hmm... That's amazing. But i tried to break it down into more easily understandable parts for me, and I think I broke it! Can you please show me why it no longer works? EDIT: I think I know what I did wrong. I accidentally doubled the "|" character. I can't even type. X_X

    sub binary2decimal { defined $_[0] or return 0; my $B = $_[0]; $B =~ tr|01||cd; # Remove illegal chars $B =~ s/^0+//; # Remove preceding zeros my @BITS = split(//, $B); my $n = 0; my $copy1; my $copy2; my $copy3; foreach (@BITS) { $copy1 = $n; $copy2 = $n; $copy1 =~ tr/1-9/246802468/; $copy2 =~ tr/1-9/00001/; $n = (0 . $copy1 || $copy2 . $_); # This should be | not || $n =~ s/^0+(?=.)//; } return $n; }
      Not my code, and far too tricky to maintain in my opinion.

      Relying on the idiosyncracies of | is nothing I recommend.

      I even have problems to reproduce my own explanation in the debugger.

      The original code works tho when tested. 🤷🏻‍♀️

      Cheers Rolf
      (addicted to the Perl Programming Language :)
      see Wikisyntax for the Monastery

        > I even have problems to reproduce my own explanation in the debugger.

        And the reason is that it's supposed to be a "bitstring" not "numeric bit" operation.

        see https://perldoc.perl.org/perlop#Bitwise-String-Operators

        hence replacing | with |. under use feature "bitwise" will stop doing hard to predict things, even after refactoring this golfing code.

        ugh...

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        see Wikisyntax for the Monastery

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11165290]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (2)
As of 2025-12-06 09:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    What's your view on AI coding assistants?





    Results (85 votes). Check out past polls.

    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.