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ą.
code-golf
number
decision-problem
n4melyh4xor
źródło
źródło
-123
jest OK, co z+456
-> dobrym lub złym. Czy jest+
wykluczony z imprezy?Odpowiedzi:
Retina ,
2829314034 bajtówWyprowadza,
1
jeśli to prawda, w0
przeciwnym razie. O ile rozumiem, w tym przypadku Retina wypisuje liczbę dopasowań wyrażeń regularnych na wejściu.Wypróbuj online!
Pakiet testowy
Edycje
RegExplanation
źródło
m
ig
) w Retina?`
przed wyrażeniem regularnym, a następnie modyfikatory przed nim, npm`^.$
.g
nie istnieje w .NET, dopasowania są domyślnie globalne.JavaScript,
4649 bajtówTo jest bezpośredni port mojej odpowiedzi Retina. Jedynym powodem, dla którego użyłem JS, jest to, że istnieje łatwy sposób przetestowania wyrażenia regularnego za pomocą Snippet przekąski poniżej
źródło
isNaN(+prompt())
16 znaków. Takie jest życie, jak sądzęPerl 6 , 42 bajtów
Spróbuj
Rozszerzony:
źródło
PHP, 62 bajty
Wbudowane nie obsługuje przecinków i akceptuje notację naukową; więc musiałem przejść wyrażenie regularne.
<?=is_numeric($argv[1]);
byłoby 24 bajtów.źródło
narzędzia bash / Unix, 64 bajty
Zapisz to jako plik i przekaż ciąg do przetestowania jako pierwszy argument polecenia.
Dane wyjściowe to 0 dla liczby nieparzystej, 1 dla liczby.
Jeśli chcesz zaakceptować dane wejściowe ze standardowego wejścia i jeśli możesz zagwarantować, że dane wejściowe składają się tylko z jednej linii, możesz usunąć <<< „$ 1” na końcu, co daje 57 bajtów .
Jeśli chodzi o sam kod, opcja -c egrep zlicza liczbę pasujących linii (która będzie równa 0 lub 1).
źródło
Pyth, 25 znaków
Kompresuje wyrażenie regularne Kritixi Lithos .
Wypróbuj online. Używa znaków Unicode poza podstawową płaszczyzną wielojęzyczną, z którymi TIO najwyraźniej nie jest w stanie sobie poradzić? Ta mała aplikacja zgłasza jednak nieprawidłowy rozmiar ciągu. Ten licznik znaków / bajtów dobrze to robi.
źródło
C89, 195 bajtów
Nie golfowany:
źródło
Python 2, 79 bajtów
Rozwiązanie Regex
Wypróbuj online
źródło
c #, 75 bajtów
źródło