Table of Contents

Quote

Bill McKie pointed out that x86/OSX wasn't trapping overflows during
real exponentiation. It turns out that OSX uses the MMX unit to do
exponentiation instead of the x87. So I added code to set the bits for
MMX traps. Not only does the MMX exponentiation use about six times the
code that the x87 uses, but it turns out that OSX doesn't handle traps
from the MMX unit correctly either, reporting only a generic floating
point exception. To add insult to injury, it takes about 3/4 of second
(!) to process a floating point exception on OSX, be it x86 or powerpc.

Over the last couple of years I've been coming around to a new
philosophy regarding OSX– OSX sucks. Hard.

Problem

Given an arbitrary number of (min, max) pairs return all combinations of coordinate pairs.

Example 1

Given {(0, 12), (1, 4)} and a length of 4 (where the length tells us how many steps to take along each (min, max) range, in this case we go from (0, 4, 8, 12), and (1, 2, 3, 4) both have length 4 and include the min and max) return:

(0, 1)
(0, 2)
(0, 3)
(0, 4)
(4, 1)
(4, 2)
(4, 3)
(4, 4)
(8, 1)
(8, 2)
(8, 3)
(8, 4)
(12, 1)
(12, 2)
(12, 3)
(12, 4)

Example 2

grid([(1.0, 15.0), (1.0, 15.0), length=2)

(1.0, 1.0)
(1.0, 15.0)
(15.0, 1.0)
(15.0, 15.0)

grid([(1.0, 15.0), (1.0, 15.0)], length=3)

(1.0, 1.0)
(1.0, 8.0)
(1.0, 15.0)
(8.0, 1.0)
(8.0, 8.0)
(8.0, 15.0)
(15.0, 1.0)
(15.0, 8.0)
(15.0, 15.0)

grid([(1.0, 15.0), (1.0, 15.0), length=4)

(1.0, 1.0)
(1.0, 5.666666666)
(1.0, 10.33333333)
(1.0, 15.0)
(5.6666666, 1.0)
(5.6666666, 5.6666666)
(5.6666666, 10.333333)
(5.6666666, 15.0)
(10.333333, 1.0)
(10.333333, 5.6666666)
(10.333333, 10.333333)
(10.333333, 15.0)
(15.0, 1.0)
(15.0, 5.6666666)
(15.0, 10.333333)
(15.0, 15.0)

grid([(1.0, 15.0), (2.3, 17.4), (1.4, 21.0)], length=3)

(1.0, 2.2999999999999998, 1.3999999999999999)
(1.0, 2.2999999999999998, 11.200000000000001)
(1.0, 2.2999999999999998, 21.0)
(1.0, 9.8499999999999979, 1.3999999999999999)
(1.0, 9.8499999999999979, 11.200000000000001)
(1.0, 9.8499999999999979, 21.0)
(1.0, 17.399999999999999, 1.3999999999999999)
(1.0, 17.399999999999999, 11.200000000000001)
(1.0, 17.399999999999999, 21.0)
(8.0, 2.2999999999999998, 1.3999999999999999)
(8.0, 2.2999999999999998, 11.200000000000001)
(8.0, 2.2999999999999998, 21.0)
(8.0, 9.8499999999999979, 1.3999999999999999)
(8.0, 9.8499999999999979, 11.200000000000001)
(8.0, 9.8499999999999979, 21.0)
(8.0, 17.399999999999999, 1.3999999999999999)
(8.0, 17.399999999999999, 11.200000000000001)
(8.0, 17.399999999999999, 21.0)
(15.0, 2.2999999999999998, 1.3999999999999999)
(15.0, 2.2999999999999998, 11.200000000000001)
(15.0, 2.2999999999999998, 21.0)
(15.0, 9.8499999999999979, 1.3999999999999999)
(15.0, 9.8499999999999979, 11.200000000000001)
(15.0, 9.8499999999999979, 21.0)
(15.0, 17.399999999999999, 1.3999999999999999)
(15.0, 17.399999999999999, 11.200000000000001)
(15.0, 17.399999999999999, 21.0)

Sollutions

 
codeapalooza/challenge_1.txt · Last modified: 2010/05/27 10:02 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki