Alt-text: "While it may seem like trivia, it (causes huge headaches for software developers / is taken advantage of by high-speed traders / triggered the 2003 Northeast Blackout / has to be corrected for by GPS satellites / is now recognized as a major cause of World War I)."

Treating this as "Did you know <fact 1>? Apparently, <fact 2>.", I wonder how many of the branches can be traversed with paths where both facts are true. I'm having difficulty working the Mason Dixon Line into anything meaningful. It isn't part of any time zone boundaries.

DavidSh wrote: I'm having difficulty working the Mason Dixon Line into anything meaningful. It isn't part of any time zone boundaries.

It's traditional in such cases to joke that there's a time difference of, say, fifty years between the two sides of the line. I won't dare to suggest which way round. Y'all are still a bit sore about the whole Civil War business from what I've gathered...

Flumble wrote:Also, Randall accidentally left the pair of lines merging the international date and Mason-Dixon line black.

Hactually, I thought so too, for a moment, but then realised that this particular track-to-follow was, in both of the merging cases, also being a hyphen. "International Date-Line" and "Mason-Dixon-Line".

Never mind that it is more properly "International Date Line"1 and "Mason-Dixon Line", I still think that it is clever!

1 Not to be confused with a Dateline, which may key in the relevant spacio-temporal focus of a news story for the benefit of a reader (trying to read a set of spinning newspapers rapidly forming a montage for the the 1930s filmgoer), or would you like to see the new film?

sub Branch { my ($method,$sofar,@opt) = @_; die "Not yet implemented!" if $method ne "?"; ## For $method eq "*" (see EOF!), I was just gonna take $sofar, prepend it to ## each $item and Expand()ed $item (each of which come back themselves as a ## cummulative array(ref), so another ref check needed!) and return the array ## of all these, for the calling Expand to similarly ref-check each time it ## wanders into another sequence item.

## But I realised I could Iterator it, instead, and save on stuffing up ## memory, unnecessarily. Call next, call next, call next, etc, letting the ## Iterator keep track of the perumtation level. (The alternative call, to ## follow the current practice, being "call random". Or deliberately ## pseudorandom/repeatable, should one wish!)

## Data structure: @facts is a bare array of sequential elements.## Elements can be literal text (ref SCALAR) or a subarray (ref ARRAY).

## Arrayrefs in a sequential array (like the root one) to treat as subchoice.## arrayrefs in a choice array treated as a subsequence. It strictly alternates.## To dive straight into a choice that starts off (at the start of a sequence## in) a choice, just double the array-ref. To dive straight into a sequence## that is (first choice in) a sequence, just double the array-ref.

## (The alternate method I considered was to have each array of 'whateverness'## being forcibly prepended by $[0] being "Opt" or "Seq" (or, in the future,## anything else one might want, like "choose any three of five, any order" or## "two items, both must either rhyme or be alliterative, and they must be## returned in order of the emotion one feels upon hearing them shouted from a## sinking ship", if you so care to. But, right now, this is a one-trick## monkey of a script, so why are worrying? I've already overcomplicated## things with the $method. And, I suppose, the $sofar is unnecessary, as I## could have just printed every literal straight to screen as it becomes## discovered. But I may later on need it, as you can see. And I was even## going to put a nice word-wrapper on this, but then I'd have had to make## sure I wasn't assuming your terminal character width... It works well## enough.)

## Anyway, if you don't like proofreading that (see the following), you can## just create something like "sub Sequence(@_)" and sub Choice(@_)" to## (identically!) nest your options but so that you can visually/otherwise## make sure you haven't accidentally gone Choice(..,Choice(..),..) or## Sequence(..,Sequence(..),..), and then you'd be fine enough!

## Indent/newline/whitespace style of the data layout is up to you, lso, and## another one of the choices I made is to prefix continuation literals with## the whitespace I could have instead have added onto the end of the thing## they were continuing. (I could also have handled it automagically, by## inserting space between abutting \w or \S matches, but with things like## that 'hyphen merge' and all kinds of future fiddling, that would have## needed coding around that I did not care to do, so I chose this way.)

## Another contentious issue is my (de)capitalisation from xkcd's style.

## Anyway, I happen to like this particular method of nesting (more compact## than forcing parens to indent/outdent on their own lines, bare of## everything but whitespace, comma/semi-colon punctuation and commentary) I## just realise that it won't suit everyone. And it's for that reason that I## resisted the urge to bring some of the shorter sequence options (and## optional sequences!) onto a single line that had multi-open *and* multi-## closing parens.

## But, for your benefit, I did also come back during tiding and added a## commentary of layering (each [ inward and each ] outward) off to one side,## behind the handy comment-vertical. It might help in case you fancy editing## it around a bit and are wondering where it is safe to modify things. Don't## say I don't try to help you!

## So, anyway, here's that data. Enjoy. Or skip to the bottom, but there's## not much there to need understanding, same as there's not much above...

(I stuck with die, rather than fancy carping and croaking, because it's firmly old-school, like me.)

((Ouch. My nest commenting wraps. What's the default columns for a code-tag? 100? It's narrower than my screen, so I'll bear that in mind in future, even if I can't plan for what it might squeeze to on smalled portrait-moded displays. And all that's after that's after trying to keep the rest of my comments (and most of the code) to within 80char, by eye.))

def afterthought(): return (join("While it may seem like trivia, it", choice("causes huge headaches for software developers", "is taken advantage of by high-speed traders", "triggered the 2003 Northeast Blackout", "has to be corrected for by GPS satellites", "is now recognized as a major cause of World War I")) + ".")

Maybe more readable. My @facts are unsullied by any keywords/function names, and readability is reduced only by choice of layout.

I could also have done a version with hash of hashesn that would have looked similar to that Python (less wordy) but then I might as well roll it up into something like a http://playfic.com generator script.

Did you know that time moves four times faster for people born on leap days? Four years pass for every year they could be born, so in compensation their bodies age four times faster to cycle back to normal time. If you slow down your pace of speech by four times, they will understand you but think you're a dummy because they've intuitively learned to deal with the double temporal parallax.

"Stars, I have seen them fall,
But when they drop and die
No star is lost at all
From all the star-sown sky.
The toil of all that be
Helps not the primal fault;
It rains into the sea
And still the sea is salt."
~A.E. Housman

"Did you know that Daylight Savings Time might happen twice this year because of eccentricity of the sun? Apparently it's getting worse and no one knows why." (While it may seem like trivia, it is now recognized as a major cause of World War I)

I'll spend the rest of my day trying to fit that into a conversation...