Dada una expresión infija, determine si todas las constantes son del mismo tipo.
Los operadores consistirán solo en estos operadores diádicos :+-/*
Su programa o función debe tomar una cadena de expresión válida como entrada y generar un valor verdadero si las constantes en la expresión son del mismo tiempo, y un valor falso de lo contrario.
La expresión consistirá únicamente en constantes y puede contener cualquiera de los siguientes tipos:
- Cadena, de la forma
"String"
(siempre comillas dobles, puede estar vacía, sin caracteres de escape, puede contener cualquier texto ASCII) - Entero, de la forma
14
(siempre positivo o cero) - Flotante, de la forma
7.3f
(Siempre positivo o cero, siempre tiene un componente decimal, por ejemplo14.0f
) - Byte, de la forma
0x42
(0-255
, siempre 2 caracteres hexadecimales) - Booleano, de la forma
true
(true
ofalse
mayúsculas y minúsculas)
La expresión no contendrá paréntesis, ya que el orden de operación no afecta el tipo cuando no hay coerción de tipo.
Una constante solitaria sin operadores es una expresión válida.
Una expresión vacía no es una expresión válida.
Puede suponer que la cadena de expresión no contiene espacios en blanco fuera de los literales de cadena.
Nota: Alternativamente, puede suponer que siempre habrá espacios entre constantes y operadores, como se ve en los casos de prueba. Si hace esta suposición, especifique como tal en su respuesta
No tiene que manejar expresiones no válidas como 1 +
.
Puntuación
Este es el código de golf , ¡por lo que gana menos bytes!
Casos de prueba
(Espacio en blanco agregado para facilitar la lectura)
2 + 3
True
"Hello" / "World"
True
true * false
True
"Hello" + 4
False
"Hello" + "4"
True
3 + 2.4f / 8
False
0xff * 0xff
True
0xff + 2
False
6
True
" " + ""
True
"4 + false" + "word"
True
fuente
truE+fALSe
). Si no, puedo guardar dos bytes en mi solución.Respuestas:
JavaScript (ES6),
79 7775 bytesGuardado 2 bytes gracias a @ExpiredData
Espera espacios en blanco alrededor de los operadores. Devuelve un valor booleano.
Pruébalo en línea!
¿Cómo?
/".*?"/g
/0x../g
/\S+f/g
/\d/
; si encontramos uno, debe haber al menos un número entero"e"
o"E"
con/e/i
; si encontramos uno, debe haber al menos un valor booleanoTodas las expresiones eliminadas se reemplazan realmente con una coma, que es inofensiva.
Filtramos las expresiones regulares sin causar ningún cambio en la cadena de entrada y probamos si quedan menos de dos al final del proceso.
fuente
true
yfalse
están marcados como insensibles a mayúsculas y minúsculas, creo que eso significa que debe hacer que su expresión regular ignore mayúsculas y minúsculas al buscar estost
ys
(aunque podría estar equivocado).Perl 5
-p
, 73 bytesPruébalo en línea!
¿Cómo?
Intente eliminar cadenas, flotantes, hexadecimales, booleanos y enteros, en ese orden. Detente tan pronto como se elimine algo. Después de detenerse, verifique si la cadena restante consta solo de operadores y espacios en blanco. Si lo hace, la verificación de triplicación es verdadera; Si no, es falso.
Primer intento: Perl 5
-MList::Util=all
-p
, 99 bytesPruébalo en línea!
fuente
$_=/^[+\/* -]*$/
puede ser cambiado por$_=!y#-+/* ##c
, y....?e
por.*e
Jalea ,
3023 bytesPruébalo en línea!
Un enlace monádico que toma una cadena como entrada y devuelve 1 para verdadero y 0 para falso (valores booleanos de Jelly). Espera espacios en blanco alrededor de los operadores.
He agregado algunos casos de prueba nuevos al TIO, incluido uno con tres operadores y uno con mayúsculas y minúsculas para booleanos.
Explicación
fuente
C # (compilador interactivo de Visual C #) ,
113111109 bytesPuerto de la respuesta de JavaScript de Arnauld . Tiene 72 bytes con la bandera
/u:System.Text.RegularExpressions.Regex
.Pruébalo en línea!
fuente
Japt
-!
, 36 bytesIntentalo
fuente
05AB1E ,
5024 bytes-26 bytes haciendo un puerto de la respuesta Jelly de @NickKennedy , ¡así que asegúrate de votarlo!
Espera entrada con espacios en los operandos.
Pruébelo en línea o verifique todos (y algunos más) casos de prueba .
Explicación:
fuente
Python 2 , 102 bytes
Pruébalo en línea!
No estoy completamente seguro de cómo representar algunos de estos tipos en Python. Por ejemplo, 0xff y 2 se tratan como enteros. Y 2.4f no es un tipo válido en Python, creo. Verdadero y falso en mayúscula para probar booleanos.
Editar: Gramática
fuente
true * false
uno.Stax , 26 bytes
Ejecutar y depurarlo
Este programa espera espacios alrededor de los operadores. En general, funciona aplicando algunas transformaciones a la entrada de modo que el carácter máximo para cada tipo de expresión sea distinto.
Desempaquetado, sin golf y comentado, se ve así.
Ejecute este
fuente
Haskell, 140 bytes
fuente
f x=let z=...in ...
puede serf x|z<-...=...
.