Preludio:
Quería entrenar haciendo casos de prueba, así que los probaré en algo fácil.
Desafío:
Tome cualquier entrada (cadena) dada (dentro del rango ASCII visible) y deduzca si es un número y genere algo que pueda usarse para evaluar.
Reglas:
- Un número solo contendrá los caracteres
-0123456789,. - Las respuestas solo son necesarias para reconocer números entre -1000000000 y 1000000000 (exclusivo), pero pueden reconocer números arbitrariamente grandes.
- Puede escribir un programa completo o una función.
- Si es un número, devuelva cualquier cosa que pueda usarse para discernirlo y documente el resultado en la descripción (ej.
My program outputs T if a number, F if not.). - La entrada será cualquier cantidad de caracteres dentro del rango ASCII o vacía (si está vacía, devuelve lo que haya generado si no es un número).
- Los números pueden incluir un punto decimal (ej.
3.14). Si lo hacen, deben tener al menos un dígito antes del punto decimal y al menos uno después. - Los números pueden tener ceros iniciales o finales (ej.
000001.00000). - La parte entera de un número podría dividirse para facilitar su lectura en trozos de tres dígitos con comas (ej.
1,000.23456). En este caso deberán ser divididos cada tres dígitos de derecha a izquierda (ej.1,234,567,10,000.202,123,234.00,0,123.293). - Los números negativos se indican con un interlineado
-(ej.-1.23). Un líder+para indicar un número positivo no está permitido, y debe dar lugar a la salida Falsy. - Las excepciones NO se cuentan como salida válida y discernible (excepto cuando pueden pasar salidas a la secuencia de salida estándar (p. Ej.,
Exception on line N [...]Pueden ingresarse como salida para un número / no número si la cadena se coloca en la secuencia de salida estándar).
Casos de prueba:
(asumiendo la My program outputs T if a number, F if not.versión)
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 , menos personajes es el ganador.
-123está bien, ¿qué pasa con +456-> bueno o malo? ¿O +queda fuera de la fiesta?