class Fixnum ROMAN_NUMBERS = { 1000 => "M", 900 => "CM", 500 => "D", 400 => "CD", 100 => "C", 90 => "XC", 50 => "L", 40 => "XL", 10 => "X", 9 => "IX", 5 => "V", 4 => "IV", 1 => "I", } def romanize n = self roman = "" ROMAN_NUMBERS.each do |value, letter| roman << letter*(n / value) n = n % value end return roman end end must_have = "MDCLXVI" pandigitals = [] 0.upto(2000) do |x| romanized = x.romanize valid = true must_have.each_char do |char| valid = false if valid and not romanized.include? char end pandigitals.push(x) if valid end pandigitals_one_letter = [] pandigitals.each do |x| char_counts = Hash.new 0 x.romanize.each_char do |char| char_counts[char] += 1 end valid = true char_counts.each do |char, num| valid = false if num != 1 end pandigitals_one_letter.push(x) if valid end puts pandigitals.to_s puts pandigitals_one_letter.to_s
Standard input is empty
[1444, 1446, 1447, 1448, 1464, 1466, 1467, 1468, 1474, 1476, 1477, 1478, 1484, 1486, 1487, 1488, 1644, 1646, 1647, 1648, 1664, 1666, 1667, 1668, 1674, 1676, 1677, 1678, 1684, 1686, 1687, 1688, 1744, 1746, 1747, 1748, 1764, 1766, 1767, 1768, 1774, 1776, 1777, 1778, 1784, 1786, 1787, 1788, 1844, 1846, 1847, 1848, 1864, 1866, 1867, 1868, 1874, 1876, 1877, 1878, 1884, 1886, 1887, 1888] [1444, 1446, 1464, 1466, 1644, 1646, 1664, 1666]