序幕:
我想培训制作测试用例,所以我将尝试一些简单的方法。
挑战:
接受任何给定的(字符串)输入(在可见的ASCII范围内),并推断出它是否为数字,并输出可用于求值的值。
规则:
- 一个数字将只包含字符
-0123456789,.
- 仅要求答案才能识别-1000000000到1000000000(不包括)之间的数字,但是可以识别任意大的数字。
- 您可以编写完整的程序或函数。
- 如果是数字,请返回任何可用于识别它的内容,并在说明中记录输出(例如
My program outputs T if a number, F if not.
)。 - 输入将是ASCII范围内的任意数量的字符,或者为空(如果为空,则返回不带数字的输出内容)。
- 数字可以包含小数点(例如
3.14
)。如果是这样,它们必须在小数点前至少有一位数字,在小数点后至少有一位数字。 - 数字可以有前导零或尾随零(例如
000001.00000
)。 - 为了可读性,可以将数字的整数部分划分为三个数字块,并用逗号(例如
1,000.23456
)表示。在这种情况下,他们必须从正确的每三位数字被分为左(例如:1,234,567
,10,000.202
,123,234.00
,0,123.293
)。 - 负数由前导
-
(例如-1.23
)表示。领先+
以指示正数是不允许的,并且会导致在falsy输出。 - 异常不算作有效且可辨别的输出(除非它们可以将输出传递到标准输出流(例如,
Exception on line N [...]
如果将字符串放入标准输出流,则可以作为数字/非数字输出)。
测试用例:
(假设My program outputs T if a number, F if not.
版本)
123 -> T [on integer]
-123 -> T [negative numbers need to be handled]
0 -> T [on zero]
123.456 -> T [on floating point]
123,456.789 -> T [on evenly divided by 3 digits with comas]
123456789 -> T [thousand separators are not required]
0000001.00000 -> T [on leading/trailing zeros]
00.00 -> T [on zero and leading/trailing zeros]
999999999.9999999999999999999999999999999999999999999999999999 -> T [on close to the maximum value]
-999999999.9999999999999999999999999999999999999999999999999999 -> T [on close to the minimum value]
-> F [on empty]
lolz -> F [on non-number value]
n4melyh4xor -> F [on non-number with digits]
1.2 -> F [on space-padded]
9.3 1.3 -> F [on anyhow separated multiple numbers]
1e5 -> F [no scientific notation]
50cl05e.buty3ts0f4r -> F [on input with letters obscuring the number]
1,2,3,4.5678 -> F [on badly readability-divided number]
1,234.5,678 -> F [on readability-divided floating point part]
.234 -> F [on no leading zero]
+1 -> F [no leading + sign]
1.234.3 -> F [only one decimal point]
12345,678 -> F [on separator stopping mid-way]
代码高尔夫,最少的字符是赢家。
我们可以假设输入始终是ASCII吗?
—
布拉德·吉尔伯特b2gills '16
@ BradGilbertb2gills,是的。
—
n4melyh4xor或2016年
如果
—
chux-恢复莫妮卡
-123
可以,那么+456
->好还是坏。还是被+
排除在派对之外?
@chux,在+到达之前离开的派对火车。下次运气更好,+。
—
n4melyh4xor或2016年
当人们要求对注释进行澄清时,您应该编辑问题。永远不必为了了解规格而阅读注释。我进行了编辑,以包括答案和一些测试用例。
—
彼得·泰勒