Middle three digits: Difference between revisions
Content added Content deleted
(→{{header|Rust}}: Add Ruby header.) |
(→{{header|Ruby}}: Add code.) |
||
Line 548: | Line 548: | ||
=={{header|Ruby}}== |
=={{header|Ruby}}== |
||
<lang>def middle_three_digits(n) |
|||
# minus sign doesn't factor into digit count, |
|||
# and calling #abs acts as a duck-type assertion |
|||
n = n.abs |
|||
# convert to string and find length |
|||
l = (s = n.to_s).length |
|||
# check validity |
|||
raise "Number must have at least three digits" if l < 3 |
|||
raise "Number must have an odd number of digits" if l % 2 == 0 |
|||
return s[l/2-1,3].to_i |
|||
end |
|||
[ 123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345, |
|||
1, 2, -1, -10, 2002, -2002, 0 ].each do |n| |
|||
print "#{n}: " |
|||
begin |
|||
puts "%03d" % middle_three_digits(n) |
|||
rescue RuntimeError => e |
|||
puts e.to_s |
|||
end |
|||
end</lang> |
|||
123: 123 |
|||
12345: 234 |
|||
1234567: 345 |
|||
987654321: 654 |
|||
10001: 000 |
|||
-10001: 000 |
|||
-123: 123 |
|||
-100: 100 |
|||
100: 100 |
|||
-12345: 234 |
|||
1: Number must have at least three digits |
|||
2: Number must have at least three digits |
|||
-1: Number must have at least three digits |
|||
-10: Number must have at least three digits |
|||
2002: Number must have an odd number of digits |
|||
-2002: Number must have an odd number of digits |
|||
0: Number must have at least three digits</pre> |
|||
Output: |
|||
<pre> |
|||
=={{header|Rust}}== |
=={{header|Rust}}== |
||
<lang rust>fn middle_three_digits(x: int) -> Result<~str, ~str> { |
<lang rust>fn middle_three_digits(x: int) -> Result<~str, ~str> { |