From: Peter Hicks Date: 2011-07-03T05:37:33+09:00 Subject: Renages All, I have a requirement to translate a time between 0000 and 2359 in to a single character 'interval ID' based on the time. For example, if the time is between 0000 and 0059, '0' should be returned, if it's between 0100 and 0159, '1' should be return. The problem is that 0700-0729 should return 'A', 0730-0759 should return 'B', i.e. it's not a simple mapping. I have the following, but I can't help thinking there's a much more efficient way of doing it - can anyone advise, as I'm a little stuck! xlate = [ [ '0000', '0059', '0' ], [ '0100', '0159', '1' ], [ '0200', '0259', '2' ], [ '0300', '0359', '3' ], [ '0400', '0459', '4' ], [ '0500', '0559', '5' ], [ '0600', '0659', '6' ], [ '0700', '0729', 'A' ], [ '0730', '0759', 'B' ], [ '0800', '0829', 'C' ], [ '0830', '0859', 'D' ], [ '0900', '0929', 'E' ], [ '0930', '0959', 'F' ], [ '1000', '1029', 'G' ], [ '1030', '1059', 'H' ], [ '1100', '1129', 'I' ], [ '1130', '1159', 'J' ], [ '1200', '1229', 'K' ], [ '1230', '1259', 'L' ], [ '1300', '1329', 'M' ], [ '1330', '1359', 'N' ], [ '1400', '1429', 'O' ], [ '1430', '1459', 'P' ], [ '1500', '1529', 'Q' ], [ '1530', '1559', 'R' ], [ '1600', '1629', 'S' ], [ '1630', '1659', 'T' ], [ '1700', '1729', 'U' ], [ '1730', '1759', 'V' ], [ '1800', '1829', 'W' ], [ '1830', '1859', 'X' ], [ '1900', '1959', 'Y' ], [ '2000', '2059', 'Z' ], [ '2100', '2159', '7' ], [ '2200', '2259', '8' ], [ '2300', '2359', '9' ] ] xlate.each do |range| return range[2] if time >= range[0] && time <= range[1] end -- Peter Hicks