NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.
All the Perl that's Practical to Extract and Report
Stories, comments, journals, and other submissions on use Perl; are Copyright 1998-2006, their respective owners.
also a favourite (Score:1)
perl -le 'print chr(65+rand(26))'
your version is prettier, though
(sorry, i'm not a java person)
bgp is for those who can't keep it static long enough
Re: (Score:2)
Damn. I thought my version is crystal clear, but yours is just perfect and obvious -- if you know ASCII.
And doing that in Java:
Re: (Score:1)
If this is for a party game, isn't the exception handling gratuitous? Whether it fails with a stack track or a nice error message, it's screwed up. Can't you just omit that?
Why do you need the reader at all? Is there some requirement that you must read from stdin if you want to send to stdout?
rjbs
Re: (Score:2)
The reason for the reader is that the game were were playing required we think of words for categories but each word had to start with a particular letter. The reader was there to ensure we could just hit "Enter" and get the next letter. So if we just rerun java Pick every time, we can get it to this:
This doesn't replicate the exact
Re: (Score:2)
As Ovid points out, you do have to do something about the exception because it is a checked exception. But my preferred choice in this case would be to declare that main() throws the exceptions [perl.org], thus letting the calling environment handle it, because, as you say, if it's screwed up, it's screwed up, no matter how it chooses to express the failure.
Ovid, did you know you could throw exceptions from main()?
How much have we shortened your Java code, now? :)
J. David works really hard, has a passion for writing good software, and knows many of the world's best Perl programmers
Re: (Score:1)
Thanks!
rjbs
Re: (Score:2)
Checked exceptions are evil. They sound good, until you try them. Bruce Eckel, the author of Thinking in Java [amazon.com], has a great essay about the problems with checked exceptions [mindview.net].
Re: (Score:1)
Re: (Score:1)
Funny; I consider Java's encouragement to produce large bodies of code a disadvantage.
Re: (Score:2)
Okay, I got a half-million lines of Java here, judging by just a second ago when I did a find . -name '*.java' | xargs wc -l. When do the advantages start becoming apparent?
(Okay, to be fair, I can see some advantages. But if I were starting this from scratch, yes, it would be Perl!)
J. David works really hard, has a passion for writing good software, and knows many of the world's best Perl programmers
Re: (Score:2)
That can come across as slightly more documented if you say:
Then you don't have the potentially mystifying 65. (I fess up; I always have to look up the value of 'A' on an ASCII chart whenever I want to do anything like this.)
Some languages will basically treat 'A' as an int and allow you to drop the ord(). Not Perl. Might work for Java, though.
J. David works really hard, has a passion for writing good software, and knows many of the world's best Perl programmers
Re: (Score:1)
perl -le'$a="A";$a++for 1..rand 26;print$a'even easier (Score:0)
Note: for some reason, I've never been the life of the party....
You're generating random letters: what does that mean? Say someone asks me for a random letter. I say 'e'. They ask again for a random letter, I say 'e' again. They ask again, I say 'e'. Then I start saying 'e' even before they ask. In an annoying whiny voice.
And I repeat this for the duration of our natural lives.
What makes this sequence of perhaps ONE MILLION [youtube.com] 'e's less random than a sequence of letters generated by a computer program?
Re: (Score:1)
The probability that such a sequence is the result of a truly random process is infinitely much smaller than the probability of winning the lottery and being hit by lightning on the same day. This is known as a statistical impossibility: it could happen, but the odds are stacked so high against it that it never does.
Re: (Score:0)
I agree with you, naturally.
But I thought this might be amusing in this context: photoshop of Dilbert comic [imageshack.us]. (not that I'm making fun of Debian or anything :)
Using the shell (Score:2)
It could be shortened if you're allowed to pipe it to head or a pager. Then you could dispense with the input part and just put it in an infinite loop. I'm not sure if using the shell and other commands means you've gone out of the realm of "accomplishing this in Java" or not, but it is more or less functionally equivalent.
J. David works really hard, has a passion for writing good software, and knows many of the world's best Perl programmers
Golf (Score:2)
Politics! (Score:2)
So I whipped out my laptop and wrote something along the lines of:
Got a winner, then removed that winner from @a
Re: (Score:1)
That has a subtle bias: picking 1 out of 6 after picking 1 out of 7 does not have the same probability distribution as picking 2 out of 7. The stochastically unbiased way would be thus:
Re: (Score:1)
Err, make that
print for (...).Re: (Score:2)
Re: (Score:2)
That has a subtle bias: picking 1 out of 6 after picking 1 out of 7 does not have the same probability distribution as picking 2 out of 7.
True, but it doesn't need to. The traditional way to do these things, which is to draw straws, eliminating one person at a time, has the same bias. Indeed, I am not so sure that your way is better: we literally do have a 7-way tie for one place, and then after eliminating the 7th place, we have a 6-way tie for the next place.
The rules give us no guidance either way, but I think my method is closer to the spirit of the thing (which is why it is how it is). I doubt that anyone would complain with either m
Re: (Score:2)
I like you're method better simply because the algorithm is more readily open for inspection. Not that you can't check out the contents of the module in the other method, but with yours what happened is up front.
J. David works really hard, has a passion for writing good software, and knows many of the world's best Perl programmers
Re: (Score:1)
If you really wanted to be sure the algorithm is correct, in either case, you’d have to inspect how
randworks…Writing a Fisher-Yates shuffle (which is what’s in List::Util) by hand is easy: you step through the list, swapping each element with any random following element or itself (this bit is crucial to avoid bias). It was just quicker to use the one in List::Util, and much less prone to errors in the haste of dashing off a one-liner.