- "When the integers 1 to 10_000_000_000 are written in the English 
language, then
sorted as strings, which odd number appears first in the list?"

This is a really interesting question. There's a little more creativity in 
the answer than I feel comfortable delegating to my computer at this point, 
so my answer is incomplete. I haven't "determined [the answer] 
programmatically" as required, I've used a computer to help me find the 
answer. I figure a proper brute force would be at least a couple of days in 
the solving anyway.

My answer is that "a baker's dozen" comes immediately before "a billion, a 
hundred and eight thousand, a hundred and eighty five". I haven't yet 
enhanced my program to give me this result :)

- Would the answer change for a larger range of values, say 10**30? I don't 
believe it would, as "billion" < ['trillion', 'quadrillion', 'quintillion', 
'sextillion', 'septillion', 'octillion', 'nonillion', 'decillion', 
'undecillion', 'duodecillion', 'tredecillion', 'quattuordecillion', 
'quindecillion', 'sexdecillion', 'septendecillion', 'octodecillion', 
'novemdecillion', 'vigintillion'].min

- Do French and German Rubyists get a different answer than the Americans?
I think the answer is either yes or no depending on whether your answer is 
the number or the words. I believe the words for the French/German 
interpretation are the same, but the meaning of the billion is different 
(1_000_000_000_000 rather than 1_000_000_000).

Here is my helper program, in case anyone considers it relevant :)

Cheers,
Dave

# load my translation of the Perl modules Number::Spell and
# Lingua::EN::Numericalize (see CPAN)
require 'numeric-english'

# add to_english method to integers
class Integer; include Numeric::English end

a = []

# return the english representation of the given integer if it is less than
# the one stored in memo (otherwise return memo).
inject_proc = proc do |memo, int|
 if int[0] == 0  # test low bit
  memo        # ignore even numbers
 else
  english = int.to_english
  if english < memo
   english
  else
   memo
  end
 end
end

# I'm not sure why I chose these partitions of the problem space. I think 
it's
# something to do with independent sections of numbers. We group in threes.

# check numbers one to a million
a << (0..1_000_000).inject('zzz', &inject_proc)
# check numbers from a million to a billion
a << (0..1_000).map{|x| x * 1_000_000 + 1 }.inject('zzz', &inject_proc)
# check numbers from a billion to ten billion
a << (0..10).map{|x| x * 1_000_000_000 + 1 }.inject('zzz', &inject_proc)

# this result is a list of words which have to be combined in an interesting
# way that I haven't formalized. Sorry.
p a

__END__

Output:
["eight hundred eight thousand eight hundred eighty five", "eight hundred 
eight
million five", "eight billion five"]