Preludio:
Volevo allenarmi a creare casi di test, quindi li proverò su qualcosa di semplice.
Sfida:
Prendi qualsiasi dato input (stringa) (all'interno dell'intervallo ASCII visibile) e deduci se è un numero e genera qualcosa che potrebbe essere usato per valutare.
Regole:
- Un numero conterrà solo i caratteri
-0123456789,. - Le risposte sono necessarie solo per riconoscere numeri compresi tra -1000000000 e 1000000000 (esclusivo), ma possono riconoscere numeri arbitrariamente grandi.
- È possibile scrivere un programma completo o una funzione.
- Se un numero, restituisce tutto ciò che potrebbe essere utilizzato per discernerlo e documentare l'output nella descrizione (es.
My program outputs T if a number, F if not.). - L'input sarà qualsiasi quantità di caratteri all'interno dell'intervallo ASCII o vuoto (se vuoto restituisce qualunque cosa tu abbia emesso se non un numero).
- I numeri potrebbero includere un punto decimale (es.
3.14). In tal caso, devono avere almeno una cifra prima del punto decimale e almeno una cifra dopo di essa. - I numeri possono avere zeri iniziali o finali (es.
000001.00000). - La parte intera di un numero può essere divisa per essere leggibile in blocchi di tre cifre con virgole (es.
1,000.23456). In questo caso devono essere divisi ogni tre cifre da destra a sinistra (es.1,234,567,10,000.202,123,234.00,0,123.293). - I numeri negativi sono indicati da un segno iniziale
-(es.-1.23). Un+indizio per indicare un numero positivo non è consentito e dovrebbe comportare un risultato errato. - Le eccezioni NON vengono conteggiate come output valide e riconoscibili (tranne quando possono passare output allo stream di uscita standard (es.
Exception on line N [...]Possono essere inserite come output per un numero / non numero se la stringa viene messa nello stream di uscita standard.
Casi test:
(assumendo la My program outputs T if a number, F if not.versione)
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 , il numero minimo di caratteri è il vincitore.
-123è OK, che dire +456-> buono o cattivo. O viene +lasciato fuori dalla festa?