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.
-123es in Ordnung ist, was ist mit +456-> gut oder schlecht. Oder ist +von der Party ausgeschlossen?