Rosetta Commatizing numbers
Ivan Kazmenko via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed May 31 08:44:51 PDT 2017
On Wednesday, 31 May 2017 at 13:27:24 UTC, Solomon E wrote:
Fine, by the numbers:
> 1. pi has the commas start at the wrong digit, and doesn't
> follow the explicit instructions to use spaces as the separator
> and a grouping of 5
Can be solved by calling the function with a right set of
parameters: start = 6 and step = 5. That's what function
parameters are for.
Here, I understand that a real-world solution would try to center
around the decimal point. There are, however, two reasons not to
do so. First, it is not required in the problem statement.
Second, the solutions in other languages don't interpret the
statement like that, and instead, just add a parameter to start
reading from a certain point. Remember that one of the main
purposes of Rosettacode is to provide a translation from one
language to another. There are other places on the web for
solving the problems in the best possible way.
> 2. There are no newlines (although the input is the list of
> lines to be "commatized" not concatenated.)
write -> writeln
> 3. Zimbabwe dollars are given commas, against the explicit
> request to have dots. (That would be undesirable in the real
> world, not just in this silly example, because comma is used as
> a decimal point in the Zimbabwe press, and spaces for thousands
> separators.)
Can be solved by calling the function with a right set of
parameters: ins = '.'. That's what function parameters are for.
> 4. The second number in the line
> ===US$0017,440 millions=== (in 2,000 dollars)
> is "commatized" which is against the explicit instructions to
> "commatize" the first number only, given in the task
> description and explained on the task's talk page.
replaceAll -> replaceFirst
> 5. The exponent in 123.e8000 is "commatized" which is against
> explicit and repeated instructions not to "commatize" exponents.
replaceAll -> replaceFirst
> 6. (The commas in the Eddington number are acceptable enough.)
OK.
> 7. The year in 6/9/1946 is "commatized" against explicit
> instructions to "commatize" only the first number field. It was
> discussed in the task's talk page that years shouldn't be
> commatized, and that's easy to avoid by never "commatizing"
> past the first number.
replaceAll -> replaceFirst
So, two custom calls, two minor changes, no sweat. Is everything
right now? Even if not: that was fast, we can do another
iteration. When we have a short readable solution with no
special cases, the first few changes are going to be easy.
> For the Eddington number, the task didn't explicitly state to
> use spaces in that long a number, but the task does say there
> should be spaces in the digits of pi, which leaves open to
> interpretation whether that's a special request or a rule that
> could apply to any sufficiently long number, AND the task
> includes a reference to a Wikipedia page on the number that
> does use spaces.
Here, I'd say you are greatly overthinking the problem.
> The other language solutions to Rosetta tasks may be
> "inspirational" in some ways, but there are also errors in
> them, at least for this task, that would be found if they were
> fully tested. They're made by human beings, and Rosetta code is
> just a game. It's not something that's been around as long as
> the older languages used there have existed, to look up to
> solutions in old languages with awe as time-worn and carved in
> stone.
If you see a problem, ~10 solutions, and think all of them have
serious issues, you may well be right. But it is also likely
that all other solution authors read the problem differently.
Which leaves an open formal question whether you are reading it
correctly. As well as an open informal question whether
enforcing your reading is a good goal, keeping in mind that
Rosettacode is a collection of translations.
-----
If you still insist you are doing the right thing and all others
are wrong, let's agree to disagree on that, and please just leave
the original solution there by introducing two versions.
Ivan Kazmenko.
More information about the Digitalmars-d-learn
mailing list