Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

Dungeons and Dragons die roller (Golf)

by zsl (Novice)
on Sep 30, 2016 at 20:18 UTC ( #1173026=obfuscated: print w/replies, xml ) Need Help??

60 byte solution, not counting hashbang, to take strings that look like '2d4' or '2d4+10' and give you the result:

-n ($d,$s,$=)=split/d|\+/;$=+=1+rand $s for 1..$d;print$=,$/

Anyone wants to try and beat my record?


Replies are listed 'Best First'.
Re: Dungeons and Dragons die roller (Golf)
by choroba (Cardinal) on Sep 30, 2016 at 22:41 UTC
    Without really thinking:
    -p ($d,$s,$=)=split/[d+]/;map$=+=1+rand$s,1..$d;$_=$=.$/ 1 2 3 4 5 12345678901234567890123456789012345678901234567890123

    ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
Re: Dungeons and Dragons die roller (Golf)
by Grimy (Pilgrim) on Oct 25, 2016 at 16:06 UTC
    Straightforward 39 bytes (37 + 2 flags) solution :
    #!perl -pl /\d+\+/;$-+=rand$&for 1..$_;$_+=$'+$-
    More complex 35 bytes solution :
    #!perl -pl s/d/q(+~~rand($')+d)x$`/e;$_=eval
    Due to the use of $', they canít easily be ran from the command-line. Just store them in a file.
      After staring at this for a while, I'm not sure how exactly this works (mainly, what does +~~ do?). Would it be possible to explain how the 35 bytes solution works?

        ~~rand($') is the same as int(rand($'))

Re: Dungeons and Dragons die roller (Golf)
by stevieb (Canon) on Sep 30, 2016 at 20:30 UTC

    That produces the same result every 'roll' it seems...

      That's strange, I tested it out and it worked fine. I'm using v5.18.2, what are you using?

Re: Dungeons and Dragons die roller (Golf)
by Tanktalus (Canon) on Oct 24, 2016 at 17:25 UTC

    To steal choroba's post:

    echo 2d12+13 | \ perl -ple ' ($d,$s,$_)=split/[d+]/;map$_+=1+rand$s,1..$d ' 1 2 3 4 12345678901234567890123456789012345678901234

      This always prints 13, which is not a possible result for 2d12+13.

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: obfuscated [id://1173026]
Approved by stevieb
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (5)
As of 2023-12-05 21:42 GMT
Find Nodes?
    Voting Booth?
    What's your preferred 'use VERSION' for new CPAN modules in 2023?

    Results (29 votes). Check out past polls.