Auftakt:
Ich wollte üben, Testfälle zu machen, also werde ich sie an etwas Einfachem ausprobieren.
Herausforderung:
Nehmen Sie eine beliebige (String-) Eingabe (innerhalb des sichtbaren ASCII-Bereichs) und schließen Sie daraus, ob es sich um eine Zahl handelt, und geben Sie etwas aus, das zur Auswertung verwendet werden könnte.
Regeln:
- Eine Zahl enthält nur die Zeichen
-0123456789,.
- Antworten sind nur erforderlich, um Zahlen zwischen -1000000000 und 1000000000 (exklusiv) zu erkennen, können jedoch beliebig große Zahlen erkennen.
- Sie können ein vollständiges Programm oder eine Funktion schreiben.
- Wenn eine Zahl vorhanden ist, geben Sie alles zurück, was zum Erkennen der Zahl verwendet werden könnte, und dokumentieren Sie die Ausgabe in der Beschreibung (z. B.
My program outputs T if a number, F if not.
). - Die Eingabe ist eine beliebige Anzahl von Zeichen innerhalb des ASCII-Bereichs oder leer (wenn leer, geben Sie alles zurück, was Sie ausgeben würden, wenn keine Zahl).
- Zahlen können einen Dezimalpunkt enthalten (z. B.
3.14
). In diesem Fall müssen sie mindestens eine Ziffer vor dem Komma und mindestens eine nach dem Komma haben. - Zahlen können führende oder nachfolgende Nullen haben (z.
000001.00000
). - Der ganzzahlige Teil einer Zahl kann zur besseren Lesbarkeit in dreistellige Abschnitte mit Kommas (z. B.) unterteilt werden
1,000.23456
. In diesem Fall müssen sie alle drei Ziffern von rechts nach links unterteilt werden (ex.1,234,567
,10,000.202
,123,234.00
,0,123.293
). - Negative Zahlen werden durch ein vorangestelltes
-
(z. B.-1.23
) gekennzeichnet. Ein+
Anführungszeichen zur Angabe einer positiven Zahl ist nicht zulässig und sollte zu einer falschen Ausgabe führen. - Ausnahmen werden NICHT als gültige und erkennbare Ausgabe gezählt (es sei denn, sie können Ausgaben an den Standard-Out-Stream übergeben (z.
Exception on line N [...]
B. können als Ausgabe für eine Zahl / Nichtzahl eingegeben werden, wenn die Zeichenfolge an den Standard-Out-Stream übergeben wird).
Testfälle:
(unter der Annahme der My program outputs T if a number, F if not.
Version)
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 , am wenigsten Zeichen ist der Gewinner.
-123
es in Ordnung ist, was ist mit +456
-> gut oder schlecht. Oder ist +
von der Party ausgeschlossen?