Su desafío es determinar si la entrada dada es un número entero, una cadena o un decimal.
Reglas
- Una cadena es cualquier entrada que no sea un número entero o flotante
- Un entero debe contener solo caracteres numéricos y no debe comenzar con un cero
- Un decimal es cualquier entrada que contiene el punto (
.
) y el período está rodeado de caracteres numéricos.
Nota: .01 no se considera un decimal válido.
- El programa debe generar una cadena sin formato, ya sea "cadena", "entero" o "decimal".
- Puede suponer que solo se utilizan caracteres ASCII imprimibles
Casos:
asdf -> string
asdf3.4 -> string
2 -> integer
2.0 -> decimal
02 -> string
40. -> string
. -> string
.01 -> string
0.0 -> decimal
.9.9.9 -> string
[empty space] -> string
EDITAR: se corrigió el error tipográfico. Me refería a .01 sin el cero inicial, no con. Si eso no lo dejó claro, ¡ya está arreglado!
Este es el código de golf , por lo que gana la respuesta más corta.
02
no se considera un número entero porque la mayoría de los idiomas recortan los ceros a la izquierda cuando el tipo es uninteger
pero mantienen los ceros a la izquierda cuando se almacena como astring
. Aunque estoy con @isaacg que si0.0
se considera un decimal, también0.01
debería serlo..01
sin contar tiene sentido, supongo ...Respuestas:
Pyth, 33 bytes (39 sin cadena empaquetada)
Algunos bytes se eliminan debido a Markdown. Código oficial y conjunto de pruebas.
Sin cuerda empaquetada:
Pasa todos los casos de prueba anteriores. Básicamente, para verificar si una cadena es un número entero o decimal, verifica si la cadena se puede evaluar como un literal de Python (
v
), y si es así, si puede agregarle 0 y convertirla nuevamente a su representación de cadena, y obtener La cadena de entrada. Si es así, es un entero o un decimal. Si también puede enviarlo a un int y aún así recuperar la cadena original, es un número entero.fuente
Javascript,
11212187 bytesGracias a @ edc65 por guardar 34 bytes al convertir el código original (en la explicación) a ES6. No cambié la explicación porque muestra la lógica mejor.
Básicamente, esto convierte las reglas para un entero y un decimal en la pregunta en comprobaciones de expresiones regulares, y las prueba con la entrada dada. Si la entrada no coincide, debe ser una cadena. Pasa todas las pruebas dadas en la pregunta.
Ungolfed + explicación
}
fuente
01.23
.b("0.123")
caso. Lo siento, ya que solo se mencionó explícitamente en la pregunta que un entero no podía tener ceros a la izquierda, supuse que no se aplicaba a los decimales.a=>/^[1-9]\d*$/.test(a)?"integer":/^([1-9]\d+|\d)\.\d+$/.test(a)?"decimal":"string"
... no es el más corto posible de todos modosb=
para que funcione en Chrome. Para mí, muestra que el original que publicaste tiene 85 bytes, en lugar de 83, más los 2 bytes para un total de 87.b=
) no se cuenta. Y el resto es 83, tenga cuidado con los extraños caracteres invisibles insertados por el editor de comentarios - hay algunos en mi comentario anterior entre "str" e "ing"Java, 133 bytes
fuente
JavaScript (ES6), 74
75Editar 1 byte guardado gracias Zequ
Prueba
fuente
[^0\D]
el partido regex a[1-9]
Perl 5, 59 bytes
Con el
-p
argumento en la línea de comando (que se calcula en el recuento de bytes):fuente
.0
. ¿Para qué sirvechop
?Perl 6 , 61 bytes
Uso:
fuente
Python 2, 148 bytes
fuente
JavaScript ES6,
7470 bytesfuente
02
?/^\d+$/
a^[1-9]\d*
(75 bytes).