Прелюдія:
Мені хотілося навчитись робити тестові справи, тож я спробую їх на чомусь легкому.
Виклик:
Візьміть будь-який заданий (рядковий) вхід (у видимому діапазоні 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 [...]
можна вводити як вихід для числа / nonnumber, якщо рядок буде розміщено у стандартному вихідному потоці).
Тестові приклади:
(припускаючи 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
-> добре чи погано. Або +
залишається поза партією?