Preludium:
Chciałem trenować tworzenie przypadków testowych, więc wypróbuję je na czymś łatwym.
Wyzwanie:
Weź dowolne dane wejściowe (łańcuchowe) (w widocznym zakresie ASCII) i wywnioskuj, czy jest to liczba, i wypisz coś, co można wykorzystać do oceny.
Zasady:
- Liczba będzie zawierać tylko znaki
-0123456789,. - Odpowiedzi są wymagane tylko w celu rozpoznania liczb od -1000000000 do 1000000000 (wyłącznie), ale mogą rozpoznać dowolnie duże liczby.
- Możesz napisać pełny program lub funkcję.
- Jeśli jest liczbą, zwróć wszystko, co mogłoby być użyte do jej rozpoznania i udokumentowania wyniku w opisie (np.
My program outputs T if a number, F if not.). - Dane wejściowe będą zawierać dowolną liczbę znaków w zakresie ASCII lub puste (jeśli puste, zwróć wszystko, co wypiszesz, jeśli nie będzie liczbą).
- Liczby mogą zawierać kropkę dziesiętną (np.
3.14). Jeśli tak, muszą mieć co najmniej jedną cyfrę przed kropką dziesiętną i co najmniej jedną po niej. - Liczby mogą mieć początkowe lub końcowe zera (np.
000001.00000). - Część całkowitą liczby można podzielić dla czytelności na fragmenty trzech cyfr za pomocą przecinków (np.
1,000.23456). W tym przypadku muszą być one podzielone co trzy cyfry od prawej do lewej (np.1,234,567,10,000.202,123,234.00,0,123.293). - Liczby ujemne są oznaczone wiodącym
-(np.-1.23). Wiodący+aby wskazać liczbę dodatnią nie jest dozwolona i powinna doprowadzić do wyjścia falsy. - Wyjątki NIE są liczone jako prawidłowe i rozpoznawalne dane wyjściowe (z wyjątkiem sytuacji, gdy mogą przekazać dane wyjściowe do standardowego strumienia wyjściowego (np.
Exception on line N [...]Mogą zostać wprowadzone jako dane wyjściowe dla liczby / liczby innej, jeśli ciąg znaków zostanie umieszczony w standardowym strumieniu wyjściowym).
Przypadki testowe:
(przy założeniu My program outputs T if a number, F if not.wersji)
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]
code-golf , najmniej znaków jest zwycięzcą.
-123jest OK, co z +456-> dobrym lub złym. Czy jest +wykluczony z imprezy?