Прелюдия:
Я хотел научиться делать тестовые случаи, поэтому я собираюсь попробовать их на чем-нибудь простом.
Вызов:
Возьмите любой заданный (строковый) ввод (в пределах видимого диапазона 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
). Знак,+
указывающий положительное число, не допускается и должен привести к ложному выводу. - Исключения НЕ считаются действительными и различимыми выходными данными (за исключением случаев, когда они могут передавать выходные данные в стандартный выходной поток (например,
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]
Код-гольф , минимум символов является победителем.
-123
все в порядке, как насчет +456
-> хорошо или плохо. Или +
остался вне партии?