Talk:Middle three digits

Revision as of 21:37, 16 April 2013 by rosettacode>Gerard Schildberger (→‎task clarification: added a comment section. -- ~~~~)

Inspiration

The idea for the task comes from this blog entry: Interesting interview question #1 by Michael Jasper. Thanks. --Paddy3118 12:41, 2 February 2013 (UTC)

Second D entry and return type

Because the middle three digits can have leading zeroes, I would think that the more natural return type would be a string rather than an int. --Paddy3118 19:18, 3 February 2013 (UTC)

I didn't write that code, but I think I can explain it. The return type is a Variant type that can represent any type. In this case it's limited to the types listed: string, char[]. So the function will return a Variant that represents either a string or a char[]. By looking at the returned type (peek) you can tell whether or not an error occured. Fwend 21:54, 3 February 2013 (UTC)
Ah. I get it now. The middle three digits are calculated numerically and then changed to an array of three characters for the non-error return value. Error conditions return a string type. Thanks. --Paddy3118 22:13, 3 February 2013 (UTC)
Of course, you can also just check the length of the returned value, but that would be cowboy programming! :-) Discriminating between a string and a char[] is also not very solid, when safety is concerned. They are both string types. A function could easily return an error message as a char[]. It would be better to throw an error, or if you want to avoid the overhead, to return an Exception object. Or an enum error code. Then you have strong typing. Fwend 22:32, 3 February 2013 (UTC)

C++ entry and generalization to other numbers of digits

The check rejecting the cases where (len % 2 == 0) is only correct if the number of digits requested is also odd; it's perfectly reasonable to request the middle 2 digits of a 4-digit number, etc. So the correct check is to reject the case where the length of the string does not have the same parity as the number of digits being requested (len % 2 != n % 2). Markjreed 05:13, 5 February 2013 (UTC)

Musings on the type of the return value

The type of the return value from the function is, (purposely), not specified in the requirements. For good input, I returned a string in the Python version as

  1. I found it easier to compute the answer by manipulating the string representation of the input integer, and,
  2. I had already thought that the function might have to return answers with leading zeroes.

Others have functions that return integers. It is just as valid, just different. I guess the middle three digits can be calculated with modulo arithmetic and without any use of strings. In that case it may be easier to return the integer result and rely on output formatting to zero-extend results to three digits on printing? Different strokes and all that. --Paddy3118 07:01, 5 February 2013 (UTC)

The requirement was to return middle three digits. That can not be done with integer, since integer does not contain digits. --PauliKL 16:16, 5 February 2013 (UTC)
Maybe just change it to something like "the middle three digits or the number represented by those digits" just to allow the freedom. --Mwn3d 16:54, 5 February 2013 (UTC)

task clarification

I think the task requirement should read:

“Write a function/procedure/subroutine that is called with an integer value and returns the middle three digits of the integer (expressed in base 10) if possible, or a clear error indication if not possible.”

-- Gerard Schildberger (talk) 21:37, 16 April 2013 (UTC)

Return to "Middle three digits" page.